commandmate 0.31.3 → 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 +487 -473
- package/.next/app-path-routes-manifest.json +37 -35
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +9 -9
- package/.next/react-loadable-manifest.json +2 -2
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +8 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route.js +1 -1
- package/.next/server/app/api/app/update-check/route.js.nft.json +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/session/route.js +1 -1
- package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/start/route.js +1 -32
- package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/terminal/route.js +2 -33
- package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/capabilities/route.js +1 -1
- package/.next/server/app/api/capabilities/route.js.nft.json +1 -1
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +2 -2
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route.js +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route.js +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -0
- package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -0
- package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/relays/route.js +1 -0
- package/.next/server/app/api/relays/route.js.nft.json +1 -0
- package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route.js +1 -1
- package/.next/server/app/api/skills/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route.js +1 -1
- package/.next/server/app/api/skills/installations/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route.js +1 -1
- package/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route_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 +37 -35
- package/.next/server/chunks/1210.js +1 -0
- package/.next/server/chunks/153.js +1 -0
- package/.next/server/chunks/1886.js +1 -1
- package/.next/server/chunks/21.js +1 -0
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/3077.js +67 -0
- package/.next/server/chunks/3086.js +1 -0
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3270.js +1 -0
- package/.next/server/chunks/3543.js +1 -1
- package/.next/server/chunks/3730.js +1 -0
- package/.next/server/chunks/3925.js +1 -0
- package/.next/server/chunks/3945.js +1 -1
- package/.next/server/chunks/4443.js +2 -1
- package/.next/server/chunks/5043.js +1 -1
- package/.next/server/chunks/5164.js +1 -1
- package/.next/server/chunks/5220.js +1 -1
- package/.next/server/chunks/5354.js +1 -1
- package/.next/server/chunks/595.js +3 -3
- package/.next/server/chunks/6286.js +48 -0
- package/.next/server/chunks/6306.js +1 -0
- package/.next/server/chunks/6363.js +1 -0
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6491.js +103 -0
- package/.next/server/chunks/{9798.js → 6661.js} +1 -2
- package/.next/server/chunks/6838.js +1 -0
- package/.next/server/chunks/7875.js +25 -0
- package/.next/server/chunks/7890.js +1 -0
- package/.next/server/chunks/8063.js +32 -0
- package/.next/server/chunks/8118.js +1 -1
- package/.next/server/chunks/{7587.js → 8554.js} +1 -1
- package/.next/server/chunks/8687.js +1 -0
- package/.next/server/chunks/8807.js +37 -3
- package/.next/server/chunks/8918.js +6 -4
- package/.next/server/chunks/9123.js +2 -2
- package/.next/server/chunks/9584.js +1 -1
- package/.next/server/chunks/9627.js +21 -5
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/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/server/locales/en/worktree.json +23 -0
- package/dist/server/locales/ja/worktree.json +23 -0
- package/dist/server/src/lib/auto-yes-poller.js +26 -11
- package/dist/server/src/lib/db/chat-db.js +161 -7
- package/dist/server/src/lib/db/migrations/index.js +2 -0
- package/dist/server/src/lib/db/migrations/runner.js +1 -1
- package/dist/server/src/lib/db/migrations/v60-session-relays.js +110 -0
- package/dist/server/src/lib/db/relay-db.js +343 -0
- package/dist/server/src/lib/detection/ansi.js +40 -3
- package/dist/server/src/lib/detection/selection-shape.js +72 -1
- package/dist/server/src/lib/detection/status-reason.js +28 -0
- package/dist/server/src/lib/detection/tools/antigravity/dialog.js +13 -7
- package/dist/server/src/lib/detection/tools/command-code/detect.js +33 -0
- package/dist/server/src/lib/history/user-turn-recorder.js +79 -16
- package/dist/server/src/lib/polling/response-checker.js +45 -8
- package/dist/server/src/lib/polling/structured-history-gate.js +14 -1
- package/dist/server/src/lib/realtime/terminal-broadcast.js +5 -0
- package/dist/server/src/lib/realtime/waiting-broadcast.js +12 -0
- package/dist/server/src/lib/relay/relay-delivery.js +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/current-output-builder.js +18 -0
- package/dist/server/src/lib/session/send-user-message.js +1 -0
- package/package.json +1 -1
- package/.next/server/chunks/1058.js +0 -1
- package/.next/server/chunks/1068.js +0 -1
- package/.next/server/chunks/1990.js +0 -103
- package/.next/server/chunks/261.js +0 -1
- package/.next/server/chunks/2739.js +0 -1
- package/.next/server/chunks/2839.js +0 -1
- package/.next/server/chunks/3484.js +0 -1
- package/.next/server/chunks/358.js +0 -1
- package/.next/server/chunks/3869.js +0 -1
- package/.next/server/chunks/4325.js +0 -1
- package/.next/server/chunks/4393.js +0 -1
- package/.next/server/chunks/5017.js +0 -1
- package/.next/server/chunks/5120.js +0 -1
- package/.next/server/chunks/552.js +0 -25
- package/.next/server/chunks/6130.js +0 -1
- package/.next/server/chunks/7836.js +0 -1
- package/.next/server/chunks/7859.js +0 -21
- package/.next/server/chunks/9696.js +0 -3
- package/.next/static/0hTIackGXw6v7diXJS6yN/_buildManifest.js +0 -1
- package/.next/static/chunks/2813-de885de8a4b11910.js +0 -1
- package/.next/static/chunks/4718-07ec4e10186928db.js +0 -1
- package/.next/static/chunks/6170-951b9f5fe6b4b3b5.js +0 -1
- package/.next/static/chunks/8019-f8e73c1fb5f6f0d3.js +0 -1
- package/.next/static/chunks/8593-fa0eb2802e0ce68a.js +0 -1
- package/.next/static/chunks/app/api/agents/update/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/agents/versions/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/assistant/conversation/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/assistant/current-output/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/assistant/messages/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/assistant/session/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/assistant/start/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/assistant/terminal/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/assistant/tools/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/capabilities/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/remote/pair/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/settings/default-agents/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/skills/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/templates/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/todos/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-91b639c90795baa9.js +0 -1
- package/.next/static/chunks/webpack-9f75198882fdaf08.js +0 -1
- package/.next/static/css/acc4b9c3feb04287.css +0 -1
- /package/.next/static/{0hTIackGXw6v7diXJS6yN → 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
|
|
@@ -64,7 +64,8 @@
|
|
|
64
64
|
* written once.
|
|
65
65
|
*/
|
|
66
66
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
67
|
-
exports.COMMAND_CODE_SELECTION_LIST_FOOTER = exports.SET_AS_DEFAULT_FOOTER_PATTERN = exports.SESSION_SCOPE_FOOTER_PATTERN = exports.MAX_OPTION_NUMBER = exports.SELECTION_SHAPE_TAIL_LINE_COUNT = void 0;
|
|
67
|
+
exports.DISMISSABLE_PANEL_FOOTER_PATTERN = exports.COMMAND_CODE_SELECTION_LIST_FOOTER = exports.SET_AS_DEFAULT_FOOTER_PATTERN = exports.SESSION_SCOPE_FOOTER_PATTERN = exports.MAX_OPTION_NUMBER = exports.SELECTION_SHAPE_TAIL_LINE_COUNT = void 0;
|
|
68
|
+
exports.hasDismissablePanelFooter = hasDismissablePanelFooter;
|
|
68
69
|
exports.extractCommandCodeSelectionListFrame = extractCommandCodeSelectionListFrame;
|
|
69
70
|
exports.readSelectionListShape = readSelectionListShape;
|
|
70
71
|
exports.shouldOfferOptionNumbers = shouldOfferOptionNumbers;
|
|
@@ -150,6 +151,76 @@ const FILTER_INPUT_PATTERN = /\btype\s+to\s+search\b|\bsearch\s+\w+\s*(?:…|\.\
|
|
|
150
151
|
* settled on for the same reason.
|
|
151
152
|
*/
|
|
152
153
|
exports.COMMAND_CODE_SELECTION_LIST_FOOTER = /\benter\s+to\s+select\b\s*[·•]\s*esc\s+to\s+cancel\b/i;
|
|
154
|
+
/**
|
|
155
|
+
* The footer of an overlay whose ONLY exit is the dismiss (Issue #2369).
|
|
156
|
+
*
|
|
157
|
+
* Measured on Command Code 1.49's `/usage`, whose last row is verbatim
|
|
158
|
+
* `Press Esc to close`. The panel above it is read-only — a plan header, two
|
|
159
|
+
* meters, a breakdown URL — so there is no highlight to move and no key to
|
|
160
|
+
* confirm with. Before this pattern existed nothing matched the screen, it
|
|
161
|
+
* reached the `default` floor, and the chat surface answered an
|
|
162
|
+
* eighteen-button `unclassified` card to a panel with one working key.
|
|
163
|
+
*
|
|
164
|
+
* ## Why it is this narrow
|
|
165
|
+
*
|
|
166
|
+
* Three narrowings, and each one is there because this predicate SUPPRESSES
|
|
167
|
+
* controls — a false positive takes the arrow pad and the answer keys away from
|
|
168
|
+
* a screen that needed them:
|
|
169
|
+
*
|
|
170
|
+
* - **a verb before the key.** `Press`/`Hit`/`Type`, or nothing at all, but not
|
|
171
|
+
* an arbitrary run of prose. `esc to cancel` on its own is the tail of every
|
|
172
|
+
* picker footer in this file, including
|
|
173
|
+
* {@link COMMAND_CODE_SELECTION_LIST_FOOTER}, and those screens have a
|
|
174
|
+
* highlight;
|
|
175
|
+
* - **`close`/`dismiss`/`exit`, never `cancel` or `go back`.** The distinction
|
|
176
|
+
* is measured rather than stylistic: `cancel` is what a screen with a
|
|
177
|
+
* COMMITTABLE choice calls its escape (claude's `/model`, codex's picker,
|
|
178
|
+
* Command Code's own), while `close` is what a panel that decided nothing
|
|
179
|
+
* calls it;
|
|
180
|
+
* - **the whole row.** Anchored at both ends (leading/trailing space aside), so
|
|
181
|
+
* a hint bar that offers a dismiss ALONGSIDE something else — `↑/↓ navigate ·
|
|
182
|
+
* enter to select · esc to close` — does not match, and keeps the arrows the
|
|
183
|
+
* other half of its sentence promises.
|
|
184
|
+
*
|
|
185
|
+
* Case-insensitive because the measured row is `Press Esc to close` and Command
|
|
186
|
+
* Code writes its picker hints in lower case; nothing rests on which it uses.
|
|
187
|
+
*/
|
|
188
|
+
exports.DISMISSABLE_PANEL_FOOTER_PATTERN = /^\s*(?:press|hit|type)?\s*(?:<)?esc(?:ape)?(?:>)?\s+to\s+(?:close|dismiss|exit)\b[\s.·•]*$/im;
|
|
189
|
+
/**
|
|
190
|
+
* How many rows from the end of the content the dismiss footer is looked for.
|
|
191
|
+
*
|
|
192
|
+
* The same 15-row tail the detection chain hands a tool module as
|
|
193
|
+
* `NormalizedFrame.lastLines` (`STATUS_CHECK_LINE_COUNT`), restated as a number
|
|
194
|
+
* here because this module is a browser-safe leaf and `tools/frame.ts` pulls in
|
|
195
|
+
* `cli-patterns`. `detect.ts` reads `frame.lastLines` and never this constant,
|
|
196
|
+
* so the two cannot disagree about the detector's own window; this one bounds
|
|
197
|
+
* the CLIENT-side reading in {@link hasDismissablePanelFooter}.
|
|
198
|
+
*/
|
|
199
|
+
const DISMISSABLE_PANEL_TAIL_LINE_COUNT = 15;
|
|
200
|
+
/**
|
|
201
|
+
* Whether the tail of this frame is a dismiss-only panel (Issue #2369).
|
|
202
|
+
*
|
|
203
|
+
* The same question `commandCodeStatusDetector.afterPrompt` asks of
|
|
204
|
+
* `frame.lastLines`, asked of a raw capture, so the chat surface can answer for
|
|
205
|
+
* a frame whose server verdict has not reached it. The pattern is shared rather
|
|
206
|
+
* than restated — one expression, two call sites, exactly as
|
|
207
|
+
* {@link COMMAND_CODE_SELECTION_LIST_FOOTER} is shared between the detector and
|
|
208
|
+
* the dialog card.
|
|
209
|
+
*
|
|
210
|
+
* @param frame - a raw `capture-pane -p -e` frame, ANSI intact
|
|
211
|
+
*/
|
|
212
|
+
function hasDismissablePanelFooter(frame) {
|
|
213
|
+
if (!frame)
|
|
214
|
+
return false;
|
|
215
|
+
const lines = (0, ansi_1.stripAnsi)(frame.replace(/\r\n/g, '\n')).split('\n');
|
|
216
|
+
let last = lines.length - 1;
|
|
217
|
+
while (last >= 0 && lines[last].trim() === '')
|
|
218
|
+
last -= 1;
|
|
219
|
+
if (last < 0)
|
|
220
|
+
return false;
|
|
221
|
+
const tail = lines.slice(Math.max(0, last + 1 - DISMISSABLE_PANEL_TAIL_LINE_COUNT), last + 1);
|
|
222
|
+
return tail.some((line) => exports.DISMISSABLE_PANEL_FOOTER_PATTERN.test(line));
|
|
223
|
+
}
|
|
153
224
|
/**
|
|
154
225
|
* The horizontal rule Command Code draws directly above a full-screen dialog.
|
|
155
226
|
*
|
|
@@ -64,6 +64,34 @@ exports.STATUS_REASON = {
|
|
|
64
64
|
* `Type to search models...` box.
|
|
65
65
|
*/
|
|
66
66
|
COMMAND_CODE_SELECTION_LIST: 'command_code_selection_list',
|
|
67
|
+
/**
|
|
68
|
+
* Issue #2369: a Command Code overlay that only Esc leaves.
|
|
69
|
+
*
|
|
70
|
+
* `/usage` opens a read-only panel — a plan header, two usage meters, a
|
|
71
|
+
* breakdown URL — whose last row is `Press Esc to close`. There is no
|
|
72
|
+
* highlight to move, no numbered option and no confirm key; the ONE thing the
|
|
73
|
+
* screen accepts is the dismiss.
|
|
74
|
+
*
|
|
75
|
+
* Distinct from {@link STATUS_REASON.COMMAND_CODE_SELECTION_LIST} because the
|
|
76
|
+
* two screens want different controls, and that is the whole of this Issue:
|
|
77
|
+
* before it, this panel matched no rule at all, reached the `default` floor
|
|
78
|
+
* and so raised `isUnclassifiedActive` — which the chat surface answers with
|
|
79
|
+
* `TerminalEscapeHatch` plus `PromptAnswerKeys`, eighteen buttons (arrows,
|
|
80
|
+
* Enter, Esc, `1`-`9`, `y`, `n`) of which exactly one does anything. Reporting
|
|
81
|
+
* the selection-list token instead would put the arrow pad on the card and
|
|
82
|
+
* tell an operator reading `capture --json` that a moving highlight had been
|
|
83
|
+
* read off a panel that has none.
|
|
84
|
+
*
|
|
85
|
+
* Deliberately NOT a member of `SELECTION_LIST_REASONS`
|
|
86
|
+
* (`lib/detection/status-detector.ts`): that set is what `isSelectionListActive`
|
|
87
|
+
* — and therefore the arrow pad — is derived from. The flag this one feeds is
|
|
88
|
+
* `isDismissablePanelActive`, published beside it.
|
|
89
|
+
*
|
|
90
|
+
* The vocabulary is Command Code's alone for now (方針書 §4 D2's tool-by-tool
|
|
91
|
+
* rule): the SHAPE "an overlay whose footer offers only a dismiss" is general,
|
|
92
|
+
* the sentence that identifies it was measured on one tool.
|
|
93
|
+
*/
|
|
94
|
+
COMMAND_CODE_DISMISSABLE_PANEL: 'command_code_dismissable_panel',
|
|
67
95
|
COPILOT_SELECTION_LIST: 'copilot_selection_list',
|
|
68
96
|
CODEX_SELECTION_LIST: 'codex_selection_list',
|
|
69
97
|
/** Issue #1017: Codex pager / edit-previous (transcript) mode. */
|
|
@@ -38,13 +38,19 @@
|
|
|
38
38
|
*
|
|
39
39
|
* ## Who calls it
|
|
40
40
|
*
|
|
41
|
-
*
|
|
42
|
-
* `antigravity/detect.ts` (the status verdict `/current-output` publishes)
|
|
43
|
-
* `polling/response-checker.ts` (the `prompt` row
|
|
44
|
-
* push notification it raises
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
41
|
+
* Every producer of the wire, so that they cannot disagree about one screen:
|
|
42
|
+
* `antigravity/detect.ts` (the status verdict `/current-output` publishes),
|
|
43
|
+
* `polling/response-checker.ts` (`detectPromptOnCleanFrame` — the `prompt` row
|
|
44
|
+
* the poller stores, the push notification it raises, AND the Auto-Yes poller's
|
|
45
|
+
* reading) and the `prompt-response` route's re-verification.
|
|
46
|
+
*
|
|
47
|
+
* Issue #2364 left the Auto-Yes poller on the generic pass, on the premise that
|
|
48
|
+
* agy's `PreToolUse` hook answers the permission request before the dialog is
|
|
49
|
+
* drawn. Measured false (#2368): agy 1.1.27 ignores a hook `allow` in
|
|
50
|
+
* interactive mode and draws the dialog anyway (#1779), so agy's Auto-Yes
|
|
51
|
+
* depends entirely on this TUI reading — and without it every wrapped Bash
|
|
52
|
+
* approval sat unanswered while `/current-output` published it as waiting.
|
|
53
|
+
* #2368 put that poller on the same entry.
|
|
48
54
|
*
|
|
49
55
|
* Deliberately NOT a change to the generic multiple-choice parser: folding
|
|
50
56
|
* continuation rows there would change what every other tool's dialogs read
|
|
@@ -55,6 +55,13 @@
|
|
|
55
55
|
* numbered-response path, because Command Code fires `PreToolUse` AFTER the
|
|
56
56
|
* dialog is answered, so a hook-driven permission decision cannot dismiss it.
|
|
57
57
|
*
|
|
58
|
+
* Issue #2369 added a second `afterPrompt` branch for the other screen the
|
|
59
|
+
* shared chain could not read: the `/usage` panel, whose last row is
|
|
60
|
+
* `Press Esc to close`. It is not a picker — nothing moves, nothing commits —
|
|
61
|
+
* so it gets a reason of its own rather than the selection-list token, and the
|
|
62
|
+
* chat surface answers it with the one key it accepts. See
|
|
63
|
+
* `STATUS_REASON.COMMAND_CODE_DISMISSABLE_PANEL`.
|
|
64
|
+
*
|
|
58
65
|
* `afterPrompt` arrived with Issue #2297, for the one screen the shared chain
|
|
59
66
|
* genuinely could not read: the picker `/model` opens. It is a provider-grouped
|
|
60
67
|
* list of model NAMES — no option numbers — over a `› Type to search models...`
|
|
@@ -106,6 +113,32 @@ exports.commandCodeStatusDetector = (0, run_detection_1.createToolStatusDetector
|
|
|
106
113
|
tool: 'command-code',
|
|
107
114
|
verifiedAgainst: exports.VERIFIED_AGAINST,
|
|
108
115
|
afterPrompt(frame) {
|
|
116
|
+
// Issue #2369. `/usage` opens a READ-ONLY panel: a plan header, two usage
|
|
117
|
+
// meters, a breakdown URL, and `Press Esc to close` as its last row. It is
|
|
118
|
+
// matched before the picker footer below because the two are mutually
|
|
119
|
+
// exclusive sentences and this one is the more specific — a whole row that
|
|
120
|
+
// offers a dismiss and nothing else.
|
|
121
|
+
//
|
|
122
|
+
// `waiting` rather than `running`, which is the half of this branch that
|
|
123
|
+
// fixes the reported defect: `isUnclassifiedFrame` (`session/status-evidence`)
|
|
124
|
+
// is `status === 'running' && <floor reason>`, so a `waiting` verdict takes
|
|
125
|
+
// `isUnclassifiedActive` down with it and the chat surface stops answering
|
|
126
|
+
// an eighteen-button card to a one-key panel. The reason is deliberately NOT
|
|
127
|
+
// in `SELECTION_LIST_REASONS`: there is no highlight here, so the arrow pad
|
|
128
|
+
// would be as wrong as the answer keys were. `current-output-builder`
|
|
129
|
+
// publishes it as `isDismissablePanelActive` instead.
|
|
130
|
+
//
|
|
131
|
+
// A human still has to press the key, so `waiting` is also the honest word:
|
|
132
|
+
// nothing on this pane will move until they do.
|
|
133
|
+
if (selection_shape_1.DISMISSABLE_PANEL_FOOTER_PATTERN.test(frame.lastLines)) {
|
|
134
|
+
return {
|
|
135
|
+
status: 'waiting',
|
|
136
|
+
confidence: 'high',
|
|
137
|
+
reason: status_reason_1.STATUS_REASON.COMMAND_CODE_DISMISSABLE_PANEL,
|
|
138
|
+
hasActivePrompt: false,
|
|
139
|
+
evidence: 'positive',
|
|
140
|
+
};
|
|
141
|
+
}
|
|
109
142
|
// Issue #2297. Command Code's pickers (`/model` measured live on v1.40.1 at
|
|
110
143
|
// 200x1000) are arrow-driven overlays with a search box and a lower-case
|
|
111
144
|
// hint-bar footer. Nothing in the shared chain reads that footer, so before
|