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
|
@@ -14,6 +14,9 @@ const base_1 = require("./base");
|
|
|
14
14
|
const types_1 = require("./types");
|
|
15
15
|
const tmux_1 = require("../tmux/tmux");
|
|
16
16
|
const submit_verified_sender_1 = require("./submit-verified-sender");
|
|
17
|
+
const readiness_1 = require("../detection/tools/vibe-local/readiness");
|
|
18
|
+
const status_detector_1 = require("../detection/status-detector");
|
|
19
|
+
const prompt_wait_dialog_1 = require("./prompt-wait-dialog");
|
|
17
20
|
const tmux_capture_cache_1 = require("../tmux/tmux-capture-cache");
|
|
18
21
|
const db_instance_1 = require("../db/db-instance");
|
|
19
22
|
const db_1 = require("../db");
|
|
@@ -28,6 +31,31 @@ const logger = (0, logger_1.createLogger)('cli-tools/vibe-local');
|
|
|
28
31
|
* vibe-local shows a permission check prompt, banner, and model loading.
|
|
29
32
|
*/
|
|
30
33
|
const VIBE_LOCAL_INIT_WAIT_MS = 5000;
|
|
34
|
+
/**
|
|
35
|
+
* How long a send waits for vibe-local's input prompt (Issue #4040).
|
|
36
|
+
*
|
|
37
|
+
* Measured on vibe-local 1.3.3 (`vibe-local -y`, isolated `HOME`, private tmux
|
|
38
|
+
* socket, model `qwen3-coder:30b` not loaded in Ollama before each run): the
|
|
39
|
+
* empty `ctx:N% ❯` row was up 1.15 s, 0.62 s and 0.60 s after the launch
|
|
40
|
+
* keystroke — vibe-local loads the model on the first message, not at launch.
|
|
41
|
+
* gemini's and codex's 15 s therefore covers it with room to spare.
|
|
42
|
+
*/
|
|
43
|
+
const VIBE_LOCAL_PROMPT_WAIT_TIMEOUT_MS = 15000;
|
|
44
|
+
/** Interval between the send's readiness polls (Issue #4040). */
|
|
45
|
+
const VIBE_LOCAL_PROMPT_POLL_INTERVAL_MS = 500;
|
|
46
|
+
/** Scrollback rows plus the visible pane in a readiness capture (`-S -200 -E -`). */
|
|
47
|
+
const VIBE_LOCAL_PROMPT_CAPTURE_LINES = 200;
|
|
48
|
+
/**
|
|
49
|
+
* Whether {@link VibeLocalTool}'s prompt wait counts this frame towards giving
|
|
50
|
+
* up on a dialog (Issue #4084): the detector reports an active prompt — what
|
|
51
|
+
* the re-check under the input lock refuses — and no turn is being generated.
|
|
52
|
+
* Unlike copilot's wait, there is no folder-trust dialog here to leave out:
|
|
53
|
+
* this wait answers none.
|
|
54
|
+
*/
|
|
55
|
+
function isVibeLocalWaitDialog(output) {
|
|
56
|
+
const status = (0, status_detector_1.detectSessionStatus)(output, 'vibe-local');
|
|
57
|
+
return status.hasActivePrompt && !(0, status_detector_1.isGeneratingStatus)(status);
|
|
58
|
+
}
|
|
31
59
|
/**
|
|
32
60
|
* Vibe Local CLI tool implementation
|
|
33
61
|
* Manages vibe-local interactive sessions using tmux
|
|
@@ -92,7 +120,8 @@ class VibeLocalTool extends base_1.BaseCLITool {
|
|
|
92
120
|
}
|
|
93
121
|
// Start vibe-local in interactive mode with auto-approve (-y)
|
|
94
122
|
// -y flag skips the permission confirmation prompt
|
|
95
|
-
|
|
123
|
+
// Issue #3981: in one writer's turn of the input lock.
|
|
124
|
+
await this.typeLaunchLines(sessionName, [(0, launch_screen_1.withLaunchScreenCleared)(vibeLocalCommand)]);
|
|
96
125
|
// Wait for vibe-local to initialize (banner + model loading)
|
|
97
126
|
await new Promise((resolve) => setTimeout(resolve, VIBE_LOCAL_INIT_WAIT_MS));
|
|
98
127
|
logger.info('started-vibe-local-session');
|
|
@@ -117,6 +146,10 @@ class VibeLocalTool extends base_1.BaseCLITool {
|
|
|
117
146
|
// same pane when the tool is gone; costs one `capture-pane` when it is not.
|
|
118
147
|
await this.requireSession('Vibe Local', worktreeId, instanceId, { relaunch: true });
|
|
119
148
|
try {
|
|
149
|
+
// Issue #4040: nothing is typed (the two Enters included) until the
|
|
150
|
+
// newest prompt row is up and empty — a relaunch or a fresh launch is
|
|
151
|
+
// still drawing its banner when the first send arrives.
|
|
152
|
+
await this.waitForPrompt(sessionName);
|
|
120
153
|
// Issue #1471: Body/Enter separation + read-back submit verification via the
|
|
121
154
|
// shared helper. vibe-local's IME mode needs TWO Enter presses (first Enter
|
|
122
155
|
// inserts a newline, the second submits), preserved via submitEnterCount: 2
|
|
@@ -130,6 +163,8 @@ class VibeLocalTool extends base_1.BaseCLITool {
|
|
|
130
163
|
// the one call site that knew about it.
|
|
131
164
|
composer: this.describeComposer(),
|
|
132
165
|
interEnterWaitMs: cli_tool_timing_config_1.VIBE_LOCAL_DOUBLE_ENTER_WAIT_MS,
|
|
166
|
+
// Issue #4040: the same test, of the newest frame read under the input lock.
|
|
167
|
+
readiness: { label: 'Vibe Local', isReady: readiness_1.isVibeLocalComposerReady },
|
|
133
168
|
});
|
|
134
169
|
// Issue #405: Invalidate cache after sending message
|
|
135
170
|
(0, tmux_capture_cache_1.invalidateCache)(sessionName);
|
|
@@ -137,8 +172,62 @@ class VibeLocalTool extends base_1.BaseCLITool {
|
|
|
137
172
|
}
|
|
138
173
|
catch (error) {
|
|
139
174
|
const errorMessage = (0, errors_1.getErrorMessage)(error);
|
|
140
|
-
|
|
175
|
+
// Issue #4031: the cause keeps a failed `load-buffer`'s code (`classifySendFailure`).
|
|
176
|
+
throw new Error(`Failed to send message to Vibe Local: ${errorMessage}`, { cause: error });
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Wait for vibe-local's input prompt before a send (Issue #4040).
|
|
181
|
+
*
|
|
182
|
+
* {@link isVibeLocalComposerReady} is the test — the newest `ctx:N% ❯` row
|
|
183
|
+
* empty with only the footer below it (or a turn being generated under it),
|
|
184
|
+
* never "the row is somewhere on the pane": the scrollback keeps every old
|
|
185
|
+
* one.
|
|
186
|
+
*
|
|
187
|
+
* Issue #4084: a dialog (`hasActivePrompt`, not while a turn is being
|
|
188
|
+
* generated) ends the wait only once it is confirmed — seen on 2 reads in a
|
|
189
|
+
* row spanning `PROMPT_WAIT_DIALOG_CONFIRM_MS` (2 s), the count copilot's
|
|
190
|
+
* wait uses (#4067) — and is then refused as `prompt-waiting` at once, on the
|
|
191
|
+
* wait's own reads. A dialog read once (a frame mid-paint) and then gone does
|
|
192
|
+
* not refuse the send; it used to end the wait on that one read. A dialog
|
|
193
|
+
* that opens after the wait is still refused by the shared sender's re-read
|
|
194
|
+
* under the input lock, on one read. No capture is waited for past the
|
|
195
|
+
* window: one still running at the deadline is not used.
|
|
196
|
+
*
|
|
197
|
+
* @throws Error (`Vibe Local prompt not ready`) when the prompt did not come
|
|
198
|
+
* up within {@link VIBE_LOCAL_PROMPT_WAIT_TIMEOUT_MS}; nothing was typed
|
|
199
|
+
* @throws Error coded `prompt-waiting` ({@link confirmedDialogRefusal}) for a
|
|
200
|
+
* confirmed dialog; nothing was typed
|
|
201
|
+
*/
|
|
202
|
+
async waitForPrompt(sessionName) {
|
|
203
|
+
const deadline = Date.now() + VIBE_LOCAL_PROMPT_WAIT_TIMEOUT_MS;
|
|
204
|
+
const dialog = (0, prompt_wait_dialog_1.createDialogConfirmation)();
|
|
205
|
+
while (Date.now() < deadline) {
|
|
206
|
+
let confirmed = false;
|
|
207
|
+
try {
|
|
208
|
+
const output = await (0, prompt_wait_dialog_1.readBeforeDeadline)(() => (0, tmux_1.capturePane)(sessionName, VIBE_LOCAL_PROMPT_CAPTURE_LINES), deadline);
|
|
209
|
+
if (output === null)
|
|
210
|
+
break;
|
|
211
|
+
if ((0, readiness_1.isVibeLocalComposerReady)(output))
|
|
212
|
+
return;
|
|
213
|
+
confirmed = dialog.observe(isVibeLocalWaitDialog(output));
|
|
214
|
+
}
|
|
215
|
+
catch (error) {
|
|
216
|
+
// Capture may fail - continue polling. Not a dialog read: the run restarts.
|
|
217
|
+
dialog.reset();
|
|
218
|
+
logger.debug('vibe-local-prompt-capture-failed', { sessionName, error: (0, errors_1.getErrorMessage)(error) });
|
|
219
|
+
}
|
|
220
|
+
if (confirmed) {
|
|
221
|
+
logger.warn('vibe-local-prompt-wait-dialog', { sessionName, reads: dialog.reads });
|
|
222
|
+
throw (0, prompt_wait_dialog_1.confirmedDialogRefusal)(sessionName, 'Vibe Local');
|
|
223
|
+
}
|
|
224
|
+
const remaining = deadline - Date.now();
|
|
225
|
+
if (remaining <= 0)
|
|
226
|
+
break;
|
|
227
|
+
await new Promise((resolve) => setTimeout(resolve, Math.min(VIBE_LOCAL_PROMPT_POLL_INTERVAL_MS, remaining)));
|
|
141
228
|
}
|
|
229
|
+
logger.info('vibe-local-prompt-not-detected');
|
|
230
|
+
throw new Error('Vibe Local prompt not ready: timed out waiting for the input prompt before sending');
|
|
142
231
|
}
|
|
143
232
|
/**
|
|
144
233
|
* Kill vibe-local session
|
|
@@ -30,6 +30,7 @@ exports.updatePromptData = updatePromptData;
|
|
|
30
30
|
exports.markPendingPromptsAsAnswered = markPendingPromptsAsAnswered;
|
|
31
31
|
exports.recordAnsweredPrompt = recordAnsweredPrompt;
|
|
32
32
|
exports.createModelChangeMessage = createModelChangeMessage;
|
|
33
|
+
exports.relaySystemRequestId = relaySystemRequestId;
|
|
33
34
|
exports.relayRequestId = relayRequestId;
|
|
34
35
|
exports.parseRelayRequestId = parseRelayRequestId;
|
|
35
36
|
exports.getLastUserMessageForInstance = getLastUserMessageForInstance;
|
|
@@ -800,6 +801,18 @@ function createModelChangeMessage(db, params) {
|
|
|
800
801
|
exports.RELAY_REQUEST_ID_PREFIX = 'relay:';
|
|
801
802
|
/** The `request_id` prefix a relay SYSTEM row carries (`relay-sys:<relayId>:<kind>`). */
|
|
802
803
|
exports.RELAY_SYSTEM_REQUEST_ID_PREFIX = 'relay-sys:';
|
|
804
|
+
/**
|
|
805
|
+
* The request id of a relay SYSTEM row (Issue #4082): `relay-sys:<relayId>:<kind>`,
|
|
806
|
+
* or `relay-sys:<relayId>:<kind>:<scope>` for a line written once per payload
|
|
807
|
+
* attempt (`held`: `<payloadId>:<attemptId>`). The probe that keeps a line from
|
|
808
|
+
* being written twice and the write itself both build it here, so the two
|
|
809
|
+
* cannot key the same line differently. The `relay-sys:` prefix is what the
|
|
810
|
+
* reply readers step over.
|
|
811
|
+
*/
|
|
812
|
+
function relaySystemRequestId(relayId, kind, scope = null) {
|
|
813
|
+
const base = `${exports.RELAY_SYSTEM_REQUEST_ID_PREFIX}${relayId}:${kind}`;
|
|
814
|
+
return scope === null ? base : `${base}:${scope}`;
|
|
815
|
+
}
|
|
803
816
|
/** Build the relay message's request id from the ledger id. */
|
|
804
817
|
function relayRequestId(relayId) {
|
|
805
818
|
return `${exports.RELAY_REQUEST_ID_PREFIX}${relayId}`;
|
|
@@ -889,7 +902,7 @@ function createRelaySystemMessage(db, params) {
|
|
|
889
902
|
content: params.content,
|
|
890
903
|
messageType: 'normal',
|
|
891
904
|
timestamp: new Date(params.at),
|
|
892
|
-
requestId:
|
|
905
|
+
requestId: relaySystemRequestId(params.relayId, params.kind, params.scope ?? null),
|
|
893
906
|
cliToolId: params.cliToolId,
|
|
894
907
|
instanceId: params.instanceId ?? params.cliToolId,
|
|
895
908
|
});
|
|
@@ -10,6 +10,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
10
10
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.TEST_DB_ROOT_ENV = void 0;
|
|
14
|
+
exports.isInsideVitestWorker = isInsideVitestWorker;
|
|
15
|
+
exports.assertTestDatabasePathIsolated = assertTestDatabasePathIsolated;
|
|
13
16
|
exports.getDbInstance = getDbInstance;
|
|
14
17
|
exports.closeDbInstance = closeDbInstance;
|
|
15
18
|
const path_1 = __importDefault(require("path"));
|
|
@@ -17,7 +20,112 @@ const db_migrations_1 = require("./db-migrations");
|
|
|
17
20
|
const abi_recovery_1 = require("./abi-recovery");
|
|
18
21
|
const agent_session_cost_sampler_1 = require("./agent-session-cost-sampler");
|
|
19
22
|
const env_1 = require("../../lib/env");
|
|
23
|
+
const system_directories_1 = require("../../config/system-directories");
|
|
20
24
|
let dbInstance = null;
|
|
25
|
+
/**
|
|
26
|
+
* `fs` / `os` are required lazily, as getDbInstance() always did for `fs`: a
|
|
27
|
+
* test that mocks either module must not change how the real database is
|
|
28
|
+
* opened or which directory counts as temp.
|
|
29
|
+
*/
|
|
30
|
+
function nodeFs() {
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
32
|
+
return require('fs');
|
|
33
|
+
}
|
|
34
|
+
function nodeTmpdir() {
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
36
|
+
return require('os').tmpdir();
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Issue #4086: is this code running inside a Vitest worker?
|
|
40
|
+
*
|
|
41
|
+
* Read off the worker state Vitest itself installs on `globalThis` (its
|
|
42
|
+
* `getWorkerState()` reads the same `__vitest_worker__` global, in the forks
|
|
43
|
+
* and threads pools alike), not off environment variables: the environment is
|
|
44
|
+
* both inherited and editable. A test may swap `NODE_ENV` to `production`
|
|
45
|
+
* mid-run (tests/unit/pwa/ServiceWorkerRegistrar.test.tsx does) and must stay
|
|
46
|
+
* guarded, while a child process started outside Vitest inherits `VITEST` and
|
|
47
|
+
* must not be taken for a test run.
|
|
48
|
+
*/
|
|
49
|
+
function isInsideVitestWorker() {
|
|
50
|
+
const state = globalThis.__vitest_worker__;
|
|
51
|
+
return typeof state === 'object' && state !== null;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Issue #4086: is this a test run (the guard's on-switch)?
|
|
55
|
+
*
|
|
56
|
+
* Inside a Vitest worker: always, whatever `NODE_ENV` says right now.
|
|
57
|
+
* Outside one: only with `NODE_ENV=test` (a test's own child process, which
|
|
58
|
+
* also inherits the per-process CM_DB_PATH). `VITEST` alone never counts —
|
|
59
|
+
* the daemon spreads `process.env` into the server it starts
|
|
60
|
+
* (src/cli/utils/daemon.ts buildChildEnv), so a `NODE_ENV=production` server
|
|
61
|
+
* started from a shell where `VITEST` was left behind opens its real database.
|
|
62
|
+
*/
|
|
63
|
+
function isUnderTest(env, inVitestWorker) {
|
|
64
|
+
if (inVitestWorker)
|
|
65
|
+
return true;
|
|
66
|
+
return (env.NODE_ENV ?? '').trim() === 'test';
|
|
67
|
+
}
|
|
68
|
+
/** realpath of the nearest existing ancestor, with the missing tail re-joined. */
|
|
69
|
+
function physicalPath(target) {
|
|
70
|
+
const fs = nodeFs();
|
|
71
|
+
let existing = path_1.default.resolve(target);
|
|
72
|
+
const tail = [];
|
|
73
|
+
while (!fs.existsSync(existing)) {
|
|
74
|
+
const parent = path_1.default.dirname(existing);
|
|
75
|
+
if (parent === existing)
|
|
76
|
+
break;
|
|
77
|
+
tail.unshift(path_1.default.basename(existing));
|
|
78
|
+
existing = parent;
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
return path_1.default.join(fs.realpathSync(existing), ...tail);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return path_1.default.resolve(target);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/** Set by tests/setup.ts: the gitignored directory that holds per-process test databases. */
|
|
88
|
+
exports.TEST_DB_ROOT_ENV = 'CM_TEST_DB_ROOT';
|
|
89
|
+
/**
|
|
90
|
+
* Issue #4086: under Vitest, refuse any database the test run does not own.
|
|
91
|
+
*
|
|
92
|
+
* A worker's shell inherits the server's `CM_DB_PATH=<production db>`, and a
|
|
93
|
+
* test that reached this function opened that file, switched it to WAL and ran
|
|
94
|
+
* the checkout's migrations on it (production went to v63 under a v62 server).
|
|
95
|
+
* tests/setup.ts repoints the variables per process; this is the backstop for
|
|
96
|
+
* a path that still escapes (a test that deletes `CM_DB_PATH` and falls to the
|
|
97
|
+
* install default, a child process that inherited a real path).
|
|
98
|
+
*
|
|
99
|
+
* Owned = inside the OS temp directory (tests that mock `getEnv` and create
|
|
100
|
+
* their own `mkdtemp` database) or inside `$CM_TEST_DB_ROOT` (the per-process
|
|
101
|
+
* databases tests/setup.ts hands out — not under the temp dir, because
|
|
102
|
+
* `validateDbPath` rejects /tmp and /var, where every OS temp dir lives). Not
|
|
103
|
+
* only the one setup path, so tests that name their own database keep working.
|
|
104
|
+
* Active inside a Vitest worker (even while a test has swapped `NODE_ENV`) and
|
|
105
|
+
* in a process with `NODE_ENV=test`; a no-op otherwise, so a real server is
|
|
106
|
+
* never affected — including one that inherited `VITEST` but runs with
|
|
107
|
+
* `NODE_ENV=production`.
|
|
108
|
+
*
|
|
109
|
+
* @param inVitestWorker - defaults to {@link isInsideVitestWorker}; a test
|
|
110
|
+
* passes `false` to ask how a process outside Vitest would be judged
|
|
111
|
+
* @throws Error when under test and `dbPath` is in neither directory
|
|
112
|
+
*/
|
|
113
|
+
function assertTestDatabasePathIsolated(dbPath, env = process.env, tmpRoot = nodeTmpdir(), inVitestWorker = isInsideVitestWorker()) {
|
|
114
|
+
if (!isUnderTest(env, inVitestWorker))
|
|
115
|
+
return;
|
|
116
|
+
const resolved = path_1.default.resolve(dbPath);
|
|
117
|
+
const roots = [tmpRoot, env[exports.TEST_DB_ROOT_ENV]]
|
|
118
|
+
.filter((root) => typeof root === 'string' && root.trim() !== '');
|
|
119
|
+
// Compared physically: macOS's /var -> /private/var (the temp dir lives
|
|
120
|
+
// there) must not reject a temp path, and a symlink under an owned directory
|
|
121
|
+
// must not let a real database through.
|
|
122
|
+
const physical = physicalPath(resolved);
|
|
123
|
+
if (!roots.some((root) => (0, system_directories_1.isPathWithin)(physical, physicalPath(root)))) {
|
|
124
|
+
throw new Error(`[Issue #4086] Refusing to open database ${resolved} under test: it is outside the temp directory `
|
|
125
|
+
+ `and outside ${exports.TEST_DB_ROOT_ENV} (${roots.join(', ')}). tests/setup.ts points CM_DB_PATH at a `
|
|
126
|
+
+ 'per-process test database; a test that names its own database must create it under os.tmpdir().');
|
|
127
|
+
}
|
|
128
|
+
}
|
|
21
129
|
/**
|
|
22
130
|
* Get or create the database instance
|
|
23
131
|
*
|
|
@@ -37,9 +145,10 @@ function getDbInstance() {
|
|
|
37
145
|
// Issue #135: Use getEnv() for consistent DB path resolution
|
|
38
146
|
const env = (0, env_1.getEnv)();
|
|
39
147
|
const dbPath = env.CM_DB_PATH;
|
|
148
|
+
// Issue #4086: before anything touches the path (mkdir, open, WAL, migrations).
|
|
149
|
+
assertTestDatabasePathIsolated(dbPath);
|
|
40
150
|
// Ensure the database directory exists
|
|
41
|
-
|
|
42
|
-
const fs = require('fs');
|
|
151
|
+
const fs = nodeFs();
|
|
43
152
|
const dir = path_1.default.dirname(dbPath);
|
|
44
153
|
if (!fs.existsSync(dir)) {
|
|
45
154
|
// SEC-003: Set directory permissions to 0o700 (owner only)
|
|
@@ -70,6 +179,9 @@ function getDbInstance() {
|
|
|
70
179
|
throw error;
|
|
71
180
|
}
|
|
72
181
|
dbInstance = db;
|
|
182
|
+
if (isUnderTest(process.env, isInsideVitestWorker())) {
|
|
183
|
+
(globalThis.__commandmateTestDbClosers ??= new Set()).add(closeDbInstance);
|
|
184
|
+
}
|
|
73
185
|
// Issue #2044: the agent cost ledger needs somebody to copy the in-memory
|
|
74
186
|
// telemetry in before the pane that holds it is killed. This is the one
|
|
75
187
|
// place that runs once per process, after the schema is verified, in every
|
|
@@ -15,6 +15,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.resolveAndValidatePath = resolveAndValidatePath;
|
|
16
16
|
exports.getLegacyDbPaths = getLegacyDbPaths;
|
|
17
17
|
exports.migrateDbIfNeeded = migrateDbIfNeeded;
|
|
18
|
+
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
19
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
18
20
|
const fs_1 = __importDefault(require("fs"));
|
|
19
21
|
const path_1 = __importDefault(require("path"));
|
|
20
22
|
const os_1 = require("os");
|
|
@@ -83,6 +85,61 @@ function getLegacyDbPaths() {
|
|
|
83
85
|
}
|
|
84
86
|
return paths;
|
|
85
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* Whether committed updates of `dbPath` may still live only in its `-wal` file.
|
|
90
|
+
*
|
|
91
|
+
* An empty or absent `-wal` means the main file is the whole database.
|
|
92
|
+
*/
|
|
93
|
+
function hasPendingWal(dbPath) {
|
|
94
|
+
try {
|
|
95
|
+
return fs_1.default.statSync(`${dbPath}-wal`).size > 0;
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Write a self-contained copy of the database at `sourcePath` to `destPath`
|
|
103
|
+
* (Issue #3993).
|
|
104
|
+
*
|
|
105
|
+
* Same tool as the pre-migration backup (`migrations/pre-migration-backup.ts`,
|
|
106
|
+
* Issue #3985): `VACUUM INTO` reads inside one read transaction, so updates
|
|
107
|
+
* still in `-wal` are included, and the result is a rollback-journal file that
|
|
108
|
+
* needs no sidecar. Copying the main file alone dropped them. The source is
|
|
109
|
+
* opened read-only; the copy is written to a temporary name and renamed into
|
|
110
|
+
* place, because `VACUUM INTO` refuses a non-empty destination.
|
|
111
|
+
*/
|
|
112
|
+
function snapshotDatabase(sourcePath, destPath) {
|
|
113
|
+
const tempPath = `${destPath}.${crypto_1.default.randomBytes(4).toString('hex')}.partial`;
|
|
114
|
+
try {
|
|
115
|
+
// VACUUM INTO accepts an empty existing file; creating it first fixes the mode.
|
|
116
|
+
fs_1.default.closeSync(fs_1.default.openSync(tempPath, 'wx', 0o600));
|
|
117
|
+
const source = new better_sqlite3_1.default(sourcePath, { readonly: true, fileMustExist: true });
|
|
118
|
+
try {
|
|
119
|
+
source.prepare('VACUUM INTO ?').run(tempPath);
|
|
120
|
+
}
|
|
121
|
+
finally {
|
|
122
|
+
source.close();
|
|
123
|
+
}
|
|
124
|
+
fs_1.default.renameSync(tempPath, destPath);
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
fs_1.default.rmSync(tempPath, { force: true });
|
|
128
|
+
throw error;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Copy a legacy database: a consistent snapshot when it has a non-empty `-wal`,
|
|
133
|
+
* the file itself otherwise (unchanged from before Issue #3993).
|
|
134
|
+
*/
|
|
135
|
+
function copyLegacyDatabase(sourcePath, destPath) {
|
|
136
|
+
if (hasPendingWal(sourcePath)) {
|
|
137
|
+
snapshotDatabase(sourcePath, destPath);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
fs_1.default.copyFileSync(sourcePath, destPath);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
86
143
|
/**
|
|
87
144
|
* Migrate database to new path if legacy DB exists
|
|
88
145
|
*
|
|
@@ -92,6 +149,10 @@ function getLegacyDbPaths() {
|
|
|
92
149
|
* 3. Creates a backup of the legacy database
|
|
93
150
|
* 4. Copies the database to the new location
|
|
94
151
|
*
|
|
152
|
+
* A legacy database with a non-empty `-wal` is copied as a `VACUUM INTO`
|
|
153
|
+
* snapshot (both the backup and the new location), so updates not yet written
|
|
154
|
+
* back to the main file are kept (Issue #3993).
|
|
155
|
+
*
|
|
95
156
|
* Security features:
|
|
96
157
|
* - SEC-002: Symlink resolution via realpathSync
|
|
97
158
|
* - SEC-003: Directory creation with mode 0o700
|
|
@@ -125,7 +186,7 @@ function migrateDbIfNeeded(targetPath) {
|
|
|
125
186
|
}
|
|
126
187
|
// Create backup (SEC-006)
|
|
127
188
|
const backupPath = `${resolvedLegacyPath}.bak`;
|
|
128
|
-
|
|
189
|
+
copyLegacyDatabase(resolvedLegacyPath, backupPath);
|
|
129
190
|
fs_1.default.chmodSync(backupPath, 0o600);
|
|
130
191
|
// Create target directory if needed (SEC-003)
|
|
131
192
|
const targetDir = path_1.default.dirname(resolvedTargetPath);
|
|
@@ -133,7 +194,7 @@ function migrateDbIfNeeded(targetPath) {
|
|
|
133
194
|
fs_1.default.mkdirSync(targetDir, { recursive: true, mode: 0o700 });
|
|
134
195
|
}
|
|
135
196
|
// Copy database to new location
|
|
136
|
-
|
|
197
|
+
copyLegacyDatabase(resolvedLegacyPath, resolvedTargetPath);
|
|
137
198
|
logger.info(`[Migration] Database migrated from ${resolvedLegacyPath} to ${resolvedTargetPath}`);
|
|
138
199
|
logger.info(`[Migration] Backup created at ${backupPath}`);
|
|
139
200
|
return {
|
|
@@ -46,6 +46,7 @@ const v59_opencode_instance_settings_1 = require("./v59-opencode-instance-settin
|
|
|
46
46
|
const v60_session_relays_1 = require("./v60-session-relays");
|
|
47
47
|
const v61_session_notes_1 = require("./v61-session-notes");
|
|
48
48
|
const v62_session_relays_bind_1 = require("./v62-session-relays-bind");
|
|
49
|
+
const v63_session_relays_delivery_attempt_1 = require("./v63-session-relays-delivery-attempt");
|
|
49
50
|
/**
|
|
50
51
|
* Complete ordered list of all migrations.
|
|
51
52
|
* Used internally by the barrel file (db-migrations.ts); NOT exported from the barrel (DR2-004).
|
|
@@ -95,4 +96,5 @@ exports.migrations = [
|
|
|
95
96
|
...v60_session_relays_1.v60_migrations,
|
|
96
97
|
...v61_session_notes_1.v61_migrations,
|
|
97
98
|
...v62_session_relays_bind_1.v62_migrations,
|
|
99
|
+
...v63_session_relays_delivery_attempt_1.v63_migrations,
|
|
98
100
|
];
|
|
@@ -18,7 +18,7 @@ const pre_migration_backup_1 = require("./pre-migration-backup");
|
|
|
18
18
|
* Current schema version
|
|
19
19
|
* Increment this when adding new migrations
|
|
20
20
|
*/
|
|
21
|
-
exports.CURRENT_SCHEMA_VERSION =
|
|
21
|
+
exports.CURRENT_SCHEMA_VERSION = 63;
|
|
22
22
|
/**
|
|
23
23
|
* Get current schema version from database
|
|
24
24
|
*/
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Migration v63: record the relay delivery's own attempt (Issue #4064).
|
|
4
|
+
*
|
|
5
|
+
* Until now a payload in `pending_*` had one state — queued — and the only lock
|
|
6
|
+
* on its delivery was the in-process claim. A send whose outcome could not be
|
|
7
|
+
* told (`indeterminate`, a throw after `sent`, a throw before any state) was
|
|
8
|
+
* released like an unsent one and typed again by the next pump, and a server
|
|
9
|
+
* that died mid-send forgot the attempt altogether.
|
|
10
|
+
*
|
|
11
|
+
* The columns below say, per payload, whether a delivery has started and how
|
|
12
|
+
* it ended when that end is not known:
|
|
13
|
+
*
|
|
14
|
+
* - `delivery_state` — NULL (queued; every row that existed before this
|
|
15
|
+
* migration, `payload_id` NULL included) | `attempting` (written before the
|
|
16
|
+
* first key; only the writer of it sends) | `uncertain` (the attempt's outcome
|
|
17
|
+
* is not known; never sent again automatically).
|
|
18
|
+
* - `delivery_attempt_id` — the attempt that took the payload; the result is
|
|
19
|
+
* written only under it.
|
|
20
|
+
* - `delivery_owner` — the server boot that took it, so a restart can tell its
|
|
21
|
+
* own live attempts from the previous boot's interrupted ones.
|
|
22
|
+
* - `delivery_reason` — why it is held (`SendAttemptReason`, `send-threw`,
|
|
23
|
+
* `threw-after-sent`, `server-restarted`), published as is.
|
|
24
|
+
* - `delivery_at` — epoch ms of the last change of `delivery_state`.
|
|
25
|
+
*
|
|
26
|
+
* The rollback drops exactly these columns. None is indexed, part of a foreign
|
|
27
|
+
* key or named in another column's CHECK.
|
|
28
|
+
*/
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.v63_migrations = exports.V63_SESSION_RELAY_COLUMNS = void 0;
|
|
31
|
+
/** The v63 columns, in the order the rollback drops them. */
|
|
32
|
+
exports.V63_SESSION_RELAY_COLUMNS = [
|
|
33
|
+
'delivery_state',
|
|
34
|
+
'delivery_attempt_id',
|
|
35
|
+
'delivery_owner',
|
|
36
|
+
'delivery_reason',
|
|
37
|
+
'delivery_at',
|
|
38
|
+
];
|
|
39
|
+
exports.v63_migrations = [
|
|
40
|
+
{
|
|
41
|
+
version: 63,
|
|
42
|
+
name: 'session-relays-delivery-attempt',
|
|
43
|
+
up: (db) => {
|
|
44
|
+
const statements = [
|
|
45
|
+
`ALTER TABLE session_relays ADD COLUMN delivery_state TEXT
|
|
46
|
+
CHECK (delivery_state IN ('attempting','uncertain'))`,
|
|
47
|
+
'ALTER TABLE session_relays ADD COLUMN delivery_attempt_id TEXT',
|
|
48
|
+
'ALTER TABLE session_relays ADD COLUMN delivery_owner TEXT',
|
|
49
|
+
'ALTER TABLE session_relays ADD COLUMN delivery_reason TEXT',
|
|
50
|
+
'ALTER TABLE session_relays ADD COLUMN delivery_at INTEGER',
|
|
51
|
+
];
|
|
52
|
+
for (const statement of statements)
|
|
53
|
+
db.exec(statement);
|
|
54
|
+
},
|
|
55
|
+
down: (db) => {
|
|
56
|
+
for (const column of [...exports.V63_SESSION_RELAY_COLUMNS].reverse()) {
|
|
57
|
+
db.exec(`ALTER TABLE session_relays DROP COLUMN ${column}`);
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
];
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The relay ledger's shared row shape, mapper and SQL fragments, split out of
|
|
4
|
+
* `relay-bind-db` (Issue #4095). Imported by `relay-bind-db` and its other
|
|
5
|
+
* split modules; this module imports none of them.
|
|
6
|
+
*
|
|
7
|
+
* @module lib/db/relay-bind-db-base
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.OPEN_STATE_PLACEHOLDERS = exports.KEEP_HELD_PAYLOAD_SET = exports.RELAY_COLUMNS = void 0;
|
|
11
|
+
exports.mapRelay = mapRelay;
|
|
12
|
+
exports.parseJson = parseJson;
|
|
13
|
+
const types_1 = require("../../lib/relay/types");
|
|
14
|
+
/** Every column, in one place, so the readers cannot drift from each other. */
|
|
15
|
+
exports.RELAY_COLUMNS = `
|
|
16
|
+
id, from_worktree_id, from_instance_id, to_worktree_id, to_instance_id,
|
|
17
|
+
state, hops, sent_request_id, pending_kind, pending_body, prompt_signature,
|
|
18
|
+
created_at, updated_at, expires_at, delivered_at,
|
|
19
|
+
bind_mode, send_state, input_boundary_at, boundary_kind, turn_open_at_send,
|
|
20
|
+
obs_state, hold_reason, overlap,
|
|
21
|
+
delivery_state, delivery_reason, delivery_at,
|
|
22
|
+
CASE WHEN delivery_state IS NULL THEN NULL ELSE payload_id END AS delivery_payload_id,
|
|
23
|
+
CASE WHEN delivery_state IS NULL THEN NULL ELSE delivery_attempt_id END AS delivery_hold_attempt_id
|
|
24
|
+
`;
|
|
25
|
+
function mapRelay(row) {
|
|
26
|
+
return {
|
|
27
|
+
id: row.id,
|
|
28
|
+
from: { worktreeId: row.from_worktree_id, instanceId: row.from_instance_id },
|
|
29
|
+
to: { worktreeId: row.to_worktree_id, instanceId: row.to_instance_id },
|
|
30
|
+
state: row.state,
|
|
31
|
+
hops: row.hops,
|
|
32
|
+
sentRequestId: row.sent_request_id,
|
|
33
|
+
pendingKind: row.pending_kind ?? null,
|
|
34
|
+
createdAt: row.created_at,
|
|
35
|
+
updatedAt: row.updated_at,
|
|
36
|
+
expiresAt: row.expires_at,
|
|
37
|
+
deliveredAt: row.delivered_at,
|
|
38
|
+
bindMode: row.bind_mode ?? 'legacy',
|
|
39
|
+
sendState: row.send_state ?? null,
|
|
40
|
+
inputBoundaryAt: row.input_boundary_at,
|
|
41
|
+
boundaryKind: row.boundary_kind ?? null,
|
|
42
|
+
turnOpenAtSend: row.turn_open_at_send === null ? null : row.turn_open_at_send === 1,
|
|
43
|
+
obsState: row.obs_state ?? null,
|
|
44
|
+
holdReason: row.hold_reason,
|
|
45
|
+
overlap: row.overlap ?? null,
|
|
46
|
+
deliveryHold: mapDeliveryHold(row),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/** The delivery hold a row carries, or null (Issue #4064). */
|
|
50
|
+
function mapDeliveryHold(row) {
|
|
51
|
+
if (row.delivery_state === null || row.delivery_state === undefined)
|
|
52
|
+
return null;
|
|
53
|
+
return {
|
|
54
|
+
state: row.delivery_state,
|
|
55
|
+
payloadId: row.delivery_payload_id ?? null,
|
|
56
|
+
attemptId: row.delivery_hold_attempt_id ?? null,
|
|
57
|
+
kind: row.pending_kind ?? null,
|
|
58
|
+
reason: row.delivery_reason ?? null,
|
|
59
|
+
at: row.delivery_at ?? null,
|
|
60
|
+
checkCommand: (0, types_1.relayRequesterPaneCommand)({
|
|
61
|
+
worktreeId: row.from_worktree_id,
|
|
62
|
+
instanceId: row.from_instance_id,
|
|
63
|
+
}),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* `SET` assignments that empty the pending slot unless its payload is under a
|
|
68
|
+
* delivery hold (Issue #4064). For the writers that close a relay (cancel, the
|
|
69
|
+
* restart recovery's cancel): they stop later deliveries, and a held payload's
|
|
70
|
+
* body, id and reason stay readable — closing a relay does not prove that what
|
|
71
|
+
* may already be in A's composer is not.
|
|
72
|
+
*/
|
|
73
|
+
exports.KEEP_HELD_PAYLOAD_SET = `
|
|
74
|
+
pending_kind = CASE WHEN delivery_state IS NULL THEN NULL ELSE pending_kind END,
|
|
75
|
+
pending_body = CASE WHEN delivery_state IS NULL THEN NULL ELSE pending_body END,
|
|
76
|
+
payload_id = CASE WHEN delivery_state IS NULL THEN NULL ELSE payload_id END
|
|
77
|
+
`;
|
|
78
|
+
/** Placeholders for an `IN (…)` over the open states. */
|
|
79
|
+
exports.OPEN_STATE_PLACEHOLDERS = types_1.OPEN_RELAY_STATES.map(() => '?').join(', ');
|
|
80
|
+
function parseJson(text, fallback) {
|
|
81
|
+
if (text === null)
|
|
82
|
+
return fallback;
|
|
83
|
+
try {
|
|
84
|
+
return JSON.parse(text);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return fallback;
|
|
88
|
+
}
|
|
89
|
+
}
|