-
919d185a85
Merge feat/box-user: non-root box user + settable password
main
Gabriel Brown
2026-07-13 11:38:29 -04:00
-
-
4505471149
fix(worker): keep-id compat, zombie tmux clients, nvm in box image
Gabriel Brown
2026-07-13 10:36:25 -04:00
-
028fbebcd6
feat(next): box user card on /machine
Gabriel Brown
2026-07-13 10:11:11 -04:00
-
134bab93a5
feat(next): box password API
Gabriel Brown
2026-07-13 10:08:48 -04:00
-
78aae034b5
feat(worker): live box password apply route
Gabriel Brown
2026-07-13 10:07:06 -04:00
-
58bd101793
feat(worker): run terminals and agent turns as the box user
Gabriel Brown
2026-07-13 10:04:14 -04:00
-
a956d63e16
feat(backend): boxSettings table + box password actions
Gabriel Brown
2026-07-13 09:56:08 -04:00
-
37a82098c2
feat(worker): exec-as-user, stdin input, chown + userns plumbing
Gabriel Brown
2026-07-13 09:52:45 -04:00
-
78cb3d90c2
feat(worker): box-user script builders + username sanitizer
Gabriel Brown
2026-07-13 09:49:59 -04:00
-
-
a91c8551ac
docs: box user implementation plan
Gabriel Brown
2026-07-13 09:48:25 -04:00
-
aea2aa2c5c
docs: box user design spec (non-root box + user-set password)
Gabriel Brown
2026-07-12 22:42:32 -04:00
-
b038a31520
fix(box): bump job image base to Fedora 44 for Neovim 0.12
Gabriel Brown
2026-07-12 22:26:45 -04:00
-
a640b5cb94
fix(terminal): bun-safe exec attach, box self-heal, surfaced errors
Gabriel Brown
2026-07-12 22:14:37 -04:00
-
c0dd8759af
fix(expo): support anthropic_oauth_json auth type in provider form
Gabriel Brown
2026-07-12 12:09:33 -04:00
-
ed88478ce6
Merge codex/spoon-stabilize-unify-build: 5-phase stabilize/unify/build (65 tasks)
Gabriel Brown
2026-07-12 02:53:40 -04:00
-
-
a255a06a35
docs: rewrite for box-first model + webhooks + notifications
Gabriel Brown
2026-07-11 18:20:10 -04:00
-
1fbb2dd0a1
chore: remove dead routes/components + fix redact/env cleanup
Gabriel Brown
2026-07-11 18:06:28 -04:00
-
f89dfce3b8
fix(workspace): scroll/diff-race/recovery/editor/mobile polish
Gabriel Brown
2026-07-11 17:54:33 -04:00
-
b00141130c
fix(a11y): remove nested-interactive role='link' on spoon/thread lists
Gabriel Brown
2026-07-11 17:38:27 -04:00
-
cc241c8bbf
fix(ui): profile page directive + avatar dropdown links/fallbacks
Gabriel Brown
2026-07-11 17:29:20 -04:00
-
d873c8eaf7
fix(auth): retain input on failure + copy fixes
Gabriel Brown
2026-07-11 17:18:45 -04:00
-
a3ec04ad99
fix(ui): re-sync settings/thread forms on loaded record
Gabriel Brown
2026-07-11 17:09:12 -04:00
-
bca86196fb
fix(ui): error-handle fire-and-forget mutations in settings panels
Gabriel Brown
2026-07-11 16:54:51 -04:00
-
8c579d060a
fix(ui): loading skeletons for dashboard/spoons/threads
Gabriel Brown
2026-07-11 16:47:55 -04:00
-
8d7486bc8c
feat(notifications): settings notification preferences
Gabriel Brown
2026-07-11 16:36:49 -04:00
-
c241941e41
feat(notifications): header notification bell
Gabriel Brown
2026-07-11 16:21:28 -04:00
-
5776841e2f
feat(notifications): inbox query + mark-read mutations
Gabriel Brown
2026-07-11 16:11:33 -04:00
-
3766a29871
feat(notifications): emit at maintenance/turn/sync/reauth events
Gabriel Brown
2026-07-11 16:04:44 -04:00
-
4eb0c963ff
feat(notifications): add emit helper + UseSend email dispatch
Gabriel Brown
2026-07-11 15:45:08 -04:00
-
05eabcb0fa
feat(notifications): add notifications + notificationPreferences tables
Gabriel Brown
2026-07-11 15:41:25 -04:00
-
0347d58f71
chore: fix eslint errors introduced in phase 4 backend
Gabriel Brown
2026-07-11 15:37:51 -04:00
-
75d7592cf3
feat(settings): surface GitHub connection needs_reauth/revoked
Gabriel Brown
2026-07-11 14:46:45 -04:00
-
bce6769277
fix(convex): order spoonCommits by committedAt via index so bounding keeps newest
Gabriel Brown
2026-07-11 14:40:35 -04:00
-
9067d16734
perf(convex): bound unbounded owner-wide collects on hot paths
Gabriel Brown
2026-07-11 14:32:35 -04:00
-
e4a7f96633
fix(sync): don't misclassify plain 403 auth errors as rate limited
Gabriel Brown
2026-07-11 14:27:22 -04:00
-
4769a76274
feat(sync): add Octokit retry/throttle and rate-limited status
Gabriel Brown
2026-07-11 14:22:37 -04:00
-
f1dbf8cd50
feat(webhooks): add signature-verified GitHub webhook route
Gabriel Brown
2026-07-11 14:15:28 -04:00
-
68dc7bb4ee
feat(spoons): find owned spoons by pushed repo (indexed)
Gabriel Brown
2026-07-11 14:09:55 -04:00
-
f7c3aa6482
feat(github): index connections by installation + status mutation
Gabriel Brown
2026-07-11 14:06:13 -04:00
-
18cb424b99
feat(webhooks): add GitHub webhook signature verifier
Gabriel Brown
2026-07-11 14:02:28 -04:00
-
675d6b2316
fix(sync): use stable dedup key and skip threads when head unresolved
Gabriel Brown
2026-07-11 13:56:50 -04:00
-
0e894f8e67
refactor(threads): dedup maintenance threads by stable key via index
Gabriel Brown
2026-07-11 13:52:51 -04:00
-
c3f73ac656
feat(sync): add deterministic maintenance-thread dedup key
Gabriel Brown
2026-07-11 13:47:16 -04:00
-
4684617fed
fix(sync): paginate compare and resolve real head SHA
Gabriel Brown
2026-07-11 13:42:02 -04:00
-
c8200a6747
feat(sync): add resolveBranchHead to fetch branch tip SHA
Gabriel Brown
2026-07-11 13:39:08 -04:00
-
696f03e867
fix(web): /machine terminal visible prop, stop/restart confirmation, accurate waiting label
Gabriel Brown
2026-07-11 13:36:54 -04:00
-
a5bc0434f3
chore: fix eslint errors introduced across phases 1-3
Gabriel Brown
2026-07-11 13:26:35 -04:00
-
12b1c98cfc
feat(web): terminal copy-on-select toggle and web-links polish
Gabriel Brown
2026-07-11 13:14:02 -04:00
-
148e060a9b
feat(web): persistent workspace terminal across tab switches
Gabriel Brown
2026-07-11 13:02:45 -04:00
-
33e7732566
feat(web): /machine dev-box page with status, terminal, and home file browser
Gabriel Brown
2026-07-11 12:53:24 -04:00
-
ea56b29453
refactor(web): extract reusable XtermSession from WorkspaceTerminal
Gabriel Brown
2026-07-11 12:40:39 -04:00
-
27019dc1d3
feat(web): /api/box status, lifecycle, tree, file, terminal-token routes
Gabriel Brown
2026-07-11 12:34:44 -04:00
-
11e93ade5f
feat(web): box terminal token mint + ownership proxy helpers
Gabriel Brown
2026-07-11 12:28:30 -04:00
-
2c6a605646
feat(worker): user-scoped /box/terminal websocket bridge
Gabriel Brown
2026-07-11 12:22:02 -04:00
-
192f547be5
feat(worker): /box status, lifecycle, tree, and file HTTP routes
Gabriel Brown
2026-07-11 12:10:38 -04:00
-
bf0276b1f3
feat(worker): home-scoped box file tree/read/write with realpath containment
Gabriel Brown
2026-07-11 12:01:33 -04:00
-
6439e5200b
feat(worker): per-user box status and lifecycle helpers
Gabriel Brown
2026-07-11 11:54:32 -04:00
-
d4303e652e
feat(worker): user-scoped box terminal token verification
Gabriel Brown
2026-07-11 11:50:19 -04:00
-
432e3b501e
fix(worker): don't double-append streamed answer when completed event carries content
Gabriel Brown
2026-07-11 11:47:11 -04:00
-
2311679802
fix(worker): chmod materialized env file to 0600 even when it pre-exists
Gabriel Brown
2026-07-11 11:35:37 -04:00
-
58c815a7a7
fix(worker): materialize env files 0600, re-materialize per run, delete on stop
Gabriel Brown
2026-07-11 11:30:58 -04:00
-
424307c5af
build(agent-job): pin Claude Code CLI; smoke one turn per runtime
Gabriel Brown
2026-07-11 11:23:52 -04:00
-
702e53a4ba
feat(web): per-thread/per-spoon runtime picker and Anthropic OAuth provider profile
Gabriel Brown
2026-07-11 11:15:29 -04:00
-
6ec2e51312
feat(backend): migration to retire openai_direct runtime
Gabriel Brown
2026-07-11 11:03:43 -04:00
-
0716a224ef
fix(worker): codex prepareAuth skips auth.json for api_key profiles
Gabriel Brown
2026-07-11 11:00:08 -04:00
-
c0f107c4cf
feat(backend): queue-time runtime/profile validation; job.runtime authoritative in worker
Gabriel Brown
2026-07-11 10:52:49 -04:00
-
70396feccc
feat(backend): add claude runtime, anthropic OAuth auth kind, and profile→runtime derivation
Gabriel Brown
2026-07-11 10:39:06 -04:00
-
76886621b5
feat(worker): ClaudeCodeAdapter runs claude -p stream-json in the per-user box
Gabriel Brown
2026-07-11 10:32:02 -04:00
-
c9ee2e6cde
refactor(worker): delete per-job OpenCode container path, host_port split, and dead docker helpers
Gabriel Brown
2026-07-11 10:21:51 -04:00
-
ff0425cf4b
feat(worker): OpenCodeAdapter runs opencode in the per-user box (no side container)
Gabriel Brown
2026-07-11 02:57:05 -04:00
-
949a036d13
fix(worker): surface nonzero-exit agent turns as failed even when text streamed
Gabriel Brown
2026-07-11 10:07:14 -04:00
-
e5bba720b4
refactor(worker): move Codex turn logic into CodexAdapter behind AgentRuntime
Gabriel Brown
2026-07-11 02:46:44 -04:00
-
c1e816741d
fix(worker): marked-command survives tail-exec; kill script excludes itself
Gabriel Brown
2026-07-10 18:45:10 -04:00
-
bab87cc2d0
feat(worker): in-box process-group marker + kill helpers for agent turns
Gabriel Brown
2026-07-10 18:34:07 -04:00
-
613a6c8a2d
fix(agent-jobs): narrow recovery-cron guard so abandoned stops still recover
Gabriel Brown
2026-07-10 18:34:15 -04:00
-
38431155b2
refactor(worker): extract AgentRuntime interface, shared provider helpers, and adapter registry
Gabriel Brown
2026-07-10 18:25:21 -04:00
-
697fb7286d
fix(agent-jobs): recovery cron skips already-terminal jobs
Gabriel Brown
2026-07-10 18:27:53 -04:00
-
60dd5d3836
fix(agent-jobs): stop heartbeat from resurrecting terminated jobs
Gabriel Brown
2026-07-10 18:13:28 -04:00
-
ac68484059
fix(worker): make cancellation teardown failure-safe
Gabriel Brown
2026-07-10 17:52:20 -04:00
-
470af043fa
fix(agent-jobs): add heartbeat cancel and stale recovery
Gabriel Brown
2026-07-10 17:38:31 -04:00
-
cbbb168e7c
docs: add implementation handoff for Claude
Gabriel Brown
2026-07-10 17:54:06 -04:00
-
8af33fc9e0
fix(worker): always release stopped workspaces
Gabriel Brown
2026-07-10 17:33:38 -04:00
-
00f96a126e
fix(agent-jobs): close maintenance jobs after decision
Gabriel Brown
2026-07-10 17:27:07 -04:00
-
1e1435e656
fix(agent-jobs): recover failed claim decryption
Gabriel Brown
2026-07-10 17:24:15 -04:00
-
cf45404b7d
fix(agent-jobs): validate claims before claiming
Gabriel Brown
2026-07-10 17:17:49 -04:00
-
926008fd3a
fix(workspace): skip queries for missing jobs
Gabriel Brown
2026-07-10 17:22:45 -04:00
-
2beeeb1732
fix(app): handle nullable detail consumers
Gabriel Brown
2026-07-10 17:17:36 -04:00
-
ed21126eea
fix(app): add friendly not-found handling
Gabriel Brown
2026-07-10 17:11:56 -04:00
-
c4d0f5219a
fix(terminal): use real TTY exec and resize
Gabriel Brown
2026-07-10 17:19:38 -04:00
-
906f906ad3
fix(backend): use generated import extension
Gabriel Brown
2026-07-10 17:15:34 -04:00
-
bdb2964e34
fix(sync): honor per-spoon auto-sync settings
Gabriel Brown
2026-07-10 17:12:34 -04:00
-
57c175aecd
fix(worker): contain workspace paths against symlinks
Gabriel Brown
2026-07-10 17:09:17 -04:00
-
2bc090c378
chore: remove terminal task scratch report
Gabriel Brown
2026-07-10 17:06:44 -04:00
-
d4a3856083
fix(workspace): key shell by job
Gabriel Brown
2026-07-10 17:02:26 -04:00
-
020ffbfb23
fix(worker-auth): unify token checks and bind job environment
Gabriel Brown
2026-07-10 17:02:12 -04:00
-
feb3723753
fix(terminal): preserve animation-frame first fit
Gabriel Brown
2026-07-10 16:56:15 -04:00
-
75d06394ce
fix(terminal): refit after fonts load
Gabriel Brown
2026-07-10 16:53:18 -04:00
-
0b5a2c0411
fix(worker): ensure reconciled boxes before acquire
Gabriel Brown
2026-07-10 17:04:41 -04:00
-
284f7ea52b
fix(worker): serialize box failure and idle reaping
Gabriel Brown
2026-07-10 17:00:22 -04:00
-
490c05329b
chore: remove implementation scratch report
Gabriel Brown
2026-07-10 16:56:07 -04:00