commandmate 0.31.2 → 0.32.0
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 +454 -440
- package/.next/app-path-routes-manifest.json +31 -29
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +12 -12
- 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 +2 -2
- package/.next/server/app/api/push/escalation/route.js.nft.json +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 +2 -2
- package/.next/server/app/api/push/vapid/route.js.nft.json +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_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_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 +31 -29
- package/.next/server/chunks/1191.js +1 -1
- 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 +8 -0
- 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/6661.js +1 -0
- 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/8800.js +1 -1
- 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 +2 -2
- package/.next/server/chunks/9584.js +1 -1
- package/.next/server/chunks/9627.js +22 -6
- 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/UIUPchtWvcEuQgcbGJv4g/_buildManifest.js +1 -0
- package/.next/static/chunks/{5694.dda65070757534df.js → 3313.53f7ff985c0c8852.js} +1 -1
- package/.next/static/chunks/4718-0053d42fb635e700.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-06e1ff5ce2d126fd.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/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 +103 -7
- 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 +196 -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 +109 -0
- package/dist/cli/commands/whoami.d.ts.map +1 -0
- package/dist/cli/commands/whoami.js +271 -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/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/lib/detection/tools/verified-against.d.ts +24 -24
- package/dist/lib/detection/tools/verified-against.js +24 -24
- package/dist/server/locales/en/worktree.json +1425 -0
- package/dist/server/locales/ja/worktree.json +1425 -0
- package/dist/server/src/lib/auto-yes-poller.js +26 -11
- package/dist/server/src/lib/db/chat-db.js +204 -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 +157 -23
- package/dist/server/src/lib/detection/model-info-extractor.js +185 -4
- 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/detect.js +105 -25
- package/dist/server/src/lib/detection/tools/antigravity/dialog.js +239 -0
- package/dist/server/src/lib/detection/tools/command-code/detect.js +33 -0
- package/dist/server/src/lib/detection/tools/verified-against.js +24 -24
- package/dist/server/src/lib/history/user-turn-recorder.js +79 -16
- package/dist/server/src/lib/hooks/hook-settings-generator.js +16 -0
- package/dist/server/src/lib/hooks/sources/claude/model-switch.js +169 -0
- package/dist/server/src/lib/hooks/sources/claude/source.js +14 -1
- package/dist/server/src/lib/polling/response-checker.js +55 -2
- package/dist/server/src/lib/polling/structured-history-gate.js +14 -1
- package/dist/server/src/lib/push/index.js +13 -1
- package/dist/server/src/lib/push/model-change-push-notifier.js +174 -0
- package/dist/server/src/lib/push/push-sender.js +48 -20
- package/dist/server/src/lib/realtime/model-change-broadcast.js +171 -0
- package/dist/server/src/lib/realtime/terminal-broadcast.js +5 -0
- package/dist/server/src/lib/realtime/types.js +19 -1
- package/dist/server/src/lib/realtime/waiting-broadcast.js +25 -0
- package/dist/server/src/lib/relay/relay-delivery.js +400 -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/agent-event-state.js +344 -12
- 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/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/6894.js +0 -8
- package/.next/server/chunks/7187.js +0 -1
- package/.next/server/chunks/7472.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/server/chunks/9798.js +0 -2
- package/.next/static/GiOqe8rfQGQ0NvzB5qr3q/_buildManifest.js +0 -1
- package/.next/static/chunks/1783-11c9b4d8a52ebd91.js +0 -1
- package/.next/static/chunks/4718-0d4d93c4c75f336e.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-7a0915e32a2af4d3.js +0 -1
- package/.next/static/chunks/webpack-9f75198882fdaf08.js +0 -1
- package/.next/static/css/5c13ea243dfdcb66.css +0 -1
- /package/.next/static/{GiOqe8rfQGQ0NvzB5qr3q → UIUPchtWvcEuQgcbGJv4g}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The relay ledger's CRUD (Issue #2377, table from migration v60).
|
|
4
|
+
*
|
|
5
|
+
* Every state change a relay can undergo is a statement in this file, and each
|
|
6
|
+
* one that must happen at most once is written as a GUARDED update that reports
|
|
7
|
+
* whether it won. That is not a style choice: the turn's end is judged by two
|
|
8
|
+
* independent producers (the Stop hook and the poller) and the delivery pump can
|
|
9
|
+
* be re-entered by a timer while a first pass is still awaiting a send, so
|
|
10
|
+
* "read, decide, write" would deliver some replies twice. `better-sqlite3` is
|
|
11
|
+
* synchronous, so a single `UPDATE … WHERE <precondition>` plus `changes === 1`
|
|
12
|
+
* is a compare-and-set with no window in it.
|
|
13
|
+
*
|
|
14
|
+
* Shapes come from `@/lib/relay/types`, which knows nothing about SQL — the
|
|
15
|
+
* browser hook reads the same interfaces.
|
|
16
|
+
*
|
|
17
|
+
* @module lib/db/relay-db
|
|
18
|
+
*/
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.createRelay = createRelay;
|
|
21
|
+
exports.getRelayById = getRelayById;
|
|
22
|
+
exports.listOpenRelaysTo = listOpenRelaysTo;
|
|
23
|
+
exports.listOpenRelaysFrom = listOpenRelaysFrom;
|
|
24
|
+
exports.getSessionRelaySummary = getSessionRelaySummary;
|
|
25
|
+
exports.listOpenRelaysForWorktree = listOpenRelaysForWorktree;
|
|
26
|
+
exports.countOpenRelaysBetween = countOpenRelaysBetween;
|
|
27
|
+
exports.stashRelayPayload = stashRelayPayload;
|
|
28
|
+
exports.listRelaysWithPendingPayload = listRelaysWithPendingPayload;
|
|
29
|
+
exports.clearRelayPending = clearRelayPending;
|
|
30
|
+
exports.markRelayDelivered = markRelayDelivered;
|
|
31
|
+
exports.markRelayPromptNotified = markRelayPromptNotified;
|
|
32
|
+
exports.getRelayPromptSignature = getRelayPromptSignature;
|
|
33
|
+
exports.markRelayExpired = markRelayExpired;
|
|
34
|
+
exports.listExpiredOpenRelays = listExpiredOpenRelays;
|
|
35
|
+
exports.cancelRelay = cancelRelay;
|
|
36
|
+
exports.countRelays = countRelays;
|
|
37
|
+
const crypto_1 = require("crypto");
|
|
38
|
+
const types_1 = require("../../lib/relay/types");
|
|
39
|
+
const logger_1 = require("../../lib/logger");
|
|
40
|
+
const logger = (0, logger_1.createLogger)('relay-db');
|
|
41
|
+
/** Every column, in one place, so the readers cannot drift from each other. */
|
|
42
|
+
const RELAY_COLUMNS = `
|
|
43
|
+
id, from_worktree_id, from_instance_id, to_worktree_id, to_instance_id,
|
|
44
|
+
state, hops, sent_request_id, pending_kind, pending_body, prompt_signature,
|
|
45
|
+
created_at, updated_at, expires_at, delivered_at
|
|
46
|
+
`;
|
|
47
|
+
function mapRelay(row) {
|
|
48
|
+
return {
|
|
49
|
+
id: row.id,
|
|
50
|
+
from: { worktreeId: row.from_worktree_id, instanceId: row.from_instance_id },
|
|
51
|
+
to: { worktreeId: row.to_worktree_id, instanceId: row.to_instance_id },
|
|
52
|
+
state: row.state,
|
|
53
|
+
hops: row.hops,
|
|
54
|
+
sentRequestId: row.sent_request_id,
|
|
55
|
+
pendingKind: row.pending_kind ?? null,
|
|
56
|
+
createdAt: row.created_at,
|
|
57
|
+
updatedAt: row.updated_at,
|
|
58
|
+
expiresAt: row.expires_at,
|
|
59
|
+
deliveredAt: row.delivered_at,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/** Insert a new `pending` relay and hand it back. */
|
|
63
|
+
function createRelay(db, input) {
|
|
64
|
+
const id = (0, crypto_1.randomUUID)();
|
|
65
|
+
const now = input.now ?? Date.now();
|
|
66
|
+
db.prepare(`
|
|
67
|
+
INSERT INTO session_relays
|
|
68
|
+
(id, from_worktree_id, from_instance_id, to_worktree_id, to_instance_id,
|
|
69
|
+
state, hops, sent_request_id, pending_kind, pending_body, prompt_signature,
|
|
70
|
+
created_at, updated_at, expires_at, delivered_at)
|
|
71
|
+
VALUES (?, ?, ?, ?, ?, 'pending', ?, NULL, NULL, NULL, NULL, ?, ?, ?, NULL)
|
|
72
|
+
`).run(id, input.from.worktreeId, input.from.instanceId, input.to.worktreeId, input.to.instanceId, input.hops, now, now, input.expiresAt);
|
|
73
|
+
return {
|
|
74
|
+
id,
|
|
75
|
+
from: { ...input.from },
|
|
76
|
+
to: { ...input.to },
|
|
77
|
+
state: 'pending',
|
|
78
|
+
hops: input.hops,
|
|
79
|
+
sentRequestId: null,
|
|
80
|
+
pendingKind: null,
|
|
81
|
+
createdAt: now,
|
|
82
|
+
updatedAt: now,
|
|
83
|
+
expiresAt: input.expiresAt,
|
|
84
|
+
deliveredAt: null,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/** One relay by id, or null. */
|
|
88
|
+
function getRelayById(db, id) {
|
|
89
|
+
const row = db
|
|
90
|
+
.prepare(`SELECT ${RELAY_COLUMNS} FROM session_relays WHERE id = ?`)
|
|
91
|
+
.get(id);
|
|
92
|
+
return row ? mapRelay(row) : null;
|
|
93
|
+
}
|
|
94
|
+
/** Placeholders for an `IN (…)` over the open states. */
|
|
95
|
+
const OPEN_STATE_PLACEHOLDERS = types_1.OPEN_RELAY_STATES.map(() => '?').join(', ');
|
|
96
|
+
/** Every still-open relay this session must answer (it is the `to` end). */
|
|
97
|
+
function listOpenRelaysTo(db, endpoint) {
|
|
98
|
+
const rows = db
|
|
99
|
+
.prepare(`
|
|
100
|
+
SELECT ${RELAY_COLUMNS} FROM session_relays
|
|
101
|
+
WHERE to_worktree_id = ? AND to_instance_id = ?
|
|
102
|
+
AND state IN (${OPEN_STATE_PLACEHOLDERS})
|
|
103
|
+
ORDER BY created_at ASC
|
|
104
|
+
`)
|
|
105
|
+
.all(endpoint.worktreeId, endpoint.instanceId, ...types_1.OPEN_RELAY_STATES);
|
|
106
|
+
return rows.map(mapRelay);
|
|
107
|
+
}
|
|
108
|
+
/** Every still-open relay this session is waiting on (it is the `from` end). */
|
|
109
|
+
function listOpenRelaysFrom(db, endpoint) {
|
|
110
|
+
const rows = db
|
|
111
|
+
.prepare(`
|
|
112
|
+
SELECT ${RELAY_COLUMNS} FROM session_relays
|
|
113
|
+
WHERE from_worktree_id = ? AND from_instance_id = ?
|
|
114
|
+
AND state IN (${OPEN_STATE_PLACEHOLDERS})
|
|
115
|
+
ORDER BY created_at ASC
|
|
116
|
+
`)
|
|
117
|
+
.all(endpoint.worktreeId, endpoint.instanceId, ...types_1.OPEN_RELAY_STATES);
|
|
118
|
+
return rows.map(mapRelay);
|
|
119
|
+
}
|
|
120
|
+
/** Both halves of {@link SessionRelaySummary} in one call. */
|
|
121
|
+
function getSessionRelaySummary(db, endpoint) {
|
|
122
|
+
return {
|
|
123
|
+
owed: listOpenRelaysTo(db, endpoint),
|
|
124
|
+
awaiting: listOpenRelaysFrom(db, endpoint),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/** Every open relay in a worktree, whichever end it belongs to. */
|
|
128
|
+
function listOpenRelaysForWorktree(db, worktreeId) {
|
|
129
|
+
const rows = db
|
|
130
|
+
.prepare(`
|
|
131
|
+
SELECT ${RELAY_COLUMNS} FROM session_relays
|
|
132
|
+
WHERE (from_worktree_id = ? OR to_worktree_id = ?)
|
|
133
|
+
AND state IN (${OPEN_STATE_PLACEHOLDERS})
|
|
134
|
+
ORDER BY created_at ASC
|
|
135
|
+
`)
|
|
136
|
+
.all(worktreeId, worktreeId, ...types_1.OPEN_RELAY_STATES);
|
|
137
|
+
return rows.map(mapRelay);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* How many open relays already run from `from` to `to`.
|
|
141
|
+
*
|
|
142
|
+
* The Issue's "a from→to pair must not sit at two pending relays at once": a
|
|
143
|
+
* second standing instruction to the same session says nothing the first one
|
|
144
|
+
* does not, and both would fire on the same finished turn.
|
|
145
|
+
*/
|
|
146
|
+
function countOpenRelaysBetween(db, from, to) {
|
|
147
|
+
const row = db
|
|
148
|
+
.prepare(`
|
|
149
|
+
SELECT COUNT(*) AS n FROM session_relays
|
|
150
|
+
WHERE from_worktree_id = ? AND from_instance_id = ?
|
|
151
|
+
AND to_worktree_id = ? AND to_instance_id = ?
|
|
152
|
+
AND state IN (${OPEN_STATE_PLACEHOLDERS})
|
|
153
|
+
`)
|
|
154
|
+
.get(from.worktreeId, from.instanceId, to.worktreeId, to.instanceId, ...types_1.OPEN_RELAY_STATES);
|
|
155
|
+
return row.n;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Record a payload that has been decided and not yet delivered.
|
|
159
|
+
*
|
|
160
|
+
* Guarded on `pending_kind IS NULL`, which is what makes two producers finding
|
|
161
|
+
* the same finished turn cost ONE delivery: the second one loses the race and
|
|
162
|
+
* returns false rather than queueing a duplicate. The guard is released by
|
|
163
|
+
* {@link clearRelayPending} once the payload has actually gone out, so the same
|
|
164
|
+
* relay can carry a prompt notice now and a reply later.
|
|
165
|
+
*
|
|
166
|
+
* @returns Whether this call is the one that stashed it
|
|
167
|
+
*/
|
|
168
|
+
function stashRelayPayload(db, id, kind, body, now = Date.now()) {
|
|
169
|
+
const result = db
|
|
170
|
+
.prepare(`
|
|
171
|
+
UPDATE session_relays
|
|
172
|
+
SET pending_kind = ?, pending_body = ?, updated_at = ?
|
|
173
|
+
WHERE id = ? AND pending_kind IS NULL
|
|
174
|
+
AND state IN (${OPEN_STATE_PLACEHOLDERS})
|
|
175
|
+
`)
|
|
176
|
+
.run(kind, body, now, id, ...types_1.OPEN_RELAY_STATES);
|
|
177
|
+
return result.changes === 1;
|
|
178
|
+
}
|
|
179
|
+
/** Every relay carrying an undelivered payload, oldest first. */
|
|
180
|
+
function listRelaysWithPendingPayload(db) {
|
|
181
|
+
const rows = db
|
|
182
|
+
.prepare(`
|
|
183
|
+
SELECT ${RELAY_COLUMNS} FROM session_relays
|
|
184
|
+
WHERE pending_kind IS NOT NULL
|
|
185
|
+
ORDER BY updated_at ASC
|
|
186
|
+
`)
|
|
187
|
+
.all();
|
|
188
|
+
return rows
|
|
189
|
+
.filter((row) => row.pending_body !== null && row.pending_kind !== null)
|
|
190
|
+
.map((row) => ({
|
|
191
|
+
relay: mapRelay(row),
|
|
192
|
+
kind: row.pending_kind,
|
|
193
|
+
body: row.pending_body,
|
|
194
|
+
}));
|
|
195
|
+
}
|
|
196
|
+
/** Drop an undelivered payload (it went out, or it was superseded). */
|
|
197
|
+
function clearRelayPending(db, id, now = Date.now()) {
|
|
198
|
+
db.prepare(`
|
|
199
|
+
UPDATE session_relays
|
|
200
|
+
SET pending_kind = NULL, pending_body = NULL, updated_at = ?
|
|
201
|
+
WHERE id = ?
|
|
202
|
+
`).run(now, id);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Close the relay as delivered, exactly once.
|
|
206
|
+
*
|
|
207
|
+
* Two clauses, and they guard different things — worth separating, because a
|
|
208
|
+
* later reader who notices that the second is redundant *for one relay id* will
|
|
209
|
+
* otherwise delete the one that is not.
|
|
210
|
+
*
|
|
211
|
+
* - `state IN (open)` is what makes a SECOND call for the same relay answer
|
|
212
|
+
* false: the first call left it `delivered`, which is not an open state.
|
|
213
|
+
* - `sent_request_id IS NULL`, together with the column's UNIQUE index, is what
|
|
214
|
+
* makes the delivery id itself unrepeatable ACROSS relays and across
|
|
215
|
+
* processes. It is the idempotency key the Issue names, and it is why this
|
|
216
|
+
* function catches: the index refusing a write is the answer "somebody else
|
|
217
|
+
* got there first", and that answer must not arrive as an exception inside a
|
|
218
|
+
* delivery path.
|
|
219
|
+
*
|
|
220
|
+
* @returns Whether this call is the one that closed it
|
|
221
|
+
*/
|
|
222
|
+
function markRelayDelivered(db, id, sentRequestId, now = Date.now()) {
|
|
223
|
+
try {
|
|
224
|
+
const result = db
|
|
225
|
+
.prepare(`
|
|
226
|
+
UPDATE session_relays
|
|
227
|
+
SET state = 'delivered', sent_request_id = ?, delivered_at = ?,
|
|
228
|
+
pending_kind = NULL, pending_body = NULL, updated_at = ?
|
|
229
|
+
WHERE id = ? AND sent_request_id IS NULL
|
|
230
|
+
AND state IN (${OPEN_STATE_PLACEHOLDERS})
|
|
231
|
+
`)
|
|
232
|
+
.run(sentRequestId, now, now, id, ...types_1.OPEN_RELAY_STATES);
|
|
233
|
+
return result.changes === 1;
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
// The UNIQUE index refusing the write IS the answer "somebody else got
|
|
237
|
+
// there first", and it must not become an exception in a delivery path.
|
|
238
|
+
logger.warn('relay-deliver-conflict', {
|
|
239
|
+
relayId: id,
|
|
240
|
+
error: error instanceof Error ? error.message : String(error),
|
|
241
|
+
});
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Note that A is being told B is waiting on a confirmation.
|
|
247
|
+
*
|
|
248
|
+
* Leaves the relay OPEN — `prompt` is an open state, so answering the dialog
|
|
249
|
+
* lets B finish and the reply is stashed and delivered from here — and leaves
|
|
250
|
+
* any stashed payload alone: this records the DECISION to notify, while
|
|
251
|
+
* `clearRelayPending` records that the notice went out. `prompt_signature` is
|
|
252
|
+
* what stops a twenty-minute wait from producing a notice on every poll.
|
|
253
|
+
*/
|
|
254
|
+
function markRelayPromptNotified(db, id, signature, now = Date.now()) {
|
|
255
|
+
db.prepare(`
|
|
256
|
+
UPDATE session_relays
|
|
257
|
+
SET state = 'prompt', prompt_signature = ?, updated_at = ?
|
|
258
|
+
WHERE id = ?
|
|
259
|
+
`).run(signature, now, id);
|
|
260
|
+
}
|
|
261
|
+
/** The confirmation notice already sent for this relay, or null. */
|
|
262
|
+
function getRelayPromptSignature(db, id) {
|
|
263
|
+
const row = db
|
|
264
|
+
.prepare('SELECT prompt_signature FROM session_relays WHERE id = ?')
|
|
265
|
+
.get(id);
|
|
266
|
+
return row?.prompt_signature ?? null;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Close the relay as expired, exactly once.
|
|
270
|
+
*
|
|
271
|
+
* The once-ness is the point: the Issue asks for ONE line of notice, and the
|
|
272
|
+
* state transition is what the notice is written from.
|
|
273
|
+
*
|
|
274
|
+
* @returns Whether this call is the one that expired it
|
|
275
|
+
*/
|
|
276
|
+
function markRelayExpired(db, id, now = Date.now()) {
|
|
277
|
+
const result = db
|
|
278
|
+
.prepare(`
|
|
279
|
+
UPDATE session_relays
|
|
280
|
+
SET state = 'expired', updated_at = ?
|
|
281
|
+
WHERE id = ? AND state IN (${OPEN_STATE_PLACEHOLDERS})
|
|
282
|
+
`)
|
|
283
|
+
.run(now, id, ...types_1.OPEN_RELAY_STATES);
|
|
284
|
+
return result.changes === 1;
|
|
285
|
+
}
|
|
286
|
+
/** Every open relay whose deadline has passed. */
|
|
287
|
+
function listExpiredOpenRelays(db, now = Date.now()) {
|
|
288
|
+
const rows = db
|
|
289
|
+
.prepare(`
|
|
290
|
+
SELECT ${RELAY_COLUMNS} FROM session_relays
|
|
291
|
+
WHERE state IN (${OPEN_STATE_PLACEHOLDERS}) AND expires_at <= ?
|
|
292
|
+
ORDER BY expires_at ASC
|
|
293
|
+
`)
|
|
294
|
+
.all(...types_1.OPEN_RELAY_STATES, now);
|
|
295
|
+
return rows.map(mapRelay);
|
|
296
|
+
}
|
|
297
|
+
/** Withdraw a relay. Returns false when it was already closed or absent. */
|
|
298
|
+
function cancelRelay(db, id, now = Date.now()) {
|
|
299
|
+
const result = db
|
|
300
|
+
.prepare(`
|
|
301
|
+
UPDATE session_relays
|
|
302
|
+
SET state = 'cancelled', pending_kind = NULL, pending_body = NULL, updated_at = ?
|
|
303
|
+
WHERE id = ? AND state IN (${OPEN_STATE_PLACEHOLDERS})
|
|
304
|
+
`)
|
|
305
|
+
.run(now, id, ...types_1.OPEN_RELAY_STATES);
|
|
306
|
+
return result.changes === 1;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Count relays per state.
|
|
310
|
+
*
|
|
311
|
+
* The shape `commandmate task show` and `report metrics` print. Counting in SQL
|
|
312
|
+
* rather than reading rows because a long-lived server accumulates thousands
|
|
313
|
+
* and both callers want five integers.
|
|
314
|
+
*/
|
|
315
|
+
function countRelays(db, filter = {}) {
|
|
316
|
+
const clauses = [];
|
|
317
|
+
const params = [];
|
|
318
|
+
if (filter.worktreeId) {
|
|
319
|
+
if (filter.instanceId) {
|
|
320
|
+
clauses.push('((from_worktree_id = ? AND from_instance_id = ?) OR (to_worktree_id = ? AND to_instance_id = ?))');
|
|
321
|
+
params.push(filter.worktreeId, filter.instanceId, filter.worktreeId, filter.instanceId);
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
clauses.push('(from_worktree_id = ? OR to_worktree_id = ?)');
|
|
325
|
+
params.push(filter.worktreeId, filter.worktreeId);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
if (filter.since !== undefined) {
|
|
329
|
+
clauses.push('created_at >= ?');
|
|
330
|
+
params.push(filter.since);
|
|
331
|
+
}
|
|
332
|
+
const where = clauses.length > 0 ? `WHERE ${clauses.join(' AND ')}` : '';
|
|
333
|
+
const rows = db
|
|
334
|
+
.prepare(`SELECT state, COUNT(*) AS n FROM session_relays ${where} GROUP BY state`)
|
|
335
|
+
.all(...params);
|
|
336
|
+
const counts = (0, types_1.emptyRelayCounts)();
|
|
337
|
+
for (const row of rows) {
|
|
338
|
+
if (row.state in counts) {
|
|
339
|
+
counts[row.state] = row.n;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
return counts;
|
|
343
|
+
}
|
|
@@ -11,7 +11,9 @@
|
|
|
11
11
|
* Covers:
|
|
12
12
|
* - SGR sequences: ESC[Nm (colors, bold, underline, etc.)
|
|
13
13
|
* - OSC sequences: ESC]...BEL and ESC]...ST (ESC \\) - window title, and the
|
|
14
|
-
* OSC 8 hyperlinks that claude/codex/copilot emit (Issue #1912)
|
|
14
|
+
* OSC 8 hyperlinks that claude/codex/copilot emit (Issue #1912). Also
|
|
15
|
+
* available on its own as {@link stripOsc} (Issue #2369), for a consumer that
|
|
16
|
+
* renders SGR and must not render OSC.
|
|
15
17
|
* - CSI sequences: ESC[...letter (cursor movement, erase, etc.)
|
|
16
18
|
*
|
|
17
19
|
* Known limitations (SEC-002): 8-bit CSI (0x9B), DEC private modes (ESC[?25h),
|
|
@@ -19,14 +21,49 @@
|
|
|
19
21
|
* practice tmux capture-pane output rarely contains these.
|
|
20
22
|
*/
|
|
21
23
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.ANSI_PATTERN = void 0;
|
|
24
|
+
exports.ANSI_PATTERN = exports.OSC_PATTERN = void 0;
|
|
23
25
|
exports.stripAnsi = stripAnsi;
|
|
26
|
+
exports.stripOsc = stripOsc;
|
|
24
27
|
exports.extractAnsiSequences = extractAnsiSequences;
|
|
25
|
-
|
|
28
|
+
/**
|
|
29
|
+
* One OSC sequence: `ESC ]`, a payload, and either terminator (BEL or ST).
|
|
30
|
+
*
|
|
31
|
+
* Split out of {@link ANSI_PATTERN} by Issue #2369 so a second consumer can
|
|
32
|
+
* strip OSC **without** stripping SGR. `sanitizeTerminalOutput`
|
|
33
|
+
* (`lib/security/sanitize.ts`) is that consumer: it hands the frame to
|
|
34
|
+
* `ansi-to-html`, which turns SGR into colour and does not know OSC at all — so
|
|
35
|
+
* before this split, Command Code's `/usage` panel rendered its breakdown link
|
|
36
|
+
* as the literal text `]8;;https://commandcode.ai/…\` beside the label. Calling
|
|
37
|
+
* `stripAnsi` there would have thrown the colour away with it.
|
|
38
|
+
*
|
|
39
|
+
* The payload class excludes ESC as well as BEL (Issue #1912) so a sequence
|
|
40
|
+
* ended by ST cannot run on to a BEL later in the buffer and swallow the visible
|
|
41
|
+
* link text between them. An OSC with no terminator at all matches nothing and
|
|
42
|
+
* is left in place, which is the safe answer: eating the rest of the frame is
|
|
43
|
+
* worse than showing one stray escape.
|
|
44
|
+
*
|
|
45
|
+
* The source is shared with {@link ANSI_PATTERN} rather than restated, so the
|
|
46
|
+
* two cannot drift about which terminators exist.
|
|
47
|
+
*/
|
|
48
|
+
const OSC_SOURCE = '\\x1b\\][^\\x07\\x1b]*(?:\\x07|\\x1b\\\\)';
|
|
49
|
+
/** {@link OSC_SOURCE} as a reusable global pattern. */
|
|
50
|
+
exports.OSC_PATTERN = new RegExp(OSC_SOURCE, 'g');
|
|
51
|
+
exports.ANSI_PATTERN = new RegExp(`\\x1b\\[[0-9;]*[a-zA-Z]|${OSC_SOURCE}|\\[[0-9;]*m`, 'g');
|
|
26
52
|
/** Remove all ANSI escape sequences from a string. */
|
|
27
53
|
function stripAnsi(str) {
|
|
28
54
|
return str.replace(exports.ANSI_PATTERN, '');
|
|
29
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* Remove OSC sequences only, leaving SGR (colour) and CSI untouched.
|
|
58
|
+
*
|
|
59
|
+
* For OSC 8 hyperlinks — `ESC ] 8 ; ; <url> ST <label> ESC ] 8 ; ; ST` — this
|
|
60
|
+
* drops both halves of the pair and keeps `<label>`, which is the text the
|
|
61
|
+
* terminal itself shows. See {@link OSC_PATTERN} for who needs this and why
|
|
62
|
+
* `stripAnsi` is not the answer for them.
|
|
63
|
+
*/
|
|
64
|
+
function stripOsc(str) {
|
|
65
|
+
return str.replace(exports.OSC_PATTERN, '');
|
|
66
|
+
}
|
|
30
67
|
/**
|
|
31
68
|
* Extract the ANSI escape sequences from a string, in order, discarding all
|
|
32
69
|
* other characters. Reuses the same tested pattern as {@link stripAnsi} so the
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.COPILOT_TOOL_ROW_PATTERN = exports.COPILOT_TOOL_VERBS = exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN = exports.COPILOT_USER_ECHO_PATTERN = exports.COPILOT_REASONING_HEADER_PATTERN = exports.COPILOT_BOX_ROW_PATTERN = exports.COPILOT_SEPARATOR_PATTERN = exports.COPILOT_IDLE_STATUS_PATTERN = exports.COPILOT_WORKING_STATUS_PATTERN = exports.COPILOT_THINKING_PATTERN = exports.COPILOT_PROMPT_PATTERN = exports.OPENCODE_SKIP_PATTERNS = exports.OPENCODE_SEPARATOR_PATTERN = exports.CLAUDE_SELECTION_LIST_FOOTER = exports.CLAUDE_MODEL_OVERLAY_FOOTER_PATTERN = exports.OPENCODE_SELECTION_LIST_PATTERN = exports.OPENCODE_FOOTER_STATUS_PATTERN = exports.OPENCODE_USER_ECHO_PATTERN = exports.OPENCODE_GUTTER_ROW_PATTERN = exports.OPENCODE_COMPOSER_BOTTOM_BORDER = exports.OPENCODE_PROCESSING_INDICATOR = exports.OPENCODE_PERMISSION_PATTERN = exports.OPENCODE_TURN_COMPLETE_PATTERN = exports.OPENCODE_RESPONSE_COMPLETE = exports.OPENCODE_LOADING_PATTERN = exports.OPENCODE_THINKING_PATTERN = exports.OPENCODE_PROMPT_AFTER_RESPONSE = exports.OPENCODE_IDLE_COMPOSER_PATTERN = exports.OPENCODE_PROMPT_PATTERN = exports.GEMINI_THINKING_PATTERN = exports.GEMINI_PROMPT_PATTERN = exports.MAX_PASTED_TEXT_RETRIES = exports.PASTED_TEXT_DETECT_DELAY = exports.PASTED_TEXT_PATTERN = exports.CODEX_STATUS_BAR_PATTERN = exports.CODEX_PAGER_FOOTER_PATTERN = exports.CODEX_APPROVAL_FOOTER_PATTERN = exports.CODEX_SELECTION_LIST_PATTERN = exports.CODEX_SEPARATOR_PATTERN = exports.CODEX_HOOKS_REVIEW_ANCHORS = exports.CODEX_DIALOG_PATTERN = exports.CODEX_PROMPT_PATTERN = exports.CLAUDE_TRUST_DIALOG_PATTERN = exports.CLAUDE_SEPARATOR_PATTERN = exports.CLAUDE_PROMPT_PATTERN = exports.CODEX_INTERRUPT_HINT_PATTERN = exports.CODEX_THINKING_PATTERN = exports.CLAUDE_INTERRUPT_HINT_PATTERN = exports.CLAUDE_THINKING_PATTERN = exports.CLAUDE_SPINNER_CHARS = void 0;
|
|
8
|
-
exports.CLAUDE_SESSION_ERROR_REGEX_PATTERNS = exports.CLAUDE_SESSION_ERROR_PATTERNS = exports.extractAnsiSequences = exports.stripAnsi = exports.COMMAND_CODE_SKIP_PATTERNS = exports.COMMAND_CODE_HOOK_NOTICE_PATTERN = exports.COMMAND_CODE_BANNER_PATTERNS = exports.COMMAND_CODE_MODE_INDICATOR_PATTERN = exports.COMMAND_CODE_COMPLETION_PATTERN = exports.COMMAND_CODE_RESPONSE_MARKER_PATTERN = exports.COMMAND_CODE_THINKING_PATTERN = exports.COMMAND_CODE_INTERRUPT_HINT_PATTERN = exports.COMMAND_CODE_SEPARATOR_PATTERN = exports.COMMAND_CODE_PROMPT_PATTERN = exports.COMMAND_CODE_SPINNER_CHARS = exports.ANTIGRAVITY_SKIP_PATTERNS = exports.ANTIGRAVITY_NUMBERED_OPTION_PATTERN = exports.
|
|
8
|
+
exports.CLAUDE_SESSION_ERROR_REGEX_PATTERNS = exports.CLAUDE_SESSION_ERROR_PATTERNS = exports.extractAnsiSequences = exports.stripAnsi = exports.COMMAND_CODE_SKIP_PATTERNS = exports.COMMAND_CODE_HOOK_NOTICE_PATTERN = exports.COMMAND_CODE_BANNER_PATTERNS = exports.COMMAND_CODE_MODE_INDICATOR_PATTERN = exports.COMMAND_CODE_COMPLETION_PATTERN = exports.COMMAND_CODE_RESPONSE_MARKER_PATTERN = exports.COMMAND_CODE_THINKING_PATTERN = exports.COMMAND_CODE_INTERRUPT_HINT_PATTERN = exports.COMMAND_CODE_SEPARATOR_PATTERN = exports.COMMAND_CODE_PROMPT_PATTERN = exports.COMMAND_CODE_SPINNER_CHARS = exports.ANTIGRAVITY_SKIP_PATTERNS = exports.ANTIGRAVITY_SURVEY_PATTERN = exports.ANTIGRAVITY_DIALOG_MAX_ROWS = exports.ANTIGRAVITY_DIALOG_BOUNDARY_PATTERN = exports.ANTIGRAVITY_SWITCH_MODEL_HEADER_PATTERN = exports.ANTIGRAVITY_NUMBERED_OPTION_PATTERN = exports.ANTIGRAVITY_NAVIGATE_FOOTER_PATTERN = exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = exports.ANTIGRAVITY_SEPARATOR_PATTERN = exports.ANTIGRAVITY_THINKING_PATTERN = exports.ANTIGRAVITY_PROMPT_PATTERN = exports.VIBE_LOCAL_THINKING_PATTERN = exports.VIBE_LOCAL_PROMPT_PATTERN = exports.COPILOT_SKIP_PATTERNS = exports.COPILOT_FOLDER_TRUST_ANSWER_KEY = exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN = exports.COPILOT_FOLDER_TRUST_ANCHORS = exports.COPILOT_SELECTION_FOOTER_PATTERN = exports.COPILOT_BOOT_BANNER_ANCHORS = exports.COPILOT_TRANSCRIPT_CONTINUATION_PATTERN = void 0;
|
|
9
9
|
exports.isCodexTurnActive = isCodexTurnActive;
|
|
10
10
|
exports.findClaudeChromeStart = findClaudeChromeStart;
|
|
11
11
|
exports.isCodexPromptReady = isCodexPromptReady;
|
|
@@ -19,6 +19,7 @@ exports.readCopilotStatusBar = readCopilotStatusBar;
|
|
|
19
19
|
exports.findCopilotChromeStart = findCopilotChromeStart;
|
|
20
20
|
exports.isCopilotSelectionFrame = isCopilotSelectionFrame;
|
|
21
21
|
exports.isCopilotFolderTrustDialog = isCopilotFolderTrustDialog;
|
|
22
|
+
exports.locateAntigravityDialogRegion = locateAntigravityDialogRegion;
|
|
22
23
|
exports.isAntigravityNumberedDialog = isAntigravityNumberedDialog;
|
|
23
24
|
exports.findCommandCodeChromeStart = findCommandCodeChromeStart;
|
|
24
25
|
exports.detectThinking = detectThinking;
|
|
@@ -1861,25 +1862,125 @@ exports.ANTIGRAVITY_SEPARATOR_PATTERN = /^─{3,}$/m;
|
|
|
1861
1862
|
*/
|
|
1862
1863
|
exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = /Switch Model|↑\/↓\s*Navigate/m;
|
|
1863
1864
|
/**
|
|
1864
|
-
* The
|
|
1865
|
-
* (Issue #
|
|
1865
|
+
* The `↑/↓ Navigate` hint agy draws under every arrow-key screen it owns
|
|
1866
|
+
* (Issue #2364; measured on agy 1.1.27, pane 200x1000, 2026-09-06).
|
|
1866
1867
|
*
|
|
1867
|
-
*
|
|
1868
|
-
*
|
|
1868
|
+
* The same token {@link ANTIGRAVITY_SELECTION_LIST_PATTERN} matches, split out
|
|
1869
|
+
* because the numbered-dialog reader anchors on THIS row and reads upward from
|
|
1870
|
+
* it. It is the one thing all four measured agy dialogs share — the `Do you want
|
|
1871
|
+
* to proceed?` command menu, the `Allow creation of this file?` file menu, the
|
|
1872
|
+
* folder-trust screen and the `/model` picker all end on it — while the words
|
|
1873
|
+
* after it differ on every one (`tab Amend · f full diff`, `tab Amend · ctrl+g
|
|
1874
|
+
* edit/expand command`, `enter Confirm`, `←/→ Effort enter Select`).
|
|
1869
1875
|
*/
|
|
1870
|
-
exports.
|
|
1876
|
+
exports.ANTIGRAVITY_NAVIGATE_FOOTER_PATTERN = /↑\/↓\s*Navigate/;
|
|
1871
1877
|
/**
|
|
1872
|
-
* One numbered option row of
|
|
1878
|
+
* One numbered option row of agy's dialogs: `> 1. Yes`, ` 4. No`,
|
|
1879
|
+
* ` 2. No, deny creation`.
|
|
1873
1880
|
*
|
|
1874
|
-
* The `>` gutter marks the highlighted row and is optional, because only one
|
|
1875
|
-
* the
|
|
1881
|
+
* The `>` gutter marks the highlighted row and is optional, because only one
|
|
1882
|
+
* of the rows carries it.
|
|
1876
1883
|
*/
|
|
1877
1884
|
exports.ANTIGRAVITY_NUMBERED_OPTION_PATTERN = /^\s*>?\s*\d+\.\s+\S/m;
|
|
1878
1885
|
/**
|
|
1879
|
-
*
|
|
1880
|
-
* arrow-key-only pickers? (Issue #2270)
|
|
1886
|
+
* The header of agy's `/model` picker (Issue #995).
|
|
1881
1887
|
*
|
|
1882
|
-
*
|
|
1888
|
+
* Kept as its own exclusion even though the picker's rows already fail the
|
|
1889
|
+
* numbered-row test: the Issue #2364 rule is written as "footer + numbered rows
|
|
1890
|
+
* + NOT the Switch Model picker", and the picker is the one agy screen whose
|
|
1891
|
+
* misreading has a measured cost (#995: NavigationButtons vanished).
|
|
1892
|
+
*/
|
|
1893
|
+
exports.ANTIGRAVITY_SWITCH_MODEL_HEADER_PATTERN = /^\s*Switch Model\s*$/;
|
|
1894
|
+
/**
|
|
1895
|
+
* A row that ends the dialog block when reading UPWARD from the footer
|
|
1896
|
+
* (Issue #2364).
|
|
1897
|
+
*
|
|
1898
|
+
* Everything agy draws above its own dialog panel carries one of these:
|
|
1899
|
+
*
|
|
1900
|
+
* - a horizontal rule (the turn separator, the input-box border, or the rule
|
|
1901
|
+
* under the `Command` / `Create file` panel header);
|
|
1902
|
+
* - a `>`-prefixed row that is not a numbered option — the echoed user prompt,
|
|
1903
|
+
* the bare composer, the highlighted row of an UNNUMBERED picker (`> Gemini
|
|
1904
|
+
* 3.8 Flash`, `> Yes, I trust this folder`) or of the slash-command popup
|
|
1905
|
+
* (`> /add-dir Add a directory …`);
|
|
1906
|
+
* - a `●` tool-call row, a `⎿` tool-result row or a `▸ Thought for …` row.
|
|
1907
|
+
*
|
|
1908
|
+
* Bounding the block at the nearest one is what keeps a numbered list in the
|
|
1909
|
+
* MODEL'S PROSE, sitting in the transcript above an open picker or popup, from
|
|
1910
|
+
* being adopted as that screen's options. Wrapped option labels never start
|
|
1911
|
+
* with any of these on the measured frames: agy prints the command text inside
|
|
1912
|
+
* the quotes of `… commands that start with '<cmd>'`, indented under the row
|
|
1913
|
+
* that opened it.
|
|
1914
|
+
*
|
|
1915
|
+
* `stripBoxDrawing` blanks the rule rows before the response poller's copy of
|
|
1916
|
+
* the frame reaches this rule; the `●` / `>` rows survive it, so the block is
|
|
1917
|
+
* bounded the same way on both paths.
|
|
1918
|
+
*/
|
|
1919
|
+
exports.ANTIGRAVITY_DIALOG_BOUNDARY_PATTERN = /^\s*(?:─{3,}\s*$|[●⎿▸]|>(?!\s*\d+\.\s+\S))/;
|
|
1920
|
+
/**
|
|
1921
|
+
* How many rows above the `↑/↓ Navigate` footer the dialog block may reach.
|
|
1922
|
+
*
|
|
1923
|
+
* The tallest measured frame (`dialog-bash-wrapped.txt`: header, rule,
|
|
1924
|
+
* `Requesting permission for:`, a four-row command, the question and four
|
|
1925
|
+
* options of which two wrap onto three rows each) spans 18 rows; the cap leaves
|
|
1926
|
+
* room for a longer command without letting a boundary-free frame drag the
|
|
1927
|
+
* whole transcript into the block.
|
|
1928
|
+
*/
|
|
1929
|
+
exports.ANTIGRAVITY_DIALOG_MAX_ROWS = 60;
|
|
1930
|
+
/**
|
|
1931
|
+
* agy's post-answer survey row (Issue #2364).
|
|
1932
|
+
*
|
|
1933
|
+
* Drawn once, in place of the composer, after some tool decisions:
|
|
1934
|
+
*
|
|
1935
|
+
* ```
|
|
1936
|
+
* How's the CLI experience so far? Help us improve:
|
|
1937
|
+
* [1] Good [2] Fine [3] Bad [0] Skip
|
|
1938
|
+
*
|
|
1939
|
+
* ? for shortcuts …
|
|
1940
|
+
* ```
|
|
1941
|
+
*
|
|
1942
|
+
* Every option sits on ONE row in `[N] label` form and the screen takes a
|
|
1943
|
+
* typed digit, not the arrow keys; there is no `↑/↓ Navigate` footer and no bare
|
|
1944
|
+
* `>` composer, so before this pattern existed the frame reached the `default`
|
|
1945
|
+
* floor — `running`, with the chat surface showing "generating" over a screen
|
|
1946
|
+
* that was waiting for a keypress. Anchored to the whole row.
|
|
1947
|
+
*/
|
|
1948
|
+
exports.ANTIGRAVITY_SURVEY_PATTERN = /^\s*\[1\]\s*Good\s+\[2\]\s*Fine\s+\[3\]\s*Bad\s+\[0\]\s*Skip\s*$/m;
|
|
1949
|
+
/**
|
|
1950
|
+
* Find the rows between the last boundary and the last `↑/↓ Navigate` footer
|
|
1951
|
+
* (Issue #2364).
|
|
1952
|
+
*
|
|
1953
|
+
* The footer is searched from the bottom, so an older dialog still in the
|
|
1954
|
+
* scrollback above a newer one is never the one read. Returns null when the
|
|
1955
|
+
* frame has no footer at all.
|
|
1956
|
+
*
|
|
1957
|
+
* @param lines - ANSI-stripped rows, box drawing optional
|
|
1958
|
+
*/
|
|
1959
|
+
function locateAntigravityDialogRegion(lines) {
|
|
1960
|
+
let footer = -1;
|
|
1961
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
1962
|
+
if (exports.ANTIGRAVITY_NAVIGATE_FOOTER_PATTERN.test(lines[i])) {
|
|
1963
|
+
footer = i;
|
|
1964
|
+
break;
|
|
1965
|
+
}
|
|
1966
|
+
}
|
|
1967
|
+
if (footer < 0)
|
|
1968
|
+
return null;
|
|
1969
|
+
const floor = Math.max(0, footer - exports.ANTIGRAVITY_DIALOG_MAX_ROWS);
|
|
1970
|
+
let start = floor;
|
|
1971
|
+
for (let i = footer - 1; i >= floor; i--) {
|
|
1972
|
+
if (exports.ANTIGRAVITY_DIALOG_BOUNDARY_PATTERN.test(lines[i])) {
|
|
1973
|
+
start = i + 1;
|
|
1974
|
+
break;
|
|
1975
|
+
}
|
|
1976
|
+
}
|
|
1977
|
+
return { start, footer };
|
|
1978
|
+
}
|
|
1979
|
+
/**
|
|
1980
|
+
* Is this frame one of agy's NUMBERED dialogs rather than one of its
|
|
1981
|
+
* arrow-key-only pickers? (Issue #2270, re-measured by Issue #2364)
|
|
1982
|
+
*
|
|
1983
|
+
* Both kinds of screen share the `↑/↓ Navigate` footer that
|
|
1883
1984
|
* {@link ANTIGRAVITY_SELECTION_LIST_PATTERN} matches, which is why #997 could
|
|
1884
1985
|
* widen that pattern to cover the permission menu — and why the menu then
|
|
1885
1986
|
* resolved as `antigravity_selection_list`, `hasActivePrompt: false`. On the
|
|
@@ -1888,21 +1989,45 @@ exports.ANTIGRAVITY_NUMBERED_OPTION_PATTERN = /^\s*>?\s*\d+\.\s+\S/m;
|
|
|
1888
1989
|
* options 2-4 became unreachable, while the poller and the push notification
|
|
1889
1990
|
* described the very same frame as a `multiple_choice` prompt.
|
|
1890
1991
|
*
|
|
1891
|
-
*
|
|
1892
|
-
*
|
|
1893
|
-
*
|
|
1894
|
-
*
|
|
1895
|
-
*
|
|
1896
|
-
*
|
|
1897
|
-
*
|
|
1898
|
-
*
|
|
1899
|
-
*
|
|
1992
|
+
* #2270 told the two apart by the question line, `Do you want to proceed?`,
|
|
1993
|
+
* because that was the one dialog it had measured. #2364 measured a second one
|
|
1994
|
+
* — agy 1.1.27's file-creation menu asks `Allow creation of this file?` above
|
|
1995
|
+
* `1. Yes, allow creation` / `2. No, deny creation` — and it fell straight back
|
|
1996
|
+
* into the selection-list reading. So the rule is now about the STRUCTURE the
|
|
1997
|
+
* dialogs share and the pickers lack:
|
|
1998
|
+
*
|
|
1999
|
+
* - the `↑/↓ Navigate` footer,
|
|
2000
|
+
* - at least two `N. label` rows between the nearest boundary row and that
|
|
2001
|
+
* footer ({@link ANTIGRAVITY_DIALOG_BOUNDARY_PATTERN}), and
|
|
2002
|
+
* - no `Switch Model` header in that region.
|
|
2003
|
+
*
|
|
2004
|
+
* The Switch Model picker, the folder-trust screen and the slash-command popup
|
|
2005
|
+
* all draw unnumbered rows (`> Gemini 3.8 Flash`, `> Yes, I trust this folder`,
|
|
2006
|
+
* `> /add-dir …`), so they keep the #995 reading — and because a `>` row that
|
|
2007
|
+
* is not numbered is itself a boundary, a numbered list in the transcript above
|
|
2008
|
+
* one of them cannot be counted.
|
|
2009
|
+
*
|
|
2010
|
+
* True here means "hand the frame to the agy dialog reader"
|
|
2011
|
+
* (`tools/antigravity/dialog.ts`), never "this is a prompt": a frame that
|
|
2012
|
+
* passes this test and still fails to read is published as an unclassified
|
|
2013
|
+
* frame, not as a selection list and never as "generating".
|
|
1900
2014
|
*
|
|
1901
2015
|
* Callers pass the same text they hand {@link ANTIGRAVITY_SELECTION_LIST_PATTERN}.
|
|
1902
2016
|
*/
|
|
1903
2017
|
function isAntigravityNumberedDialog(text) {
|
|
1904
|
-
|
|
1905
|
-
|
|
2018
|
+
const lines = text.split('\n');
|
|
2019
|
+
const region = locateAntigravityDialogRegion(lines);
|
|
2020
|
+
if (region === null)
|
|
2021
|
+
return false;
|
|
2022
|
+
let numberedRows = 0;
|
|
2023
|
+
for (let i = region.start; i < region.footer; i++) {
|
|
2024
|
+
const line = lines[i];
|
|
2025
|
+
if (exports.ANTIGRAVITY_SWITCH_MODEL_HEADER_PATTERN.test(line))
|
|
2026
|
+
return false;
|
|
2027
|
+
if (exports.ANTIGRAVITY_NUMBERED_OPTION_PATTERN.test(line))
|
|
2028
|
+
numberedRows++;
|
|
2029
|
+
}
|
|
2030
|
+
return numberedRows >= 2;
|
|
1906
2031
|
}
|
|
1907
2032
|
/**
|
|
1908
2033
|
* Antigravity (agy) skip patterns for response cleaning (Issue #988)
|
|
@@ -2421,6 +2546,15 @@ function buildDetectPromptOptions(cliToolId) {
|
|
|
2421
2546
|
// the Pass 1 gate rejects these menus, so Auto-Yes never responds. Treat agy
|
|
2422
2547
|
// like claude/opencode/copilot so Pass 2 collects its "1. Yes / … / N. No"
|
|
2423
2548
|
// options and reports isPrompt=true.
|
|
2549
|
+
//
|
|
2550
|
+
// [Issue #2364] The `↑/↓ Navigate` dialogs themselves no longer reach
|
|
2551
|
+
// `detectPrompt` on either production path: `tools/antigravity/detect.ts`
|
|
2552
|
+
// (status) and `detectPromptWithOptions` (response poller) both read them
|
|
2553
|
+
// with `detectAntigravityNumberedDialogPrompt` first, because the generic
|
|
2554
|
+
// multiple-choice pass reads one row per option and agy wraps a long command
|
|
2555
|
+
// across several rows of one label. What this setting still serves is every
|
|
2556
|
+
// OTHER numbered agy screen — `/feedback`'s `1-6 Select & Continue` menu is
|
|
2557
|
+
// the measured one — which the generic pass reads as before.
|
|
2424
2558
|
if (cliToolId === 'antigravity') {
|
|
2425
2559
|
return { requireDefaultIndicator: false };
|
|
2426
2560
|
}
|