commandmate 0.31.3 → 0.32.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +498 -484
- package/.next/app-path-routes-manifest.json +44 -42
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +3 -3
- package/.next/react-loadable-manifest.json +2 -2
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +8 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route.js +1 -1
- package/.next/server/app/api/app/update-check/route.js.nft.json +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/session/route.js +1 -1
- package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/start/route.js +1 -32
- package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/terminal/route.js +2 -33
- package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/capabilities/route.js +1 -1
- package/.next/server/app/api/capabilities/route.js.nft.json +1 -1
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +2 -2
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route.js +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route.js +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -0
- package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -0
- package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/relays/route.js +1 -0
- package/.next/server/app/api/relays/route.js.nft.json +1 -0
- package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route.js +1 -1
- package/.next/server/app/api/skills/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route.js +1 -1
- package/.next/server/app/api/skills/installations/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route.js +1 -1
- package/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route.js.nft.json +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/todos/route.js +1 -1
- package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +2 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +2 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +103 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/chat/page.js +2 -2
- package/.next/server/app/chat/page.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page.js +2 -2
- package/.next/server/app/more/page.js.nft.json +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page.js +1 -1
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page.js +2 -2
- package/.next/server/app/repositories/page.js.nft.json +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page.js +1 -1
- package/.next/server/app/review/page.js.nft.json +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.js +1 -1
- package/.next/server/app/sessions/page.js.nft.json +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page.js +2 -2
- package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page.js +2 -2
- package/.next/server/app/skills/installed/page.js.nft.json +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page.js +1 -1
- package/.next/server/app/skills/page.js.nft.json +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +11 -11
- package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +44 -42
- package/.next/server/chunks/1210.js +1 -0
- package/.next/server/chunks/153.js +1 -0
- package/.next/server/chunks/1886.js +1 -1
- package/.next/server/chunks/21.js +1 -0
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/3077.js +67 -0
- package/.next/server/chunks/3086.js +1 -0
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3270.js +1 -0
- package/.next/server/chunks/3543.js +1 -1
- package/.next/server/chunks/3730.js +1 -0
- package/.next/server/chunks/3925.js +1 -0
- package/.next/server/chunks/3945.js +1 -1
- package/.next/server/chunks/4443.js +2 -1
- package/.next/server/chunks/5043.js +1 -1
- package/.next/server/chunks/5164.js +1 -1
- package/.next/server/chunks/5220.js +1 -1
- package/.next/server/chunks/5354.js +1 -1
- package/.next/server/chunks/595.js +3 -3
- package/.next/server/chunks/6286.js +48 -0
- package/.next/server/chunks/6306.js +1 -0
- package/.next/server/chunks/6363.js +1 -0
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6491.js +103 -0
- package/.next/server/chunks/{9798.js → 6661.js} +1 -2
- package/.next/server/chunks/6838.js +1 -0
- package/.next/server/chunks/7875.js +25 -0
- package/.next/server/chunks/7890.js +1 -0
- package/.next/server/chunks/8063.js +32 -0
- package/.next/server/chunks/8118.js +1 -1
- package/.next/server/chunks/{7587.js → 8554.js} +1 -1
- package/.next/server/chunks/8687.js +1 -0
- package/.next/server/chunks/8807.js +37 -3
- package/.next/server/chunks/8918.js +6 -4
- package/.next/server/chunks/9123.js +2 -2
- package/.next/server/chunks/9130.js +1 -1
- package/.next/server/chunks/9584.js +1 -1
- package/.next/server/chunks/9627.js +21 -5
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/Lno4w_zWXdGdlfXg06Vp8/_buildManifest.js +1 -0
- package/.next/static/chunks/{5694.dda65070757534df.js → 3313.53f7ff985c0c8852.js} +1 -1
- package/.next/static/chunks/4718-9d63107c612a065d.js +1 -0
- package/.next/static/chunks/{4974-35592ec312322124.js → 5694-498765336d0b8c2b.js} +1 -1
- package/.next/static/chunks/{7485.442b21101fca7257.js → 7485.52361bc061cc663a.js} +1 -1
- package/.next/static/chunks/8019-cbf130d0e6334d2d.js +1 -0
- package/.next/static/chunks/8361-9bb887203c456edb.js +1 -0
- package/.next/static/chunks/8772-9be53a530950d804.js +1 -0
- package/.next/static/chunks/998-ac0ded6d5eeb4dc0.js +1 -0
- package/.next/static/chunks/app/api/agents/update/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/agents/versions/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/app/update/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/assistant/conversation/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/assistant/current-output/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/assistant/messages/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/assistant/session/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/assistant/start/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/assistant/terminal/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/assistant/tools/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/relays/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/remote/pair/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/settings/default-agents/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/skills/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/templates/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/todos/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/chat/{page-37d7615d17d7e2a0.js → page-e60d07c4c79602f0.js} +1 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/more/{page-353a3924e6d7968e.js → page-fc94f86aa881489e.js} +1 -1
- package/.next/static/chunks/app/{page-c2bf871d953a1d6f.js → page-6871cca022b24807.js} +1 -1
- package/.next/static/chunks/app/proxy/[...path]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/repositories/{page-7d0f26df0537254c.js → page-788ded1b72963d94.js} +1 -1
- package/.next/static/chunks/app/review/{page-e3f141b2829973e9.js → page-35b99baaf3c93b38.js} +1 -1
- package/.next/static/chunks/app/sessions/{page-53f188ed9ca49e5f.js → page-fa2d62f3e8436c69.js} +1 -1
- package/.next/static/chunks/app/skills/[skillId]/{page-80569b720aea59cc.js → page-06799157652e8fa9.js} +1 -1
- package/.next/static/chunks/app/skills/installed/{page-dbd2690ad72da95b.js → page-2f3987e3a131c8d0.js} +1 -1
- package/.next/static/chunks/app/skills/{page-dacd36f9c11aa7da.js → page-e70bfcf5ed4e4865.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-3d82a9355d5612d9.js +1 -0
- package/.next/static/chunks/webpack-1dc9eb5ebb4fa5ff.js +1 -0
- package/.next/static/css/96d94a4ba771efc3.css +1 -0
- package/.next/trace +13 -13
- package/.next/types/app/api/relays/[relayId]/cancel/route.ts +347 -0
- package/.next/types/app/api/relays/route.ts +347 -0
- package/.next/types/routes.d.ts +3 -1
- package/.next/types/validator.ts +18 -0
- package/README.md +6 -2
- package/dist/cli/commands/ask.d.ts +34 -0
- package/dist/cli/commands/ask.d.ts.map +1 -0
- package/dist/cli/commands/ask.js +494 -0
- package/dist/cli/commands/capture.d.ts +20 -0
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +80 -30
- package/dist/cli/commands/docs.d.ts.map +1 -1
- package/dist/cli/commands/docs.js +47 -4
- package/dist/cli/commands/instances.d.ts +67 -0
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +147 -22
- package/dist/cli/commands/peers.d.ts +64 -0
- package/dist/cli/commands/peers.d.ts.map +1 -0
- package/dist/cli/commands/peers.js +208 -0
- package/dist/cli/commands/relays.d.ts +92 -0
- package/dist/cli/commands/relays.d.ts.map +1 -0
- package/dist/cli/commands/relays.js +293 -0
- package/dist/cli/commands/report.d.ts +3 -0
- package/dist/cli/commands/report.d.ts.map +1 -1
- package/dist/cli/commands/report.js +29 -1
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +13 -10
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +66 -20
- package/dist/cli/commands/task.d.ts.map +1 -1
- package/dist/cli/commands/task.js +30 -0
- package/dist/cli/commands/wait.d.ts +20 -0
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +55 -6
- package/dist/cli/commands/whoami.d.ts +176 -0
- package/dist/cli/commands/whoami.d.ts.map +1 -0
- package/dist/cli/commands/whoami.js +377 -0
- package/dist/cli/docs/agent-operations.d.ts +25 -1
- package/dist/cli/docs/agent-operations.d.ts.map +1 -1
- package/dist/cli/docs/agent-operations.js +184 -1
- package/dist/cli/index.d.ts +13 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +25 -1
- package/dist/cli/types/api-responses.d.ts +93 -0
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/index.d.ts +16 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/utils/api-client.d.ts +30 -1
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +28 -5
- package/dist/lib/cli/command-reference.d.ts +179 -0
- package/dist/lib/cli/command-reference.d.ts.map +1 -0
- package/dist/lib/cli/command-reference.js +210 -0
- package/dist/lib/detection/ansi.d.ts +14 -1
- package/dist/lib/detection/ansi.d.ts.map +1 -1
- package/dist/lib/detection/ansi.js +40 -3
- package/dist/lib/detection/status-reason.d.ts +28 -0
- package/dist/lib/detection/status-reason.d.ts.map +1 -1
- package/dist/lib/detection/status-reason.js +28 -0
- package/dist/server/locales/en/worktree.json +23 -0
- package/dist/server/locales/ja/worktree.json +23 -0
- package/dist/server/src/lib/auto-yes-poller.js +26 -11
- package/dist/server/src/lib/db/chat-db.js +161 -7
- package/dist/server/src/lib/db/migrations/index.js +2 -0
- package/dist/server/src/lib/db/migrations/runner.js +1 -1
- package/dist/server/src/lib/db/migrations/v60-session-relays.js +110 -0
- package/dist/server/src/lib/db/relay-db.js +343 -0
- package/dist/server/src/lib/detection/ansi.js +40 -3
- package/dist/server/src/lib/detection/cli-patterns.js +206 -2
- package/dist/server/src/lib/detection/selection-shape.js +72 -1
- package/dist/server/src/lib/detection/status-reason.js +28 -0
- package/dist/server/src/lib/detection/tools/antigravity/dialog.js +13 -7
- package/dist/server/src/lib/detection/tools/command-code/detect.js +33 -0
- package/dist/server/src/lib/history/user-turn-recorder.js +79 -16
- package/dist/server/src/lib/hooks/agent-event-service.js +27 -5
- package/dist/server/src/lib/hooks/sources/codex/history.js +63 -3
- package/dist/server/src/lib/hooks/sources/codex/transcript.js +53 -1
- package/dist/server/src/lib/hooks/sources/launch-command.js +112 -15
- package/dist/server/src/lib/hooks/stop-history-capture.js +252 -50
- package/dist/server/src/lib/polling/response-checker.js +174 -13
- package/dist/server/src/lib/polling/response-dedup.js +136 -0
- package/dist/server/src/lib/polling/structured-history-gate.js +14 -1
- package/dist/server/src/lib/realtime/terminal-broadcast.js +5 -0
- package/dist/server/src/lib/realtime/waiting-broadcast.js +12 -0
- package/dist/server/src/lib/relay/relay-delivery.js +554 -0
- package/dist/server/src/lib/relay/relay-messages.js +144 -0
- package/dist/server/src/lib/relay/relay-policy.js +127 -0
- package/dist/server/src/lib/relay/relay-readiness.js +63 -0
- package/dist/server/src/lib/relay/relay-session-ref.js +72 -0
- package/dist/server/src/lib/relay/relay-system-line.js +79 -0
- package/dist/server/src/lib/relay/relay-triggers.js +177 -0
- package/dist/server/src/lib/relay/types.js +25 -0
- package/dist/server/src/lib/session/current-output-builder.js +18 -0
- package/dist/server/src/lib/session/send-user-message.js +1 -0
- package/package.json +1 -1
- package/.next/server/chunks/1058.js +0 -1
- package/.next/server/chunks/1068.js +0 -1
- package/.next/server/chunks/1990.js +0 -103
- package/.next/server/chunks/261.js +0 -1
- package/.next/server/chunks/2739.js +0 -1
- package/.next/server/chunks/2839.js +0 -1
- package/.next/server/chunks/3484.js +0 -1
- package/.next/server/chunks/358.js +0 -1
- package/.next/server/chunks/3869.js +0 -1
- package/.next/server/chunks/4325.js +0 -1
- package/.next/server/chunks/4393.js +0 -1
- package/.next/server/chunks/5017.js +0 -1
- package/.next/server/chunks/5120.js +0 -1
- package/.next/server/chunks/552.js +0 -25
- package/.next/server/chunks/6130.js +0 -1
- package/.next/server/chunks/7836.js +0 -1
- package/.next/server/chunks/7859.js +0 -21
- package/.next/server/chunks/9696.js +0 -3
- package/.next/static/0hTIackGXw6v7diXJS6yN/_buildManifest.js +0 -1
- package/.next/static/chunks/2813-de885de8a4b11910.js +0 -1
- package/.next/static/chunks/4718-07ec4e10186928db.js +0 -1
- package/.next/static/chunks/6170-951b9f5fe6b4b3b5.js +0 -1
- package/.next/static/chunks/8019-f8e73c1fb5f6f0d3.js +0 -1
- package/.next/static/chunks/8593-fa0eb2802e0ce68a.js +0 -1
- package/.next/static/chunks/app/api/agents/update/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/agents/versions/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/assistant/conversation/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/assistant/current-output/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/assistant/messages/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/assistant/session/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/assistant/start/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/assistant/terminal/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/assistant/tools/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/capabilities/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/remote/pair/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/settings/default-agents/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/skills/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/templates/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/todos/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-91b639c90795baa9.js +0 -1
- package/.next/static/chunks/webpack-9f75198882fdaf08.js +0 -1
- package/.next/static/css/acc4b9c3feb04287.css +0 -1
- /package/.next/static/{0hTIackGXw6v7diXJS6yN → Lno4w_zWXdGdlfXg06Vp8}/_ssgManifest.js +0 -0
|
@@ -28,8 +28,10 @@
|
|
|
28
28
|
* @module lib/hooks/sources/launch-command
|
|
29
29
|
*/
|
|
30
30
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
-
exports.AGENT_LAUNCH_CONFIG_ENV_VARS = exports.AGENT_CORRELATION_ENV_VARS = exports.COMMANDMATE_HOOK_ENV_VARS = exports.HOOK_PORT_ENV_VAR = exports.AGENT_EVENT_URL_ENV_VAR = void 0;
|
|
31
|
+
exports.AGENT_LAUNCH_CONFIG_ENV_VARS = exports.SERVER_PORT_ENV_VAR = exports.AGENT_CORRELATION_ENV_VARS = exports.COMMANDMATE_HOOK_ENV_VARS = exports.HOOK_PORT_ENV_VAR = exports.AGENT_EVENT_URL_ENV_VAR = void 0;
|
|
32
|
+
exports.resolveAgentLaunchEnv = resolveAgentLaunchEnv;
|
|
32
33
|
exports.renderAgentLaunchCommand = renderAgentLaunchCommand;
|
|
34
|
+
const env_1 = require("../../../lib/env");
|
|
33
35
|
const hook_settings_generator_1 = require("../../../lib/hooks/hook-settings-generator");
|
|
34
36
|
/**
|
|
35
37
|
* The variable `scripts/hooks/cmate-agent-event.sh` reads its endpoint from.
|
|
@@ -116,17 +118,62 @@ exports.AGENT_CORRELATION_ENV_VARS = [
|
|
|
116
118
|
'CM_PERMISSION_HOOK_URL',
|
|
117
119
|
];
|
|
118
120
|
/**
|
|
119
|
-
* The
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
129
|
-
*
|
|
121
|
+
* The variable a CommandMate CLI run inside an agent resolves its server from
|
|
122
|
+
* (Issue #2403).
|
|
123
|
+
*
|
|
124
|
+
* `src/cli/utils/server-url.ts` resolves a destination as `process.env` first,
|
|
125
|
+
* `~/.commandmate/.env` second — the documented precedence from #1743, which is
|
|
126
|
+
* what makes `CM_PORT=3011 commandmate ls` work. #2403 measured what that
|
|
127
|
+
* precedence costs when two servers share one tmux server: the tmux server's
|
|
128
|
+
* *global* environment carries whichever `CM_PORT` the server that started it
|
|
129
|
+
* had, every pane's `-zsh` inherits it, and an agent launched by the OTHER
|
|
130
|
+
* server therefore types `commandmate` at a destination that is not the server
|
|
131
|
+
* that launched it. The measured split was hooks on 60301 and the CLI on 3000 —
|
|
132
|
+
* `whoami` right (it reads the tmux session name), `ls` and `instances` wrong,
|
|
133
|
+
* and `ask` returning exit 0 from the wrong database, so no caller could tell.
|
|
134
|
+
*
|
|
135
|
+
* The launch line is the one place that outranks the inherited environment, so
|
|
136
|
+
* the launching server states its own port there. {@link resolveAgentLaunchEnv}
|
|
137
|
+
* is what writes it and carries the rule about when.
|
|
138
|
+
*
|
|
139
|
+
* Listed here, beside `CODEX_HOME`, rather than in
|
|
140
|
+
* {@link AGENT_CORRELATION_ENV_VARS}: see that decision below.
|
|
141
|
+
*/
|
|
142
|
+
exports.SERVER_PORT_ENV_VAR = 'CM_PORT';
|
|
143
|
+
/**
|
|
144
|
+
* The other thing a launch line carries: config the agent — and everything it
|
|
145
|
+
* spawns — is meant to keep.
|
|
146
|
+
*
|
|
147
|
+
* Two names, and the same test: neither is a credential and neither is an
|
|
148
|
+
* *identity*, so both are deliberately **not** stripped from CommandMate's own
|
|
149
|
+
* child processes by `lib/security/env-sanitizer`.
|
|
150
|
+
*
|
|
151
|
+
* - `CODEX_HOME` is a per-tool HOME/config redirect, set by a source so the
|
|
152
|
+
* agent resolves the same settings file CommandMate just wrote. A child that
|
|
153
|
+
* inherits one is unaffected.
|
|
154
|
+
* - {@link SERVER_PORT_ENV_VAR} says which CommandMate server this process
|
|
155
|
+
* belongs to. #2403 put it here rather than on the correlation list on
|
|
156
|
+
* purpose, and the reason is inheritance: a correlation variable answers
|
|
157
|
+
* "which agent is this?", which a child is not, and #1996 strips all six
|
|
158
|
+
* precisely so a relay firing from a grandchild cannot claim the agent's
|
|
159
|
+
* identity. `CM_PORT` answers "which server do I dial?", and the right
|
|
160
|
+
* answer for a descendant is *the same one* — a `commandmate send` typed by
|
|
161
|
+
* a shell the agent spawned must reach the server that launched the agent.
|
|
162
|
+
* Stripping it would recreate the bug one level down, and would also delete
|
|
163
|
+
* an operator-facing variable (#1743) from every child of the server.
|
|
164
|
+
*
|
|
165
|
+
* Measured, not assumed: because `CM_PORT` is on this list,
|
|
166
|
+
* `sanitizeEnvForChildProcess()` is byte-identical to what it returned
|
|
167
|
+
* before #2403, so none of its six call sites
|
|
168
|
+
* (`assistant/non-interactive-runner`, `updates/agent-updater`,
|
|
169
|
+
* `cli-tools/copilot-executable`, `slash-command-catalog`,
|
|
170
|
+
* `detection/version-probes`, `session/claude-executor`) can change
|
|
171
|
+
* behaviour. `tests/unit/security/child-process-server-port-2403.test.ts`
|
|
172
|
+
* asserts that with a real child process.
|
|
173
|
+
*
|
|
174
|
+
* **Still not `COPILOT_HOME` or `XDG_CONFIG_HOME`.** #1933's test carried a
|
|
175
|
+
* local allowlist of `CODEX_HOME` / `COPILOT_HOME` / `XDG_CONFIG_HOME`;
|
|
176
|
+
* building the seven plans shows only the first is ever written. `COPILOT_HOME` and `XDG_CONFIG_HOME` are
|
|
130
177
|
* *read* from the ambient environment by `copilot/hook-settings` and the
|
|
131
178
|
* antigravity config writer to decide where a file goes — they never reach
|
|
132
179
|
* `plan.env`. An allowlist wide enough to admit them would wave through a source
|
|
@@ -135,7 +182,48 @@ exports.AGENT_CORRELATION_ENV_VARS = [
|
|
|
135
182
|
* Enumerated for the same reason as the list above: so the drift guard can
|
|
136
183
|
* subtract it and hold the remainder to an exact set.
|
|
137
184
|
*/
|
|
138
|
-
exports.AGENT_LAUNCH_CONFIG_ENV_VARS = [
|
|
185
|
+
exports.AGENT_LAUNCH_CONFIG_ENV_VARS = [
|
|
186
|
+
'CODEX_HOME',
|
|
187
|
+
exports.SERVER_PORT_ENV_VAR,
|
|
188
|
+
];
|
|
189
|
+
/**
|
|
190
|
+
* The environment a launch line actually carries: the plan's own, plus this
|
|
191
|
+
* server's port (Issue #2403).
|
|
192
|
+
*
|
|
193
|
+
* A source's `prepareLaunch` builds `plan.env` out of what it knows about *its
|
|
194
|
+
* tool*. Which server is running is not that — it is the same fact for all
|
|
195
|
+
* seven sources, and seven copies of it would be seven chances to forget one.
|
|
196
|
+
* Two sources would have had to grow an environment they do not otherwise have
|
|
197
|
+
* (claude keeps its correlation keys inside the `--settings` file, opencode
|
|
198
|
+
* puts its port in argv), and those two are exactly where the reported failure
|
|
199
|
+
* was found. So it belongs at the one place that already exists for
|
|
200
|
+
* "everything a launch line carries", which is this module.
|
|
201
|
+
*
|
|
202
|
+
* **`getServerPort()`, unconditionally.** The same call the hook URL on the
|
|
203
|
+
* same line is built from (#1722), so the two cannot name different servers —
|
|
204
|
+
* including in the degenerate case where `CM_PORT` is unusable and both fall
|
|
205
|
+
* back to 3000 together. Writing it when nothing was configured is not a guess:
|
|
206
|
+
* a server given no `CM_PORT` really is listening on 3000, and the pane it
|
|
207
|
+
* launches an agent into really can have inherited some other server's port
|
|
208
|
+
* from the tmux server's global environment. A pin that only fired when
|
|
209
|
+
* `CM_PORT` was set would leave that case — the unconfigured server as the
|
|
210
|
+
* *victim* — broken.
|
|
211
|
+
*
|
|
212
|
+
* **Appended, never overriding.** A source that names `CM_PORT` itself has said
|
|
213
|
+
* something more specific than "the server that launched me", and keeps it.
|
|
214
|
+
* Appending also leaves every existing assignment in its existing position, so
|
|
215
|
+
* codex's `CODEX_HOME` is still the first thing on its line and the correlation
|
|
216
|
+
* URLs are still where a reader of a `ps` line expects them.
|
|
217
|
+
*
|
|
218
|
+
* @param plan - What the source's `prepareLaunch` returned
|
|
219
|
+
* @returns A copy of `plan.env` with {@link SERVER_PORT_ENV_VAR} appended,
|
|
220
|
+
* unless the plan named it first
|
|
221
|
+
*/
|
|
222
|
+
function resolveAgentLaunchEnv(plan) {
|
|
223
|
+
if (exports.SERVER_PORT_ENV_VAR in plan.env)
|
|
224
|
+
return plan.env;
|
|
225
|
+
return { ...plan.env, [exports.SERVER_PORT_ENV_VAR]: String((0, env_1.getServerPort)()) };
|
|
226
|
+
}
|
|
139
227
|
/**
|
|
140
228
|
* Turn a plan into the line a shell can run.
|
|
141
229
|
*
|
|
@@ -145,11 +233,20 @@ exports.AGENT_LAUNCH_CONFIG_ENV_VARS = ['CODEX_HOME'];
|
|
|
145
233
|
* Values are quoted; names are not, because a name that needed quoting would
|
|
146
234
|
* not be a name a shell would assign.
|
|
147
235
|
*
|
|
236
|
+
* Since #2403 the environment rendered is {@link resolveAgentLaunchEnv}'s, not
|
|
237
|
+
* `plan.env` directly — the difference is this server's own `CM_PORT`, added
|
|
238
|
+
* last.
|
|
239
|
+
*
|
|
240
|
+
* The empty-assignment branch survives because the renderer is a total
|
|
241
|
+
* function on plans, not because any plan reaches it: since #2403 every
|
|
242
|
+
* resolved environment names at least the port.
|
|
243
|
+
*
|
|
148
244
|
* @param plan - What the source's `prepareLaunch` returned
|
|
149
|
-
* @returns `NAME='value' … command`, or just `command` when
|
|
245
|
+
* @returns `NAME='value' … command`, or just `command` when there is no
|
|
246
|
+
* environment to apply
|
|
150
247
|
*/
|
|
151
248
|
function renderAgentLaunchCommand(plan) {
|
|
152
|
-
const assignments = Object.entries(plan
|
|
249
|
+
const assignments = Object.entries(resolveAgentLaunchEnv(plan)).map(([name, value]) => `${name}=${(0, hook_settings_generator_1.shellQuote)(value)}`);
|
|
153
250
|
if (assignments.length === 0)
|
|
154
251
|
return plan.command;
|
|
155
252
|
return `${assignments.join(' ')} ${plan.command}`;
|
|
@@ -4,12 +4,18 @@
|
|
|
4
4
|
*
|
|
5
5
|
* ## Why the poller was not enough
|
|
6
6
|
*
|
|
7
|
-
* `lib/polling/structured-history-gate` is asked to record a turn
|
|
8
|
-
*
|
|
9
|
-
* about to
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
7
|
+
* `lib/polling/structured-history-gate` is asked to record a turn from exactly
|
|
8
|
+
* one place: the scraper's own judgement that the turn had finished and its copy
|
|
9
|
+
* was about to be saved. That is the right place — doing the handover at the
|
|
10
|
+
* point of the write is what makes it impossible for both writers to run — but
|
|
11
|
+
* the judgement behind it is a string analysis of a terminal frame, and the
|
|
12
|
+
* whole trigger hangs off it.
|
|
13
|
+
*
|
|
14
|
+
* Issue #2399 made the ask itself repeat: the poll that saves the scrape now
|
|
15
|
+
* re-asks the reader on the duplicate ticks after it, throttled, until it
|
|
16
|
+
* answers. That closes the case where the frame is judged finished BEFORE the
|
|
17
|
+
* transcript closes — the ordinary one. It does nothing for a completion the
|
|
18
|
+
* frame analysis never judges at all, which is the case below.
|
|
13
19
|
*
|
|
14
20
|
* When that analysis misses one completion the cost is not a delay. By the time
|
|
15
21
|
* the next completion is judged, the newest turn is the next one; before #2246
|
|
@@ -22,12 +28,41 @@
|
|
|
22
28
|
*
|
|
23
29
|
* ## Knowing the boundary is not the same as the file having reached it
|
|
24
30
|
*
|
|
25
|
-
* The `stop` post and the transcript's last append are two events
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* the
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
+
* The `stop` post and the transcript's last append are two events, and the
|
|
32
|
+
* reader refuses a turn it cannot prove is closed — so the cost of asking too
|
|
33
|
+
* early is a `false` rather than a truncated row. What to *do* about that
|
|
34
|
+
* `false` is the whole of this module, and the answer depends on which of the
|
|
35
|
+
* two events is waiting for the other.
|
|
36
|
+
*
|
|
37
|
+
* ## Waiting inside the hook is sometimes waiting on ourselves (Issue #2398)
|
|
38
|
+
*
|
|
39
|
+
* #2246 and #2264 both read the gap as a race — two appends with no ordering
|
|
40
|
+
* between them, so asking again after half a second eventually wins. That
|
|
41
|
+
* reading is Claude Code's, and for Claude Code it is true: claude writes the
|
|
42
|
+
* transcript and *then* runs its Stop hook, which is why 506 of 508 measured
|
|
43
|
+
* claude stops captured on the first ask, and why the two that did not were
|
|
44
|
+
* caught by the retry #2264 added.
|
|
45
|
+
*
|
|
46
|
+
* codex is the other way round, and there the ordering is not a race but a
|
|
47
|
+
* dependency. Measured across three days of logs (2026-09-07): of **105** codex
|
|
48
|
+
* stop events, **0** captured. Every one of them logged
|
|
49
|
+
* `codex-transcript-turn-open` three times, 500 ms apart, and the rollout's
|
|
50
|
+
* `task_complete` for that same `turn_id` was appended **3–63 ms after the
|
|
51
|
+
* receiver answered** — five turns measured, every one on that side of the
|
|
52
|
+
* response. codex does not write the record that closes the turn until the Stop
|
|
53
|
+
* hook's command exits, and the Stop hook's command is a synchronous `curl` at
|
|
54
|
+
* this receiver. The retry loop was waiting for an append its own caller was
|
|
55
|
+
* holding up. That is a self-wait: no number of attempts and no interval can
|
|
56
|
+
* win it, and the 1 s it spent losing was added to the end of every codex turn.
|
|
57
|
+
*
|
|
58
|
+
* So the shape is not "ask again", it is **ask once, then get out of the way**:
|
|
59
|
+
* one synchronous attempt — all claude, antigravity and command-code have ever
|
|
60
|
+
* needed — and, for a tool whose transcript is waiting on this very hook, a
|
|
61
|
+
* detached read that only starts once the receiver has answered. The detached
|
|
62
|
+
* read goes through the same gate as everything else, so it inherits the
|
|
63
|
+
* per-instance serialisation, the idempotent write, the `broadcastMessage` and
|
|
64
|
+
* the relay's `onRelayTurnCompleted`; nothing about what a captured turn *does*
|
|
65
|
+
* changes with when it is captured.
|
|
31
66
|
*
|
|
32
67
|
* ## What it does not do
|
|
33
68
|
*
|
|
@@ -79,26 +114,32 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
79
114
|
};
|
|
80
115
|
})();
|
|
81
116
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
82
|
-
exports.STOP_TRANSCRIPT_MAX_ATTEMPTS = exports.STOP_TRANSCRIPT_RETRY_DELAY_MS = void 0;
|
|
117
|
+
exports.STOP_HOOK_BLOCKS_TRANSCRIPT_CLOSE = exports.STOP_TRANSCRIPT_DEFERRED_DELAYS_MS = exports.STOP_TRANSCRIPT_MAX_ATTEMPTS = exports.STOP_TRANSCRIPT_RETRY_DELAY_MS = void 0;
|
|
118
|
+
exports.resolveStopTranscriptCapture = resolveStopTranscriptCapture;
|
|
83
119
|
exports.captureTranscriptTurnOnStop = captureTranscriptTurnOnStop;
|
|
120
|
+
const tool_id_1 = require("../../lib/hooks/sources/codex/tool-id");
|
|
84
121
|
const logger_1 = require("../../lib/logger");
|
|
85
122
|
const logger = (0, logger_1.createLogger)('lib/hooks/stop-history-capture');
|
|
86
123
|
/**
|
|
87
|
-
* How long to wait before asking again.
|
|
124
|
+
* How long to wait before asking again, on the awaited path.
|
|
88
125
|
*
|
|
89
|
-
* The `stop` hook fires when the agent considers the turn over, and
|
|
90
|
-
*
|
|
91
|
-
* before
|
|
92
|
-
* not closed, answers false (correctly: the row it would
|
|
93
|
-
* its last paragraph missing, frozen under the turn key
|
|
94
|
-
* retry, hands a turn the agent has definitely finished
|
|
126
|
+
* The `stop` hook fires when the agent considers the turn over, and — for a tool
|
|
127
|
+
* that writes its transcript first — the last assistant record is appended
|
|
128
|
+
* around, not necessarily before, that instant. A reader that arrives in the gap
|
|
129
|
+
* sees a turn that is not closed, answers false (correctly: the row it would
|
|
130
|
+
* write is a reply with its last paragraph missing, frozen under the turn key
|
|
131
|
+
* forever) and, without a retry, hands a turn the agent has definitely finished
|
|
132
|
+
* back to the scraper.
|
|
95
133
|
*
|
|
96
134
|
* Half a second is chosen against what the gap actually is — a file append that
|
|
97
|
-
* has already been issued — rather than against a timeout.
|
|
135
|
+
* has already been issued — rather than against a timeout. Which is exactly why
|
|
136
|
+
* it is the wrong instrument for a tool where the append has *not* been issued
|
|
137
|
+
* because this handler has not returned; see
|
|
138
|
+
* {@link STOP_HOOK_BLOCKS_TRANSCRIPT_CLOSE}.
|
|
98
139
|
*/
|
|
99
140
|
exports.STOP_TRANSCRIPT_RETRY_DELAY_MS = 500;
|
|
100
141
|
/**
|
|
101
|
-
* How many times the reader is asked in total (Issue #2264).
|
|
142
|
+
* How many times the reader is asked in total, on the awaited path (Issue #2264).
|
|
102
143
|
*
|
|
103
144
|
* #2246 asked twice, on the reading that the only thing a retry waits for is one
|
|
104
145
|
* append that has already been issued. The incident #2264 was reported for says
|
|
@@ -107,21 +148,151 @@ exports.STOP_TRANSCRIPT_RETRY_DELAY_MS = 500;
|
|
|
107
148
|
* were saved short had *tool* records still arriving, and a single 500 ms retry
|
|
108
149
|
* lands inside that run rather than after it.
|
|
109
150
|
*
|
|
110
|
-
* Three and not a loop, because
|
|
111
|
-
* if the turn is still open after the third ask, the next poll is the right
|
|
112
|
-
* place to notice — it runs when the pane returns to the composer, by which time
|
|
113
|
-
* the transcript is written — and a hook handler that waits on a file is a hook
|
|
151
|
+
* Three and not a loop, because a hook handler that waits on a file is a hook
|
|
114
152
|
* handler that can hang a turn. The worst case this bounds is 1 s of the agent's
|
|
115
153
|
* stop path, spent only on an instance that has a transcript and an open turn.
|
|
154
|
+
*
|
|
155
|
+
* #2264's own comment here used to add that "if the turn is still open after the
|
|
156
|
+
* third ask, the next poll is the right place to notice". Issue #2398 measured
|
|
157
|
+
* that sentence and found two claims of which only the first held: the poller
|
|
158
|
+
* does run again when the pane returns to the composer, but on the measured
|
|
159
|
+
* codex incident it never reached the gate — its content dedup returned before
|
|
160
|
+
* the capture call. Issue #2399 fixed that half. A poll that skips a duplicate
|
|
161
|
+
* frame now re-asks the reader from inside the skip, throttled to one ask every
|
|
162
|
+
* three ticks, so the sentence is true again and the third attempt does have a
|
|
163
|
+
* second chance behind it.
|
|
164
|
+
*
|
|
165
|
+
* Which is a reason to leave this ceiling where it is, not to raise it. The
|
|
166
|
+
* recheck is what makes three enough: a fourth awaited ask would spend another
|
|
167
|
+
* 500 ms of the agent's stop path buying what a tick of the poller now provides
|
|
168
|
+
* for nothing. And it is still no answer for a tool that cannot close its turn
|
|
169
|
+
* while this handler is running, because there the first thing that has to
|
|
170
|
+
* happen is this handler returning — a backstop measured in poll ticks cannot
|
|
171
|
+
* bring that forward. That case leaves the awaited path entirely:
|
|
172
|
+
* {@link STOP_TRANSCRIPT_DEFERRED_DELAYS_MS}.
|
|
116
173
|
*/
|
|
117
174
|
exports.STOP_TRANSCRIPT_MAX_ATTEMPTS = 3;
|
|
175
|
+
/**
|
|
176
|
+
* When the detached reads happen, once the receiver has answered (Issue #2398).
|
|
177
|
+
*
|
|
178
|
+
* Each entry is the wait *before* that read, measured from the previous one, so
|
|
179
|
+
* the reads land roughly 150 ms, 650 ms, 2.65 s and 7.65 s after the hook was
|
|
180
|
+
* answered. Two facts set the shape:
|
|
181
|
+
*
|
|
182
|
+
* - **The first entry is the one that matters.** codex appended
|
|
183
|
+
* `task_complete` 3, 16, 59, 61 and 63 ms after the response on the five
|
|
184
|
+
* turns that were timed, so a first read at 150 ms is past all of them with
|
|
185
|
+
* room to spare. Anything shorter starts betting on the scheduler.
|
|
186
|
+
* - **The tail is for the turn that was never going to close.** A turn
|
|
187
|
+
* interrupted, or a codex that exits before flushing, never appends anything,
|
|
188
|
+
* and the reads after the first exist so that a slow flush is caught rather
|
|
189
|
+
* than for the common case. They are cheap — a `false` from the gate is a
|
|
190
|
+
* tail read and a parse — and they cost the agent nothing at all, because by
|
|
191
|
+
* then the agent has its answer and this promise is detached.
|
|
192
|
+
*
|
|
193
|
+
* Finite, and short of the 30 min the poller runs for, because this is a
|
|
194
|
+
* best-effort second trigger and not a queue: a turn nobody could read stays the
|
|
195
|
+
* scraper's, which is the fail-open every one of these Issues asks for.
|
|
196
|
+
*/
|
|
197
|
+
exports.STOP_TRANSCRIPT_DEFERRED_DELAYS_MS = [150, 500, 2_000, 5_000];
|
|
198
|
+
/**
|
|
199
|
+
* Tools whose transcript cannot close while this handler is still running
|
|
200
|
+
* (Issue #2398).
|
|
201
|
+
*
|
|
202
|
+
* A tool id table, which this layer otherwise refuses to keep — the gate's own
|
|
203
|
+
* comment on `PULL_TRANSCRIPT_READERS` argues the case, and the rule there is
|
|
204
|
+
* that a table is allowed when it dispatches on a fact and forbidden when it
|
|
205
|
+
* *decides* one. The fact here is an ordering, and it was measured per tool:
|
|
206
|
+
*
|
|
207
|
+
* | tool | stop hook vs. the transcript's last record | captured on the first ask |
|
|
208
|
+
* |---|---|---|
|
|
209
|
+
* | claude | hook runs **after** the record is written | 506 / 508 |
|
|
210
|
+
* | antigravity | after | 9 / 9 |
|
|
211
|
+
* | command-code | after | 1 / 1 |
|
|
212
|
+
* | codex | hook runs **before**, and the record waits for it | **0 / 105** |
|
|
213
|
+
*
|
|
214
|
+
* Membership therefore says one thing only: for this tool, a `false` from the
|
|
215
|
+
* synchronous ask means "the agent is waiting for me", so the answer is to
|
|
216
|
+
* answer and read afterwards. A tool that is *not* here keeps #2264's behaviour
|
|
217
|
+
* exactly — the awaited retries — because for it the append really is in flight
|
|
218
|
+
* and waiting really does win.
|
|
219
|
+
*
|
|
220
|
+
* Where this belongs eventually is `AgentSourceCapabilities`, beside
|
|
221
|
+
* `transcriptHistory`: a source declaring `stopBlocksTranscriptClose` would let
|
|
222
|
+
* this module stop naming anybody. It is not there yet because the ordering has
|
|
223
|
+
* only been measured for four tools and only one of them needs it, and a
|
|
224
|
+
* capability every source has to answer is a claim every source has to have
|
|
225
|
+
* measured. The second member is the right moment to move it.
|
|
226
|
+
*/
|
|
227
|
+
exports.STOP_HOOK_BLOCKS_TRANSCRIPT_CLOSE = new Set([
|
|
228
|
+
tool_id_1.CODEX_CLI_TOOL_ID,
|
|
229
|
+
]);
|
|
118
230
|
function sleep(ms) {
|
|
119
231
|
return new Promise((resolve) => {
|
|
120
232
|
setTimeout(resolve, ms);
|
|
121
233
|
});
|
|
122
234
|
}
|
|
123
235
|
/**
|
|
124
|
-
*
|
|
236
|
+
* Read again, after the receiver has already answered (Issue #2398).
|
|
237
|
+
*
|
|
238
|
+
* Detached: nothing awaits the returned promise in production, which is the
|
|
239
|
+
* whole point — for codex this loop only gets to see a closed turn *because*
|
|
240
|
+
* the hook it was posted by has returned. Each read goes through the gate, so a
|
|
241
|
+
* poll that beats it to the same turn is serialised behind it and the write
|
|
242
|
+
* stays idempotent either way.
|
|
243
|
+
*
|
|
244
|
+
* Stops at the first success and never throws.
|
|
245
|
+
*/
|
|
246
|
+
async function readAfterResponding(gate, worktree, cliToolId, instanceId, capture, delaysMs) {
|
|
247
|
+
const startedAt = Date.now();
|
|
248
|
+
try {
|
|
249
|
+
for (const [index, delayMs] of delaysMs.entries()) {
|
|
250
|
+
await sleep(delayMs);
|
|
251
|
+
const captured = await gate.captureStructuredHistoryTurn(worktree.id, cliToolId, instanceId, capture);
|
|
252
|
+
if (captured) {
|
|
253
|
+
// The line an operator greps when a codex reply did reach the chat
|
|
254
|
+
// surface: the receiver's own `agent-event-stop-applied` cannot carry
|
|
255
|
+
// it, because it was written before this read existed.
|
|
256
|
+
logger.info('stop-history-capture-deferred-captured', {
|
|
257
|
+
worktreeId: worktree.id,
|
|
258
|
+
cliToolId,
|
|
259
|
+
instanceId,
|
|
260
|
+
attempt: index + 1,
|
|
261
|
+
attempts: delaysMs.length,
|
|
262
|
+
elapsedMs: Date.now() - startedAt,
|
|
263
|
+
});
|
|
264
|
+
return true;
|
|
265
|
+
}
|
|
266
|
+
logger.debug('stop-history-capture-deferred-open', {
|
|
267
|
+
worktreeId: worktree.id,
|
|
268
|
+
cliToolId,
|
|
269
|
+
instanceId,
|
|
270
|
+
attempt: index + 1,
|
|
271
|
+
attempts: delaysMs.length,
|
|
272
|
+
elapsedMs: Date.now() - startedAt,
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
logger.info('stop-history-capture-deferred-exhausted', {
|
|
276
|
+
worktreeId: worktree.id,
|
|
277
|
+
cliToolId,
|
|
278
|
+
instanceId,
|
|
279
|
+
attempts: delaysMs.length,
|
|
280
|
+
elapsedMs: Date.now() - startedAt,
|
|
281
|
+
});
|
|
282
|
+
return false;
|
|
283
|
+
}
|
|
284
|
+
catch (error) {
|
|
285
|
+
logger.warn('stop-history-capture-deferred-failed', {
|
|
286
|
+
worktreeId: worktree.id,
|
|
287
|
+
cliToolId,
|
|
288
|
+
instanceId,
|
|
289
|
+
error: error instanceof Error ? error.message : String(error),
|
|
290
|
+
});
|
|
291
|
+
return false;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Ask the pull-mode reader to record this instance's turn, and say what happened.
|
|
125
296
|
*
|
|
126
297
|
* The tool question is asked first and without doing any work
|
|
127
298
|
* (`isPullTranscriptHistory`), so a `stop` from gemini, copilot or opencode
|
|
@@ -129,6 +300,11 @@ function sleep(ms) {
|
|
|
129
300
|
* retry delay. opencode has a second writer too, but a *push* one: its
|
|
130
301
|
* subscription has already received the reply and there is nothing to pull.
|
|
131
302
|
*
|
|
303
|
+
* Exactly **one** capture is awaited, whichever path is taken. What happens on a
|
|
304
|
+
* `false` is the fork: a tool whose transcript is waiting on this hook gets the
|
|
305
|
+
* detached reads and an immediate answer, and every other tool keeps #2264's
|
|
306
|
+
* awaited retries. See {@link STOP_HOOK_BLOCKS_TRANSCRIPT_CLOSE}.
|
|
307
|
+
*
|
|
132
308
|
* The import is dynamic so that the poller's module graph — which reaches every
|
|
133
309
|
* transcript reader and the whole opencode client — does not become a static
|
|
134
310
|
* dependency of the hook receiver.
|
|
@@ -136,39 +312,52 @@ function sleep(ms) {
|
|
|
136
312
|
* @param worktree - The worktree the event resolved to
|
|
137
313
|
* @param cliToolId - The tool that sent the event
|
|
138
314
|
* @param instanceId - The already-resolved instance id
|
|
139
|
-
* @returns
|
|
315
|
+
* @returns What was written, or scheduled; see {@link StopTranscriptCaptureStatus}
|
|
140
316
|
*/
|
|
141
|
-
async function
|
|
317
|
+
async function resolveStopTranscriptCapture(worktree, cliToolId, instanceId, options = {}) {
|
|
142
318
|
try {
|
|
143
|
-
const
|
|
144
|
-
if (!isPullTranscriptHistory(cliToolId))
|
|
145
|
-
return
|
|
319
|
+
const gate = await Promise.resolve().then(() => __importStar(require('../../lib/polling/structured-history-gate')));
|
|
320
|
+
if (!gate.isPullTranscriptHistory(cliToolId))
|
|
321
|
+
return { status: 'unavailable' };
|
|
146
322
|
// No `transcriptPathHint`: that value is a line the *pane* printed, and the
|
|
147
323
|
// hook receiver has not read the pane. A tool whose transcript can only be
|
|
148
324
|
// found that way has no session pointer either, and therefore sends no stop
|
|
149
325
|
// event this path could act on.
|
|
150
326
|
const capture = { worktreePath: worktree.path, transcriptPathHint: null };
|
|
151
|
-
if (await captureStructuredHistoryTurn(worktree.id, cliToolId, instanceId, capture)) {
|
|
152
|
-
return
|
|
327
|
+
if (await gate.captureStructuredHistoryTurn(worktree.id, cliToolId, instanceId, capture)) {
|
|
328
|
+
return { status: 'captured' };
|
|
329
|
+
}
|
|
330
|
+
// Asked once, before any waiting, on either path: every failure other than
|
|
331
|
+
// "the turn is not closed yet" — no session pointer, no transcript, hooks
|
|
332
|
+
// the operator never wired up for this tool — is a reason neither waiting
|
|
333
|
+
// nor deferring can fix, and an instance with no transcript will not have
|
|
334
|
+
// one in 150 ms either. A transcript that exists does not stop existing
|
|
335
|
+
// between attempts, so this is not re-asked.
|
|
336
|
+
const hasTranscript = () => gate.hasStructuredHistoryTranscript(worktree.id, cliToolId, instanceId, capture);
|
|
337
|
+
if (exports.STOP_HOOK_BLOCKS_TRANSCRIPT_CLOSE.has(cliToolId)) {
|
|
338
|
+
const delaysMs = options.deferredDelaysMs ?? exports.STOP_TRANSCRIPT_DEFERRED_DELAYS_MS;
|
|
339
|
+
if (delaysMs.length === 0)
|
|
340
|
+
return { status: 'unavailable' };
|
|
341
|
+
if (!(await hasTranscript()))
|
|
342
|
+
return { status: 'unavailable' };
|
|
343
|
+
const deferred = readAfterResponding(gate, worktree, cliToolId, instanceId, capture, delaysMs);
|
|
344
|
+
logger.info('stop-history-capture-deferred', {
|
|
345
|
+
worktreeId: worktree.id,
|
|
346
|
+
cliToolId,
|
|
347
|
+
instanceId,
|
|
348
|
+
delaysMs,
|
|
349
|
+
});
|
|
350
|
+
return { status: 'deferred', deferred };
|
|
153
351
|
}
|
|
154
352
|
const retryDelayMs = options.retryDelayMs ?? exports.STOP_TRANSCRIPT_RETRY_DELAY_MS;
|
|
155
353
|
if (retryDelayMs <= 0)
|
|
156
|
-
return
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
// other reason the capture answers false — no session pointer, no
|
|
160
|
-
// transcript, the operator never wired hooks for this tool — is a reason
|
|
161
|
-
// waiting cannot fix, and this handler is on the agent's own stop path, so
|
|
162
|
-
// half a second spent for nothing is half a second added to every turn it is
|
|
163
|
-
// spent on. Asked once, before the first sleep: a transcript that exists
|
|
164
|
-
// does not stop existing between attempts.
|
|
165
|
-
if (!(await hasStructuredHistoryTranscript(worktree.id, cliToolId, instanceId, capture))) {
|
|
166
|
-
return false;
|
|
167
|
-
}
|
|
354
|
+
return { status: 'unavailable' };
|
|
355
|
+
if (!(await hasTranscript()))
|
|
356
|
+
return { status: 'unavailable' };
|
|
168
357
|
const maxAttempts = Math.max(1, options.maxAttempts ?? exports.STOP_TRANSCRIPT_MAX_ATTEMPTS);
|
|
169
358
|
for (let attempt = 2; attempt <= maxAttempts; attempt += 1) {
|
|
170
359
|
await sleep(retryDelayMs);
|
|
171
|
-
const captured = await captureStructuredHistoryTurn(worktree.id, cliToolId, instanceId, capture);
|
|
360
|
+
const captured = await gate.captureStructuredHistoryTurn(worktree.id, cliToolId, instanceId, capture);
|
|
172
361
|
logger.debug('stop-history-capture-retried', {
|
|
173
362
|
worktreeId: worktree.id,
|
|
174
363
|
cliToolId,
|
|
@@ -178,9 +367,9 @@ async function captureTranscriptTurnOnStop(worktree, cliToolId, instanceId, opti
|
|
|
178
367
|
captured,
|
|
179
368
|
});
|
|
180
369
|
if (captured)
|
|
181
|
-
return
|
|
370
|
+
return { status: 'captured' };
|
|
182
371
|
}
|
|
183
|
-
return
|
|
372
|
+
return { status: 'unavailable' };
|
|
184
373
|
}
|
|
185
374
|
catch (error) {
|
|
186
375
|
logger.warn('stop-history-capture-failed', {
|
|
@@ -189,6 +378,19 @@ async function captureTranscriptTurnOnStop(worktree, cliToolId, instanceId, opti
|
|
|
189
378
|
instanceId,
|
|
190
379
|
error: error instanceof Error ? error.message : String(error),
|
|
191
380
|
});
|
|
192
|
-
return
|
|
381
|
+
return { status: 'unavailable' };
|
|
193
382
|
}
|
|
194
383
|
}
|
|
384
|
+
/**
|
|
385
|
+
* Whether History now holds this instance's newest turn as Markdown.
|
|
386
|
+
*
|
|
387
|
+
* The boolean face of {@link resolveStopTranscriptCapture}, and the shape #2246
|
|
388
|
+
* and #2264 pinned: `true` means the row is written *now*. A scheduled read is
|
|
389
|
+
* not one, so codex answers false here on the turns it later captures — which is
|
|
390
|
+
* why the receiver reads the status word instead (`AgentStopOutcome`), and why
|
|
391
|
+
* the deferred outcome is logged rather than returned.
|
|
392
|
+
*/
|
|
393
|
+
async function captureTranscriptTurnOnStop(worktree, cliToolId, instanceId, options = {}) {
|
|
394
|
+
const { status } = await resolveStopTranscriptCapture(worktree, cliToolId, instanceId, options);
|
|
395
|
+
return status === 'captured';
|
|
396
|
+
}
|