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
|
@@ -64,7 +64,8 @@
|
|
|
64
64
|
* written once.
|
|
65
65
|
*/
|
|
66
66
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
67
|
-
exports.COMMAND_CODE_SELECTION_LIST_FOOTER = exports.SET_AS_DEFAULT_FOOTER_PATTERN = exports.SESSION_SCOPE_FOOTER_PATTERN = exports.MAX_OPTION_NUMBER = exports.SELECTION_SHAPE_TAIL_LINE_COUNT = void 0;
|
|
67
|
+
exports.DISMISSABLE_PANEL_FOOTER_PATTERN = exports.COMMAND_CODE_SELECTION_LIST_FOOTER = exports.SET_AS_DEFAULT_FOOTER_PATTERN = exports.SESSION_SCOPE_FOOTER_PATTERN = exports.MAX_OPTION_NUMBER = exports.SELECTION_SHAPE_TAIL_LINE_COUNT = void 0;
|
|
68
|
+
exports.hasDismissablePanelFooter = hasDismissablePanelFooter;
|
|
68
69
|
exports.extractCommandCodeSelectionListFrame = extractCommandCodeSelectionListFrame;
|
|
69
70
|
exports.readSelectionListShape = readSelectionListShape;
|
|
70
71
|
exports.shouldOfferOptionNumbers = shouldOfferOptionNumbers;
|
|
@@ -150,6 +151,76 @@ const FILTER_INPUT_PATTERN = /\btype\s+to\s+search\b|\bsearch\s+\w+\s*(?:…|\.\
|
|
|
150
151
|
* settled on for the same reason.
|
|
151
152
|
*/
|
|
152
153
|
exports.COMMAND_CODE_SELECTION_LIST_FOOTER = /\benter\s+to\s+select\b\s*[·•]\s*esc\s+to\s+cancel\b/i;
|
|
154
|
+
/**
|
|
155
|
+
* The footer of an overlay whose ONLY exit is the dismiss (Issue #2369).
|
|
156
|
+
*
|
|
157
|
+
* Measured on Command Code 1.49's `/usage`, whose last row is verbatim
|
|
158
|
+
* `Press Esc to close`. The panel above it is read-only — a plan header, two
|
|
159
|
+
* meters, a breakdown URL — so there is no highlight to move and no key to
|
|
160
|
+
* confirm with. Before this pattern existed nothing matched the screen, it
|
|
161
|
+
* reached the `default` floor, and the chat surface answered an
|
|
162
|
+
* eighteen-button `unclassified` card to a panel with one working key.
|
|
163
|
+
*
|
|
164
|
+
* ## Why it is this narrow
|
|
165
|
+
*
|
|
166
|
+
* Three narrowings, and each one is there because this predicate SUPPRESSES
|
|
167
|
+
* controls — a false positive takes the arrow pad and the answer keys away from
|
|
168
|
+
* a screen that needed them:
|
|
169
|
+
*
|
|
170
|
+
* - **a verb before the key.** `Press`/`Hit`/`Type`, or nothing at all, but not
|
|
171
|
+
* an arbitrary run of prose. `esc to cancel` on its own is the tail of every
|
|
172
|
+
* picker footer in this file, including
|
|
173
|
+
* {@link COMMAND_CODE_SELECTION_LIST_FOOTER}, and those screens have a
|
|
174
|
+
* highlight;
|
|
175
|
+
* - **`close`/`dismiss`/`exit`, never `cancel` or `go back`.** The distinction
|
|
176
|
+
* is measured rather than stylistic: `cancel` is what a screen with a
|
|
177
|
+
* COMMITTABLE choice calls its escape (claude's `/model`, codex's picker,
|
|
178
|
+
* Command Code's own), while `close` is what a panel that decided nothing
|
|
179
|
+
* calls it;
|
|
180
|
+
* - **the whole row.** Anchored at both ends (leading/trailing space aside), so
|
|
181
|
+
* a hint bar that offers a dismiss ALONGSIDE something else — `↑/↓ navigate ·
|
|
182
|
+
* enter to select · esc to close` — does not match, and keeps the arrows the
|
|
183
|
+
* other half of its sentence promises.
|
|
184
|
+
*
|
|
185
|
+
* Case-insensitive because the measured row is `Press Esc to close` and Command
|
|
186
|
+
* Code writes its picker hints in lower case; nothing rests on which it uses.
|
|
187
|
+
*/
|
|
188
|
+
exports.DISMISSABLE_PANEL_FOOTER_PATTERN = /^\s*(?:press|hit|type)?\s*(?:<)?esc(?:ape)?(?:>)?\s+to\s+(?:close|dismiss|exit)\b[\s.·•]*$/im;
|
|
189
|
+
/**
|
|
190
|
+
* How many rows from the end of the content the dismiss footer is looked for.
|
|
191
|
+
*
|
|
192
|
+
* The same 15-row tail the detection chain hands a tool module as
|
|
193
|
+
* `NormalizedFrame.lastLines` (`STATUS_CHECK_LINE_COUNT`), restated as a number
|
|
194
|
+
* here because this module is a browser-safe leaf and `tools/frame.ts` pulls in
|
|
195
|
+
* `cli-patterns`. `detect.ts` reads `frame.lastLines` and never this constant,
|
|
196
|
+
* so the two cannot disagree about the detector's own window; this one bounds
|
|
197
|
+
* the CLIENT-side reading in {@link hasDismissablePanelFooter}.
|
|
198
|
+
*/
|
|
199
|
+
const DISMISSABLE_PANEL_TAIL_LINE_COUNT = 15;
|
|
200
|
+
/**
|
|
201
|
+
* Whether the tail of this frame is a dismiss-only panel (Issue #2369).
|
|
202
|
+
*
|
|
203
|
+
* The same question `commandCodeStatusDetector.afterPrompt` asks of
|
|
204
|
+
* `frame.lastLines`, asked of a raw capture, so the chat surface can answer for
|
|
205
|
+
* a frame whose server verdict has not reached it. The pattern is shared rather
|
|
206
|
+
* than restated — one expression, two call sites, exactly as
|
|
207
|
+
* {@link COMMAND_CODE_SELECTION_LIST_FOOTER} is shared between the detector and
|
|
208
|
+
* the dialog card.
|
|
209
|
+
*
|
|
210
|
+
* @param frame - a raw `capture-pane -p -e` frame, ANSI intact
|
|
211
|
+
*/
|
|
212
|
+
function hasDismissablePanelFooter(frame) {
|
|
213
|
+
if (!frame)
|
|
214
|
+
return false;
|
|
215
|
+
const lines = (0, ansi_1.stripAnsi)(frame.replace(/\r\n/g, '\n')).split('\n');
|
|
216
|
+
let last = lines.length - 1;
|
|
217
|
+
while (last >= 0 && lines[last].trim() === '')
|
|
218
|
+
last -= 1;
|
|
219
|
+
if (last < 0)
|
|
220
|
+
return false;
|
|
221
|
+
const tail = lines.slice(Math.max(0, last + 1 - DISMISSABLE_PANEL_TAIL_LINE_COUNT), last + 1);
|
|
222
|
+
return tail.some((line) => exports.DISMISSABLE_PANEL_FOOTER_PATTERN.test(line));
|
|
223
|
+
}
|
|
153
224
|
/**
|
|
154
225
|
* The horizontal rule Command Code draws directly above a full-screen dialog.
|
|
155
226
|
*
|
|
@@ -64,6 +64,34 @@ exports.STATUS_REASON = {
|
|
|
64
64
|
* `Type to search models...` box.
|
|
65
65
|
*/
|
|
66
66
|
COMMAND_CODE_SELECTION_LIST: 'command_code_selection_list',
|
|
67
|
+
/**
|
|
68
|
+
* Issue #2369: a Command Code overlay that only Esc leaves.
|
|
69
|
+
*
|
|
70
|
+
* `/usage` opens a read-only panel — a plan header, two usage meters, a
|
|
71
|
+
* breakdown URL — whose last row is `Press Esc to close`. There is no
|
|
72
|
+
* highlight to move, no numbered option and no confirm key; the ONE thing the
|
|
73
|
+
* screen accepts is the dismiss.
|
|
74
|
+
*
|
|
75
|
+
* Distinct from {@link STATUS_REASON.COMMAND_CODE_SELECTION_LIST} because the
|
|
76
|
+
* two screens want different controls, and that is the whole of this Issue:
|
|
77
|
+
* before it, this panel matched no rule at all, reached the `default` floor
|
|
78
|
+
* and so raised `isUnclassifiedActive` — which the chat surface answers with
|
|
79
|
+
* `TerminalEscapeHatch` plus `PromptAnswerKeys`, eighteen buttons (arrows,
|
|
80
|
+
* Enter, Esc, `1`-`9`, `y`, `n`) of which exactly one does anything. Reporting
|
|
81
|
+
* the selection-list token instead would put the arrow pad on the card and
|
|
82
|
+
* tell an operator reading `capture --json` that a moving highlight had been
|
|
83
|
+
* read off a panel that has none.
|
|
84
|
+
*
|
|
85
|
+
* Deliberately NOT a member of `SELECTION_LIST_REASONS`
|
|
86
|
+
* (`lib/detection/status-detector.ts`): that set is what `isSelectionListActive`
|
|
87
|
+
* — and therefore the arrow pad — is derived from. The flag this one feeds is
|
|
88
|
+
* `isDismissablePanelActive`, published beside it.
|
|
89
|
+
*
|
|
90
|
+
* The vocabulary is Command Code's alone for now (方針書 §4 D2's tool-by-tool
|
|
91
|
+
* rule): the SHAPE "an overlay whose footer offers only a dismiss" is general,
|
|
92
|
+
* the sentence that identifies it was measured on one tool.
|
|
93
|
+
*/
|
|
94
|
+
COMMAND_CODE_DISMISSABLE_PANEL: 'command_code_dismissable_panel',
|
|
67
95
|
COPILOT_SELECTION_LIST: 'copilot_selection_list',
|
|
68
96
|
CODEX_SELECTION_LIST: 'codex_selection_list',
|
|
69
97
|
/** Issue #1017: Codex pager / edit-previous (transcript) mode. */
|
|
@@ -38,13 +38,19 @@
|
|
|
38
38
|
*
|
|
39
39
|
* ## Who calls it
|
|
40
40
|
*
|
|
41
|
-
*
|
|
42
|
-
* `antigravity/detect.ts` (the status verdict `/current-output` publishes)
|
|
43
|
-
* `polling/response-checker.ts` (the `prompt` row
|
|
44
|
-
* push notification it raises
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
41
|
+
* Every producer of the wire, so that they cannot disagree about one screen:
|
|
42
|
+
* `antigravity/detect.ts` (the status verdict `/current-output` publishes),
|
|
43
|
+
* `polling/response-checker.ts` (`detectPromptOnCleanFrame` — the `prompt` row
|
|
44
|
+
* the poller stores, the push notification it raises, AND the Auto-Yes poller's
|
|
45
|
+
* reading) and the `prompt-response` route's re-verification.
|
|
46
|
+
*
|
|
47
|
+
* Issue #2364 left the Auto-Yes poller on the generic pass, on the premise that
|
|
48
|
+
* agy's `PreToolUse` hook answers the permission request before the dialog is
|
|
49
|
+
* drawn. Measured false (#2368): agy 1.1.27 ignores a hook `allow` in
|
|
50
|
+
* interactive mode and draws the dialog anyway (#1779), so agy's Auto-Yes
|
|
51
|
+
* depends entirely on this TUI reading — and without it every wrapped Bash
|
|
52
|
+
* approval sat unanswered while `/current-output` published it as waiting.
|
|
53
|
+
* #2368 put that poller on the same entry.
|
|
48
54
|
*
|
|
49
55
|
* Deliberately NOT a change to the generic multiple-choice parser: folding
|
|
50
56
|
* continuation rows there would change what every other tool's dialogs read
|
|
@@ -55,6 +55,13 @@
|
|
|
55
55
|
* numbered-response path, because Command Code fires `PreToolUse` AFTER the
|
|
56
56
|
* dialog is answered, so a hook-driven permission decision cannot dismiss it.
|
|
57
57
|
*
|
|
58
|
+
* Issue #2369 added a second `afterPrompt` branch for the other screen the
|
|
59
|
+
* shared chain could not read: the `/usage` panel, whose last row is
|
|
60
|
+
* `Press Esc to close`. It is not a picker — nothing moves, nothing commits —
|
|
61
|
+
* so it gets a reason of its own rather than the selection-list token, and the
|
|
62
|
+
* chat surface answers it with the one key it accepts. See
|
|
63
|
+
* `STATUS_REASON.COMMAND_CODE_DISMISSABLE_PANEL`.
|
|
64
|
+
*
|
|
58
65
|
* `afterPrompt` arrived with Issue #2297, for the one screen the shared chain
|
|
59
66
|
* genuinely could not read: the picker `/model` opens. It is a provider-grouped
|
|
60
67
|
* list of model NAMES — no option numbers — over a `› Type to search models...`
|
|
@@ -106,6 +113,32 @@ exports.commandCodeStatusDetector = (0, run_detection_1.createToolStatusDetector
|
|
|
106
113
|
tool: 'command-code',
|
|
107
114
|
verifiedAgainst: exports.VERIFIED_AGAINST,
|
|
108
115
|
afterPrompt(frame) {
|
|
116
|
+
// Issue #2369. `/usage` opens a READ-ONLY panel: a plan header, two usage
|
|
117
|
+
// meters, a breakdown URL, and `Press Esc to close` as its last row. It is
|
|
118
|
+
// matched before the picker footer below because the two are mutually
|
|
119
|
+
// exclusive sentences and this one is the more specific — a whole row that
|
|
120
|
+
// offers a dismiss and nothing else.
|
|
121
|
+
//
|
|
122
|
+
// `waiting` rather than `running`, which is the half of this branch that
|
|
123
|
+
// fixes the reported defect: `isUnclassifiedFrame` (`session/status-evidence`)
|
|
124
|
+
// is `status === 'running' && <floor reason>`, so a `waiting` verdict takes
|
|
125
|
+
// `isUnclassifiedActive` down with it and the chat surface stops answering
|
|
126
|
+
// an eighteen-button card to a one-key panel. The reason is deliberately NOT
|
|
127
|
+
// in `SELECTION_LIST_REASONS`: there is no highlight here, so the arrow pad
|
|
128
|
+
// would be as wrong as the answer keys were. `current-output-builder`
|
|
129
|
+
// publishes it as `isDismissablePanelActive` instead.
|
|
130
|
+
//
|
|
131
|
+
// A human still has to press the key, so `waiting` is also the honest word:
|
|
132
|
+
// nothing on this pane will move until they do.
|
|
133
|
+
if (selection_shape_1.DISMISSABLE_PANEL_FOOTER_PATTERN.test(frame.lastLines)) {
|
|
134
|
+
return {
|
|
135
|
+
status: 'waiting',
|
|
136
|
+
confidence: 'high',
|
|
137
|
+
reason: status_reason_1.STATUS_REASON.COMMAND_CODE_DISMISSABLE_PANEL,
|
|
138
|
+
hasActivePrompt: false,
|
|
139
|
+
evidence: 'positive',
|
|
140
|
+
};
|
|
141
|
+
}
|
|
109
142
|
// Issue #2297. Command Code's pickers (`/model` measured live on v1.40.1 at
|
|
110
143
|
// 200x1000) are arrow-driven overlays with a search box and a lower-case
|
|
111
144
|
// hint-bar footer. Nothing in the shared chain reads that footer, so before
|
|
@@ -27,6 +27,17 @@
|
|
|
27
27
|
* 1. **The key is already on a row** — nothing happens. The callers are pollers,
|
|
28
28
|
* so being asked to record the same prompt again is the normal case rather
|
|
29
29
|
* than an error.
|
|
30
|
+
* 1b. **A RELAY delivery's row already holds this text** (Issue #2392) — the
|
|
31
|
+
* same answer, reached without the key. A relay hands session A the reply
|
|
32
|
+
* session B wrote by sending it into A's composer, and the row it writes
|
|
33
|
+
* carries `relay:<ledgerId>` so that the ledger can be read back out of it
|
|
34
|
+
* (#2387). Being keyed is exactly what put it beyond outcome 2's claim, so
|
|
35
|
+
* until this Issue every delivery left the operator reading the reply twice.
|
|
36
|
+
* The row is recognised here but deliberately **not** claimed: nothing is
|
|
37
|
+
* written, its key stays `relay:<ledgerId>`, and the caller is told
|
|
38
|
+
* `already-recorded` with that row's id — because re-pointing it at a
|
|
39
|
+
* transcript key would take the loop guard's only route back to the ledger
|
|
40
|
+
* away with it.
|
|
30
41
|
* 2. **An unkeyed row already holds this text** — that row is *claimed*, not
|
|
31
42
|
* duplicated. This is the `/send` case, and it is the whole reason the
|
|
32
43
|
* recorder is not simply an insert: `sendUserMessage` wrote the operator's
|
|
@@ -203,37 +214,46 @@ async function recordUserTurn(target, key, content, timestampMs, options = {}) {
|
|
|
203
214
|
}
|
|
204
215
|
}
|
|
205
216
|
/**
|
|
206
|
-
*
|
|
217
|
+
* Recognise the row this prompt is already on, if there is one.
|
|
207
218
|
*
|
|
208
|
-
*
|
|
209
|
-
* the one nearest the agent's clock wins, which only matters when the operator
|
|
210
|
-
* sent the same text twice inside the window and is the right tie-break then
|
|
211
|
-
* too.
|
|
219
|
+
* One window, two kinds of row in it, and what may be done with them differs:
|
|
212
220
|
*
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
*
|
|
216
|
-
*
|
|
217
|
-
*
|
|
221
|
+
* 1. the `/send` row, which carries no key and is **claimed** — this is #2196's
|
|
222
|
+
* case and the reason the recorder is not simply an insert;
|
|
223
|
+
* 2. a relay delivery's row, which carries `relay:<ledgerId>` and is **left
|
|
224
|
+
* exactly as it is** — Issue #2392. `includeRelayDelivered` is what puts it
|
|
225
|
+
* in the answer at all, and `requestId` is what tells the two apart.
|
|
218
226
|
*
|
|
219
|
-
*
|
|
227
|
+
* The claim is tried across every unkeyed candidate first, so the presence of a
|
|
228
|
+
* delivery cannot cost an orphan row its key. It can lose —
|
|
229
|
+
* `setMessageRequestId` refuses a row that acquired a key between the read and
|
|
230
|
+
* the write. Losing means some other producer got there first, so the next
|
|
231
|
+
* candidate is tried and, if none is left, the delivery is considered and then
|
|
232
|
+
* the caller falls through to the insert. It cannot loop: each attempt either
|
|
233
|
+
* claims a row or removes it from contention.
|
|
234
|
+
*
|
|
235
|
+
* @returns The row this prompt is on, or null when nothing here is this prompt's
|
|
220
236
|
*/
|
|
221
237
|
function adoptExistingRow(chatDb, db, target, instanceId, key, normalized, at, options) {
|
|
222
238
|
// `Math.min` and not a replacement: {@link RecordUserTurnOptions} may widen
|
|
223
239
|
// the search backwards and may never narrow it, so a caller that supplies a
|
|
224
240
|
// bound *inside* the standard window changes nothing.
|
|
225
241
|
const fromMs = Math.min(at - exports.USER_TURN_ADOPTION_WINDOW_MS, options.adoptionFromMs ?? Number.POSITIVE_INFINITY);
|
|
226
|
-
const candidates = chatDb
|
|
227
|
-
.findUnkeyedUserMessages(db, {
|
|
242
|
+
const candidates = sameText(chatDb.findUnkeyedUserMessages(db, {
|
|
228
243
|
worktreeId: target.worktreeId,
|
|
229
244
|
cliToolId: target.cliToolId,
|
|
230
245
|
instanceId,
|
|
231
246
|
fromMs,
|
|
232
247
|
toMs: at + exports.USER_TURN_ADOPTION_WINDOW_MS,
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
248
|
+
// Issue #2392. Without this the relay delivery's row is not in the answer
|
|
249
|
+
// at all, and the prompt it holds is inserted a second time.
|
|
250
|
+
includeRelayDelivered: true,
|
|
251
|
+
}), normalized, at);
|
|
236
252
|
for (const candidate of candidates) {
|
|
253
|
+
// A relay delivery, kept for the pass below: claiming it would overwrite the
|
|
254
|
+
// `relay:<ledgerId>` the loop guard reads the ledger back out of.
|
|
255
|
+
if (candidate.requestId)
|
|
256
|
+
continue;
|
|
237
257
|
if (!chatDb.setMessageRequestId(db, candidate.id, key))
|
|
238
258
|
continue;
|
|
239
259
|
logger.info('user-turn-adopted', {
|
|
@@ -248,5 +268,48 @@ function adoptExistingRow(chatDb, db, target, instanceId, key, normalized, at, o
|
|
|
248
268
|
timestampMs: candidate.timestamp.getTime(),
|
|
249
269
|
};
|
|
250
270
|
}
|
|
271
|
+
// Issue #2392. Nothing is written here and that is the whole point: the row
|
|
272
|
+
// already says what this prompt says, and its `request_id` is the loop guard's
|
|
273
|
+
// only way back to the ledger entry that produced it (`findParentRelayHops`,
|
|
274
|
+
// #2387). So the prompt is reported as recorded on the row that holds it, and
|
|
275
|
+
// the insert below is not reached. `setMessageRequestId` would refuse the
|
|
276
|
+
// write anyway — it is a compare-and-set on `request_id IS NULL` — but the
|
|
277
|
+
// branch above says so explicitly rather than leaning on that.
|
|
278
|
+
//
|
|
279
|
+
// No direction test on the timestamp, unlike #2387's `isEchoOfRelayRow`: that
|
|
280
|
+
// one is deciding whether a row it can already see is an echo, while this is
|
|
281
|
+
// deciding whether to write a row at all, and a transcript whose clock rounds
|
|
282
|
+
// a prompt to a whole second would land just *before* the delivery and bring
|
|
283
|
+
// the duplicate straight back. The symmetric window is safe here because the
|
|
284
|
+
// text being matched is a relay body — `buildRelayReplyMessage`'s framing, not
|
|
285
|
+
// anything an operator types.
|
|
286
|
+
const delivered = candidates.find((candidate) => candidate.requestId);
|
|
287
|
+
if (delivered) {
|
|
288
|
+
logger.info('user-turn-already-relayed', {
|
|
289
|
+
...describe(target),
|
|
290
|
+
requestId: key,
|
|
291
|
+
messageId: delivered.id,
|
|
292
|
+
relayRequestId: delivered.requestId ?? null,
|
|
293
|
+
driftMs: delivered.timestamp.getTime() - at,
|
|
294
|
+
});
|
|
295
|
+
return {
|
|
296
|
+
outcome: 'already-recorded',
|
|
297
|
+
messageId: delivered.id,
|
|
298
|
+
timestampMs: delivered.timestamp.getTime(),
|
|
299
|
+
};
|
|
300
|
+
}
|
|
251
301
|
return null;
|
|
252
302
|
}
|
|
303
|
+
/**
|
|
304
|
+
* The rows here that hold this prompt's text, nearest the agent's clock first.
|
|
305
|
+
*
|
|
306
|
+
* Content is compared normalised, because that is the only comparison
|
|
307
|
+
* `chat_messages` cannot make for itself (see `findUnkeyedUserMessages`). The
|
|
308
|
+
* ordering only matters when the same text sits on two rows inside the window,
|
|
309
|
+
* and nearest-in-time is the right tie-break then too.
|
|
310
|
+
*/
|
|
311
|
+
function sameText(rows, normalized, at) {
|
|
312
|
+
return rows
|
|
313
|
+
.filter((row) => normalizeUserTurnContent(row.content) === normalized)
|
|
314
|
+
.sort((a, b) => Math.abs(a.timestamp.getTime() - at) - Math.abs(b.timestamp.getTime() - at));
|
|
315
|
+
}
|
|
@@ -161,16 +161,29 @@ function safeRealpath(target) {
|
|
|
161
161
|
* skip it, and after `recordAgentStopEvent` because the reader resolves its
|
|
162
162
|
* transcript through the session pointer that call refreshes.
|
|
163
163
|
*
|
|
164
|
-
*
|
|
165
|
-
*
|
|
166
|
-
*
|
|
164
|
+
* ## Exactly one read is awaited (Issue #2398)
|
|
165
|
+
*
|
|
166
|
+
* The comment that stood here said the read could be awaited freely, because
|
|
167
|
+
* "the turn has already ended, so the cost is paid by nobody who is waiting for
|
|
168
|
+
* an answer". That is true of Claude Code, which writes its transcript and then
|
|
169
|
+
* fires the hook, and false of codex, which does not append the record closing
|
|
170
|
+
* the turn until this hook's command exits — so for codex the agent *is* waiting
|
|
171
|
+
* for this answer, and the retries that were waiting for the file were waiting
|
|
172
|
+
* for themselves. Measured 2026-09-07: 105 codex stop events, 0 captured, 1 s of
|
|
173
|
+
* the agent's stop path spent on each.
|
|
174
|
+
*
|
|
175
|
+
* So the reader is asked once here, and anything further happens after this
|
|
176
|
+
* function has returned — detached, and observed through the log rather than
|
|
177
|
+
* through the return value, which is what
|
|
178
|
+
* {@link AgentStopOutcome.structuredHistoryOutcome} exists to say.
|
|
167
179
|
*
|
|
168
180
|
* Never throws. A hook is fire-and-forget from a CLI's stop handler, and a
|
|
169
181
|
* failure here must not become the agent's problem.
|
|
170
182
|
*/
|
|
171
183
|
async function applyAgentStopEvent(db, worktree, cliToolId, instanceId) {
|
|
172
184
|
(0, agent_event_state_1.recordAgentStopEvent)(worktree.id, cliToolId, instanceId);
|
|
173
|
-
const
|
|
185
|
+
const { status: structuredHistoryOutcome } = await (0, stop_history_capture_1.resolveStopTranscriptCapture)(worktree, cliToolId, instanceId);
|
|
186
|
+
const structuredHistoryCaptured = structuredHistoryOutcome === 'captured';
|
|
174
187
|
let task;
|
|
175
188
|
try {
|
|
176
189
|
task = (0, tasks_db_1.getActiveTaskForInstance)(db, worktree.id, cliToolId, instanceId);
|
|
@@ -185,6 +198,7 @@ async function applyAgentStopEvent(db, worktree, cliToolId, instanceId) {
|
|
|
185
198
|
taskEventApplied: false,
|
|
186
199
|
verificationRunId: null,
|
|
187
200
|
structuredHistoryCaptured,
|
|
201
|
+
structuredHistoryOutcome,
|
|
188
202
|
};
|
|
189
203
|
}
|
|
190
204
|
if (!task) {
|
|
@@ -193,6 +207,7 @@ async function applyAgentStopEvent(db, worktree, cliToolId, instanceId) {
|
|
|
193
207
|
taskEventApplied: false,
|
|
194
208
|
verificationRunId: null,
|
|
195
209
|
structuredHistoryCaptured,
|
|
210
|
+
structuredHistoryOutcome,
|
|
196
211
|
};
|
|
197
212
|
}
|
|
198
213
|
let taskEventApplied = false;
|
|
@@ -212,6 +227,7 @@ async function applyAgentStopEvent(db, worktree, cliToolId, instanceId) {
|
|
|
212
227
|
taskEventApplied,
|
|
213
228
|
verificationRunId: null,
|
|
214
229
|
structuredHistoryCaptured,
|
|
230
|
+
structuredHistoryOutcome,
|
|
215
231
|
};
|
|
216
232
|
}
|
|
217
233
|
let verificationRunId = null;
|
|
@@ -235,5 +251,11 @@ async function applyAgentStopEvent(db, worktree, cliToolId, instanceId) {
|
|
|
235
251
|
});
|
|
236
252
|
}
|
|
237
253
|
}
|
|
238
|
-
return {
|
|
254
|
+
return {
|
|
255
|
+
taskId: task.id,
|
|
256
|
+
taskEventApplied,
|
|
257
|
+
verificationRunId,
|
|
258
|
+
structuredHistoryCaptured,
|
|
259
|
+
structuredHistoryOutcome,
|
|
260
|
+
};
|
|
239
261
|
}
|
|
@@ -323,6 +323,13 @@ async function scanForRollout(dir, sessionId, depth) {
|
|
|
323
323
|
* attach` is the thing #2196 exists to record, and it is worth recording next to
|
|
324
324
|
* a *scraped* reply just as much as next to a Markdown one.
|
|
325
325
|
*
|
|
326
|
+
* A turn whose `task_started` fell outside the window is written too, behind
|
|
327
|
+
* `CODEX_TURN_HEAD_TRUNCATION_MARKER` and beside a
|
|
328
|
+
* `codex-transcript-turn-headless` report (Issue #2402). See `./transcript`'s
|
|
329
|
+
* module docblock for why codex may do that where `../claude/history` may not,
|
|
330
|
+
* and `docs/design/codex-transcript-reader.md` §4.5 for why the prompts that
|
|
331
|
+
* went out of the window with it are left unadopted rather than guessed at.
|
|
332
|
+
*
|
|
326
333
|
* Never throws.
|
|
327
334
|
*
|
|
328
335
|
* @param target - The instance whose turn just ended
|
|
@@ -411,11 +418,17 @@ async function captureCodexTranscriptTurn(target, capture = {}) {
|
|
|
411
418
|
const previousStartedAt = index === 0 ? pending.previousStartedAt : pending.turns[index - 1].startedAt;
|
|
412
419
|
userRows.push(await recordCodexUserTurns(target, pending.turns[index], previousStartedAt));
|
|
413
420
|
}
|
|
421
|
+
const windowFacts = {
|
|
422
|
+
path,
|
|
423
|
+
firstRecordAt: firstCodexRecordAt(parsed.records),
|
|
424
|
+
turnlessRecords: built.turnlessRecords,
|
|
425
|
+
malformedLines: parsed.malformedLines,
|
|
426
|
+
};
|
|
414
427
|
const lastRecordAt = lastCodexRecordAt(parsed.records);
|
|
415
428
|
let captured = false;
|
|
416
429
|
for (let index = 0; index < pending.turns.length; index += 1) {
|
|
417
430
|
const turn = pending.turns[index];
|
|
418
|
-
captured = await writeCodexTurn(target, turn, (0, transcript_1.renderCodexTurn)(turn), resolveAssistantTimestampMs(turn, userRows[index], lastRecordAt.get(turn.turnId) ?? 0, nextTurnOpensAt(pending.turns, userRows, index)),
|
|
431
|
+
captured = await writeCodexTurn(target, turn, (0, transcript_1.renderCodexTurn)(turn), resolveAssistantTimestampMs(turn, userRows[index], lastRecordAt.get(turn.turnId) ?? 0, nextTurnOpensAt(pending.turns, userRows, index)), windowFacts);
|
|
419
432
|
}
|
|
420
433
|
return captured;
|
|
421
434
|
}
|
|
@@ -448,6 +461,21 @@ async function resolveCodexTranscriptPath(target, capture = {}) {
|
|
|
448
461
|
return null;
|
|
449
462
|
}
|
|
450
463
|
}
|
|
464
|
+
/**
|
|
465
|
+
* When the window's first timestamped record was written (Issue #2402).
|
|
466
|
+
*
|
|
467
|
+
* The floor on "everything this read could possibly have seen". For a headless
|
|
468
|
+
* turn it is also the only honest thing to say about where the missing head
|
|
469
|
+
* ends: the turn began before this instant, and by how much is not in the file
|
|
470
|
+
* this read opened.
|
|
471
|
+
*/
|
|
472
|
+
function firstCodexRecordAt(records) {
|
|
473
|
+
for (const record of records) {
|
|
474
|
+
if (record.timestampMs !== null)
|
|
475
|
+
return record.timestampMs;
|
|
476
|
+
}
|
|
477
|
+
return null;
|
|
478
|
+
}
|
|
451
479
|
/**
|
|
452
480
|
* The turns {@link captureCodexTranscriptTurn} still has to write (Issue #2246).
|
|
453
481
|
*
|
|
@@ -642,7 +670,7 @@ function nextTurnOpensAt(turns, userRows, index) {
|
|
|
642
670
|
*
|
|
643
671
|
* @returns Whether History holds this turn as the agent's own Markdown
|
|
644
672
|
*/
|
|
645
|
-
async function writeCodexTurn(target, turn, rendered, timestampMs,
|
|
673
|
+
async function writeCodexTurn(target, turn, rendered, timestampMs, windowFacts) {
|
|
646
674
|
const instanceId = target.instanceId ?? target.cliToolId;
|
|
647
675
|
if (!turn.closed) {
|
|
648
676
|
// codex has not written the `task_complete` for this `turn_id` yet, so what
|
|
@@ -706,6 +734,38 @@ async function writeCodexTurn(target, turn, rendered, timestampMs, path) {
|
|
|
706
734
|
});
|
|
707
735
|
return true;
|
|
708
736
|
}
|
|
737
|
+
if (rendered.headless) {
|
|
738
|
+
// Issue #2402. The turn's `task_started` is outside the window, so this row
|
|
739
|
+
// carries `CODEX_TURN_HEAD_TRUNCATION_MARKER` and the operator can see that
|
|
740
|
+
// — but the operator cannot see WHY, and neither can anyone reading the logs
|
|
741
|
+
// afterwards. Everything below is measured: where the window opens, what it
|
|
742
|
+
// held that no turn claimed, and how many of the turn's prompts were inside
|
|
743
|
+
// it. How much fell out is deliberately NOT here. It is not knowable from a
|
|
744
|
+
// read that never saw those bytes, and a guess would be worse than silence.
|
|
745
|
+
//
|
|
746
|
+
// `promptsInWindow` is the one to read when a prompt is missing from the
|
|
747
|
+
// conversation: codex folds a prompt submitted mid-turn into that same turn
|
|
748
|
+
// (23 of 326 archived turns carry more than one), so a headless turn's
|
|
749
|
+
// earlier prompts can be outside the window too — and unlike the body, those
|
|
750
|
+
// are NOT recoverable. `recordCodexUserTurns` only ever sees `turn.prompts`,
|
|
751
|
+
// which is what the window held; a `/send` row for a prompt written before
|
|
752
|
+
// the window stays unkeyed. Adopting it would mean guessing which unkeyed
|
|
753
|
+
// row belongs to this turn with no text to match on — see
|
|
754
|
+
// `docs/design/codex-transcript-reader.md` §4.5.
|
|
755
|
+
logger.info('codex-transcript-turn-headless', {
|
|
756
|
+
worktreeId: target.worktreeId,
|
|
757
|
+
instanceId,
|
|
758
|
+
sessionId: rendered.sessionId,
|
|
759
|
+
turnId: rendered.turnId,
|
|
760
|
+
path: windowFacts.path,
|
|
761
|
+
windowBytes: exports.CODEX_TRANSCRIPT_TAIL_BYTES,
|
|
762
|
+
windowFirstRecordAt: windowFacts.firstRecordAt,
|
|
763
|
+
turnlessRecords: windowFacts.turnlessRecords,
|
|
764
|
+
malformedLines: windowFacts.malformedLines,
|
|
765
|
+
promptsInWindow: turn.prompts.length,
|
|
766
|
+
itemsInWindow: turn.items.length,
|
|
767
|
+
});
|
|
768
|
+
}
|
|
709
769
|
const message = createMessage(db, {
|
|
710
770
|
worktreeId: target.worktreeId,
|
|
711
771
|
role: 'assistant',
|
|
@@ -722,7 +782,7 @@ async function writeCodexTurn(target, turn, rendered, timestampMs, path) {
|
|
|
722
782
|
instanceId,
|
|
723
783
|
sessionId: rendered.sessionId,
|
|
724
784
|
requestId,
|
|
725
|
-
path,
|
|
785
|
+
path: windowFacts.path,
|
|
726
786
|
bodyLength: rendered.body.length,
|
|
727
787
|
textBlocks: rendered.textBlocks,
|
|
728
788
|
toolBlocks: rendered.toolBlocks,
|
|
@@ -53,6 +53,34 @@
|
|
|
53
53
|
* boundary is a field, and a turn is closed by the `task_complete` that carries
|
|
54
54
|
* its id — measured on 326 of 326 archived turns.
|
|
55
55
|
*
|
|
56
|
+
* ## A turn can begin outside the window (Issue #2402)
|
|
57
|
+
*
|
|
58
|
+
* `./history` reads the rollout's last `CODEX_TRANSCRIPT_TAIL_BYTES` and nothing
|
|
59
|
+
* more, because the largest rollout on this machine was 273 MB. A long turn
|
|
60
|
+
* outgrows that window: measured on 2026-09-07 on a 30 MB / 7,408-line rollout
|
|
61
|
+
* whose newest turn ran seven hours over 387 items and four compactions, so its
|
|
62
|
+
* `task_started` and its first two prompts sat outside the 4 MiB tail while its
|
|
63
|
+
* later items sat inside it.
|
|
64
|
+
*
|
|
65
|
+
* The `turn_id` stamp is what makes that recoverable. Because it is on **every**
|
|
66
|
+
* `item_completed` and not only on `task_started`, a window that opens in the
|
|
67
|
+
* middle of a turn still reads the turn's real id — so the turn can be rendered
|
|
68
|
+
* AND written under the key a later read will recognise. What is lost is the
|
|
69
|
+
* head of the body, and {@link CodexTurnAccumulator.started} is how that becomes
|
|
70
|
+
* a fact the writer can state: it is the opening mark, exactly as `closed` is
|
|
71
|
+
* the closing one, and a turn with `started: false` is rendered behind
|
|
72
|
+
* {@link CODEX_TURN_HEAD_TRUNCATION_MARKER}.
|
|
73
|
+
*
|
|
74
|
+
* **This is where codex and claude diverge, and the divergence is deliberate.**
|
|
75
|
+
* `../claude/history`'s `collectHeadlessClaudeTurn` renders the same situation
|
|
76
|
+
* and refuses to write it, because claude's transcript carries no link from a
|
|
77
|
+
* reply to the prompt it answers: a turn whose prompt record is outside the
|
|
78
|
+
* window has no key at all, so writing it would mean inventing one, and an
|
|
79
|
+
* invented key is a row no later run can recognise as already written. codex is
|
|
80
|
+
* not under that constraint — the key is a field on the records that ARE in the
|
|
81
|
+
* window — so the argument that stops claude does not reach here. Copying
|
|
82
|
+
* claude's refusal would drop a body codex handed over for free.
|
|
83
|
+
*
|
|
56
84
|
* ## Pure on purpose
|
|
57
85
|
*
|
|
58
86
|
* No filesystem, no database, no `globalThis` — `./history` owns all three, the
|
|
@@ -63,7 +91,7 @@
|
|
|
63
91
|
* @module lib/hooks/sources/codex/transcript
|
|
64
92
|
*/
|
|
65
93
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
66
|
-
exports.CODEX_THINKING_LABEL = exports.MAX_CODEX_TOOL_DETAIL_LENGTH = exports.MAX_CODEX_TURN_ITEMS = exports.CODEX_TURN_TRUNCATION_MARKER = exports.MAX_CODEX_TURN_BODY_LENGTH = exports.CODEX_ROLLOUT_EXTENSION = exports.CODEX_SESSIONS_DIR_SEGMENTS = void 0;
|
|
94
|
+
exports.CODEX_THINKING_LABEL = exports.MAX_CODEX_TOOL_DETAIL_LENGTH = exports.MAX_CODEX_TURN_ITEMS = exports.CODEX_TURN_HEAD_TRUNCATION_MARKER = exports.CODEX_TURN_TRUNCATION_MARKER = exports.MAX_CODEX_TURN_BODY_LENGTH = exports.CODEX_ROLLOUT_EXTENSION = exports.CODEX_SESSIONS_DIR_SEGMENTS = void 0;
|
|
67
95
|
exports.readCodexRolloutItem = readCodexRolloutItem;
|
|
68
96
|
exports.readCodexRolloutRecord = readCodexRolloutRecord;
|
|
69
97
|
exports.parseCodexRollout = parseCodexRollout;
|
|
@@ -79,6 +107,17 @@ exports.CODEX_ROLLOUT_EXTENSION = '.jsonl';
|
|
|
79
107
|
exports.MAX_CODEX_TURN_BODY_LENGTH = 200_000;
|
|
80
108
|
/** Appended when {@link MAX_CODEX_TURN_BODY_LENGTH} truncates a turn. */
|
|
81
109
|
exports.CODEX_TURN_TRUNCATION_MARKER = '\n\n_(truncated)_';
|
|
110
|
+
/**
|
|
111
|
+
* Prepended when a turn's opening records fell outside the window (#2402).
|
|
112
|
+
*
|
|
113
|
+
* The mirror of {@link CODEX_TURN_TRUNCATION_MARKER} — same italic parenthetical
|
|
114
|
+
* in the same plain Markdown, on the other end of the body — because the two say
|
|
115
|
+
* the same thing about the same row and a reader who has learned to read one
|
|
116
|
+
* should not have to learn a second notation for the other. Written into
|
|
117
|
+
* `chat_messages.content` at read time like every other string these readers
|
|
118
|
+
* emit, so it is English and outlives any later locale change.
|
|
119
|
+
*/
|
|
120
|
+
exports.CODEX_TURN_HEAD_TRUNCATION_MARKER = '_(head truncated)_\n\n';
|
|
82
121
|
/**
|
|
83
122
|
* Cap on items kept for one turn.
|
|
84
123
|
*
|
|
@@ -322,11 +361,19 @@ function buildCodexTurns(records, sessionId) {
|
|
|
322
361
|
startedAt: record.timestampMs ?? 0,
|
|
323
362
|
prompts: [],
|
|
324
363
|
items: [],
|
|
364
|
+
started: false,
|
|
325
365
|
closed: false,
|
|
326
366
|
overflowed: false,
|
|
327
367
|
};
|
|
328
368
|
turns.set(turnId, turn);
|
|
329
369
|
}
|
|
370
|
+
if (record.payloadType === 'task_started') {
|
|
371
|
+
// The opening mark (Issue #2402). Recorded rather than assumed from "this
|
|
372
|
+
// is the first record we saw for the id", which is true of every turn in
|
|
373
|
+
// the window — including the one whose real first record is outside it.
|
|
374
|
+
turn.started = true;
|
|
375
|
+
continue;
|
|
376
|
+
}
|
|
330
377
|
if (record.payloadType === 'task_complete') {
|
|
331
378
|
turn.closed = true;
|
|
332
379
|
continue;
|
|
@@ -432,6 +479,10 @@ function renderCodexTurn(turn) {
|
|
|
432
479
|
unknown.add(item.type);
|
|
433
480
|
}
|
|
434
481
|
let body = (0, turn_body_1.separateTurnBody)(rendered).body;
|
|
482
|
+
// The head mark goes on before the length bound, so a headless turn long
|
|
483
|
+
// enough to be truncated at both ends still says so at both ends.
|
|
484
|
+
if (!turn.started && body.length > 0)
|
|
485
|
+
body = exports.CODEX_TURN_HEAD_TRUNCATION_MARKER + body;
|
|
435
486
|
if (body.length > exports.MAX_CODEX_TURN_BODY_LENGTH) {
|
|
436
487
|
body =
|
|
437
488
|
body.slice(0, exports.MAX_CODEX_TURN_BODY_LENGTH - exports.CODEX_TURN_TRUNCATION_MARKER.length) +
|
|
@@ -441,6 +492,7 @@ function renderCodexTurn(turn) {
|
|
|
441
492
|
sessionId: turn.sessionId,
|
|
442
493
|
turnId: turn.turnId,
|
|
443
494
|
body,
|
|
495
|
+
headless: !turn.started,
|
|
444
496
|
textBlocks,
|
|
445
497
|
toolBlocks,
|
|
446
498
|
unknownBlockTypes: [...unknown],
|