commandmate 0.31.3 → 0.32.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +498 -484
- package/.next/app-path-routes-manifest.json +44 -42
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +3 -3
- package/.next/react-loadable-manifest.json +2 -2
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +8 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route.js +1 -1
- package/.next/server/app/api/app/update-check/route.js.nft.json +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/session/route.js +1 -1
- package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/start/route.js +1 -32
- package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/terminal/route.js +2 -33
- package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/capabilities/route.js +1 -1
- package/.next/server/app/api/capabilities/route.js.nft.json +1 -1
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +2 -2
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route.js +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route.js +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -0
- package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -0
- package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/relays/route.js +1 -0
- package/.next/server/app/api/relays/route.js.nft.json +1 -0
- package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route.js +1 -1
- package/.next/server/app/api/skills/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route.js +1 -1
- package/.next/server/app/api/skills/installations/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route.js +1 -1
- package/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route.js.nft.json +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/todos/route.js +1 -1
- package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +2 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +2 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +103 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/chat/page.js +2 -2
- package/.next/server/app/chat/page.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page.js +2 -2
- package/.next/server/app/more/page.js.nft.json +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page.js +1 -1
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page.js +2 -2
- package/.next/server/app/repositories/page.js.nft.json +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page.js +1 -1
- package/.next/server/app/review/page.js.nft.json +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.js +1 -1
- package/.next/server/app/sessions/page.js.nft.json +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page.js +2 -2
- package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page.js +2 -2
- package/.next/server/app/skills/installed/page.js.nft.json +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page.js +1 -1
- package/.next/server/app/skills/page.js.nft.json +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +11 -11
- package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +44 -42
- package/.next/server/chunks/1210.js +1 -0
- package/.next/server/chunks/153.js +1 -0
- package/.next/server/chunks/1886.js +1 -1
- package/.next/server/chunks/21.js +1 -0
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/3077.js +67 -0
- package/.next/server/chunks/3086.js +1 -0
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3270.js +1 -0
- package/.next/server/chunks/3543.js +1 -1
- package/.next/server/chunks/3730.js +1 -0
- package/.next/server/chunks/3925.js +1 -0
- package/.next/server/chunks/3945.js +1 -1
- package/.next/server/chunks/4443.js +2 -1
- package/.next/server/chunks/5043.js +1 -1
- package/.next/server/chunks/5164.js +1 -1
- package/.next/server/chunks/5220.js +1 -1
- package/.next/server/chunks/5354.js +1 -1
- package/.next/server/chunks/595.js +3 -3
- package/.next/server/chunks/6286.js +48 -0
- package/.next/server/chunks/6306.js +1 -0
- package/.next/server/chunks/6363.js +1 -0
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6491.js +103 -0
- package/.next/server/chunks/{9798.js → 6661.js} +1 -2
- package/.next/server/chunks/6838.js +1 -0
- package/.next/server/chunks/7875.js +25 -0
- package/.next/server/chunks/7890.js +1 -0
- package/.next/server/chunks/8063.js +32 -0
- package/.next/server/chunks/8118.js +1 -1
- package/.next/server/chunks/{7587.js → 8554.js} +1 -1
- package/.next/server/chunks/8687.js +1 -0
- package/.next/server/chunks/8807.js +37 -3
- package/.next/server/chunks/8918.js +6 -4
- package/.next/server/chunks/9123.js +2 -2
- package/.next/server/chunks/9130.js +1 -1
- package/.next/server/chunks/9584.js +1 -1
- package/.next/server/chunks/9627.js +21 -5
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/Lno4w_zWXdGdlfXg06Vp8/_buildManifest.js +1 -0
- package/.next/static/chunks/{5694.dda65070757534df.js → 3313.53f7ff985c0c8852.js} +1 -1
- package/.next/static/chunks/4718-9d63107c612a065d.js +1 -0
- package/.next/static/chunks/{4974-35592ec312322124.js → 5694-498765336d0b8c2b.js} +1 -1
- package/.next/static/chunks/{7485.442b21101fca7257.js → 7485.52361bc061cc663a.js} +1 -1
- package/.next/static/chunks/8019-cbf130d0e6334d2d.js +1 -0
- package/.next/static/chunks/8361-9bb887203c456edb.js +1 -0
- package/.next/static/chunks/8772-9be53a530950d804.js +1 -0
- package/.next/static/chunks/998-ac0ded6d5eeb4dc0.js +1 -0
- package/.next/static/chunks/app/api/agents/update/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/agents/versions/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/app/update/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/assistant/conversation/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/assistant/current-output/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/assistant/messages/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/assistant/session/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/assistant/start/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/assistant/terminal/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/assistant/tools/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/relays/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/remote/pair/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/settings/default-agents/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/skills/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/templates/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/todos/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/chat/{page-37d7615d17d7e2a0.js → page-e60d07c4c79602f0.js} +1 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/more/{page-353a3924e6d7968e.js → page-fc94f86aa881489e.js} +1 -1
- package/.next/static/chunks/app/{page-c2bf871d953a1d6f.js → page-6871cca022b24807.js} +1 -1
- package/.next/static/chunks/app/proxy/[...path]/route-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/repositories/{page-7d0f26df0537254c.js → page-788ded1b72963d94.js} +1 -1
- package/.next/static/chunks/app/review/{page-e3f141b2829973e9.js → page-35b99baaf3c93b38.js} +1 -1
- package/.next/static/chunks/app/sessions/{page-53f188ed9ca49e5f.js → page-fa2d62f3e8436c69.js} +1 -1
- package/.next/static/chunks/app/skills/[skillId]/{page-80569b720aea59cc.js → page-06799157652e8fa9.js} +1 -1
- package/.next/static/chunks/app/skills/installed/{page-dbd2690ad72da95b.js → page-2f3987e3a131c8d0.js} +1 -1
- package/.next/static/chunks/app/skills/{page-dacd36f9c11aa7da.js → page-e70bfcf5ed4e4865.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-8bc5b680c5f3eae4.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-3d82a9355d5612d9.js +1 -0
- package/.next/static/chunks/webpack-1dc9eb5ebb4fa5ff.js +1 -0
- package/.next/static/css/96d94a4ba771efc3.css +1 -0
- package/.next/trace +13 -13
- package/.next/types/app/api/relays/[relayId]/cancel/route.ts +347 -0
- package/.next/types/app/api/relays/route.ts +347 -0
- package/.next/types/routes.d.ts +3 -1
- package/.next/types/validator.ts +18 -0
- package/README.md +6 -2
- package/dist/cli/commands/ask.d.ts +34 -0
- package/dist/cli/commands/ask.d.ts.map +1 -0
- package/dist/cli/commands/ask.js +494 -0
- package/dist/cli/commands/capture.d.ts +20 -0
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +80 -30
- package/dist/cli/commands/docs.d.ts.map +1 -1
- package/dist/cli/commands/docs.js +47 -4
- package/dist/cli/commands/instances.d.ts +67 -0
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +147 -22
- package/dist/cli/commands/peers.d.ts +64 -0
- package/dist/cli/commands/peers.d.ts.map +1 -0
- package/dist/cli/commands/peers.js +208 -0
- package/dist/cli/commands/relays.d.ts +92 -0
- package/dist/cli/commands/relays.d.ts.map +1 -0
- package/dist/cli/commands/relays.js +293 -0
- package/dist/cli/commands/report.d.ts +3 -0
- package/dist/cli/commands/report.d.ts.map +1 -1
- package/dist/cli/commands/report.js +29 -1
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +13 -10
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +66 -20
- package/dist/cli/commands/task.d.ts.map +1 -1
- package/dist/cli/commands/task.js +30 -0
- package/dist/cli/commands/wait.d.ts +20 -0
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +55 -6
- package/dist/cli/commands/whoami.d.ts +176 -0
- package/dist/cli/commands/whoami.d.ts.map +1 -0
- package/dist/cli/commands/whoami.js +377 -0
- package/dist/cli/docs/agent-operations.d.ts +25 -1
- package/dist/cli/docs/agent-operations.d.ts.map +1 -1
- package/dist/cli/docs/agent-operations.js +184 -1
- package/dist/cli/index.d.ts +13 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +25 -1
- package/dist/cli/types/api-responses.d.ts +93 -0
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/index.d.ts +16 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/utils/api-client.d.ts +30 -1
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +28 -5
- package/dist/lib/cli/command-reference.d.ts +179 -0
- package/dist/lib/cli/command-reference.d.ts.map +1 -0
- package/dist/lib/cli/command-reference.js +210 -0
- package/dist/lib/detection/ansi.d.ts +14 -1
- package/dist/lib/detection/ansi.d.ts.map +1 -1
- package/dist/lib/detection/ansi.js +40 -3
- package/dist/lib/detection/status-reason.d.ts +28 -0
- package/dist/lib/detection/status-reason.d.ts.map +1 -1
- package/dist/lib/detection/status-reason.js +28 -0
- package/dist/server/locales/en/worktree.json +23 -0
- package/dist/server/locales/ja/worktree.json +23 -0
- package/dist/server/src/lib/auto-yes-poller.js +26 -11
- package/dist/server/src/lib/db/chat-db.js +161 -7
- package/dist/server/src/lib/db/migrations/index.js +2 -0
- package/dist/server/src/lib/db/migrations/runner.js +1 -1
- package/dist/server/src/lib/db/migrations/v60-session-relays.js +110 -0
- package/dist/server/src/lib/db/relay-db.js +343 -0
- package/dist/server/src/lib/detection/ansi.js +40 -3
- package/dist/server/src/lib/detection/cli-patterns.js +206 -2
- package/dist/server/src/lib/detection/selection-shape.js +72 -1
- package/dist/server/src/lib/detection/status-reason.js +28 -0
- package/dist/server/src/lib/detection/tools/antigravity/dialog.js +13 -7
- package/dist/server/src/lib/detection/tools/command-code/detect.js +33 -0
- package/dist/server/src/lib/history/user-turn-recorder.js +79 -16
- package/dist/server/src/lib/hooks/agent-event-service.js +27 -5
- package/dist/server/src/lib/hooks/sources/codex/history.js +63 -3
- package/dist/server/src/lib/hooks/sources/codex/transcript.js +53 -1
- package/dist/server/src/lib/hooks/sources/launch-command.js +112 -15
- package/dist/server/src/lib/hooks/stop-history-capture.js +252 -50
- package/dist/server/src/lib/polling/response-checker.js +174 -13
- package/dist/server/src/lib/polling/response-dedup.js +136 -0
- package/dist/server/src/lib/polling/structured-history-gate.js +14 -1
- package/dist/server/src/lib/realtime/terminal-broadcast.js +5 -0
- package/dist/server/src/lib/realtime/waiting-broadcast.js +12 -0
- package/dist/server/src/lib/relay/relay-delivery.js +554 -0
- package/dist/server/src/lib/relay/relay-messages.js +144 -0
- package/dist/server/src/lib/relay/relay-policy.js +127 -0
- package/dist/server/src/lib/relay/relay-readiness.js +63 -0
- package/dist/server/src/lib/relay/relay-session-ref.js +72 -0
- package/dist/server/src/lib/relay/relay-system-line.js +79 -0
- package/dist/server/src/lib/relay/relay-triggers.js +177 -0
- package/dist/server/src/lib/relay/types.js +25 -0
- package/dist/server/src/lib/session/current-output-builder.js +18 -0
- package/dist/server/src/lib/session/send-user-message.js +1 -0
- package/package.json +1 -1
- package/.next/server/chunks/1058.js +0 -1
- package/.next/server/chunks/1068.js +0 -1
- package/.next/server/chunks/1990.js +0 -103
- package/.next/server/chunks/261.js +0 -1
- package/.next/server/chunks/2739.js +0 -1
- package/.next/server/chunks/2839.js +0 -1
- package/.next/server/chunks/3484.js +0 -1
- package/.next/server/chunks/358.js +0 -1
- package/.next/server/chunks/3869.js +0 -1
- package/.next/server/chunks/4325.js +0 -1
- package/.next/server/chunks/4393.js +0 -1
- package/.next/server/chunks/5017.js +0 -1
- package/.next/server/chunks/5120.js +0 -1
- package/.next/server/chunks/552.js +0 -25
- package/.next/server/chunks/6130.js +0 -1
- package/.next/server/chunks/7836.js +0 -1
- package/.next/server/chunks/7859.js +0 -21
- package/.next/server/chunks/9696.js +0 -3
- package/.next/static/0hTIackGXw6v7diXJS6yN/_buildManifest.js +0 -1
- package/.next/static/chunks/2813-de885de8a4b11910.js +0 -1
- package/.next/static/chunks/4718-07ec4e10186928db.js +0 -1
- package/.next/static/chunks/6170-951b9f5fe6b4b3b5.js +0 -1
- package/.next/static/chunks/8019-f8e73c1fb5f6f0d3.js +0 -1
- package/.next/static/chunks/8593-fa0eb2802e0ce68a.js +0 -1
- package/.next/static/chunks/app/api/agents/update/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/agents/versions/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/assistant/conversation/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/assistant/current-output/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/assistant/messages/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/assistant/session/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/assistant/start/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/assistant/terminal/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/assistant/tools/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/capabilities/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/remote/pair/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/settings/default-agents/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/skills/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/templates/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/todos/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-ee11f7b8a34cba8c.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-91b639c90795baa9.js +0 -1
- package/.next/static/chunks/webpack-9f75198882fdaf08.js +0 -1
- package/.next/static/css/acc4b9c3feb04287.css +0 -1
- /package/.next/static/{0hTIackGXw6v7diXJS6yN → Lno4w_zWXdGdlfXg06Vp8}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Every sentence a relay puts in front of an agent or a reader (Issue #2377).
|
|
4
|
+
*
|
|
5
|
+
* ## Why the text is here and not in `locales/`
|
|
6
|
+
*
|
|
7
|
+
* Two of the four go into an AGENT's composer, which makes them prompts rather
|
|
8
|
+
* than labels: the `[from …]` header is what tells session A that the paragraph
|
|
9
|
+
* underneath it was written by somebody else, and a key that resolved to its own
|
|
10
|
+
* name — a renamed namespace, a dictionary that failed to load — would hand A an
|
|
11
|
+
* unattributed wall of text from another session and no way to tell. The same
|
|
12
|
+
* argument `buildDelegationBrief` makes in `lib/cli/command-reference`, and the
|
|
13
|
+
* same shape `buildModelChangedSentence` uses for the model-change history row
|
|
14
|
+
* (#2357): both languages written out side by side so a change to one is
|
|
15
|
+
* visibly a change to the other.
|
|
16
|
+
*
|
|
17
|
+
* The UI's own labels — the badges, the chat strip — ARE in `locales/`, because
|
|
18
|
+
* those are labels.
|
|
19
|
+
*
|
|
20
|
+
* ## The header is machine-readable on purpose
|
|
21
|
+
*
|
|
22
|
+
* {@link RELAY_HEADER_PREFIX} opens every delivered body in both languages, so
|
|
23
|
+
* a reader (a human, an agent, a later `capture`) can recognise a relayed
|
|
24
|
+
* message without knowing which language the server was speaking. The body
|
|
25
|
+
* after it is B's own text, untouched — summarising or translating it is out of
|
|
26
|
+
* scope by the Issue's own words.
|
|
27
|
+
*
|
|
28
|
+
* @module lib/relay/relay-messages
|
|
29
|
+
*/
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
exports.RELAY_HEADER_PREFIX = void 0;
|
|
32
|
+
exports.buildRelayHeader = buildRelayHeader;
|
|
33
|
+
exports.buildRelayReplyMessage = buildRelayReplyMessage;
|
|
34
|
+
exports.buildRelayPromptMessage = buildRelayPromptMessage;
|
|
35
|
+
exports.buildRelayExpiredMessage = buildRelayExpiredMessage;
|
|
36
|
+
exports.buildRelaySystemLine = buildRelaySystemLine;
|
|
37
|
+
/**
|
|
38
|
+
* The literal every relayed body starts with.
|
|
39
|
+
*
|
|
40
|
+
* `[from ` and not a localized word: it is the one token a consumer may match
|
|
41
|
+
* on, and it has to mean the same thing in both dictionaries.
|
|
42
|
+
*/
|
|
43
|
+
exports.RELAY_HEADER_PREFIX = '[from ';
|
|
44
|
+
/** How long a quoted prompt question may be before it is elided. */
|
|
45
|
+
const PROMPT_SUMMARY_MAX_CHARS = 200;
|
|
46
|
+
/** How many options of a confirmation are listed before the rest are counted. */
|
|
47
|
+
const PROMPT_OPTIONS_MAX = 9;
|
|
48
|
+
/**
|
|
49
|
+
* `[from <alias> / <worktree>]` — the attribution line.
|
|
50
|
+
*
|
|
51
|
+
* Both fields, always: an alias alone is ambiguous across worktrees (every
|
|
52
|
+
* repository's roster tends to contain a `Codex 2`) and a worktree alone does
|
|
53
|
+
* not say which of its sessions answered.
|
|
54
|
+
*/
|
|
55
|
+
function buildRelayHeader(sender) {
|
|
56
|
+
return `${exports.RELAY_HEADER_PREFIX}${sender.alias} / ${sender.worktreeId}]`;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* B's reply, attributed.
|
|
60
|
+
*
|
|
61
|
+
* The body is passed through verbatim — no summary, no translation, no
|
|
62
|
+
* re-wrapping. A blank body still gets a header: "they finished and said
|
|
63
|
+
* nothing" is information, and swallowing the delivery would leave A waiting on
|
|
64
|
+
* a relay that has already closed.
|
|
65
|
+
*/
|
|
66
|
+
function buildRelayReplyMessage(sender, reply) {
|
|
67
|
+
const body = reply.trim();
|
|
68
|
+
return body === ''
|
|
69
|
+
? `${buildRelayHeader(sender)} (no reply body)`
|
|
70
|
+
: `${buildRelayHeader(sender)} ${body}`;
|
|
71
|
+
}
|
|
72
|
+
/** Collapse whitespace and clip, so a 40-line dialog is one readable line. */
|
|
73
|
+
function squeeze(text, max) {
|
|
74
|
+
const flat = text.replace(/\s+/g, ' ').trim();
|
|
75
|
+
return flat.length <= max ? flat : `${flat.slice(0, max - 1)}…`;
|
|
76
|
+
}
|
|
77
|
+
const PROMPT_TEMPLATES = {
|
|
78
|
+
en: {
|
|
79
|
+
waiting: 'is waiting for a confirmation:',
|
|
80
|
+
options: 'Options:',
|
|
81
|
+
more: '(+{n} more)',
|
|
82
|
+
},
|
|
83
|
+
ja: {
|
|
84
|
+
waiting: '確認待ちです:',
|
|
85
|
+
options: '選択肢:',
|
|
86
|
+
more: '(他 {n} 件)',
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* "They are blocked on a dialog, and here is what it asks."
|
|
91
|
+
*
|
|
92
|
+
* Deliberately NOT an instruction to answer it. `respond` on somebody else's
|
|
93
|
+
* dialog picks whatever option happens to be highlighted (#1681), and the
|
|
94
|
+
* delegation brief already forbids it; this notice exists so A can decide what
|
|
95
|
+
* to do, which is usually to tell a human.
|
|
96
|
+
*/
|
|
97
|
+
function buildRelayPromptMessage(locale, sender, notice) {
|
|
98
|
+
const t = PROMPT_TEMPLATES[locale];
|
|
99
|
+
const head = `${buildRelayHeader(sender)} ${t.waiting} ${squeeze(notice.question, PROMPT_SUMMARY_MAX_CHARS)}`;
|
|
100
|
+
if (notice.options.length === 0)
|
|
101
|
+
return head;
|
|
102
|
+
const shown = notice.options.slice(0, PROMPT_OPTIONS_MAX);
|
|
103
|
+
const rest = notice.options.length - shown.length;
|
|
104
|
+
const listed = shown.map((o) => `${o.key}) ${squeeze(o.label, 60)}`).join(' ');
|
|
105
|
+
const more = rest > 0 ? ` ${t.more.replace('{n}', String(rest))}` : '';
|
|
106
|
+
return `${head}\n${t.options} ${listed}${more}`;
|
|
107
|
+
}
|
|
108
|
+
const EXPIRED_TEMPLATES = {
|
|
109
|
+
en: 'The reply you were waiting for did not arrive within {hours}h; the relay has expired.',
|
|
110
|
+
ja: '待っていた返信が {hours} 時間以内に届かなかったため、委任は期限切れになりました。',
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* The single line an expired relay leaves in A's composer.
|
|
114
|
+
*
|
|
115
|
+
* One line and one only — the Issue's "1行だけ通知". The once-ness is enforced
|
|
116
|
+
* by the ledger (`markRelayExpired` is a guarded update), not by this string.
|
|
117
|
+
*/
|
|
118
|
+
function buildRelayExpiredMessage(locale, sender, ttlMs) {
|
|
119
|
+
const hours = Math.max(1, Math.round(ttlMs / 3_600_000));
|
|
120
|
+
return `${buildRelayHeader(sender)} ${EXPIRED_TEMPLATES[locale].replace('{hours}', String(hours))}`;
|
|
121
|
+
}
|
|
122
|
+
const SYSTEM_TEMPLATES = {
|
|
123
|
+
en: {
|
|
124
|
+
requested: 'Delegated to {alias}; waiting for the reply.',
|
|
125
|
+
replied: 'Reply from {alias}.',
|
|
126
|
+
waiting: '{alias} is waiting for a confirmation.',
|
|
127
|
+
expired: 'The delegation to {alias} expired without a reply.',
|
|
128
|
+
},
|
|
129
|
+
ja: {
|
|
130
|
+
requested: '{alias} へ委任、返信待ち',
|
|
131
|
+
replied: '{alias} から返信',
|
|
132
|
+
waiting: '{alias} が確認待ち',
|
|
133
|
+
expired: '{alias} への委任が返信のないまま期限切れ',
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* The one-line system row the chat surface and History both show.
|
|
138
|
+
*
|
|
139
|
+
* Written into `chat_messages` exactly as the model-change row is (#2357), in
|
|
140
|
+
* the readers' language, because a stored row cannot be re-rendered per viewer.
|
|
141
|
+
*/
|
|
142
|
+
function buildRelaySystemLine(locale, kind, alias) {
|
|
143
|
+
return SYSTEM_TEMPLATES[locale][kind].replace('{alias}', alias);
|
|
144
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The four rules that stop relays from becoming a loop (Issue #2377).
|
|
4
|
+
*
|
|
5
|
+
* A relay is a standing instruction that fires on somebody else's turn, so the
|
|
6
|
+
* failure mode it introduces is not "a wrong answer" but "two agents talking to
|
|
7
|
+
* each other forever, each one's reply being the other's next prompt". None of
|
|
8
|
+
* the guards below is expensive; all four exist because the cheap version of
|
|
9
|
+
* this feature has no natural stopping point.
|
|
10
|
+
*
|
|
11
|
+
* 1. **A relayed message may not open a relay** (`RELAY_CHAIN_BLOCKED`). The
|
|
12
|
+
* default. `--allow-relay-chain` is the deliberate override, and the flag is
|
|
13
|
+
* named after what it permits rather than after what it disables.
|
|
14
|
+
* 2. **Chains are bounded** (`RELAY_HOPS_EXCEEDED`). Even with the override,
|
|
15
|
+
* depth stops at {@link MAX_RELAY_HOPS}.
|
|
16
|
+
* 3. **One open relay per direction** (`RELAY_DUPLICATE_PENDING`). A second
|
|
17
|
+
* standing instruction from A to B says nothing the first does not, and both
|
|
18
|
+
* would fire on the same finished turn.
|
|
19
|
+
* 4. **A session may not relay to itself** (`RELAY_SELF_TARGET`), which is a
|
|
20
|
+
* one-message loop with no second party in it at all.
|
|
21
|
+
*
|
|
22
|
+
* Pure: every decision is a function of values the caller already read. The
|
|
23
|
+
* database work — finding the parent relay, counting the open ones — is
|
|
24
|
+
* `relay-service`'s, so the rules can be tested without a schema.
|
|
25
|
+
*
|
|
26
|
+
* @module lib/relay/relay-policy
|
|
27
|
+
*/
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.RELAY_PUMP_INTERVAL_MS = exports.RELAY_SCRAPE_QUIET_MS = exports.MAX_OPEN_RELAYS_PER_PAIR = exports.MAX_RELAY_HOPS = exports.MAX_RELAY_TTL_MS = exports.MIN_RELAY_TTL_MS = exports.DEFAULT_RELAY_TTL_MS = void 0;
|
|
30
|
+
exports.isSameEndpoint = isSameEndpoint;
|
|
31
|
+
exports.decideRelayCreation = decideRelayCreation;
|
|
32
|
+
exports.isRelayRefusal = isRelayRefusal;
|
|
33
|
+
exports.resolveRelayTtlMs = resolveRelayTtlMs;
|
|
34
|
+
/** How long a relay stands before it is swept. 24h, per the Issue. */
|
|
35
|
+
exports.DEFAULT_RELAY_TTL_MS = 24 * 60 * 60 * 1000;
|
|
36
|
+
/** Shortest TTL a caller may ask for: one minute. */
|
|
37
|
+
exports.MIN_RELAY_TTL_MS = 60 * 1000;
|
|
38
|
+
/** Longest TTL a caller may ask for: seven days. */
|
|
39
|
+
exports.MAX_RELAY_TTL_MS = 7 * 24 * 60 * 60 * 1000;
|
|
40
|
+
/**
|
|
41
|
+
* How deep a chain may go.
|
|
42
|
+
*
|
|
43
|
+
* Three, by the Issue. Depth 1 is a relay nothing relayed into; a relay opened
|
|
44
|
+
* while answering one is 2, and so on. A request that would create depth 4 is
|
|
45
|
+
* refused — `--allow-relay-chain` widens the door, it does not remove the wall.
|
|
46
|
+
*/
|
|
47
|
+
exports.MAX_RELAY_HOPS = 3;
|
|
48
|
+
/** How many open relays one from→to direction may hold at once. */
|
|
49
|
+
exports.MAX_OPEN_RELAYS_PER_PAIR = 1;
|
|
50
|
+
/**
|
|
51
|
+
* How long a scrape-only tool must sit still before its pane counts as a reply.
|
|
52
|
+
*
|
|
53
|
+
* copilot, gemini and vibe-local keep no transcript, so what a completed turn
|
|
54
|
+
* leaves behind is the poller's copy of the SCREEN — and the poller's completion
|
|
55
|
+
* judgement is a string analysis of a frame that is still being drawn. Delivering
|
|
56
|
+
* on the first such judgement is how a half-written answer reaches session A as
|
|
57
|
+
* "the reply". The relay therefore waits, re-reads the newest row and delivers
|
|
58
|
+
* only if nothing newer arrived: the Issue's 「完了検知 + 数秒の静穏」.
|
|
59
|
+
*
|
|
60
|
+
* Tools with a transcript skip this entirely — their reader answers `true` only
|
|
61
|
+
* for a turn the agent has closed, which is a stronger statement than any amount
|
|
62
|
+
* of quiet.
|
|
63
|
+
*/
|
|
64
|
+
exports.RELAY_SCRAPE_QUIET_MS = 4_000;
|
|
65
|
+
/** How often the pump retries deliveries and sweeps expired relays. */
|
|
66
|
+
exports.RELAY_PUMP_INTERVAL_MS = 15_000;
|
|
67
|
+
/** Whether two endpoints name the same session. */
|
|
68
|
+
function isSameEndpoint(a, b) {
|
|
69
|
+
return a.worktreeId === b.worktreeId && a.instanceId === b.instanceId;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Apply all four rules and hand back the depth, or the refusal.
|
|
73
|
+
*
|
|
74
|
+
* Order matters only for which sentence an operator sees first, and it is the
|
|
75
|
+
* order they can act on: "you are the same session" is a typo, "this would be a
|
|
76
|
+
* chain" is a flag away, "the chain is too deep" and "you already have one" are
|
|
77
|
+
* decisions about work in flight.
|
|
78
|
+
*/
|
|
79
|
+
function decideRelayCreation(input) {
|
|
80
|
+
if (isSameEndpoint(input.from, input.to)) {
|
|
81
|
+
return {
|
|
82
|
+
code: 'RELAY_SELF_TARGET',
|
|
83
|
+
message: 'A session cannot relay a reply to itself. --reply-to must name a different '
|
|
84
|
+
+ 'worktree or a different agent instance.',
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
const hops = input.parentHops === null ? 1 : input.parentHops + 1;
|
|
88
|
+
if (input.parentHops !== null && !input.allowRelayChain) {
|
|
89
|
+
return {
|
|
90
|
+
code: 'RELAY_CHAIN_BLOCKED',
|
|
91
|
+
message: 'The last message this session was given arrived over a relay, so opening '
|
|
92
|
+
+ 'another one would chain two deliveries together. Pass --allow-relay-chain '
|
|
93
|
+
+ 'if that is what you mean.',
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
if (hops > exports.MAX_RELAY_HOPS) {
|
|
97
|
+
return {
|
|
98
|
+
code: 'RELAY_HOPS_EXCEEDED',
|
|
99
|
+
message: `Relay chains stop at ${exports.MAX_RELAY_HOPS} hops; this one would be ${hops}. `
|
|
100
|
+
+ 'Report the reply to whoever asked instead of forwarding it again.',
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
if (input.openBetween >= exports.MAX_OPEN_RELAYS_PER_PAIR) {
|
|
104
|
+
return {
|
|
105
|
+
code: 'RELAY_DUPLICATE_PENDING',
|
|
106
|
+
message: 'There is already an open relay between these two sessions. Wait for it, or '
|
|
107
|
+
+ 'withdraw it with `commandmate relays cancel <id>`.',
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
return { ok: true, hops };
|
|
111
|
+
}
|
|
112
|
+
/** Whether a verdict is a refusal. */
|
|
113
|
+
function isRelayRefusal(verdict) {
|
|
114
|
+
return 'code' in verdict;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Clamp a requested TTL into the supported window.
|
|
118
|
+
*
|
|
119
|
+
* Clamped rather than refused: the TTL is a sweep deadline, not a promise, and
|
|
120
|
+
* an operator who asked for a year gets the longest one that keeps the ledger
|
|
121
|
+
* from accumulating rows nobody will ever collect.
|
|
122
|
+
*/
|
|
123
|
+
function resolveRelayTtlMs(requested) {
|
|
124
|
+
if (requested === undefined || !Number.isFinite(requested))
|
|
125
|
+
return exports.DEFAULT_RELAY_TTL_MS;
|
|
126
|
+
return Math.min(exports.MAX_RELAY_TTL_MS, Math.max(exports.MIN_RELAY_TTL_MS, Math.trunc(requested)));
|
|
127
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* "Can session A be typed into right now?" (Issue #2377).
|
|
4
|
+
*
|
|
5
|
+
* A relay's delivery is a message put into a composer that belongs to somebody
|
|
6
|
+
* else's turn, so it has to ask the question `send` asks and one more besides.
|
|
7
|
+
*
|
|
8
|
+
* - **Is the session alive?** A relay to a pane that was closed has nowhere to
|
|
9
|
+
* land; holding it until the deadline is the honest answer, not starting a
|
|
10
|
+
* session on the operator's behalf to receive an answer they may never read.
|
|
11
|
+
* - **Is it mid-turn?** This is the one `send` does NOT ask, and the Issue asks
|
|
12
|
+
* for it by name: typing into a `running` composer interrupts the turn that
|
|
13
|
+
* is running. The relay waits for `ready` instead — the ledger is durable, so
|
|
14
|
+
* waiting costs nothing but time.
|
|
15
|
+
*
|
|
16
|
+
* The prompt-dialog question is deliberately NOT asked here: `sendUserMessage`
|
|
17
|
+
* already refuses a send that would land in an open dialog (#1708/#1737), and
|
|
18
|
+
* duplicating that judgement would give the relay path its own second opinion
|
|
19
|
+
* about a state the send path is the authority on. A refusal there is a retry
|
|
20
|
+
* here.
|
|
21
|
+
*
|
|
22
|
+
* Fail-open on an unreadable pane, for the same reason `prompt-waiting-guard`
|
|
23
|
+
* fails open: the cost of a wrong "ready" is a message the send path refuses
|
|
24
|
+
* and the pump retries, while the cost of a wrong "not ready" is a relay that
|
|
25
|
+
* expires holding an answer somebody is waiting for.
|
|
26
|
+
*
|
|
27
|
+
* @module lib/relay/relay-readiness
|
|
28
|
+
*/
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.findRelayHoldReason = findRelayHoldReason;
|
|
31
|
+
const manager_1 = require("../../lib/cli-tools/manager");
|
|
32
|
+
const cli_session_1 = require("../../lib/session/cli-session");
|
|
33
|
+
const status_detector_1 = require("../../lib/detection/status-detector");
|
|
34
|
+
const status_capture_config_1 = require("../../config/status-capture-config");
|
|
35
|
+
const logger_1 = require("../../lib/logger");
|
|
36
|
+
const logger = (0, logger_1.createLogger)('relay-readiness');
|
|
37
|
+
/**
|
|
38
|
+
* Whether a relay may be delivered into this session now.
|
|
39
|
+
*
|
|
40
|
+
* @returns `null` when the session can take the message, else why it cannot
|
|
41
|
+
*/
|
|
42
|
+
async function findRelayHoldReason(worktreeId, cliToolId, instanceId) {
|
|
43
|
+
try {
|
|
44
|
+
const cliTool = manager_1.CLIToolManager.getInstance().getTool(cliToolId);
|
|
45
|
+
if (!(await cliTool.isRunning(worktreeId, instanceId)))
|
|
46
|
+
return 'session_stopped';
|
|
47
|
+
const output = await (0, cli_session_1.captureSessionOutput)(worktreeId, cliToolId, status_capture_config_1.STATUS_CAPTURE_LINES, instanceId);
|
|
48
|
+
const status = (0, status_detector_1.detectSessionStatus)(output, cliToolId);
|
|
49
|
+
// Only `running` holds. `waiting` is a dialog, which is the send path's
|
|
50
|
+
// judgement to make (and its refusal is a retry); `idle` and `ready` both
|
|
51
|
+
// mean the composer is the thing on screen.
|
|
52
|
+
return status.status === 'running' ? 'generating' : null;
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
logger.warn('relay-readiness-check-failed', {
|
|
56
|
+
worktreeId,
|
|
57
|
+
cliToolId,
|
|
58
|
+
instanceId,
|
|
59
|
+
error: error instanceof Error ? error.message : String(error),
|
|
60
|
+
});
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Turning "worktree + instance" into the three facts a relay needs (#2377).
|
|
4
|
+
*
|
|
5
|
+
* A ledger row stores two ids and nothing else, on purpose — an alias can be
|
|
6
|
+
* renamed and a roster row deleted, and a relay must survive both. Everything
|
|
7
|
+
* else a delivery needs (which CLI tool drives the session, what to call it in
|
|
8
|
+
* the attribution header) is therefore resolved at the moment it is needed, from
|
|
9
|
+
* the roster, with the id as the fallback for every field.
|
|
10
|
+
*
|
|
11
|
+
* Never throws. A relay whose roster cannot be read still delivers, attributed
|
|
12
|
+
* to the instance id — which is worse to read and strictly better than not
|
|
13
|
+
* delivering.
|
|
14
|
+
*
|
|
15
|
+
* @module lib/relay/relay-session-ref
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.resolveRelaySession = resolveRelaySession;
|
|
19
|
+
exports.relayWorktreeExists = relayWorktreeExists;
|
|
20
|
+
const agent_instances_db_1 = require("../../lib/db/agent-instances-db");
|
|
21
|
+
const worktree_db_1 = require("../../lib/db/worktree-db");
|
|
22
|
+
const logger_1 = require("../../lib/logger");
|
|
23
|
+
const logger = (0, logger_1.createLogger)('relay-session-ref');
|
|
24
|
+
/** The tool assumed when neither the roster nor the worktree declares one. */
|
|
25
|
+
const FALLBACK_CLI_TOOL = 'claude';
|
|
26
|
+
/**
|
|
27
|
+
* Resolve one end of a relay.
|
|
28
|
+
*
|
|
29
|
+
* The tool comes from `resolveInstanceCliTool` — the same authority
|
|
30
|
+
* `POST /api/worktrees/:id/send` uses, so a relay cannot address a session the
|
|
31
|
+
* send route would address differently (#1629 is the record of what two
|
|
32
|
+
* authorities on that cost) — falling back to the worktree's own tool and then
|
|
33
|
+
* to claude.
|
|
34
|
+
*/
|
|
35
|
+
function resolveRelaySession(db, endpoint) {
|
|
36
|
+
let cliToolId = FALLBACK_CLI_TOOL;
|
|
37
|
+
let alias = endpoint.instanceId;
|
|
38
|
+
try {
|
|
39
|
+
const resolution = (0, agent_instances_db_1.resolveInstanceCliTool)(db, endpoint.worktreeId, endpoint.instanceId);
|
|
40
|
+
if (resolution.ok && resolution.cliToolId) {
|
|
41
|
+
cliToolId = resolution.cliToolId;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
cliToolId = (0, worktree_db_1.getWorktreeById)(db, endpoint.worktreeId)?.cliToolId ?? FALLBACK_CLI_TOOL;
|
|
45
|
+
}
|
|
46
|
+
const rosterRow = (0, agent_instances_db_1.getAgentInstance)(db, endpoint.worktreeId, endpoint.instanceId);
|
|
47
|
+
if (rosterRow?.alias)
|
|
48
|
+
alias = rosterRow.alias;
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
logger.warn('relay-session-resolve-failed', {
|
|
52
|
+
worktreeId: endpoint.worktreeId,
|
|
53
|
+
instanceId: endpoint.instanceId,
|
|
54
|
+
error: error instanceof Error ? error.message : String(error),
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
worktreeId: endpoint.worktreeId,
|
|
59
|
+
instanceId: endpoint.instanceId,
|
|
60
|
+
cliToolId,
|
|
61
|
+
alias,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/** Whether this worktree exists at all. The one check a create must make. */
|
|
65
|
+
function relayWorktreeExists(db, worktreeId) {
|
|
66
|
+
try {
|
|
67
|
+
return (0, worktree_db_1.getWorktreeById)(db, worktreeId) !== null;
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The one-line system rows a relay leaves in the requester's transcript (#2377).
|
|
4
|
+
*
|
|
5
|
+
* Exactly the mechanism Issue #2357 built for "the model changed": a row in
|
|
6
|
+
* `chat_messages`, written in the readers' language, followed by the same
|
|
7
|
+
* `message` frame `sendUserMessage` publishes. One write therefore reaches the
|
|
8
|
+
* chat surface, the History tab and any transcript that happens to be open,
|
|
9
|
+
* without a fourth history surface being invented for four sentences.
|
|
10
|
+
*
|
|
11
|
+
* Idempotent: the request id is `relay-sys:<relayId>:<kind>` and each row is
|
|
12
|
+
* probed for before it is written, so a delivery that is retried — which the
|
|
13
|
+
* pump does by design — does not stack four "waiting for the reply" lines.
|
|
14
|
+
*
|
|
15
|
+
* Never throws. A transcript line is the least important of a relay's three
|
|
16
|
+
* effects, and it must not cost the delivery.
|
|
17
|
+
*
|
|
18
|
+
* @module lib/relay/relay-system-line
|
|
19
|
+
*/
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.writeRelaySystemLine = writeRelaySystemLine;
|
|
22
|
+
const chat_db_1 = require("../../lib/db/chat-db");
|
|
23
|
+
const model_change_push_notifier_1 = require("../../lib/push/model-change-push-notifier");
|
|
24
|
+
const ws_server_1 = require("../../lib/ws-server");
|
|
25
|
+
const relay_messages_1 = require("../../lib/relay/relay-messages");
|
|
26
|
+
const logger_1 = require("../../lib/logger");
|
|
27
|
+
const logger = (0, logger_1.createLogger)('relay-system-line');
|
|
28
|
+
/**
|
|
29
|
+
* Write one system line into `target`'s transcript, once.
|
|
30
|
+
*
|
|
31
|
+
* @param db - Database
|
|
32
|
+
* @param relayId - The ledger row the line is about
|
|
33
|
+
* @param kind - Which of the four sentences
|
|
34
|
+
* @param target - Whose transcript the line goes in (always the requester, A)
|
|
35
|
+
* @param subject - Whose name the sentence carries (always the worker, B)
|
|
36
|
+
* @param at - Epoch ms
|
|
37
|
+
* @returns Whether a row was written by this call
|
|
38
|
+
*/
|
|
39
|
+
function writeRelaySystemLine(db, relayId, kind, target, subject, at = Date.now()) {
|
|
40
|
+
const requestId = `${chat_db_1.RELAY_SYSTEM_REQUEST_ID_PREFIX}${relayId}:${kind}`;
|
|
41
|
+
try {
|
|
42
|
+
if ((0, chat_db_1.findMessageByRequestId)(db, target.worktreeId, requestId))
|
|
43
|
+
return false;
|
|
44
|
+
const locale = (0, model_change_push_notifier_1.resolveReadersLocale)(db);
|
|
45
|
+
const message = (0, chat_db_1.createRelaySystemMessage)(db, {
|
|
46
|
+
worktreeId: target.worktreeId,
|
|
47
|
+
cliToolId: target.cliToolId,
|
|
48
|
+
instanceId: target.instanceId,
|
|
49
|
+
content: (0, relay_messages_1.buildRelaySystemLine)(locale, kind, subject.alias),
|
|
50
|
+
relayId,
|
|
51
|
+
kind,
|
|
52
|
+
at,
|
|
53
|
+
});
|
|
54
|
+
try {
|
|
55
|
+
(0, ws_server_1.broadcastMessage)('message', {
|
|
56
|
+
worktreeId: target.worktreeId,
|
|
57
|
+
message: { ...message, cliToolId: target.cliToolId, instanceId: target.instanceId },
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
// The row is already durable; a socket with no owner must not turn a
|
|
62
|
+
// written line into a failure the caller reports.
|
|
63
|
+
logger.warn('relay-system-line-broadcast-failed', {
|
|
64
|
+
relayId,
|
|
65
|
+
kind,
|
|
66
|
+
error: error instanceof Error ? error.message : String(error),
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
logger.warn('relay-system-line-failed', {
|
|
73
|
+
relayId,
|
|
74
|
+
kind,
|
|
75
|
+
error: error instanceof Error ? error.message : String(error),
|
|
76
|
+
});
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Where a relay is woken up (Issue #2377).
|
|
4
|
+
*
|
|
5
|
+
* Three edges matter, and this module is the seam each of them calls into. It
|
|
6
|
+
* exists as a seam rather than as three direct calls for one concrete reason:
|
|
7
|
+
* the delivery reaches `sendUserMessage`, which reaches `response-poller`, which
|
|
8
|
+
* reaches `response-checker` — one of the callers below. A static import would
|
|
9
|
+
* close that cycle, so every entry point here loads `relay-delivery` lazily and
|
|
10
|
+
* the poller's module graph stays what it was. It is the same move
|
|
11
|
+
* `stop-history-capture` makes for the transcript readers, and for the same
|
|
12
|
+
* reason.
|
|
13
|
+
*
|
|
14
|
+
* The three edges:
|
|
15
|
+
*
|
|
16
|
+
* 1. **A turn ended.** {@link onRelayTurnCompleted}, called from the two places
|
|
17
|
+
* that record a finished reply — the structured-history gate (the agent's
|
|
18
|
+
* own transcript; both the Stop hook and the poller reach it) and the
|
|
19
|
+
* poller's own scrape, for the tools that keep no transcript.
|
|
20
|
+
* 2. **A session stopped on a dialog.** The waiting edge, subscribed to here
|
|
21
|
+
* rather than polled: `waiting-episode-state` already makes the crossing
|
|
22
|
+
* observable exactly once, and a fourth surface keeping its own "was it
|
|
23
|
+
* waiting last time?" is precisely what #1786 exists to prevent.
|
|
24
|
+
* 3. **Time passed.** The maintenance tick — expire the deadlines, retry the
|
|
25
|
+
* deliveries a busy composer refused.
|
|
26
|
+
*
|
|
27
|
+
* Armed by `startWaitingStatusBroadcast`, which `ws-server` calls from
|
|
28
|
+
* `setupWebSocket`; disarmed with it. That is where #2357 put the model-change
|
|
29
|
+
* subscription for the same reason: it is the one place in the process that
|
|
30
|
+
* knows the server is up, and a suite that stands a server up and tears it down
|
|
31
|
+
* leaves nothing running.
|
|
32
|
+
*
|
|
33
|
+
* @module lib/relay/relay-triggers
|
|
34
|
+
*/
|
|
35
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
36
|
+
if (k2 === undefined) k2 = k;
|
|
37
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
38
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
39
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
40
|
+
}
|
|
41
|
+
Object.defineProperty(o, k2, desc);
|
|
42
|
+
}) : (function(o, m, k, k2) {
|
|
43
|
+
if (k2 === undefined) k2 = k;
|
|
44
|
+
o[k2] = m[k];
|
|
45
|
+
}));
|
|
46
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
47
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
48
|
+
}) : function(o, v) {
|
|
49
|
+
o["default"] = v;
|
|
50
|
+
});
|
|
51
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
52
|
+
var ownKeys = function(o) {
|
|
53
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
54
|
+
var ar = [];
|
|
55
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
56
|
+
return ar;
|
|
57
|
+
};
|
|
58
|
+
return ownKeys(o);
|
|
59
|
+
};
|
|
60
|
+
return function (mod) {
|
|
61
|
+
if (mod && mod.__esModule) return mod;
|
|
62
|
+
var result = {};
|
|
63
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
64
|
+
__setModuleDefault(result, mod);
|
|
65
|
+
return result;
|
|
66
|
+
};
|
|
67
|
+
})();
|
|
68
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
69
|
+
exports.onRelayTurnCompleted = onRelayTurnCompleted;
|
|
70
|
+
exports.onRelayPromptWaiting = onRelayPromptWaiting;
|
|
71
|
+
exports.runRelayMaintenance = runRelayMaintenance;
|
|
72
|
+
exports.startRelayTriggers = startRelayTriggers;
|
|
73
|
+
exports.stopRelayTriggers = stopRelayTriggers;
|
|
74
|
+
exports.areRelayTriggersActive = areRelayTriggersActive;
|
|
75
|
+
const waiting_episode_state_1 = require("../../lib/session/waiting-episode-state");
|
|
76
|
+
const relay_policy_1 = require("../../lib/relay/relay-policy");
|
|
77
|
+
const logger_1 = require("../../lib/logger");
|
|
78
|
+
const logger = (0, logger_1.createLogger)('relay-triggers');
|
|
79
|
+
/**
|
|
80
|
+
* Tell the relays that this instance finished a turn.
|
|
81
|
+
*
|
|
82
|
+
* `settled` distinguishes the two producers: `true` for a turn the agent's own
|
|
83
|
+
* transcript says is closed, `false` for one judged from the screen — which is
|
|
84
|
+
* what makes the quiet window in `relay-delivery` apply to exactly the tools
|
|
85
|
+
* that need it.
|
|
86
|
+
*
|
|
87
|
+
* Fire-and-forget and never throws: this is called from inside the poller's save
|
|
88
|
+
* path and from a hook receiver, and in both a relay failure must not cost the
|
|
89
|
+
* turn that was just recorded.
|
|
90
|
+
*/
|
|
91
|
+
function onRelayTurnCompleted(worktreeId, cliToolId, instanceId, settled) {
|
|
92
|
+
const worker = { worktreeId, cliToolId, instanceId: instanceId ?? cliToolId };
|
|
93
|
+
void (async () => {
|
|
94
|
+
try {
|
|
95
|
+
const { notifyRelayTurnCompleted } = await Promise.resolve().then(() => __importStar(require('../../lib/relay/relay-delivery')));
|
|
96
|
+
await notifyRelayTurnCompleted(worker, { settled });
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
logger.warn('relay-turn-trigger-failed', {
|
|
100
|
+
worktreeId,
|
|
101
|
+
cliToolId,
|
|
102
|
+
instanceId: worker.instanceId,
|
|
103
|
+
error: error instanceof Error ? error.message : String(error),
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
})();
|
|
107
|
+
}
|
|
108
|
+
/** Tell the relays that this instance is blocked on a confirmation. */
|
|
109
|
+
function onRelayPromptWaiting(worktreeId, cliToolId, instanceId) {
|
|
110
|
+
const worker = { worktreeId, cliToolId, instanceId: instanceId ?? cliToolId };
|
|
111
|
+
void (async () => {
|
|
112
|
+
try {
|
|
113
|
+
const { notifyRelayPromptWaiting } = await Promise.resolve().then(() => __importStar(require('../../lib/relay/relay-delivery')));
|
|
114
|
+
notifyRelayPromptWaiting(worker);
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
logger.warn('relay-prompt-trigger-failed', {
|
|
118
|
+
worktreeId,
|
|
119
|
+
cliToolId,
|
|
120
|
+
instanceId: worker.instanceId,
|
|
121
|
+
error: error instanceof Error ? error.message : String(error),
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
})();
|
|
125
|
+
}
|
|
126
|
+
/** Run one maintenance tick now. Exported for the suite and for the timer. */
|
|
127
|
+
async function runRelayMaintenance() {
|
|
128
|
+
try {
|
|
129
|
+
const { runRelayMaintenanceTick } = await Promise.resolve().then(() => __importStar(require('../../lib/relay/relay-delivery')));
|
|
130
|
+
await runRelayMaintenanceTick();
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
logger.warn('relay-maintenance-failed', {
|
|
134
|
+
error: error instanceof Error ? error.message : String(error),
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Subscribe to the waiting edge and start the maintenance loop.
|
|
140
|
+
*
|
|
141
|
+
* Idempotent: calling it again replaces what is already armed rather than
|
|
142
|
+
* adding a second copy, so a re-entered `setupWebSocket` cannot notify twice or
|
|
143
|
+
* leave two timers running.
|
|
144
|
+
*/
|
|
145
|
+
function startRelayTriggers() {
|
|
146
|
+
stopRelayTriggers();
|
|
147
|
+
globalThis.__relayTriggersUnsubscribe = (0, waiting_episode_state_1.onWaitingTransition)((transition) => {
|
|
148
|
+
// Only the OPENING edge, and only a real dialog. `menu` is a pager or a
|
|
149
|
+
// model picker — nobody is being asked anything — and `unclassified` is a
|
|
150
|
+
// frame the detectors failed on, which is not something to describe to
|
|
151
|
+
// another session as a question it might report to a human.
|
|
152
|
+
if (!transition.waiting || transition.kind !== 'prompt')
|
|
153
|
+
return;
|
|
154
|
+
onRelayPromptWaiting(transition.worktreeId, transition.cliToolId, transition.instanceId);
|
|
155
|
+
});
|
|
156
|
+
const timer = setInterval(() => void runRelayMaintenance(), relay_policy_1.RELAY_PUMP_INTERVAL_MS);
|
|
157
|
+
// The loop must not be the reason a process stays alive: a CLI that imported
|
|
158
|
+
// this graph for one call would otherwise never exit.
|
|
159
|
+
timer.unref?.();
|
|
160
|
+
globalThis.__relayMaintenanceTimer = timer;
|
|
161
|
+
}
|
|
162
|
+
/** Drop the subscription and the timer. Safe when nothing is armed. */
|
|
163
|
+
function stopRelayTriggers() {
|
|
164
|
+
const unsubscribe = globalThis.__relayTriggersUnsubscribe;
|
|
165
|
+
if (unsubscribe) {
|
|
166
|
+
unsubscribe();
|
|
167
|
+
globalThis.__relayTriggersUnsubscribe = undefined;
|
|
168
|
+
}
|
|
169
|
+
if (globalThis.__relayMaintenanceTimer) {
|
|
170
|
+
clearInterval(globalThis.__relayMaintenanceTimer);
|
|
171
|
+
globalThis.__relayMaintenanceTimer = undefined;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/** Whether the triggers are armed. Test seam. */
|
|
175
|
+
function areRelayTriggersActive() {
|
|
176
|
+
return globalThis.__relayTriggersUnsubscribe !== undefined;
|
|
177
|
+
}
|