Commit Graph
71 Commits
Author SHA1 Message Date
Timmy 0cbe99677f Using init: true in docker 2026-03-31 12:36:22 +01:00
Timmy 7427865e46 Adding more slash commands 2026-03-31 11:33:41 +01:00
Timmy ff5f9c76fd Bump version to 0.8.4 2026-03-31 11:32:10 +01:00
Timmy 762467efd4 Allowing stat in claude permissions 2026-03-31 11:22:15 +01:00
Timmy 3f54bda360 Updating sha2 2026-03-31 11:21:50 +01:00
Timmy a006985faf Bump version to 0.8.3 2026-03-30 18:17:09 +01:00
Timmy b75679175b Bump version to 0.8.2 2026-03-30 11:57:05 +01:00
Timmy 3595df4d9d Bump version to 0.8.1 2026-03-28 15:37:08 +00:00
Timmy e45eab82f2 Bump version to 0.8.0 2026-03-28 13:32:07 +00:00
Timmy 6d88595e0d Adding GPL for the moment. 2026-03-28 13:02:12 +00:00
Timmy aa90646edf Bump version to 0.7.1 2026-03-28 12:51:39 +00:00
Timmy c2f477dde6 Bump version to 0.7.0 2026-03-28 12:20:00 +00:00
Timmy 065ca2bd8f Bump version to 0.6.1 2026-03-28 11:07:06 +00:00
Timmy f28a03e42e Added git variables to entry point 2026-03-27 14:26:49 +00:00
Timmy 26f4edadcc Ditching story kit port file 2026-03-27 14:11:55 +00:00
Timmy fd58631e65 Removed misleading comment on docker compose file 2026-03-27 14:11:35 +00:00
Timmy 02d08faaa2 Fixing build/test errors in master/ 2026-03-27 12:31:08 +00:00
Timmy 3571511349 restore: reset past source tree deletion, apply pending work 2026-03-27 10:49:39 +00:00
TimmyandClaude Opus 4.6 877f69c897 feat: browser-based OAuth login flow (story 406)
Add three HTTP endpoints for OAuth login without terminal access:
- GET /oauth/authorize — generates PKCE params, redirects to
  claude.com/cai/oauth/authorize with code=true and full scopes
- GET /callback — exchanges auth code for tokens via JSON POST to
  platform.claude.com/v1/oauth/token, writes ~/.claude/.credentials.json
- GET /oauth/status — returns current credential state as JSON

Uses SHA-256 (sha2 crate) for PKCE code challenge. The authorize URL
targets claude.com/cai/ (not platform.claude.com) which is required
for Max/Pro subscriptions to grant user:inference scope.

Users visit http://localhost:3001/oauth/authorize in their browser
to authenticate. Matrix/WhatsApp can send this link when auth fails.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 19:58:18 +00:00
TimmyandClaude Opus 4.6 710b604b7c feat: auto-refresh expired OAuth token for Claude Code PTY (story 405)
Detect authentication_failed errors from the Claude Code PTY stream
and automatically refresh the OAuth access token using the stored
refresh token in ~/.claude/.credentials.json.

- New module server/src/llm/oauth.rs: reads credentials, calls
  platform.claude.com/v1/oauth/token with JSON body, writes back
- PTY provider detects "error":"authentication_failed" via AtomicBool
- chat_stream retries once after successful refresh
- Clear error message if refresh also fails

On success the retry is transparent. On failure the user sees:
"OAuth session expired. Please run claude login to re-authenticate."

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 19:58:04 +00:00
TimmyandClaude Opus 4.6 ab4ce2db92 chore: archive bug 397, create story 399, fix platform-specific npm deps
- Archive completed bug 397
- Create story 399 (CLI port flag)
- Remove @biomejs/cli-darwin-arm64 and @rollup/rollup-darwin-arm64
  from package.json (breaks Docker builds on Linux)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 19:57:50 +00:00
Timmy 61f6fd60a8 storkit: merge 402_bug_whatsapp_and_slack_missing_rebuild_command_handler 2026-03-26 11:20:55 +00:00
Timmy e66149e07c storkit: done 397_bug_selection_screen_directory_picker_unreadable_in_dark_mode 2026-03-26 11:16:24 +00:00
Timmy 108a697483 storkit: merge 397_bug_selection_screen_directory_picker_unreadable_in_dark_mode 2026-03-26 11:16:21 +00:00
Timmy 1a7f419ecf storkit: create 404_bug_whatsapp_and_slack_missing_assign_command_handler 2026-03-26 11:12:18 +00:00
Timmy 96b1ce373b storkit: create 403_bug_whatsapp_and_slack_missing_rmtree_command_handler 2026-03-26 11:12:16 +00:00
Timmy 58e41f7e0b storkit: create 401_bug_whatsapp_and_slack_missing_start_command_handler 2026-03-26 11:12:13 +00:00
Timmy c9a2fa58eb storkit: create 400_bug_whatsapp_and_slack_missing_reset_command_handler 2026-03-26 11:12:11 +00:00
Timmy 64c0f190cf storkit: create 404_bug_whatsapp_and_slack_missing_assign_command_handler 2026-03-26 11:09:49 +00:00
Timmy fc443ed987 storkit: create 403_bug_whatsapp_and_slack_missing_rmtree_command_handler 2026-03-26 11:09:48 +00:00
Timmy 7939a19816 storkit: create 401_bug_whatsapp_and_slack_missing_start_command_handler 2026-03-26 11:09:46 +00:00
Timmy 46b5087157 storkit: create 400_bug_whatsapp_and_slack_missing_reset_command_handler 2026-03-26 11:09:45 +00:00
Timmy a8d6524b56 storkit: create 404_bug_whatsapp_and_slack_missing_assign_command_handler 2026-03-26 11:09:28 +00:00
Timmy 61d63db84c storkit: create 403_bug_whatsapp_and_slack_missing_rmtree_command_handler 2026-03-26 11:09:27 +00:00
Timmy aa4ec8c779 storkit: create 401_bug_whatsapp_and_slack_missing_start_command_handler 2026-03-26 11:09:25 +00:00
Timmy 3777042ad3 storkit: create 400_bug_whatsapp_and_slack_missing_reset_command_handler 2026-03-26 11:09:24 +00:00
Timmy feb340beba storkit: create 404_bug_whatsapp_and_slack_missing_assign_command_handler 2026-03-26 11:07:33 +00:00
Timmy 23369c514d storkit: create 403_bug_whatsapp_and_slack_missing_rmtree_command_handler 2026-03-26 11:07:31 +00:00
Timmy 832da16b6f storkit: create 402_bug_whatsapp_and_slack_missing_rebuild_command_handler 2026-03-26 11:07:29 +00:00
Timmy 131964cbc3 storkit: create 401_bug_whatsapp_and_slack_missing_start_command_handler 2026-03-26 11:07:27 +00:00
Timmy 81db0504ed storkit: create 400_bug_whatsapp_and_slack_missing_reset_command_handler 2026-03-26 11:07:25 +00:00
Timmy 584a44a516 storkit: create 399_story_cli_port_flag_with_project_toml_persistence 2026-03-26 11:05:12 +00:00
Timmy c7c4a57533 storkit: create 399_story_cli_port_flag_with_project_toml_persistence 2026-03-26 11:03:43 +00:00
Timmy 0a67c28f8c storkit: create 398_bug_whatsapp_and_slack_missing_async_command_handlers_for_start_rebuild_reset_rmtree_assign 2026-03-26 11:00:01 +00:00
Timmy 6476492caa storkit: create 397_bug_selection_screen_directory_picker_unreadable_in_dark_mode 2026-03-26 10:52:06 +00:00
Timmy 71a6c72614 Adding in a holding page for a website 2026-03-25 14:27:06 +00:00
Timmy 618a2779ff Bump version to 0.6.0 2026-03-24 21:27:38 +00:00
Timmy 721d12bcfe Fixing code warnings 2026-03-24 21:26:48 +00:00
Timmy df6d2db327 Upgrading toml and pulldown-cmark 2026-03-24 21:25:15 +00:00
Timmy 49285c1865 Binding promiscuously in Docker to make things happen 2026-03-24 21:24:57 +00:00
Timmy 0c15be43b8 Ignoring whatsapp history 2026-03-24 21:24:38 +00:00
Timmy 9408bd2cdf Bump version to 0.6.0 2026-03-24 21:06:15 +00:00
Timmy a24e4c5c85 Making Matrix config fields optional to meet Twilio login needs 2026-03-24 21:05:35 +00:00
Timmy c0133fe733 Ignoring backed up bot creds 2026-03-24 20:56:59 +00:00
Timmy 4e590401a5 Bump version to 0.5.1 2026-03-24 10:55:06 +00:00
Timmy fcc2b9c3eb Bump version to 0.5.0 2026-03-23 13:11:57 +00:00
TimmyandClaude Opus 4.6 0d5b9724c1 Make ANTHROPIC_API_KEY optional in docker-compose
When unset, Claude Code falls back to OAuth credentials from
`claude login`, allowing agents to run on a Max subscription
instead of prepaid API credits.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 17:31:09 +00:00
TimmyandClaude Opus 4.6 b189ca845c Pre-create target dirs with storkit ownership in Dockerfile
Docker named volumes inherit directory ownership when first created.
By creating /workspace/target and /app/target as storkit-owned before
the USER directive, the volumes will be writable by the storkit user.
Without this, cargo build/test/clippy all fail with Permission Denied.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 16:59:32 +00:00
TimmyandClaude Opus 4.6 eef0f3ee7d Add clippy to Docker image
Acceptance gates run cargo clippy but the component wasn't installed
in the build stage. Agents were doing real work then failing every
gate check because clippy wasn't available.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 21:43:09 +00:00
TimmyandClaude Opus 4.6 9075bc1a84 Fix tmpfs ownership so storkit user can write to home dir
The tmpfs at /home/storkit defaulted to root ownership (mode=755),
so Claude Code couldn't write ~/.claude.json or ~/.cache/. Set
uid=999,gid=999 to match the storkit user.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 21:19:16 +00:00
TimmyandClaude Opus 4.6 9f873dc839 Fix Claude Code hanging in hardened container
Claude Code writes to ~/.claude.json, ~/.cache/, and ~/.npm/ which
failed silently on the read-only root filesystem. Add tmpfs at
/home/storkit so the home dir is writable (the claude-state volume
overlays on top for persistent .claude/ data).

Also fix .dockerignore: use **/target/ to match nested target dirs,
add .storkit/logs/ and **/node_modules/ to prevent multi-GB build
context transfers.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 21:16:24 +00:00
TimmyandClaude Opus 4.6 cd095f9a99 Fix rebuild_and_restart in Docker by using cargo output path
Use the known cargo build output path instead of current_exe() when
re-execing after a rebuild. In Docker, the running binary lives at
/usr/local/bin/storkit (read-only) while cargo writes the new binary
to /app/target/release/storkit (a writable volume), so current_exe()
would just restart the old binary.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 20:42:38 +00:00
TimmyandClaude Opus 4.6 fe0f560b58 Harden Docker container security
Run as non-root user (fixes Claude Code refusing bypassPermissions as
root, which caused all agent spawns to exit instantly with no session).
Add read-only root filesystem, drop all capabilities, set
no-new-privileges, bind port to localhost only, and require
GIT_USER_NAME/GIT_USER_EMAIL env vars at startup.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 20:33:50 +00:00
Timmy 0416bf343c storkit: delete 57_story_live_test_gate_updates 2026-03-21 20:23:45 +00:00
Timmy c3e4f85903 storkit: done 329_spike_evaluate_docker_orbstack_for_agent_isolation_and_resource_limiting 2026-03-21 20:22:02 +00:00
Timmy 52d9d0f9ce storkit: done 329_spike_evaluate_docker_orbstack_for_agent_isolation_and_resource_limiting 2026-03-21 20:20:41 +00:00
Timmy 996ba82682 storkit: create 329_spike_evaluate_docker_orbstack_for_agent_isolation_and_resource_limiting 2026-03-21 20:19:56 +00:00
Timmy 1f4152c894 storkit: create 361_story_remove_deprecated_manual_qa_front_matter_field 2026-03-21 19:59:52 +00:00
Timmy 02b481ee4c storkit: create 359_story_harden_docker_setup_for_security 2026-03-21 19:48:44 +00:00
Timmy 9c339c118f storkit: create 359_story_harden_docker_setup_for_security 2026-03-21 19:45:26 +00:00
Timmy 4790aac286 storkit: create 359_story_harden_docker_setup_for_security and 360_story_run_storkit_container_under_gvisor_runsc_runtime 2026-03-21 19:43:48 +00:00