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
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.incompleteResult = incompleteResult;
|
|
5
5
|
exports.buildPromptExtractionResult = buildPromptExtractionResult;
|
|
6
|
+
exports.detectPromptOnCleanFrame = detectPromptOnCleanFrame;
|
|
6
7
|
exports.detectPromptWithOptions = detectPromptWithOptions;
|
|
7
8
|
exports.extractResponse = extractResponse;
|
|
8
9
|
exports.checkForResponse = checkForResponse;
|
|
@@ -29,6 +30,7 @@ const prompt_dedup_1 = require("./prompt-dedup");
|
|
|
29
30
|
const prompt_dedup_state_1 = require("./prompt-dedup-state");
|
|
30
31
|
const response_dedup_1 = require("./response-dedup");
|
|
31
32
|
const structured_history_gate_1 = require("./structured-history-gate");
|
|
33
|
+
const relay_triggers_1 = require("../../lib/relay/relay-triggers");
|
|
32
34
|
// Issue #2317 Phase D: while a human holds the pane's geometry, the frame is
|
|
33
35
|
// their terminal (44 rows), not the 1000-row canvas every rule below was
|
|
34
36
|
// measured against. See the block in `checkForResponse` for what that changes.
|
|
@@ -181,17 +183,25 @@ function buildPromptExtractionResult(lines, lastCapturedLine, totalLines, buffer
|
|
|
181
183
|
};
|
|
182
184
|
}
|
|
183
185
|
/**
|
|
184
|
-
*
|
|
186
|
+
* The one reading of a frame that every consumer of it shares, for a capture
|
|
187
|
+
* that has ALREADY been through `stripBoxDrawing(stripAnsi(…))`.
|
|
185
188
|
*
|
|
186
|
-
*
|
|
187
|
-
*
|
|
189
|
+
* Split out of {@link detectPromptWithOptions} by Issue #2368 so the Auto-Yes
|
|
190
|
+
* poller can reach it. That poller cleans its own capture once per tick
|
|
191
|
+
* (`captureAndCleanOutput`) and reuses the cleaned string and its line split for
|
|
192
|
+
* the stop-condition delta, the dialog gate and the thinking check, so handing
|
|
193
|
+
* it back through `detectPromptWithOptions` would clean it a SECOND time — and
|
|
194
|
+
* `stripBoxDrawing` is not idempotent (it removes one leading `│` per pass, so a
|
|
195
|
+
* doubly-bordered row loses a second character on the second pass). Taking the
|
|
196
|
+
* already-clean frame here is what keeps the two callers reading identical text.
|
|
188
197
|
*
|
|
189
|
-
* @param
|
|
198
|
+
* @param cleanOutput - tmux output with ANSI **and** box drawing already removed
|
|
190
199
|
* @param cliToolId - CLI tool identifier for building detection options
|
|
200
|
+
* @param precomputedLines - `cleanOutput.split('\n')` when the caller already has it
|
|
201
|
+
* (Issue #499 Item 4); must be the split of THIS string, not of the raw capture
|
|
191
202
|
* @returns PromptDetectionResult with isPrompt, promptData, and cleanContent
|
|
192
203
|
*/
|
|
193
|
-
function
|
|
194
|
-
const clean = (0, cli_patterns_1.stripBoxDrawing)((0, cli_patterns_1.stripAnsi)(output));
|
|
204
|
+
function detectPromptOnCleanFrame(cleanOutput, cliToolId, precomputedLines) {
|
|
195
205
|
// Issue #2364: agy's `↑/↓ Navigate` dialogs are read by agy's own reader
|
|
196
206
|
// before the generic pass, on the same spelling `tools/antigravity/detect.ts`
|
|
197
207
|
// reads them on. The generic multiple-choice parser takes one row per option
|
|
@@ -201,13 +211,32 @@ function detectPromptWithOptions(output, cliToolId) {
|
|
|
201
211
|
// preview joined into it. One reader for both producers is what makes the
|
|
202
212
|
// stored `prompt` row, the push notification's excerpt and `/current-output`
|
|
203
213
|
// agree about one screen.
|
|
214
|
+
//
|
|
215
|
+
// Issue #2368: and the Auto-Yes poller, which was the one consumer #2364 left
|
|
216
|
+
// on the generic pass. agy's Bash approvals wrap their option labels with no
|
|
217
|
+
// indentation, `isContinuationLine` refuses those rows, and the frame came
|
|
218
|
+
// back `isPrompt: false` — so Auto-Yes sent nothing at all while the status
|
|
219
|
+
// API published the very same screen as an answerable four-option prompt.
|
|
204
220
|
if (cliToolId === 'antigravity') {
|
|
205
|
-
const dialog = (0, dialog_1.detectAntigravityNumberedDialogPrompt)(
|
|
221
|
+
const dialog = (0, dialog_1.detectAntigravityNumberedDialogPrompt)(cleanOutput);
|
|
206
222
|
if (dialog !== null)
|
|
207
223
|
return dialog;
|
|
208
224
|
}
|
|
209
225
|
const promptOptions = (0, cli_patterns_1.buildDetectPromptOptions)(cliToolId);
|
|
210
|
-
return (0, prompt_detector_1.detectPrompt)(
|
|
226
|
+
return (0, prompt_detector_1.detectPrompt)(cleanOutput, precomputedLines ? { ...promptOptions, precomputedLines } : promptOptions);
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Internal helper: detect prompt with CLI-tool-specific options.
|
|
230
|
+
*
|
|
231
|
+
* Centralizes the stripAnsi() + buildDetectPromptOptions() + detectPrompt() pipeline
|
|
232
|
+
* to avoid repeating this 3-step sequence across extractResponse() and checkForResponse().
|
|
233
|
+
*
|
|
234
|
+
* @param output - Raw or pre-stripped tmux output
|
|
235
|
+
* @param cliToolId - CLI tool identifier for building detection options
|
|
236
|
+
* @returns PromptDetectionResult with isPrompt, promptData, and cleanContent
|
|
237
|
+
*/
|
|
238
|
+
function detectPromptWithOptions(output, cliToolId) {
|
|
239
|
+
return detectPromptOnCleanFrame((0, cli_patterns_1.stripBoxDrawing)((0, cli_patterns_1.stripAnsi)(output)), cliToolId);
|
|
211
240
|
}
|
|
212
241
|
// ============================================================================
|
|
213
242
|
// extractResponse (internal)
|
|
@@ -274,15 +303,26 @@ function extractResponse(output, lastCapturedLine, cliToolId, captureWindowLines
|
|
|
274
303
|
// that placeholder is drawn with the same `❯ <text>` shape as a transcript
|
|
275
304
|
// echo, so without the boundary `findRecentUserPromptIndex` anchors the turn
|
|
276
305
|
// on the FOOTER and every reply extracts as empty (#1289's defect, verbatim).
|
|
306
|
+
//
|
|
307
|
+
// Issue #2400: codex is the fifth, and the one that had been missing. It pins
|
|
308
|
+
// the same two rows — `› Ask Codex to do anything` and the `model · cwd`
|
|
309
|
+
// status bar — and without a boundary the saturated-window anchor (#1670)
|
|
310
|
+
// walked into them: the newest `›` in the pane was the COMPOSER, so extraction
|
|
311
|
+
// started on the status bar and every reply on a saturated pane was saved as
|
|
312
|
+
// that one row. `findCodexChromeStart` reads the composer by its SGR
|
|
313
|
+
// attributes (#2310) rather than by its placeholder wording, which is what the
|
|
314
|
+
// previous guard did and why it stopped working at codex 0.15x.
|
|
277
315
|
const chromeStart = cliToolId === 'claude'
|
|
278
316
|
? (0, cli_patterns_1.findClaudeChromeStart)(lines)
|
|
279
317
|
: cliToolId === 'copilot'
|
|
280
318
|
? (0, cli_patterns_1.findCopilotChromeStart)(lines)
|
|
281
319
|
: cliToolId === 'command-code'
|
|
282
320
|
? (0, cli_patterns_1.findCommandCodeChromeStart)(lines)
|
|
283
|
-
:
|
|
284
|
-
? (0, cli_patterns_1.
|
|
285
|
-
:
|
|
321
|
+
: cliToolId === 'codex'
|
|
322
|
+
? (0, cli_patterns_1.findCodexChromeStart)(lines)
|
|
323
|
+
: openCodeCleanLines
|
|
324
|
+
? (0, cli_patterns_1.findOpenCodeChromeStart)(openCodeCleanLines)
|
|
325
|
+
: -1;
|
|
286
326
|
const contentEnd = chromeStart >= 0 ? chromeStart : totalLines;
|
|
287
327
|
const BUFFER_RESET_TOLERANCE = 25;
|
|
288
328
|
const bufferShrank = totalLines > 0 && lastCapturedLine > BUFFER_RESET_TOLERANCE && (totalLines + BUFFER_RESET_TOLERANCE) < lastCapturedLine;
|
|
@@ -304,7 +344,22 @@ function extractResponse(output, lastCapturedLine, cliToolId, captureWindowLines
|
|
|
304
344
|
const findRecentUserPromptIndex = (windowSize = 60) => {
|
|
305
345
|
let userPromptPattern;
|
|
306
346
|
if (cliToolId === 'codex') {
|
|
307
|
-
|
|
347
|
+
// Issue #2400: codex's three uses of `›` are separated by their SGR
|
|
348
|
+
// attributes, not by their text (#2310). This branch used to exclude the
|
|
349
|
+
// composer with a negative lookahead over its placeholder strings
|
|
350
|
+
// (`Implement`, `Find and fix`, `Type`, `Summarize`) — codex 0.1x wording,
|
|
351
|
+
// none of which 0.15x draws. `Ask Codex to do anything` passed the guard,
|
|
352
|
+
// became the newest "echo", and on a saturated pane (#1670) — the only
|
|
353
|
+
// path where this anchor decides where extraction STARTS — every reply was
|
|
354
|
+
// saved as the single status-bar row below it.
|
|
355
|
+
//
|
|
356
|
+
// Two independent things now keep the composer out, and the reader needs
|
|
357
|
+
// both because neither covers the other's frames: `contentEnd` cuts the
|
|
358
|
+
// composer off structurally when `findCodexChromeStart` located it, and
|
|
359
|
+
// when it did not, `findCodexUserEchoIndex` steps over the bottom-most
|
|
360
|
+
// `›` row instead. The second is what still answers on an ANSI-stripped
|
|
361
|
+
// capture, where none of #2310's attributes survive to be read.
|
|
362
|
+
return (0, cli_patterns_1.findCodexUserEchoIndex)(lines, contentEnd, windowSize, chromeStart >= 0);
|
|
308
363
|
}
|
|
309
364
|
else if (openCodeCleanLines) {
|
|
310
365
|
// Issue #1911: anchor on the newest ECHOED USER PROMPT, not on the
|
|
@@ -424,9 +479,20 @@ function extractResponse(output, lastCapturedLine, cliToolId, captureWindowLines
|
|
|
424
479
|
if (isPromptBasedComplete || isClaudeComplete || isCommandCodeComplete || isOpenCodeDone) {
|
|
425
480
|
const responseLines = [];
|
|
426
481
|
const startIndex = (0, response_extractor_1.resolveExtractionStartIndex)(lastCapturedLine, totalLines, bufferReset, cliToolId, findRecentUserPromptIndex, captureWindowSaturated);
|
|
427
|
-
let endIndex = totalLines;
|
|
428
482
|
// `contentEnd` bounds the content only; `endIndex` keeps reporting the full
|
|
429
483
|
// buffer so lineCount bookkeeping in session_states is unchanged (#1289).
|
|
484
|
+
//
|
|
485
|
+
// Issue #2400: codex is the exception, and it is the pre-existing behaviour
|
|
486
|
+
// rather than a new rule. Before this Issue the loop below stopped on the
|
|
487
|
+
// composer's `›` and wrote that row's index into `endIndex`; now the composer
|
|
488
|
+
// is outside `contentEnd`, so the break can no longer fire on it and
|
|
489
|
+
// `endIndex` would silently advance ~3 rows further. Those rows matter for
|
|
490
|
+
// codex specifically: it renders INLINE, and it repaints the composer band in
|
|
491
|
+
// place — the next turn's transcript is printed over exactly the rows the
|
|
492
|
+
// composer occupied in this capture. A cursor parked past them would skip
|
|
493
|
+
// real content on the following poll. So the cursor stops where the content
|
|
494
|
+
// stops, which is what it did before.
|
|
495
|
+
let endIndex = cliToolId === 'codex' ? contentEnd : totalLines;
|
|
430
496
|
for (let i = startIndex; i < contentEnd; i++) {
|
|
431
497
|
const line = lines[i];
|
|
432
498
|
const cleanLine = (0, cli_patterns_1.stripAnsi)(line);
|
|
@@ -669,6 +735,26 @@ function extractResponse(output, lastCapturedLine, cliToolId, captureWindowLines
|
|
|
669
735
|
// ============================================================================
|
|
670
736
|
// checkForResponse (exported for response-poller-core.ts)
|
|
671
737
|
// ============================================================================
|
|
738
|
+
/**
|
|
739
|
+
* Record what the structured writers said about this turn, for the ticks that
|
|
740
|
+
* will not get to ask (Issue #2399).
|
|
741
|
+
*
|
|
742
|
+
* One line either way, but named because the two calls are a pair and the
|
|
743
|
+
* failure mode of writing only one of them is silent: mark without settle and
|
|
744
|
+
* the reader is re-asked forever after a turn it already recorded; settle
|
|
745
|
+
* without mark and the fix does not exist.
|
|
746
|
+
*
|
|
747
|
+
* @param pollerKey - Poller key ("worktreeId:instanceId")
|
|
748
|
+
* @param recorded - Whether a structured writer owns this turn
|
|
749
|
+
*/
|
|
750
|
+
function markOrSettleStructuredHistoryRecheck(pollerKey, recorded) {
|
|
751
|
+
if (recorded) {
|
|
752
|
+
(0, response_dedup_1.settleStructuredHistoryRecheck)(pollerKey);
|
|
753
|
+
}
|
|
754
|
+
else {
|
|
755
|
+
(0, response_dedup_1.markStructuredHistoryRecheckPending)(pollerKey);
|
|
756
|
+
}
|
|
757
|
+
}
|
|
672
758
|
/**
|
|
673
759
|
* Check for CLI tool response once
|
|
674
760
|
*
|
|
@@ -965,6 +1051,66 @@ async function checkForResponse(worktreeId, cliToolId, instanceId) {
|
|
|
965
1051
|
// are found by one grep.
|
|
966
1052
|
logger.info('duplicate-response-skipped', { worktreeId, cliToolId, instanceId: resolvedInstanceId });
|
|
967
1053
|
(0, db_1.updateSessionState)(db, worktreeId, cliToolId, result.lineCount, resolvedInstanceId);
|
|
1054
|
+
// Issue #2399: the skip above is about the SCREEN, and until this Issue
|
|
1055
|
+
// it also ended the tick for the TRANSCRIPT READER 100 lines below —
|
|
1056
|
+
// which is the one consumer for whom "the frame has not changed" is not
|
|
1057
|
+
// evidence of anything. A pull-mode agent closes its turn in its own
|
|
1058
|
+
// file AFTER the pane has gone quiet, so the reader's single ask (on the
|
|
1059
|
+
// poll that saved the scrape) is systematically too early, and every
|
|
1060
|
+
// later poll returned here. Measured on codex 2026-09-07: one
|
|
1061
|
+
// `codex-transcript-turn-open`, `task_complete` appended 1.8 s later,
|
|
1062
|
+
// and then `duplicate-response-skipped` every 2 s until
|
|
1063
|
+
// `MAX_POLLING_DURATION` ran out. The Markdown row was never written and
|
|
1064
|
+
// the only thing left in History was the scrape — for a saturated pane,
|
|
1065
|
+
// a single footer line.
|
|
1066
|
+
//
|
|
1067
|
+
// So the reader is re-asked from inside the skip, throttled by
|
|
1068
|
+
// `claimStructuredHistoryRecheck` (once on the first duplicate tick,
|
|
1069
|
+
// then every third — see `./response-dedup`). Deliberately the reader
|
|
1070
|
+
// and nothing else: the scrape stays suppressed, the cursor has already
|
|
1071
|
+
// been advanced above, and none of the bookkeeping the guard skips has a
|
|
1072
|
+
// second producer to be asked about.
|
|
1073
|
+
//
|
|
1074
|
+
// Order over the alternative in the Issue (hoist the reader above the
|
|
1075
|
+
// guard): the reader is a WRITE, and hoisting it would run that write on
|
|
1076
|
+
// every one of the 900 ticks of a 30-minute cycle instead of on the ones
|
|
1077
|
+
// that are owed an answer — the same argument the #2317 Phase D comment
|
|
1078
|
+
// below makes for not letting the delegation test short-circuit it.
|
|
1079
|
+
//
|
|
1080
|
+
// What this does NOT do is retract the scraped row the earlier tick
|
|
1081
|
+
// saved. Three reasons, and the first is decisive: nothing here can
|
|
1082
|
+
// identify that row. The hash this guard matched is per pollerKey, not
|
|
1083
|
+
// per turn — it survives the `resume` of a chain paused on a prompt —
|
|
1084
|
+
// so the row it stands for may belong to an earlier turn entirely, and
|
|
1085
|
+
// a scraped row carries no turn key to join on. Second, `archived` in
|
|
1086
|
+
// this schema is the tombstone of an operator clearing History (#168),
|
|
1087
|
+
// written by `archiveMessages` for a whole worktree; reusing it for
|
|
1088
|
+
// "superseded" would make a clear and a handover indistinguishable in
|
|
1089
|
+
// the table. Third, the scrape is not always junk — when a turn is
|
|
1090
|
+
// interrupted the pane holds text the transcript's closed turn does not
|
|
1091
|
+
// — and a duplicated row is visible and recoverable where a deleted one
|
|
1092
|
+
// is neither. Two rows for one turn is the failure this trades for, and
|
|
1093
|
+
// #2401 has already stopped the junk one being picked as a relay's
|
|
1094
|
+
// answer.
|
|
1095
|
+
if ((0, response_dedup_1.claimStructuredHistoryRecheck)(pollerKey)) {
|
|
1096
|
+
const recaptured = await (0, structured_history_gate_1.captureStructuredHistoryTurn)(worktreeId, cliToolId, instanceId, {
|
|
1097
|
+
worktreePath: worktree.path,
|
|
1098
|
+
transcriptPathHint: claudeMetadata?.logFilePath ?? null,
|
|
1099
|
+
});
|
|
1100
|
+
if (recaptured) {
|
|
1101
|
+
(0, response_dedup_1.settleStructuredHistoryRecheck)(pollerKey);
|
|
1102
|
+
logger.info('structured-history-recheck-captured', {
|
|
1103
|
+
worktreeId,
|
|
1104
|
+
cliToolId,
|
|
1105
|
+
instanceId: resolvedInstanceId,
|
|
1106
|
+
});
|
|
1107
|
+
// The turn IS now in History, as the agent's own Markdown, so this
|
|
1108
|
+
// tick recorded something and says so. Inert for the poller either
|
|
1109
|
+
// way: `runPollTick` only reads this value after a stop the tick
|
|
1110
|
+
// raised itself, and this branch raises none.
|
|
1111
|
+
return true;
|
|
1112
|
+
}
|
|
1113
|
+
}
|
|
968
1114
|
return false;
|
|
969
1115
|
}
|
|
970
1116
|
}
|
|
@@ -991,6 +1137,13 @@ async function checkForResponse(worktreeId, cliToolId, instanceId) {
|
|
|
991
1137
|
worktreePath: worktree.path,
|
|
992
1138
|
transcriptPathHint: claudeMetadata?.logFilePath ?? null,
|
|
993
1139
|
}));
|
|
1140
|
+
// Issue #2399: remember which way that went, because the next tick may not
|
|
1141
|
+
// get here. A `false` is the reader saying "not yet, or not mine", and the
|
|
1142
|
+
// dedup guard above turns every following poll of the same static frame into
|
|
1143
|
+
// a return — so unless the fact is written down now, the ask never happens
|
|
1144
|
+
// again. A `true` settles it: the turn is recorded and there is nothing left
|
|
1145
|
+
// to re-ask about.
|
|
1146
|
+
markOrSettleStructuredHistoryRecheck((0, response_poller_core_1.getPollerKey)(worktreeId, cliToolId, instanceId), structuredHistoryLive);
|
|
994
1147
|
// Issue #2317 Phase D: the scrape is dropped while the geometry is
|
|
995
1148
|
// delegated, and the transcript capture above is what makes that safe.
|
|
996
1149
|
//
|
|
@@ -1046,6 +1199,14 @@ async function checkForResponse(worktreeId, cliToolId, instanceId) {
|
|
|
1046
1199
|
});
|
|
1047
1200
|
// Broadcast message to WebSocket clients
|
|
1048
1201
|
(0, ws_server_1.broadcastMessage)('message', { worktreeId, message });
|
|
1202
|
+
// Issue #2377: the scrape path's completion edge. `settled: false` is the
|
|
1203
|
+
// whole difference from the gate's own announcement: this row was read off
|
|
1204
|
+
// a SCREEN whose completion was judged by string analysis, so a relay
|
|
1205
|
+
// waiting on this session re-reads after a few seconds of quiet before it
|
|
1206
|
+
// delivers — the Issue's 「完了検知 + 数秒の静穏」 for the three tools that
|
|
1207
|
+
// keep no transcript. Announced here rather than after the `if` because
|
|
1208
|
+
// the suppressed branch means the gate already announced it, settled.
|
|
1209
|
+
(0, relay_triggers_1.onRelayTurnCompleted)(worktreeId, cliToolId, resolvedInstanceId, false);
|
|
1049
1210
|
}
|
|
1050
1211
|
else {
|
|
1051
1212
|
logger.info('structured-history-scrape-suppressed', {
|
|
@@ -17,14 +17,69 @@
|
|
|
17
17
|
* during THIS turn?" and deliberately does NOT persist across turns: an
|
|
18
18
|
* identical response in a later turn is a real response and must be saved.
|
|
19
19
|
* Suppressing it would reproduce the very bug this module fixes.
|
|
20
|
+
*
|
|
21
|
+
* ## The second cache: what the dedup skip owes the transcript reader (#2399)
|
|
22
|
+
*
|
|
23
|
+
* The guard above answers a question about the SCREEN, and `response-checker`
|
|
24
|
+
* used to read its answer as a question about the TURN — a duplicate frame ended
|
|
25
|
+
* the tick before `captureStructuredHistoryTurn` was reached, so for a pull-mode
|
|
26
|
+
* tool (claude, codex, antigravity, command-code) the transcript reader was
|
|
27
|
+
* asked exactly once per turn: on the poll that saved the scrape. For a reader
|
|
28
|
+
* the premise is backwards. "The screen stopped changing" is precisely the
|
|
29
|
+
* moment BEFORE the agent's own file closes the turn, so the one ask lands too
|
|
30
|
+
* early, answers false, and the 900 ticks that follow — 30 minutes of
|
|
31
|
+
* `MAX_POLLING_DURATION` at 2 s each — all return at the guard. Measured on
|
|
32
|
+
* codex 2026-09-07: `codex-transcript-turn-open` once, then
|
|
33
|
+
* `duplicate-response-skipped` until the poller's budget ran out, with the
|
|
34
|
+
* rollout's `task_complete` appended 1.8 s after the single ask.
|
|
35
|
+
*
|
|
36
|
+
* So the dedup verdict now carries a caveat, and it lives here rather than in
|
|
37
|
+
* `response-checker` for one reason: its lifetime is the response hash's
|
|
38
|
+
* lifetime exactly. `stopPolling`, the `resume` that keeps a paused chain's
|
|
39
|
+
* hash, and the worktree rename all have to treat the two the same, and the
|
|
40
|
+
* only way to guarantee that without touching `response-poller-core` (which
|
|
41
|
+
* owns those three calls) is for one function to clear both.
|
|
20
42
|
*/
|
|
21
43
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
exports.STRUCTURED_HISTORY_RECHECK_TICK_INTERVAL = void 0;
|
|
22
45
|
exports.isDuplicateResponse = isDuplicateResponse;
|
|
46
|
+
exports.markStructuredHistoryRecheckPending = markStructuredHistoryRecheckPending;
|
|
47
|
+
exports.settleStructuredHistoryRecheck = settleStructuredHistoryRecheck;
|
|
48
|
+
exports.claimStructuredHistoryRecheck = claimStructuredHistoryRecheck;
|
|
23
49
|
exports.clearResponseHashCache = clearResponseHashCache;
|
|
24
50
|
exports.renameResponseHashCacheKey = renameResponseHashCacheKey;
|
|
25
51
|
const crypto_1 = require("crypto");
|
|
26
52
|
const responseHashCache = globalThis.__responseHashCache ??
|
|
27
53
|
(globalThis.__responseHashCache = new Map());
|
|
54
|
+
/**
|
|
55
|
+
* In-memory cache: pollerKey -> ticks still to wait before the transcript reader
|
|
56
|
+
* is asked again (Issue #2399). Absence means nothing is owed.
|
|
57
|
+
*
|
|
58
|
+
* On `globalThis` for the same reason `responseHashCache` is, and populated and
|
|
59
|
+
* cleared at exactly the same moments — see the module comment.
|
|
60
|
+
*/
|
|
61
|
+
const structuredHistoryRecheckCache = globalThis.__structuredHistoryRecheckCache ??
|
|
62
|
+
(globalThis.__structuredHistoryRecheckCache = new Map());
|
|
63
|
+
/**
|
|
64
|
+
* How many duplicate ticks separate two asks of the transcript reader (#2399).
|
|
65
|
+
*
|
|
66
|
+
* The reader's work is a tail read of the agent's transcript — 4 MiB for codex
|
|
67
|
+
* — parsed and rendered, so asking on all 900 ticks of a 30-minute cycle is not
|
|
68
|
+
* free even though the poller has nothing else to do with them. Three is chosen
|
|
69
|
+
* against the two numbers that bracket it:
|
|
70
|
+
*
|
|
71
|
+
* - the FIRST duplicate tick always asks (the countdown starts at zero), so in
|
|
72
|
+
* the ordinary case — the turn closed between the scrape and the next poll —
|
|
73
|
+
* the Markdown row lands ~2 s later and the throttle never applies at all;
|
|
74
|
+
* - a turn that closes late is then re-asked every ~6 s, which is inside the
|
|
75
|
+
* window where a missing reply is still an operator's "it hasn't shown up
|
|
76
|
+
* yet" rather than a lost turn.
|
|
77
|
+
*
|
|
78
|
+
* The cost this bounds is only ever paid while a turn is BOTH finished on screen
|
|
79
|
+
* and still open in the transcript; the moment either the reader writes the row
|
|
80
|
+
* or the cycle ends, the entry is gone.
|
|
81
|
+
*/
|
|
82
|
+
exports.STRUCTURED_HISTORY_RECHECK_TICK_INTERVAL = 3;
|
|
28
83
|
/**
|
|
29
84
|
* Check whether the given response content was already saved during the current
|
|
30
85
|
* polling cycle for the same pollerKey. If it is new, updates the cache.
|
|
@@ -41,15 +96,88 @@ function isDuplicateResponse(pollerKey, content) {
|
|
|
41
96
|
responseHashCache.set(pollerKey, hash);
|
|
42
97
|
return false;
|
|
43
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Note that the transcript reader has unfinished business for this pollerKey
|
|
101
|
+
* (Issue #2399).
|
|
102
|
+
*
|
|
103
|
+
* Called by `response-checker` on every poll that gets PAST the guard above and
|
|
104
|
+
* finds neither structured writer willing to own the turn — i.e. the push
|
|
105
|
+
* subscription is not live and the pull reader answered false. That false is the
|
|
106
|
+
* one the poller used to treat as final, and this records that it was not.
|
|
107
|
+
*
|
|
108
|
+
* Idempotent, and deliberately does not restart the countdown: a turn that has
|
|
109
|
+
* been waiting five ticks for its transcript to close must not be pushed back to
|
|
110
|
+
* the end of the queue by a sixth poll that learned nothing new.
|
|
111
|
+
*
|
|
112
|
+
* The tool is not consulted. `captureStructuredHistoryTurn` answers "does this
|
|
113
|
+
* tool keep a transcript at all?" in a map lookup and returns false for gemini,
|
|
114
|
+
* copilot and opencode without touching a file, so an entry for one of them
|
|
115
|
+
* costs a lookup every third tick and duplicating the gate's own dispatch here
|
|
116
|
+
* would cost a second place for it to go stale.
|
|
117
|
+
*
|
|
118
|
+
* @param pollerKey - Poller key ("worktreeId:instanceId")
|
|
119
|
+
*/
|
|
120
|
+
function markStructuredHistoryRecheckPending(pollerKey) {
|
|
121
|
+
if (!structuredHistoryRecheckCache.has(pollerKey)) {
|
|
122
|
+
structuredHistoryRecheckCache.set(pollerKey, 0);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Forget the outstanding recheck for this pollerKey (Issue #2399).
|
|
127
|
+
*
|
|
128
|
+
* Called when the question has an answer: the reader wrote the row, or a push
|
|
129
|
+
* subscription turned out to own the turn after all. Nothing is owed and the
|
|
130
|
+
* next duplicate tick returns at the guard exactly as it did before this Issue.
|
|
131
|
+
*
|
|
132
|
+
* @param pollerKey - Poller key ("worktreeId:instanceId")
|
|
133
|
+
*/
|
|
134
|
+
function settleStructuredHistoryRecheck(pollerKey) {
|
|
135
|
+
structuredHistoryRecheckCache.delete(pollerKey);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Take this tick's turn at asking the transcript reader again (Issue #2399).
|
|
139
|
+
*
|
|
140
|
+
* A claim rather than a query, because the throttle has to be spent exactly once
|
|
141
|
+
* per tick and the caller is the only thing that knows a tick happened: this
|
|
142
|
+
* both answers "ask now?" and advances the countdown, so two calls in one tick
|
|
143
|
+
* would ask twice as often rather than twice.
|
|
144
|
+
*
|
|
145
|
+
* False when nothing is owed for this key ({@link markStructuredHistoryRecheckPending}
|
|
146
|
+
* was never called, or {@link settleStructuredHistoryRecheck} has since run) and
|
|
147
|
+
* false on the ticks the throttle swallows. True on the first duplicate tick
|
|
148
|
+
* after a pending mark, and every
|
|
149
|
+
* {@link STRUCTURED_HISTORY_RECHECK_TICK_INTERVAL} ticks after that.
|
|
150
|
+
*
|
|
151
|
+
* @param pollerKey - Poller key ("worktreeId:instanceId")
|
|
152
|
+
* @returns true when the caller should ask the reader on this tick
|
|
153
|
+
*/
|
|
154
|
+
function claimStructuredHistoryRecheck(pollerKey) {
|
|
155
|
+
const ticksToWait = structuredHistoryRecheckCache.get(pollerKey);
|
|
156
|
+
if (ticksToWait === undefined)
|
|
157
|
+
return false;
|
|
158
|
+
if (ticksToWait > 0) {
|
|
159
|
+
structuredHistoryRecheckCache.set(pollerKey, ticksToWait - 1);
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
structuredHistoryRecheckCache.set(pollerKey, exports.STRUCTURED_HISTORY_RECHECK_TICK_INTERVAL - 1);
|
|
163
|
+
return true;
|
|
164
|
+
}
|
|
44
165
|
/**
|
|
45
166
|
* Clear the response hash cache for a specific pollerKey.
|
|
46
167
|
* Called during session cleanup / stopPolling, so each new user turn starts
|
|
47
168
|
* with a clean slate.
|
|
48
169
|
*
|
|
170
|
+
* Issue #2399: the outstanding recheck goes with it. The caveat is a note about
|
|
171
|
+
* one particular cached hash — "the screen behind it was static before the
|
|
172
|
+
* transcript closed" — so it can outlive neither the hash nor the cycle, and
|
|
173
|
+
* carrying it into a new turn would spend reads asking about a turn that is
|
|
174
|
+
* over.
|
|
175
|
+
*
|
|
49
176
|
* @param pollerKey - Poller key ("worktreeId:instanceId")
|
|
50
177
|
*/
|
|
51
178
|
function clearResponseHashCache(pollerKey) {
|
|
52
179
|
responseHashCache.delete(pollerKey);
|
|
180
|
+
structuredHistoryRecheckCache.delete(pollerKey);
|
|
53
181
|
}
|
|
54
182
|
/**
|
|
55
183
|
* Move the cached hash from one pollerKey to another.
|
|
@@ -71,4 +199,12 @@ function renameResponseHashCacheKey(oldKey, newKey) {
|
|
|
71
199
|
responseHashCache.delete(oldKey);
|
|
72
200
|
if (hash !== undefined)
|
|
73
201
|
responseHashCache.set(newKey, hash);
|
|
202
|
+
// Issue #2399: the recheck caveat moves with the hash it is about. Leaving it
|
|
203
|
+
// behind would strand a turn whose transcript is still open — the new key
|
|
204
|
+
// starts owing nothing, so every later tick returns at the dedup guard and the
|
|
205
|
+
// Markdown row is never written.
|
|
206
|
+
const ticksToWait = structuredHistoryRecheckCache.get(oldKey);
|
|
207
|
+
structuredHistoryRecheckCache.delete(oldKey);
|
|
208
|
+
if (ticksToWait !== undefined)
|
|
209
|
+
structuredHistoryRecheckCache.set(newKey, ticksToWait);
|
|
74
210
|
}
|
|
@@ -81,6 +81,7 @@ const tool_id_2 = require("../../lib/hooks/sources/codex/tool-id");
|
|
|
81
81
|
const tool_id_3 = require("../../lib/hooks/sources/antigravity/tool-id");
|
|
82
82
|
const tool_id_4 = require("../../lib/hooks/sources/command-code/tool-id");
|
|
83
83
|
const registry_1 = require("../../lib/hooks/sources/registry");
|
|
84
|
+
const relay_triggers_1 = require("../../lib/relay/relay-triggers");
|
|
84
85
|
const logger = (0, logger_1.createLogger)('lib/polling/structured-history-gate');
|
|
85
86
|
/**
|
|
86
87
|
* One in-flight capture per instance (Issue #2246).
|
|
@@ -286,7 +287,19 @@ async function captureStructuredHistoryTurn(worktreeId, cliToolId, instanceId, c
|
|
|
286
287
|
const resolvedInstanceId = instanceId ?? cliToolId;
|
|
287
288
|
return serializePerInstance(captureKeyOf(worktreeId, cliToolId, resolvedInstanceId), async () => {
|
|
288
289
|
try {
|
|
289
|
-
|
|
290
|
+
const captured = await reader.capture({ worktreeId, cliToolId, instanceId: resolvedInstanceId }, capture);
|
|
291
|
+
// Issue #2377: the moment a relay is waiting for. This is the single
|
|
292
|
+
// point BOTH triggers of a pull capture pass through — the poller's save
|
|
293
|
+
// path and the Stop hook receiver — which is why the relay needs one
|
|
294
|
+
// hook here and not one in each of them. The turn is closed by the
|
|
295
|
+
// agent's own account, so the delivery needs no quiet window.
|
|
296
|
+
//
|
|
297
|
+
// Announced only when the capture actually wrote something: a `false`
|
|
298
|
+
// means the scraper is still the writer for this turn, and the poller's
|
|
299
|
+
// own call below will announce it.
|
|
300
|
+
if (captured)
|
|
301
|
+
(0, relay_triggers_1.onRelayTurnCompleted)(worktreeId, cliToolId, resolvedInstanceId, true);
|
|
302
|
+
return captured;
|
|
290
303
|
}
|
|
291
304
|
catch (error) {
|
|
292
305
|
logger.warn('structured-history-capture-unavailable', {
|
|
@@ -65,6 +65,10 @@ function snapshotFingerprint(payload) {
|
|
|
65
65
|
payload.isPromptWaiting ?? false,
|
|
66
66
|
payload.isSelectionListActive ?? false,
|
|
67
67
|
payload.isPagerActive ?? false,
|
|
68
|
+
// Issue #2369: in the fingerprint for the same reason `sessionStatus` is —
|
|
69
|
+
// a redraw whose only change is "the /usage panel closed" has to reach the
|
|
70
|
+
// client, or the Esc card outlives the panel it dismisses.
|
|
71
|
+
payload.isDismissablePanelActive ?? false,
|
|
68
72
|
payload.isUnclassifiedActive ?? false,
|
|
69
73
|
]);
|
|
70
74
|
}
|
|
@@ -94,6 +98,7 @@ function emitTerminalSnapshot(worktreeId, cliToolId, payload, instanceId) {
|
|
|
94
98
|
promptData: payload.promptData ?? null,
|
|
95
99
|
isSelectionListActive: payload.isSelectionListActive ?? false,
|
|
96
100
|
isPagerActive: payload.isPagerActive ?? false,
|
|
101
|
+
isDismissablePanelActive: payload.isDismissablePanelActive ?? false,
|
|
97
102
|
isUnclassifiedActive: payload.isUnclassifiedActive ?? false,
|
|
98
103
|
version: nextVersion(key),
|
|
99
104
|
});
|
|
@@ -38,6 +38,7 @@ exports.startWaitingStatusBroadcast = startWaitingStatusBroadcast;
|
|
|
38
38
|
exports.stopWaitingStatusBroadcast = stopWaitingStatusBroadcast;
|
|
39
39
|
exports.isWaitingStatusBroadcastActive = isWaitingStatusBroadcastActive;
|
|
40
40
|
const model_change_broadcast_1 = require("../../lib/realtime/model-change-broadcast");
|
|
41
|
+
const relay_triggers_1 = require("../../lib/relay/relay-triggers");
|
|
41
42
|
const waiting_episode_state_1 = require("../../lib/session/waiting-episode-state");
|
|
42
43
|
/**
|
|
43
44
|
* Translate a waiting crossing into the frame clients receive.
|
|
@@ -83,6 +84,14 @@ function startWaitingStatusBroadcast(publish) {
|
|
|
83
84
|
});
|
|
84
85
|
globalThis.__waitingStatusBroadcastUnsubscribe = unsubscribe;
|
|
85
86
|
(0, model_change_broadcast_1.startModelChangeBroadcast)(publish);
|
|
87
|
+
// Issue #2377: and the relay subsystem, for the third time and the same
|
|
88
|
+
// reason. Its two background jobs — "tell the requester their worker stopped
|
|
89
|
+
// on a dialog" and "expire deadlines / retry deliveries a busy composer
|
|
90
|
+
// refused" — are the server's lifetime, not a request's, and this is the one
|
|
91
|
+
// function `setupWebSocket` calls to say the server is up. Unlike the two
|
|
92
|
+
// above it needs no publisher: a relay's delivery is a message written through
|
|
93
|
+
// `sendUserMessage`, which broadcasts its own row.
|
|
94
|
+
(0, relay_triggers_1.startRelayTriggers)();
|
|
86
95
|
return unsubscribe;
|
|
87
96
|
}
|
|
88
97
|
/**
|
|
@@ -91,6 +100,8 @@ function startWaitingStatusBroadcast(publish) {
|
|
|
91
100
|
* does not leave a listener pointed at a dead room map.
|
|
92
101
|
*
|
|
93
102
|
* Issue #2357: drops the model edge's subscription with it, for the same reason.
|
|
103
|
+
* Issue #2377: and the relay triggers, whose interval would otherwise keep
|
|
104
|
+
* ticking against a database the suite has closed.
|
|
94
105
|
*/
|
|
95
106
|
function stopWaitingStatusBroadcast() {
|
|
96
107
|
const existing = globalThis.__waitingStatusBroadcastUnsubscribe;
|
|
@@ -99,6 +110,7 @@ function stopWaitingStatusBroadcast() {
|
|
|
99
110
|
globalThis.__waitingStatusBroadcastUnsubscribe = undefined;
|
|
100
111
|
}
|
|
101
112
|
(0, model_change_broadcast_1.stopModelChangeBroadcast)();
|
|
113
|
+
(0, relay_triggers_1.stopRelayTriggers)();
|
|
102
114
|
}
|
|
103
115
|
/** Whether a subscription is currently active. Test seam. */
|
|
104
116
|
function isWaitingStatusBroadcastActive() {
|