commandmate 0.49.1 → 0.49.3
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 +246 -243
- package/.next/app-path-routes-manifest.json +18 -17
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +12 -12
- 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/release-notes/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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route.js +1 -1
- package/.next/server/app/api/daily-summary/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js.nft.json +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 +2 -2
- 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.js.nft.json +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route.js +1 -1
- package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js +4 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/resolve/route.js +1 -0
- package/.next/server/app/api/relays/[relayId]/resolve/route.js.nft.json +1 -0
- package/.next/server/app/api/relays/[relayId]/resolve/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/relays/[relayId]/route.js +1 -1
- package/.next/server/app/api/relays/[relayId]/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/route.js +4 -1
- package/.next/server/app/api/relays/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
- 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/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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/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 +2 -2
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +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]/direct-input/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/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 +2 -2
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +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/notes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/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 +2 -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.js.nft.json +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 +2 -2
- package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +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.js.nft.json +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 +1 -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 +1 -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]/prompt-response/strict/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/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 +2 -2
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +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 +2 -2
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +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 +2 -2
- package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +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 -144
- 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 +3 -3
- 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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +2 -2
- 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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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/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_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +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 +10 -10
- 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 +18 -17
- package/.next/server/chunks/1308.js +1 -0
- package/.next/server/chunks/1501.js +5 -4
- package/.next/server/chunks/1656.js +2 -2
- package/.next/server/chunks/1957.js +2 -0
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2897.js +1 -0
- package/.next/server/chunks/3417.js +1 -0
- package/.next/server/chunks/3505.js +1 -1
- package/.next/server/chunks/3801.js +8 -8
- package/.next/server/chunks/4207.js +1 -1
- package/.next/server/chunks/4490.js +1 -0
- package/.next/server/chunks/4911.js +1 -0
- package/.next/server/chunks/4936.js +1 -0
- package/.next/server/chunks/5209.js +2 -1
- package/.next/server/chunks/5350.js +212 -0
- package/.next/server/chunks/5354.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/7023.js +3 -3
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/7926.js +1 -0
- package/.next/server/chunks/8581.js +15 -15
- package/.next/server/chunks/8728.js +2 -2
- package/.next/server/chunks/8782.js +1 -1
- package/.next/server/chunks/8807.js +89 -88
- package/.next/server/chunks/8918.js +3 -3
- package/.next/server/chunks/9169.js +1 -0
- package/.next/server/chunks/9390.js +1 -1
- package/.next/server/chunks/9584.js +1 -1
- package/.next/server/chunks/9627.js +5 -5
- package/.next/server/chunks/9702.js +1 -0
- package/.next/server/chunks/9731.js +3 -3
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{2407-675ba6b21844dc3b.js → 2407-87ec01332344ec2b.js} +1 -1
- package/.next/static/chunks/3931-3ef48b8d97357282.js +1 -0
- package/.next/static/chunks/5794-7975b8e51e731b19.js +1 -0
- package/.next/static/chunks/6966-d8dc6032410ffaba.js +1 -0
- package/.next/static/chunks/7197-ed3b3d99ac3bd450.js +1 -0
- package/.next/static/chunks/7636-a48cf0f7110250c5.js +1 -0
- package/.next/static/chunks/app/api/agents/update/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/agents/versions/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/app/release-notes/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/app/update/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/resolve/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/relays/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/remote/pair/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/settings/default-agents/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/skills/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/templates/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/layout-b9d8aef70e4f17b2.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/more/page-ff5af5ca48774c89.js +1 -0
- package/.next/static/chunks/app/page-b4863bfe0452e09d.js +1 -0
- package/.next/static/chunks/app/proxy/[...path]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/review/page-ff3efb96fdf9bb4b.js +1 -0
- package/.next/static/chunks/app/sessions/{page-890fd50ec9739973.js → page-c6eb7c02db2f4c80.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-f6a151304860b549.js +1 -0
- package/.next/trace +13 -13
- package/.next/types/app/api/relays/[relayId]/resolve/route.ts +347 -0
- package/.next/types/routes.d.ts +2 -1
- package/.next/types/validator.ts +9 -0
- package/dist/cli/commands/ask.d.ts.map +1 -1
- package/dist/cli/commands/ask.js +56 -5
- package/dist/cli/commands/attach.d.ts +4 -1
- package/dist/cli/commands/attach.d.ts.map +1 -1
- package/dist/cli/commands/attach.js +19 -7
- package/dist/cli/commands/command-target.d.ts +7 -0
- package/dist/cli/commands/command-target.d.ts.map +1 -1
- package/dist/cli/commands/command-target.js +10 -0
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +38 -2
- package/dist/cli/commands/message-dispatch.d.ts +17 -3
- package/dist/cli/commands/message-dispatch.d.ts.map +1 -1
- package/dist/cli/commands/message-dispatch.js +14 -8
- package/dist/cli/commands/prompt.d.ts.map +1 -1
- package/dist/cli/commands/prompt.js +2 -1
- package/dist/cli/commands/relays.d.ts +4 -1
- package/dist/cli/commands/relays.d.ts.map +1 -1
- package/dist/cli/commands/relays.js +146 -8
- package/dist/cli/commands/report.d.ts +7 -2
- package/dist/cli/commands/report.d.ts.map +1 -1
- package/dist/cli/commands/report.js +19 -6
- package/dist/cli/commands/respond-strict.d.ts.map +1 -1
- package/dist/cli/commands/respond-strict.js +29 -5
- package/dist/cli/commands/respond.d.ts +2 -2
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +40 -37
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +8 -4
- package/dist/cli/commands/task.d.ts +22 -0
- package/dist/cli/commands/task.d.ts.map +1 -1
- package/dist/cli/commands/task.js +26 -18
- package/dist/cli/commands/wait-instance.d.ts +9 -1
- package/dist/cli/commands/wait-instance.d.ts.map +1 -1
- package/dist/cli/commands/wait-instance.js +15 -0
- package/dist/cli/commands/wait-poll-state.d.ts +18 -0
- package/dist/cli/commands/wait-poll-state.d.ts.map +1 -1
- package/dist/cli/commands/wait-verify.d.ts +2 -1
- package/dist/cli/commands/wait-verify.d.ts.map +1 -1
- package/dist/cli/commands/wait-verify.js +5 -1
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +37 -13
- package/dist/cli/commands/whoami.d.ts.map +1 -1
- package/dist/cli/commands/whoami.js +3 -1
- package/dist/cli/docs/agent-operations.d.ts +1 -1
- package/dist/cli/docs/agent-operations.d.ts.map +1 -1
- package/dist/cli/docs/agent-operations.js +1 -0
- package/dist/cli/types/api-responses.d.ts +55 -1
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/utils/api-client-deadline.d.ts +28 -0
- package/dist/cli/utils/api-client-deadline.d.ts.map +1 -0
- package/dist/cli/utils/api-client-deadline.js +46 -0
- package/dist/cli/utils/api-client-errors.d.ts +118 -0
- package/dist/cli/utils/api-client-errors.d.ts.map +1 -0
- package/dist/cli/utils/api-client-errors.js +210 -0
- package/dist/cli/utils/api-client.d.ts +33 -109
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +202 -227
- package/dist/cli/utils/follow-up-command.d.ts +38 -0
- package/dist/cli/utils/follow-up-command.d.ts.map +1 -0
- package/dist/cli/utils/follow-up-command.js +57 -0
- package/dist/cli/utils/reply-ledger.d.ts +1 -1
- package/dist/cli/utils/reply-ledger.d.ts.map +1 -1
- package/dist/cli/utils/reply-ledger.js +7 -2
- package/dist/cli/utils/server-capabilities.d.ts +18 -0
- package/dist/cli/utils/server-capabilities.d.ts.map +1 -1
- package/dist/cli/utils/server-capabilities.js +36 -3
- package/dist/cli/utils/session-target.d.ts +1 -1
- package/dist/cli/utils/session-target.d.ts.map +1 -1
- package/dist/cli/utils/session-target.js +3 -0
- package/dist/cli/utils/verify-runner.d.ts +7 -0
- package/dist/cli/utils/verify-runner.d.ts.map +1 -1
- package/dist/cli/utils/verify-runner.js +51 -15
- package/dist/lib/cli-tools/session-name.d.ts.map +1 -1
- package/dist/lib/cli-tools/session-name.js +11 -3
- package/dist/lib/cli-tools/types.d.ts +6 -0
- package/dist/lib/cli-tools/types.d.ts.map +1 -1
- package/dist/lib/session/send-attempt-types.d.ts +25 -0
- package/dist/lib/session/send-attempt-types.d.ts.map +1 -1
- package/dist/lib/session/send-attempt-types.js +10 -1
- package/dist/lib/verification/session-kill-ledger.d.ts +110 -0
- package/dist/lib/verification/session-kill-ledger.d.ts.map +1 -0
- package/dist/lib/verification/session-kill-ledger.js +174 -0
- package/dist/server/locales/en/worktree.json +9 -0
- package/dist/server/locales/ja/worktree.json +9 -0
- package/dist/server/src/config/cli-tool-timing-config.js +1 -7
- package/dist/server/src/lib/auto-yes-poller.js +5 -1
- package/dist/server/src/lib/cli-tools/antigravity.js +5 -2
- package/dist/server/src/lib/cli-tools/base.js +39 -0
- package/dist/server/src/lib/cli-tools/claude.js +8 -2
- package/dist/server/src/lib/cli-tools/codex.js +7 -4
- package/dist/server/src/lib/cli-tools/command-code.js +14 -18
- package/dist/server/src/lib/cli-tools/copilot.js +159 -28
- package/dist/server/src/lib/cli-tools/gemini.js +10 -2
- package/dist/server/src/lib/cli-tools/launch-keys.js +39 -0
- package/dist/server/src/lib/cli-tools/opencode-v2.js +6 -2
- package/dist/server/src/lib/cli-tools/opencode.js +162 -8
- package/dist/server/src/lib/cli-tools/prompt-wait-dialog.js +115 -0
- package/dist/server/src/lib/cli-tools/session-name.js +11 -3
- package/dist/server/src/lib/cli-tools/submit-composer-read.js +57 -14
- package/dist/server/src/lib/cli-tools/submit-verified-sender-composer.js +78 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender-lock.js +116 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender-report.js +250 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender-shared.js +106 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender.js +143 -187
- package/dist/server/src/lib/cli-tools/vibe-local.js +91 -2
- package/dist/server/src/lib/db/chat-db.js +14 -1
- package/dist/server/src/lib/db/db-instance.js +114 -2
- package/dist/server/src/lib/db/db-migration-path.js +63 -2
- 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/v63-session-relays-delivery-attempt.js +61 -0
- package/dist/server/src/lib/db/relay-bind-db-base.js +89 -0
- package/dist/server/src/lib/db/relay-bind-db-delivery.js +223 -0
- package/dist/server/src/lib/db/relay-bind-db-pending.js +183 -0
- package/dist/server/src/lib/db/relay-bind-db.js +88 -167
- package/dist/server/src/lib/db/relay-db-base.js +20 -0
- package/dist/server/src/lib/db/relay-db-count.js +49 -0
- package/dist/server/src/lib/db/relay-db-delivery.js +104 -0
- package/dist/server/src/lib/db/relay-db-hold.js +250 -0
- package/dist/server/src/lib/db/relay-db.js +33 -92
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +5 -4
- package/dist/server/src/lib/detection/tools/opencode/composer-own-text.js +119 -0
- package/dist/server/src/lib/detection/tools/opencode/readiness.js +62 -0
- package/dist/server/src/lib/detection/tools/vibe-local/readiness.js +70 -0
- package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +2 -3
- package/dist/server/src/lib/prompt-answer-errors.js +76 -2
- package/dist/server/src/lib/relay/relay-bound-reply.js +20 -9
- package/dist/server/src/lib/relay/relay-delivery.js +359 -79
- package/dist/server/src/lib/relay/relay-messages.js +13 -0
- package/dist/server/src/lib/relay/relay-system-line.js +28 -15
- package/dist/server/src/lib/relay/types.js +14 -2
- package/dist/server/src/lib/session/agent-event-state.js +4 -0
- package/dist/server/src/lib/session/agent-session-lifecycle.js +6 -1
- package/dist/server/src/lib/session/claude-session.js +26 -7
- package/dist/server/src/lib/session/current-output-builder.js +7 -3
- package/dist/server/src/lib/session/current-output-history-writers.js +1 -1
- package/dist/server/src/lib/session/instance-input-lock.js +47 -2
- package/dist/server/src/lib/session/prompt-submit-receipt.js +224 -0
- package/dist/server/src/lib/session/prompt-waiting-guard.js +16 -3
- package/dist/server/src/lib/session/respond-target.js +82 -0
- package/dist/server/src/lib/session/send-attempt-state.js +177 -2
- package/dist/server/src/lib/session/send-attempt-types.js +10 -1
- package/dist/server/src/lib/session/send-user-message.js +80 -8
- package/dist/server/src/lib/session/session-launch-flight.js +243 -0
- package/dist/server/src/lib/session/session-starting-state.js +40 -4
- package/dist/server/src/lib/session/structured-prompt.js +17 -9
- package/dist/server/src/lib/session/waiting-episode-binding.js +4 -2
- package/dist/server/src/lib/session/worktree-session-reconcile.js +10 -0
- package/dist/server/src/lib/session-cleanup.js +32 -0
- package/dist/server/src/lib/session-key-sender.js +6 -28
- package/dist/server/src/lib/verification/env-clean-gate.js +129 -0
- package/dist/server/src/lib/verification/env-snapshot.js +11 -2
- package/dist/server/src/lib/verification/session-kill-ledger.js +174 -0
- package/package.json +5 -1
- package/release-notes/0.49.2.json +49 -0
- package/release-notes/0.49.3.json +52 -0
- package/.next/server/chunks/2422.js +0 -1
- package/.next/server/chunks/3773.js +0 -1
- package/.next/server/chunks/5630.js +0 -1
- package/.next/server/chunks/5775.js +0 -1
- package/.next/server/chunks/6808.js +0 -4
- package/.next/server/chunks/7604.js +0 -2
- package/.next/server/chunks/9198.js +0 -144
- package/.next/static/chunks/3931-1a1abab16248f14d.js +0 -1
- package/.next/static/chunks/4768-ad6f82f034f21eae.js +0 -1
- package/.next/static/chunks/5794-80ac3f06f098ea29.js +0 -1
- package/.next/static/chunks/6654-f3534f35f16644bc.js +0 -1
- package/.next/static/chunks/7665-e9ef6e0a85b9fa49.js +0 -1
- package/.next/static/chunks/8606-ce17ffa77f39608e.js +0 -1
- package/.next/static/chunks/app/api/agents/update/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/agents/versions/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/app/release-notes/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/capabilities/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/relays/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/remote/pair/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/settings/default-agents/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/templates/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/layout-8bfac4724277b47f.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/more/page-87c84987b2765213.js +0 -1
- package/.next/static/chunks/app/page-1b820c421db48c2c.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/review/page-e2fd4a590646a2d8.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-f6d3ab8185d93aae.js +0 -1
- /package/.next/static/{fqfSDqQMweROeHUzOt_m1 → LNfVZiq6FZwKsV7L9Mi6M}/_buildManifest.js +0 -0
- /package/.next/static/{fqfSDqQMweROeHUzOt_m1 → LNfVZiq6FZwKsV7L9Mi6M}/_ssgManifest.js +0 -0
|
@@ -9,12 +9,10 @@
|
|
|
9
9
|
* - ApiClient: HTTP get/post with base URL and auth headers
|
|
10
10
|
*/
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.
|
|
12
|
+
exports.ApiClient = exports.MAX_STOP_PATTERN_LENGTH = exports.rethrowIfDeadlineExceeded = exports.isDeadlineExceeded = exports.DeadlineExceededError = exports.handleApiError = exports.foreignSessionMessage = exports.FOREIGN_SESSION_ERROR_CODE = exports.ApiError = void 0;
|
|
13
13
|
exports.isValidWorktreeId = isValidWorktreeId;
|
|
14
14
|
exports.isValidInstanceId = isValidInstanceId;
|
|
15
15
|
exports.resolveAuthToken = resolveAuthToken;
|
|
16
|
-
exports.foreignSessionMessage = foreignSessionMessage;
|
|
17
|
-
exports.handleApiError = handleApiError;
|
|
18
16
|
exports.assertResponseShape = assertResponseShape;
|
|
19
17
|
exports.fetchDaemonVersion = fetchDaemonVersion;
|
|
20
18
|
exports.warnIfVersionSkew = warnIfVersionSkew;
|
|
@@ -22,6 +20,17 @@ const types_1 = require("../types");
|
|
|
22
20
|
const package_info_1 = require("./package-info");
|
|
23
21
|
const uat_isolation_1 = require("../../config/uat-isolation");
|
|
24
22
|
const server_url_1 = require("./server-url");
|
|
23
|
+
const api_client_errors_1 = require("./api-client-errors");
|
|
24
|
+
const api_client_deadline_1 = require("./api-client-deadline");
|
|
25
|
+
var api_client_errors_2 = require("./api-client-errors");
|
|
26
|
+
Object.defineProperty(exports, "ApiError", { enumerable: true, get: function () { return api_client_errors_2.ApiError; } });
|
|
27
|
+
Object.defineProperty(exports, "FOREIGN_SESSION_ERROR_CODE", { enumerable: true, get: function () { return api_client_errors_2.FOREIGN_SESSION_ERROR_CODE; } });
|
|
28
|
+
Object.defineProperty(exports, "foreignSessionMessage", { enumerable: true, get: function () { return api_client_errors_2.foreignSessionMessage; } });
|
|
29
|
+
Object.defineProperty(exports, "handleApiError", { enumerable: true, get: function () { return api_client_errors_2.handleApiError; } });
|
|
30
|
+
var api_client_deadline_2 = require("./api-client-deadline");
|
|
31
|
+
Object.defineProperty(exports, "DeadlineExceededError", { enumerable: true, get: function () { return api_client_deadline_2.DeadlineExceededError; } });
|
|
32
|
+
Object.defineProperty(exports, "isDeadlineExceeded", { enumerable: true, get: function () { return api_client_deadline_2.isDeadlineExceeded; } });
|
|
33
|
+
Object.defineProperty(exports, "rethrowIfDeadlineExceeded", { enumerable: true, get: function () { return api_client_deadline_2.rethrowIfDeadlineExceeded; } });
|
|
25
34
|
/** Maximum stop-pattern length [SEC4-06] */
|
|
26
35
|
exports.MAX_STOP_PATTERN_LENGTH = 500;
|
|
27
36
|
/** Worktree ID validation pattern [SEC4-04] */
|
|
@@ -66,175 +75,6 @@ function resolveAuthToken(options) {
|
|
|
66
75
|
}
|
|
67
76
|
return process.env.CM_AUTH_TOKEN;
|
|
68
77
|
}
|
|
69
|
-
/**
|
|
70
|
-
* The server's own explanation for a failure, when it sent one worth showing.
|
|
71
|
-
*
|
|
72
|
-
* Issue #1637: every 5xx used to be flattened into `Server error. Check server
|
|
73
|
-
* logs for details.`, which is only useful to someone who has the server logs.
|
|
74
|
-
* A cold-start `send` failed with an initialization timeout and told the
|
|
75
|
-
* operator nothing but "go read the logs" — four orchestration runs in a row
|
|
76
|
-
* then misdiagnosed it as a session-creation race and worked around it by
|
|
77
|
-
* re-sending. Every route in this codebase already answers `{ error }`, so the
|
|
78
|
-
* cause was always in the response body; nothing read it.
|
|
79
|
-
*
|
|
80
|
-
* Trimmed and length-capped because it is printed to a terminal, and an
|
|
81
|
-
* unbounded server string is not something a CLI should paste verbatim.
|
|
82
|
-
*/
|
|
83
|
-
const MAX_SERVER_ERROR_DETAIL = 2000;
|
|
84
|
-
function serverErrorDetail(payload) {
|
|
85
|
-
const detail = typeof payload?.error === 'string' ? payload.error.trim() : '';
|
|
86
|
-
if (detail === '')
|
|
87
|
-
return undefined;
|
|
88
|
-
return detail.length > MAX_SERVER_ERROR_DETAIL
|
|
89
|
-
? `${detail.slice(0, MAX_SERVER_ERROR_DETAIL)}…`
|
|
90
|
-
: detail;
|
|
91
|
-
}
|
|
92
|
-
/** Append `(server: <url>)` when the caller named one. */
|
|
93
|
-
function withServerUrl(message, context) {
|
|
94
|
-
return context?.serverUrl ? `${message} (server: ${context.serverUrl})` : message;
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* The `code` the server sends with the 409 for a tmux session another
|
|
98
|
-
* CommandMate server created (Issue #2865). Spelled out rather than imported:
|
|
99
|
-
* the server's constant lives next to the tmux gateway, which the CLI must not
|
|
100
|
-
* load. `tests/unit/cli/utils/api-client-foreign-session-3334.test.ts` pins the
|
|
101
|
-
* two to the same string.
|
|
102
|
-
*/
|
|
103
|
-
exports.FOREIGN_SESSION_ERROR_CODE = 'session_owned_by_other_server';
|
|
104
|
-
/**
|
|
105
|
-
* Issue #3334: what the operator reads for that 409. It has to say three
|
|
106
|
-
* things the status alone does not: the session is another CommandMate
|
|
107
|
-
* server's, this command therefore did nothing to it, and where to go instead.
|
|
108
|
-
*/
|
|
109
|
-
function foreignSessionMessage(payload) {
|
|
110
|
-
const name = typeof payload?.sessionName === 'string' && payload.sessionName !== ''
|
|
111
|
-
? `"${payload.sessionName}" `
|
|
112
|
-
: '';
|
|
113
|
-
const where = typeof payload?.sessionPath === 'string' && payload.sessionPath !== ''
|
|
114
|
-
? ` (it was started in ${payload.sessionPath})`
|
|
115
|
-
: '';
|
|
116
|
-
return (`The tmux session ${name}belongs to another CommandMate server${where}, ` +
|
|
117
|
-
'so nothing was sent to it, read from it or stopped. ' +
|
|
118
|
-
'Use the CommandMate server that started it, or stop that session there first.');
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Classify API errors into user-friendly messages and exit codes.
|
|
122
|
-
* [IA3-09] Covers: ECONNREFUSED, 400, 401/403, 404, 429, 500, timeout
|
|
123
|
-
*
|
|
124
|
-
* @param error - Error object or unknown
|
|
125
|
-
* @param status - HTTP status code if available
|
|
126
|
-
* @param payload - Parsed error body, when the response carried one (Issue #1637).
|
|
127
|
-
* Used for 5xx, and for the foreign-session 409 (Issue #3334): the other 4xx
|
|
128
|
-
* messages below are already specific, and are pinned by tests as the CLI's
|
|
129
|
-
* own wording.
|
|
130
|
-
* @param context - Which server answered, when the caller knows (Issue #2404).
|
|
131
|
-
* Read by the 404 branch only; the other messages do not send anyone looking
|
|
132
|
-
* in the wrong place.
|
|
133
|
-
* @returns User-friendly error message and exit code
|
|
134
|
-
*/
|
|
135
|
-
function handleApiError(error, status, payload, context) {
|
|
136
|
-
// HTTP status-based errors
|
|
137
|
-
if (status !== undefined) {
|
|
138
|
-
switch (status) {
|
|
139
|
-
case 400:
|
|
140
|
-
return {
|
|
141
|
-
message: 'Bad request. Check your input parameters.',
|
|
142
|
-
exitCode: types_1.ExitCode.CONFIG_ERROR,
|
|
143
|
-
};
|
|
144
|
-
case 401:
|
|
145
|
-
case 403:
|
|
146
|
-
// Issue #2489: the second sentence is the one that matters during a
|
|
147
|
-
// `commandmate remote` session. `remote` mints the token, hands its
|
|
148
|
-
// plaintext to the phone once through the pairing handoff and deletes
|
|
149
|
-
// it — so "set CM_AUTH_TOKEN" names a value the operator has no way to
|
|
150
|
-
// obtain, and following that advice is a dead end (#2489's report spent
|
|
151
|
-
// a session there). `--auth remote-only` is the exit: it leaves the
|
|
152
|
-
// loopback listener this client dials unauthenticated while the
|
|
153
|
-
// Provider's listener keeps demanding the token.
|
|
154
|
-
return {
|
|
155
|
-
message: 'Authentication failed. Use --token <token> or set CM_AUTH_TOKEN environment variable. ' +
|
|
156
|
-
'During a "commandmate remote" session the token is only ever shown to the paired phone — ' +
|
|
157
|
-
'restart it with "commandmate remote --auth remote-only" to use the CLI from this machine without one.',
|
|
158
|
-
exitCode: types_1.ExitCode.CONFIG_ERROR,
|
|
159
|
-
};
|
|
160
|
-
case 404:
|
|
161
|
-
// Issue #2404: the sentence stays, so everything matching on it keeps
|
|
162
|
-
// matching; the URL is appended because "check the worktree ID" is
|
|
163
|
-
// advice about the wrong thing whenever the id is fine and the SERVER
|
|
164
|
-
// is the one that is wrong.
|
|
165
|
-
return {
|
|
166
|
-
message: withServerUrl('Resource not found. Check the worktree ID.', context),
|
|
167
|
-
exitCode: types_1.ExitCode.UNEXPECTED_ERROR,
|
|
168
|
-
};
|
|
169
|
-
case 409:
|
|
170
|
-
// Issue #3334: the one 409 every session route shares (#2865 / #3290).
|
|
171
|
-
// Without this it read "Unexpected HTTP status: 409", which does not say
|
|
172
|
-
// that nothing was done, nor why. Same exit code as that default branch,
|
|
173
|
-
// so a script branching on it sees no change. Every other 409 keeps the
|
|
174
|
-
// default wording below — the commands that own one (send's
|
|
175
|
-
// PROMPT_WAITING, verify's running run) already explain it themselves.
|
|
176
|
-
if (payload?.code === exports.FOREIGN_SESSION_ERROR_CODE) {
|
|
177
|
-
return {
|
|
178
|
-
message: foreignSessionMessage(payload),
|
|
179
|
-
exitCode: types_1.ExitCode.UNEXPECTED_ERROR,
|
|
180
|
-
};
|
|
181
|
-
}
|
|
182
|
-
return {
|
|
183
|
-
message: `Unexpected HTTP status: ${status}`,
|
|
184
|
-
exitCode: types_1.ExitCode.UNEXPECTED_ERROR,
|
|
185
|
-
};
|
|
186
|
-
case 429:
|
|
187
|
-
return {
|
|
188
|
-
message: 'Rate limited. Please retry after a moment.',
|
|
189
|
-
exitCode: types_1.ExitCode.DEPENDENCY_ERROR,
|
|
190
|
-
};
|
|
191
|
-
case 500:
|
|
192
|
-
default:
|
|
193
|
-
if (status >= 500) {
|
|
194
|
-
// Issue #1637: pass the server's own reason through. The prefix is
|
|
195
|
-
// kept so "this came from the server, not from the CLI" survives, and
|
|
196
|
-
// so does the log pointer when the body said nothing.
|
|
197
|
-
const detail = serverErrorDetail(payload);
|
|
198
|
-
return {
|
|
199
|
-
message: detail
|
|
200
|
-
? `Server error: ${detail}`
|
|
201
|
-
: 'Server error. Check server logs for details.',
|
|
202
|
-
exitCode: types_1.ExitCode.UNEXPECTED_ERROR,
|
|
203
|
-
};
|
|
204
|
-
}
|
|
205
|
-
return {
|
|
206
|
-
message: `Unexpected HTTP status: ${status}`,
|
|
207
|
-
exitCode: types_1.ExitCode.UNEXPECTED_ERROR,
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
// Network/connection errors
|
|
212
|
-
if (error instanceof Error) {
|
|
213
|
-
const msg = error.message || '';
|
|
214
|
-
if (msg.includes('ECONNREFUSED') || msg.includes('fetch failed')) {
|
|
215
|
-
return {
|
|
216
|
-
message: 'Server is not running. Start it with: commandmate start',
|
|
217
|
-
exitCode: types_1.ExitCode.DEPENDENCY_ERROR,
|
|
218
|
-
};
|
|
219
|
-
}
|
|
220
|
-
if (error.name === 'AbortError' || msg.includes('timeout') || msg.includes('Timeout')) {
|
|
221
|
-
return {
|
|
222
|
-
message: 'Server did not respond in time. Check server status.',
|
|
223
|
-
exitCode: types_1.ExitCode.DEPENDENCY_ERROR,
|
|
224
|
-
};
|
|
225
|
-
}
|
|
226
|
-
if (error.name === 'TypeError') {
|
|
227
|
-
return {
|
|
228
|
-
message: 'Network error. Check your connection and server status.',
|
|
229
|
-
exitCode: types_1.ExitCode.DEPENDENCY_ERROR,
|
|
230
|
-
};
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
return {
|
|
234
|
-
message: 'An unexpected error occurred.',
|
|
235
|
-
exitCode: types_1.ExitCode.UNEXPECTED_ERROR,
|
|
236
|
-
};
|
|
237
|
-
}
|
|
238
78
|
/**
|
|
239
79
|
* Check if a URL points to a localhost address.
|
|
240
80
|
*/
|
|
@@ -255,6 +95,8 @@ function isLocalhost(url) {
|
|
|
255
95
|
class ApiClient {
|
|
256
96
|
baseUrl;
|
|
257
97
|
token;
|
|
98
|
+
/** Epoch ms after which every request of this client fails (Issue #3983). */
|
|
99
|
+
deadlineAt;
|
|
258
100
|
constructor(options) {
|
|
259
101
|
// Issue #1743: resolve through loadClientEnv() rather than `process.env.CM_PORT || '3000'`.
|
|
260
102
|
// Reading process.env alone ignored ~/.commandmate/.env, so with two servers running,
|
|
@@ -266,7 +108,7 @@ class ApiClient {
|
|
|
266
108
|
// Issue #3360: in UAT isolation the default port 3000 is the user's production server,
|
|
267
109
|
// so a client that was not told where to go must not go anywhere.
|
|
268
110
|
if (!options?.baseUrl && (0, uat_isolation_1.isUatIsolationEnabled)() && !process.env.CM_PORT) {
|
|
269
|
-
throw new ApiError(`${uat_isolation_1.UAT_ISOLATION_ENV_VAR}=${process.env[uat_isolation_1.UAT_ISOLATION_ENV_VAR]} requires CM_PORT: refusing to fall back to the default port 3000.`, types_1.ExitCode.CONFIG_ERROR);
|
|
111
|
+
throw new api_client_errors_1.ApiError(`${uat_isolation_1.UAT_ISOLATION_ENV_VAR}=${process.env[uat_isolation_1.UAT_ISOLATION_ENV_VAR]} requires CM_PORT: refusing to fall back to the default port 3000.`, types_1.ExitCode.CONFIG_ERROR);
|
|
270
112
|
}
|
|
271
113
|
this.baseUrl = options?.baseUrl || (0, server_url_1.resolveServerEndpoint)((0, server_url_1.loadClientEnv)()).url;
|
|
272
114
|
this.token = resolveAuthToken(options);
|
|
@@ -289,6 +131,51 @@ class ApiClient {
|
|
|
289
131
|
get serverUrl() {
|
|
290
132
|
return this.baseUrl;
|
|
291
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* This client with every request bounded by `deadlineAt` (Issue #3983).
|
|
136
|
+
*
|
|
137
|
+
* `wait` / `ask` / `verify` take `--timeout` as the deadline of the whole
|
|
138
|
+
* command, but only the poll's own reads were bounded by it: a task-ledger
|
|
139
|
+
* read, an `--instance` resolution or a capability probe before the poll had
|
|
140
|
+
* no deadline at all, so a server that stopped answering held the command for
|
|
141
|
+
* as long as undici's own timeouts (minutes) and then, swallowed into a
|
|
142
|
+
* degraded path, kept it going. The derived client carries one deadline for
|
|
143
|
+
* every method (`get` / `post` / `patch` / `rawGet`), and a request it ends
|
|
144
|
+
* fails with {@link DeadlineExceededError} — exit 124 — which the
|
|
145
|
+
* degrade-on-failure catches rethrow ({@link isDeadlineExceeded}).
|
|
146
|
+
*
|
|
147
|
+
* One request lasts until its body has been read (`json()` / `text()`), the
|
|
148
|
+
* body of a {@link rawGet} response included: a server that sends headers and
|
|
149
|
+
* then stalls the body is not an answer.
|
|
150
|
+
*
|
|
151
|
+
* @param deadlineAt - Epoch ms; undefined returns this client unchanged
|
|
152
|
+
* @returns A client sharing this one's server and token
|
|
153
|
+
*/
|
|
154
|
+
withDeadline(deadlineAt) {
|
|
155
|
+
if (deadlineAt === undefined || !Number.isFinite(deadlineAt))
|
|
156
|
+
return this;
|
|
157
|
+
// Not `new ApiClient(...)`: the constructor re-resolves the endpoint and
|
|
158
|
+
// re-prints the --token warning, and the derived client must dial the very
|
|
159
|
+
// server this one does.
|
|
160
|
+
const derived = Object.create(Object.getPrototypeOf(this));
|
|
161
|
+
derived.baseUrl = this.baseUrl;
|
|
162
|
+
derived.token = this.token;
|
|
163
|
+
derived.deadlineAt = deadlineAt;
|
|
164
|
+
return derived;
|
|
165
|
+
}
|
|
166
|
+
/** The deadline this client carries, if any (Issue #3983). */
|
|
167
|
+
get deadline() {
|
|
168
|
+
return this.deadlineAt;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* The bound of one request: a signal that fires at the deadline (combined
|
|
172
|
+
* with the caller's own, when it gave one), or null without a deadline.
|
|
173
|
+
*/
|
|
174
|
+
startDeadline(callerSignal) {
|
|
175
|
+
if (this.deadlineAt === undefined)
|
|
176
|
+
return null;
|
|
177
|
+
return startRequestDeadline(this.deadlineAt, this.baseUrl, callerSignal);
|
|
178
|
+
}
|
|
292
179
|
getHeaders() {
|
|
293
180
|
const headers = {
|
|
294
181
|
'Content-Type': 'application/json',
|
|
@@ -314,11 +201,28 @@ class ApiClient {
|
|
|
314
201
|
* @returns The raw Response, whatever its status
|
|
315
202
|
*/
|
|
316
203
|
async rawGet(path, init) {
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
204
|
+
const deadline = this.startDeadline();
|
|
205
|
+
if (!deadline) {
|
|
206
|
+
return fetch(`${this.baseUrl}${path}`, {
|
|
207
|
+
method: 'GET',
|
|
208
|
+
headers: { ...this.getHeaders(), ...(init?.headers ?? {}) },
|
|
209
|
+
redirect: 'manual',
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
// Issue #3983: the caller reads the body, so the deadline is not released
|
|
213
|
+
// here — it stays armed (unref'd) for the body read, which it also bounds.
|
|
214
|
+
try {
|
|
215
|
+
const response = await deadline.run(fetch(`${this.baseUrl}${path}`, {
|
|
216
|
+
method: 'GET',
|
|
217
|
+
headers: { ...this.getHeaders(), ...(init?.headers ?? {}) },
|
|
218
|
+
redirect: 'manual',
|
|
219
|
+
signal: deadline.signal,
|
|
220
|
+
}));
|
|
221
|
+
return boundBodyReads(response, deadline);
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
throw deadline.classify(error);
|
|
225
|
+
}
|
|
322
226
|
}
|
|
323
227
|
/**
|
|
324
228
|
* HTTP GET request
|
|
@@ -330,26 +234,37 @@ class ApiClient {
|
|
|
330
234
|
* before (no `signal` key on the fetch init).
|
|
331
235
|
*/
|
|
332
236
|
async get(path, init) {
|
|
237
|
+
// Issue #3983: a client with a deadline bounds the request and its body.
|
|
238
|
+
const deadline = this.startDeadline(init?.signal);
|
|
239
|
+
const signal = deadline ? deadline.signal : init?.signal;
|
|
333
240
|
try {
|
|
334
|
-
const response = await fetch(`${this.baseUrl}${path}`, {
|
|
241
|
+
const response = await bounded(deadline, fetch(`${this.baseUrl}${path}`, {
|
|
335
242
|
method: 'GET',
|
|
336
243
|
headers: this.getHeaders(),
|
|
337
|
-
...(
|
|
338
|
-
});
|
|
244
|
+
...(signal ? { signal } : {}),
|
|
245
|
+
}));
|
|
339
246
|
if (!response.ok) {
|
|
340
247
|
// Issue #1637: read the body first — handleApiError needs it to surface
|
|
341
248
|
// the server's reason for a 5xx instead of "check the logs".
|
|
342
|
-
const payload = await readErrorPayload(response);
|
|
343
|
-
const errResult = handleApiError(null, response.status, payload, { serverUrl: this.baseUrl });
|
|
344
|
-
throw new ApiError(errResult.message, errResult.exitCode, response.status, payload);
|
|
249
|
+
const payload = await bounded(deadline, readErrorPayload(response));
|
|
250
|
+
const errResult = (0, api_client_errors_1.handleApiError)(null, response.status, payload, { serverUrl: this.baseUrl });
|
|
251
|
+
throw new api_client_errors_1.ApiError(errResult.message, errResult.exitCode, response.status, payload);
|
|
345
252
|
}
|
|
346
|
-
return (await response.json());
|
|
253
|
+
return (await bounded(deadline, response.json()));
|
|
347
254
|
}
|
|
348
255
|
catch (error) {
|
|
349
|
-
if (
|
|
256
|
+
if (deadline) {
|
|
257
|
+
const classified = deadline.classify(error);
|
|
258
|
+
if (classified instanceof api_client_deadline_1.DeadlineExceededError)
|
|
259
|
+
throw classified;
|
|
260
|
+
}
|
|
261
|
+
if (error instanceof api_client_errors_1.ApiError)
|
|
350
262
|
throw error;
|
|
351
|
-
const errResult = handleApiError(error);
|
|
352
|
-
throw new ApiError(errResult.message, errResult.exitCode);
|
|
263
|
+
const errResult = (0, api_client_errors_1.handleApiError)(error);
|
|
264
|
+
throw new api_client_errors_1.ApiError(errResult.message, errResult.exitCode);
|
|
265
|
+
}
|
|
266
|
+
finally {
|
|
267
|
+
deadline?.release();
|
|
353
268
|
}
|
|
354
269
|
}
|
|
355
270
|
/**
|
|
@@ -357,7 +272,7 @@ class ApiClient {
|
|
|
357
272
|
* [DR1-05] Generic type parameter specified at call site
|
|
358
273
|
*/
|
|
359
274
|
async post(path, body) {
|
|
360
|
-
return sendWithBody(this.baseUrl, 'POST', this.getHeaders(), path, body);
|
|
275
|
+
return sendWithBody(this.baseUrl, 'POST', this.getHeaders(), path, body, this.startDeadline());
|
|
361
276
|
}
|
|
362
277
|
/**
|
|
363
278
|
* HTTP PATCH request (Issue #1000: agent-instance roster mutations via
|
|
@@ -365,36 +280,45 @@ class ApiClient {
|
|
|
365
280
|
* [DR1-05] Generic type parameter specified at call site
|
|
366
281
|
*/
|
|
367
282
|
async patch(path, body) {
|
|
368
|
-
return sendWithBody(this.baseUrl, 'PATCH', this.getHeaders(), path, body);
|
|
283
|
+
return sendWithBody(this.baseUrl, 'PATCH', this.getHeaders(), path, body, this.startDeadline());
|
|
369
284
|
}
|
|
370
285
|
}
|
|
371
286
|
exports.ApiClient = ApiClient;
|
|
372
287
|
/** POST / PATCH share everything but the method; an empty body (204) is `undefined`. */
|
|
373
|
-
async function sendWithBody(baseUrl, method, headers, path, body) {
|
|
288
|
+
async function sendWithBody(baseUrl, method, headers, path, body, deadline) {
|
|
374
289
|
try {
|
|
375
|
-
const response = await fetch(`${baseUrl}${path}`, {
|
|
290
|
+
const response = await bounded(deadline, fetch(`${baseUrl}${path}`, {
|
|
376
291
|
method,
|
|
377
292
|
headers,
|
|
378
293
|
body: body !== undefined ? JSON.stringify(body) : undefined,
|
|
379
|
-
|
|
294
|
+
...(deadline ? { signal: deadline.signal } : {}),
|
|
295
|
+
}));
|
|
380
296
|
if (!response.ok) {
|
|
381
297
|
// Issue #1637: read the body first — handleApiError needs it to surface
|
|
382
298
|
// the server's reason for a 5xx instead of "check the logs".
|
|
383
|
-
const payload = await readErrorPayload(response);
|
|
384
|
-
const errResult = handleApiError(null, response.status, payload, { serverUrl: baseUrl });
|
|
385
|
-
throw new ApiError(errResult.message, errResult.exitCode, response.status, payload);
|
|
299
|
+
const payload = await bounded(deadline, readErrorPayload(response));
|
|
300
|
+
const errResult = (0, api_client_errors_1.handleApiError)(null, response.status, payload, { serverUrl: baseUrl });
|
|
301
|
+
throw new api_client_errors_1.ApiError(errResult.message, errResult.exitCode, response.status, payload);
|
|
386
302
|
}
|
|
387
303
|
// Handle 204 No Content
|
|
388
|
-
const text = await response.text();
|
|
304
|
+
const text = await bounded(deadline, response.text());
|
|
389
305
|
if (!text)
|
|
390
306
|
return undefined;
|
|
391
307
|
return JSON.parse(text);
|
|
392
308
|
}
|
|
393
309
|
catch (error) {
|
|
394
|
-
if (
|
|
310
|
+
if (deadline) {
|
|
311
|
+
const classified = deadline.classify(error);
|
|
312
|
+
if (classified instanceof api_client_deadline_1.DeadlineExceededError)
|
|
313
|
+
throw classified;
|
|
314
|
+
}
|
|
315
|
+
if (error instanceof api_client_errors_1.ApiError)
|
|
395
316
|
throw error;
|
|
396
|
-
const errResult = handleApiError(error);
|
|
397
|
-
throw new ApiError(errResult.message, errResult.exitCode, undefined, undefined, error);
|
|
317
|
+
const errResult = (0, api_client_errors_1.handleApiError)(error);
|
|
318
|
+
throw new api_client_errors_1.ApiError(errResult.message, errResult.exitCode, undefined, undefined, error);
|
|
319
|
+
}
|
|
320
|
+
finally {
|
|
321
|
+
deadline?.release();
|
|
398
322
|
}
|
|
399
323
|
}
|
|
400
324
|
/**
|
|
@@ -423,36 +347,87 @@ async function readErrorPayload(response) {
|
|
|
423
347
|
return undefined;
|
|
424
348
|
}
|
|
425
349
|
}
|
|
350
|
+
// =============================================================================
|
|
351
|
+
// Command deadline (Issue #3983)
|
|
352
|
+
// =============================================================================
|
|
353
|
+
/** The longest delay `setTimeout` honours (2^31-1 ms, ~24.8 days). */
|
|
354
|
+
const MAX_TIMER_MS = 2 ** 31 - 1;
|
|
426
355
|
/**
|
|
427
|
-
*
|
|
356
|
+
* Arm the deadline of one request. Its signal goes to `fetch` (which then also
|
|
357
|
+
* aborts the body stream), and every await of the request is raced against it
|
|
358
|
+
* as well — so a stalled body or a transport that ignores the signal still ends
|
|
359
|
+
* on time. Past the deadline the signal is already aborted and no request is
|
|
360
|
+
* sent; started exactly at it, the request gets the current tick (a read at the
|
|
361
|
+
* deadline may still bring the answer `verify` reports, Issue #1544). Beyond
|
|
362
|
+
* what a timer can hold the request is left unbounded.
|
|
428
363
|
*/
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
* the strict `respond` tells "never connected" (nothing can have been sent)
|
|
440
|
-
* from "the connection broke" by its `cause.code`.
|
|
441
|
-
*/
|
|
442
|
-
transportError) {
|
|
443
|
-
super(message);
|
|
444
|
-
this.exitCode = exitCode;
|
|
445
|
-
this.statusCode = statusCode;
|
|
446
|
-
this.payload = payload;
|
|
447
|
-
this.transportError = transportError;
|
|
448
|
-
this.name = 'ApiError';
|
|
364
|
+
function startRequestDeadline(deadlineAt, serverUrl, callerSignal) {
|
|
365
|
+
const controller = new AbortController();
|
|
366
|
+
const fire = () => {
|
|
367
|
+
if (!controller.signal.aborted)
|
|
368
|
+
controller.abort(new api_client_deadline_1.DeadlineExceededError(serverUrl));
|
|
369
|
+
};
|
|
370
|
+
const remaining = deadlineAt - Date.now();
|
|
371
|
+
let timer;
|
|
372
|
+
if (remaining < 0) {
|
|
373
|
+
fire();
|
|
449
374
|
}
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
375
|
+
else if (remaining <= MAX_TIMER_MS) {
|
|
376
|
+
timer = setTimeout(fire, remaining);
|
|
377
|
+
// A command that is done must not stay alive for a deadline it no longer needs.
|
|
378
|
+
timer.unref?.();
|
|
453
379
|
}
|
|
380
|
+
const signal = callerSignal ? AbortSignal.any([controller.signal, callerSignal]) : controller.signal;
|
|
381
|
+
const deadlineError = () => controller.signal.reason instanceof api_client_deadline_1.DeadlineExceededError
|
|
382
|
+
? controller.signal.reason
|
|
383
|
+
: new api_client_deadline_1.DeadlineExceededError(serverUrl);
|
|
384
|
+
return {
|
|
385
|
+
signal,
|
|
386
|
+
run(promise) {
|
|
387
|
+
if (controller.signal.aborted) {
|
|
388
|
+
promise.catch(() => { });
|
|
389
|
+
return Promise.reject(deadlineError());
|
|
390
|
+
}
|
|
391
|
+
return new Promise((resolve, reject) => {
|
|
392
|
+
const onAbort = () => reject(deadlineError());
|
|
393
|
+
controller.signal.addEventListener('abort', onAbort, { once: true });
|
|
394
|
+
promise.then((value) => {
|
|
395
|
+
controller.signal.removeEventListener('abort', onAbort);
|
|
396
|
+
resolve(value);
|
|
397
|
+
}, (error) => {
|
|
398
|
+
controller.signal.removeEventListener('abort', onAbort);
|
|
399
|
+
reject(error);
|
|
400
|
+
});
|
|
401
|
+
});
|
|
402
|
+
},
|
|
403
|
+
classify(error) {
|
|
404
|
+
return controller.signal.aborted ? deadlineError() : error;
|
|
405
|
+
},
|
|
406
|
+
release() {
|
|
407
|
+
if (timer !== undefined)
|
|
408
|
+
clearTimeout(timer);
|
|
409
|
+
},
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
/** `promise` raced against `deadline`, or `promise` itself without one. */
|
|
413
|
+
function bounded(deadline, promise) {
|
|
414
|
+
return deadline ? deadline.run(promise) : promise;
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* A {@link ApiClient.rawGet} response whose body reads are raced against the
|
|
418
|
+
* request's deadline (Issue #3983). The caller reads the body, so the bound has
|
|
419
|
+
* to travel with the response.
|
|
420
|
+
*/
|
|
421
|
+
function boundBodyReads(response, deadline) {
|
|
422
|
+
const read = (method) => () => deadline.run(method()).catch((error) => {
|
|
423
|
+
throw deadline.classify(error);
|
|
424
|
+
});
|
|
425
|
+
const json = response.json.bind(response);
|
|
426
|
+
const text = response.text.bind(response);
|
|
427
|
+
Object.defineProperty(response, 'json', { value: read(json), configurable: true });
|
|
428
|
+
Object.defineProperty(response, 'text', { value: read(text), configurable: true });
|
|
429
|
+
return response;
|
|
454
430
|
}
|
|
455
|
-
exports.ApiError = ApiError;
|
|
456
431
|
// =============================================================================
|
|
457
432
|
// Response shape validation & version-skew detection (Issue #1357)
|
|
458
433
|
// =============================================================================
|
|
@@ -484,12 +459,12 @@ function versionSkewMessage(detail) {
|
|
|
484
459
|
*/
|
|
485
460
|
function assertResponseShape(value, fields, context) {
|
|
486
461
|
if (value === null || typeof value !== 'object') {
|
|
487
|
-
throw new ApiError(versionSkewMessage(`${context}: expected an object from the server`), types_1.ExitCode.UNEXPECTED_ERROR);
|
|
462
|
+
throw new api_client_errors_1.ApiError(versionSkewMessage(`${context}: expected an object from the server`), types_1.ExitCode.UNEXPECTED_ERROR);
|
|
488
463
|
}
|
|
489
464
|
const record = value;
|
|
490
465
|
for (const field of fields) {
|
|
491
466
|
if (!(field in record)) {
|
|
492
|
-
throw new ApiError(versionSkewMessage(`${context}: the server response is missing the "${field}" field`), types_1.ExitCode.UNEXPECTED_ERROR);
|
|
467
|
+
throw new api_client_errors_1.ApiError(versionSkewMessage(`${context}: the server response is missing the "${field}" field`), types_1.ExitCode.UNEXPECTED_ERROR);
|
|
493
468
|
}
|
|
494
469
|
}
|
|
495
470
|
return value;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The next command a CLI message tells the operator to run, aimed at the
|
|
3
|
+
* target the command actually addressed (Issue #3982).
|
|
4
|
+
*
|
|
5
|
+
* Each hint used to append ` --instance ${options.instance}` itself: the string
|
|
6
|
+
* the user typed (an alias reached `capture` unresolved), and nothing at all for
|
|
7
|
+
* `--agent` (so the hint read the worktree default's pane). One of them was
|
|
8
|
+
* fixed in #3975 and the others were not. These builders take the RESOLVED
|
|
9
|
+
* target — {@link CommandTarget}, what `resolveCommandTarget` returns — so the
|
|
10
|
+
* raw option cannot be passed where the hint's target belongs.
|
|
11
|
+
*/
|
|
12
|
+
import type { CommandTarget } from '../commands/command-target';
|
|
13
|
+
/**
|
|
14
|
+
* The `capture` flags that read a dialog: the pane itself (the stored reply is
|
|
15
|
+
* not what is on screen), and enough of it to hold the dialog and its numbers.
|
|
16
|
+
*/
|
|
17
|
+
export declare const DIALOG_CAPTURE_FLAGS = "--pane --tail 40";
|
|
18
|
+
/**
|
|
19
|
+
* ` --instance <id>` for a resolved instance, else ` --agent <tool>` when one
|
|
20
|
+
* was named, else nothing — a command that named no target keeps naming none.
|
|
21
|
+
*/
|
|
22
|
+
export declare function targetFlags(target: CommandTarget): string;
|
|
23
|
+
/**
|
|
24
|
+
* `commandmate <verb> <worktree-id>[ <args>]<target flags>[ <trailing>]`.
|
|
25
|
+
*
|
|
26
|
+
* @param args - What follows the worktree id, e.g. `<number>` or `"<text>"`
|
|
27
|
+
* @param trailing - Flags that follow the target, e.g. `--pane --tail 40`
|
|
28
|
+
*/
|
|
29
|
+
export declare function followUpCommand(verb: string, worktreeId: string, target: CommandTarget, args?: string, trailing?: string): string;
|
|
30
|
+
/** The `capture` that shows the target's dialog as it is on screen. */
|
|
31
|
+
export declare function dialogCaptureCommand(worktreeId: string, target: CommandTarget): string;
|
|
32
|
+
/**
|
|
33
|
+
* `commandmate capture <id>[ target] --pane`: the pane a message went to, to
|
|
34
|
+
* look at before a resend (Issue #3992). Without a target (a caller that has
|
|
35
|
+
* none to give) it names none.
|
|
36
|
+
*/
|
|
37
|
+
export declare function paneCaptureCommand(worktreeId: string, target: CommandTarget | undefined): string;
|
|
38
|
+
//# sourceMappingURL=follow-up-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"follow-up-command.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/follow-up-command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE;;;GAGG;AACH,eAAO,MAAM,oBAAoB,qBAAqB,CAAC;AAEvD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAIzD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,EACrB,IAAI,CAAC,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,CAER;AAED,uEAAuE;AACvE,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,CAEtF;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,SAAS,GAAG,MAAM,CAIhG"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The next command a CLI message tells the operator to run, aimed at the
|
|
4
|
+
* target the command actually addressed (Issue #3982).
|
|
5
|
+
*
|
|
6
|
+
* Each hint used to append ` --instance ${options.instance}` itself: the string
|
|
7
|
+
* the user typed (an alias reached `capture` unresolved), and nothing at all for
|
|
8
|
+
* `--agent` (so the hint read the worktree default's pane). One of them was
|
|
9
|
+
* fixed in #3975 and the others were not. These builders take the RESOLVED
|
|
10
|
+
* target — {@link CommandTarget}, what `resolveCommandTarget` returns — so the
|
|
11
|
+
* raw option cannot be passed where the hint's target belongs.
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.DIALOG_CAPTURE_FLAGS = void 0;
|
|
15
|
+
exports.targetFlags = targetFlags;
|
|
16
|
+
exports.followUpCommand = followUpCommand;
|
|
17
|
+
exports.dialogCaptureCommand = dialogCaptureCommand;
|
|
18
|
+
exports.paneCaptureCommand = paneCaptureCommand;
|
|
19
|
+
/**
|
|
20
|
+
* The `capture` flags that read a dialog: the pane itself (the stored reply is
|
|
21
|
+
* not what is on screen), and enough of it to hold the dialog and its numbers.
|
|
22
|
+
*/
|
|
23
|
+
exports.DIALOG_CAPTURE_FLAGS = '--pane --tail 40';
|
|
24
|
+
/**
|
|
25
|
+
* ` --instance <id>` for a resolved instance, else ` --agent <tool>` when one
|
|
26
|
+
* was named, else nothing — a command that named no target keeps naming none.
|
|
27
|
+
*/
|
|
28
|
+
function targetFlags(target) {
|
|
29
|
+
if (target.instanceId)
|
|
30
|
+
return ` --instance ${target.instanceId}`;
|
|
31
|
+
if (target.agent)
|
|
32
|
+
return ` --agent ${target.agent}`;
|
|
33
|
+
return '';
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* `commandmate <verb> <worktree-id>[ <args>]<target flags>[ <trailing>]`.
|
|
37
|
+
*
|
|
38
|
+
* @param args - What follows the worktree id, e.g. `<number>` or `"<text>"`
|
|
39
|
+
* @param trailing - Flags that follow the target, e.g. `--pane --tail 40`
|
|
40
|
+
*/
|
|
41
|
+
function followUpCommand(verb, worktreeId, target, args, trailing) {
|
|
42
|
+
return `commandmate ${verb} ${worktreeId}${args ? ` ${args}` : ''}${targetFlags(target)}${trailing ? ` ${trailing}` : ''}`;
|
|
43
|
+
}
|
|
44
|
+
/** The `capture` that shows the target's dialog as it is on screen. */
|
|
45
|
+
function dialogCaptureCommand(worktreeId, target) {
|
|
46
|
+
return followUpCommand('capture', worktreeId, target, undefined, exports.DIALOG_CAPTURE_FLAGS);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* `commandmate capture <id>[ target] --pane`: the pane a message went to, to
|
|
50
|
+
* look at before a resend (Issue #3992). Without a target (a caller that has
|
|
51
|
+
* none to give) it names none.
|
|
52
|
+
*/
|
|
53
|
+
function paneCaptureCommand(worktreeId, target) {
|
|
54
|
+
return target
|
|
55
|
+
? followUpCommand('capture', worktreeId, target, undefined, '--pane')
|
|
56
|
+
: `commandmate capture ${worktreeId} --pane`;
|
|
57
|
+
}
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* and whether an unmarked row may stand in for one — stays with the caller.
|
|
18
18
|
*/
|
|
19
19
|
import type { PromptMessageResponse } from '../types/api-responses';
|
|
20
|
-
import type
|
|
20
|
+
import { type ApiClient } from './api-client';
|
|
21
21
|
/**
|
|
22
22
|
* Chat rows read back per request.
|
|
23
23
|
*
|