commandmate 0.49.0 → 0.49.2
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 +251 -248
- package/.next/app-path-routes-manifest.json +22 -21
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +9 -9
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js +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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -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]/route.js +1 -0
- package/.next/server/app/api/relays/[relayId]/route.js.nft.json +1 -0
- package/.next/server/app/api/relays/[relayId]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/relays/route.js +1 -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 +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 +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 +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +144 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +2 -2
- 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 +103 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.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.js +1 -1
- package/.next/server/app/sessions/page.js.nft.json +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page_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 +11 -11
- package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +22 -21
- package/.next/server/chunks/1062.js +1 -0
- package/.next/server/chunks/{936.js → 110.js} +1 -1
- 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/2404.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/{4280.js → 3756.js} +1 -1
- package/.next/server/chunks/3801.js +31 -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/5354.js +1 -1
- package/.next/server/chunks/{9130.js → 5630.js} +1 -1
- package/.next/server/chunks/610.js +1 -0
- package/.next/server/chunks/6119.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6486.js +1 -1
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/6808.js +4 -0
- package/.next/server/chunks/7023.js +14 -0
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/8581.js +8 -8
- package/.next/server/chunks/8728.js +2 -2
- package/.next/server/chunks/8782.js +1 -1
- package/.next/server/chunks/8807.js +63 -53
- package/.next/server/chunks/8918.js +103 -1
- package/.next/server/chunks/9198.js +144 -0
- package/.next/server/chunks/9390.js +1 -1
- package/.next/server/chunks/9584.js +1 -1
- package/.next/server/chunks/9627.js +1 -1
- 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-ab92ae9837c39dce.js → 2407-07a237575e1ceb9e.js} +1 -1
- package/.next/static/chunks/3931-61ad1a4fc0208d0e.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-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/agents/versions/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/app/release-notes/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/app/update/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/relays/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/remote/pair/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/settings/default-agents/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/skills/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/templates/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/layout-4f64316957b0a8e5.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-a4f129c451de7859.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-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/review/page-ff3efb96fdf9bb4b.js +1 -0
- package/.next/static/chunks/app/sessions/page-c6eb7c02db2f4c80.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/layout-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-33afc6aa96289fb0.js +1 -0
- package/.next/static/css/c1e307d05daf93b6.css +1 -0
- package/.next/trace +13 -13
- package/.next/types/app/api/relays/[relayId]/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 +233 -17
- 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 +39 -5
- package/dist/cli/commands/message-dispatch.d.ts.map +1 -1
- package/dist/cli/commands/message-dispatch.js +100 -8
- package/dist/cli/commands/relays.d.ts +26 -2
- package/dist/cli/commands/relays.d.ts.map +1 -1
- package/dist/cli/commands/relays.js +70 -5
- package/dist/cli/commands/respond-strict.d.ts.map +1 -1
- package/dist/cli/commands/respond-strict.js +22 -5
- package/dist/cli/commands/respond.d.ts +12 -0
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +83 -18
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +14 -8
- package/dist/cli/commands/wait-hook-stop-settle.d.ts +66 -0
- package/dist/cli/commands/wait-hook-stop-settle.d.ts.map +1 -0
- package/dist/cli/commands/wait-hook-stop-settle.js +150 -0
- package/dist/cli/commands/wait-instance.d.ts +29 -0
- package/dist/cli/commands/wait-instance.d.ts.map +1 -0
- package/dist/cli/commands/wait-instance.js +56 -0
- package/dist/cli/commands/wait-notices.d.ts +87 -0
- package/dist/cli/commands/wait-notices.d.ts.map +1 -0
- package/dist/cli/commands/wait-notices.js +301 -0
- package/dist/cli/commands/wait-poll-bookkeeping.d.ts +15 -0
- package/dist/cli/commands/wait-poll-bookkeeping.d.ts.map +1 -0
- package/dist/cli/commands/wait-poll-bookkeeping.js +57 -0
- package/dist/cli/commands/wait-poll-state.d.ts +136 -0
- package/dist/cli/commands/wait-poll-state.d.ts.map +1 -0
- package/dist/cli/commands/wait-poll-state.js +6 -0
- package/dist/cli/commands/wait-timing.d.ts +46 -0
- package/dist/cli/commands/wait-timing.d.ts.map +1 -0
- package/dist/cli/commands/wait-timing.js +99 -0
- package/dist/cli/commands/wait-turn-boundary.d.ts +284 -0
- package/dist/cli/commands/wait-turn-boundary.d.ts.map +1 -0
- package/dist/cli/commands/wait-turn-boundary.js +427 -0
- package/dist/cli/commands/wait-verify.d.ts +51 -0
- package/dist/cli/commands/wait-verify.d.ts.map +1 -0
- package/dist/cli/commands/wait-verify.js +128 -0
- package/dist/cli/commands/wait.d.ts +6 -105
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +240 -968
- 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 +2 -2
- package/dist/cli/docs/agent-operations.d.ts.map +1 -1
- package/dist/cli/docs/agent-operations.js +24 -1
- package/dist/cli/types/api-responses.d.ts +49 -3
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/utils/api-client.d.ts +69 -1
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +226 -18
- 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 +80 -1
- package/dist/cli/utils/reply-ledger.d.ts.map +1 -1
- package/dist/cli/utils/reply-ledger.js +147 -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/session/send-attempt-types.d.ts +48 -1
- package/dist/lib/session/send-attempt-types.d.ts.map +1 -1
- package/dist/lib/session/send-attempt-types.js +18 -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 +20 -3
- package/dist/server/locales/ja/worktree.json +20 -3
- package/dist/server/src/config/cli-tool-timing-config.js +1 -7
- package/dist/server/src/lib/auto-yes-poller.js +54 -11
- package/dist/server/src/lib/cli-tools/antigravity.js +45 -9
- package/dist/server/src/lib/cli-tools/base.js +39 -0
- package/dist/server/src/lib/cli-tools/codex.js +67 -15
- package/dist/server/src/lib/cli-tools/command-code-plan-review.js +24 -2
- package/dist/server/src/lib/cli-tools/command-code.js +7 -3
- package/dist/server/src/lib/cli-tools/copilot.js +125 -33
- package/dist/server/src/lib/cli-tools/gemini.js +37 -10
- 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 +60 -15
- package/dist/server/src/lib/cli-tools/session-name.js +11 -3
- package/dist/server/src/lib/cli-tools/submit-composer-read.js +590 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender.js +512 -620
- package/dist/server/src/lib/cli-tools/vibe-local.js +4 -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/pre-migration-backup.js +266 -0
- package/dist/server/src/lib/db/migrations/runner.js +37 -4
- package/dist/server/src/lib/db/migrations/v62-session-relays-bind.js +102 -0
- package/dist/server/src/lib/db/relay-bind-db.js +437 -0
- package/dist/server/src/lib/db/relay-db.js +59 -96
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +5 -4
- package/dist/server/src/lib/detection/upstream-faults.js +40 -6
- package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +2 -3
- package/dist/server/src/lib/hooks/sources/opencode/client.js +12 -6
- package/dist/server/src/lib/polling/response-checker.js +7 -5
- package/dist/server/src/lib/prompt-answer-errors.js +362 -0
- package/dist/server/src/lib/prompt-answer-sender.js +264 -288
- package/dist/server/src/lib/push/failure-episode-state.js +4 -1
- package/dist/server/src/lib/realtime/terminal-broadcast.js +1 -4
- package/dist/server/src/lib/realtime-snippet.js +54 -0
- package/dist/server/src/lib/relay/relay-bind.js +294 -0
- package/dist/server/src/lib/relay/relay-boot.js +51 -0
- package/dist/server/src/lib/relay/relay-bound-reply.js +519 -0
- package/dist/server/src/lib/relay/relay-delivery.js +134 -220
- package/dist/server/src/lib/relay/relay-messages.js +39 -4
- package/dist/server/src/lib/relay/relay-overlap.js +92 -0
- package/dist/server/src/lib/relay/relay-system-line.js +3 -2
- package/dist/server/src/lib/relay/types.js +12 -1
- package/dist/server/src/lib/session/agent-event-state.js +4 -0
- package/dist/server/src/lib/session/agent-session-lifecycle.js +23 -0
- package/dist/server/src/lib/session/claude-session.js +59 -8
- package/dist/server/src/lib/session/composer-clear.js +54 -1
- package/dist/server/src/lib/session/current-output-builder.js +26 -8
- package/dist/server/src/lib/session/current-output-history-writers.js +1 -1
- package/dist/server/src/lib/session/instance-input-lock.js +664 -0
- package/dist/server/src/lib/session/prompt-submit-receipt.js +155 -0
- package/dist/server/src/lib/session/prompt-waiting-guard.js +10 -3
- package/dist/server/src/lib/session/send-attempt-state.js +65 -0
- package/dist/server/src/lib/session/send-attempt-types.js +18 -1
- package/dist/server/src/lib/session/send-user-message.js +84 -14
- 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 +12 -9
- package/dist/server/src/lib/session/waiting-episode-binding.js +4 -2
- package/dist/server/src/lib/session-cleanup.js +32 -0
- package/dist/server/src/lib/session-key-sender.js +0 -27
- 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.1.json +66 -0
- package/release-notes/0.49.2.json +49 -0
- package/.next/server/chunks/1210.js +0 -1
- package/.next/server/chunks/1945.js +0 -14
- package/.next/server/chunks/1990.js +0 -103
- package/.next/server/chunks/4194.js +0 -67
- package/.next/server/chunks/5845.js +0 -1
- package/.next/server/chunks/720.js +0 -103
- package/.next/server/chunks/7604.js +0 -2
- package/.next/server/chunks/9540.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-cf6bdbff44a764cf.js +0 -1
- package/.next/static/chunks/9079-987939d231704218.js +0 -1
- package/.next/static/chunks/app/api/agents/update/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/agents/versions/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/app/release-notes/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/capabilities/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/relays/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/remote/pair/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/settings/default-agents/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/skills/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/templates/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/layout-aa8e66164a4367af.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-c81284a9d8b35304.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-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/review/page-e2fd4a590646a2d8.js +0 -1
- package/.next/static/chunks/app/sessions/page-cfd645305e25fd33.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-a8d7886703ffc7b4.js +0 -1
- package/.next/static/css/db8959555c3d9c96.css +0 -1
- /package/.next/static/{3_JtAZaKMJEDFIIfkHv4n → yGatWDsS532awSs51kXyd}/_buildManifest.js +0 -0
- /package/.next/static/{3_JtAZaKMJEDFIIfkHv4n → yGatWDsS532awSs51kXyd}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* One launch per session at a time (Issue #3981).
|
|
4
|
+
*
|
|
5
|
+
* Two requests could start the same session at once. A (a send to an instance
|
|
6
|
+
* that is not running) creates the pane and is about to type the launch line;
|
|
7
|
+
* B arrives in that window. For seven tools `isRunning` is `has-session`, so B
|
|
8
|
+
* read "running" and went on to type its body into the pane's shell; for claude
|
|
9
|
+
* `isRunning` also checks health, so on an unhealthy-looking pane (empty, `%`)
|
|
10
|
+
* B started the session too and the reuse branch killed A's half-launched pane.
|
|
11
|
+
* Nothing said "this session is already being started".
|
|
12
|
+
*
|
|
13
|
+
* This module is that fact, keyed by tmux session name, and the order it has to
|
|
14
|
+
* be taken in relative to the instance input lock (`./instance-input-lock`):
|
|
15
|
+
*
|
|
16
|
+
* - **The flight is outside, the lock inside.** A launch types its lines in one
|
|
17
|
+
* `exclusive` turn of the lock (`typeLaunchLines`), and its init polls and
|
|
18
|
+
* readiness waits run outside it (#3975). A naive "wait for the launch" would
|
|
19
|
+
* let a send that holds the lock wait for a launch that is waiting for the
|
|
20
|
+
* lock — a cycle that ends only at `INSTANCE_INPUT_LOCK_WAIT_MS`.
|
|
21
|
+
* - **R1: a lock holder never waits for another request's launch.** It gets
|
|
22
|
+
* {@link SessionLaunchInFlightError} (`SESSION_STARTING`, nothing typed)
|
|
23
|
+
* instead, and the launch types once the holder lets go.
|
|
24
|
+
* - **R2: the launch's own keys join a lock the launcher already holds** (codex
|
|
25
|
+
* relaunching inside a send): the lock's `AsyncLocalStorage`, which a launch
|
|
26
|
+
* started here inherits.
|
|
27
|
+
* - **R4: the launch is registered before anything is read.** {@link
|
|
28
|
+
* runSessionLaunch} records it synchronously, before the tool's `hasSession`,
|
|
29
|
+
* its health check or claude's reuse-branch kill run; `POST /send` and
|
|
30
|
+
* `requireSession` look here before they read `isRunning`.
|
|
31
|
+
*
|
|
32
|
+
* - **A wait has a bound** (review P3-1): a caller that joins or waits out
|
|
33
|
+
* another request's launch gives up at the launch's own start budget
|
|
34
|
+
* (`getSessionStartingMaxMs`, counted from when the launch began) with
|
|
35
|
+
* {@link SessionLaunchWaitTimeoutError} (`SESSION_STARTING`, nothing typed),
|
|
36
|
+
* so a launch that stops returning does not hang every send to its session.
|
|
37
|
+
* - **A model is not dropped on a join** (review P3-2): a start that asks for
|
|
38
|
+
* a model the launch in progress is not starting with gets {@link
|
|
39
|
+
* SessionLaunchModelMismatchError}, as a `--model` to a running session
|
|
40
|
+
* gets a 400 (#989 / #2771), instead of joining and running on another model.
|
|
41
|
+
*
|
|
42
|
+
* In memory and on `globalThis` for the reason the lock is: the routes that
|
|
43
|
+
* start sessions are separate bundles under `next dev`.
|
|
44
|
+
*
|
|
45
|
+
* @module lib/session/session-launch-flight
|
|
46
|
+
*/
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.SessionLaunchModelMismatchError = exports.SESSION_LAUNCH_MODEL_MISMATCH_CODE = exports.SessionLaunchWaitTimeoutError = exports.SessionLaunchInFlightError = void 0;
|
|
49
|
+
exports.isSessionLaunchModelMismatchError = isSessionLaunchModelMismatchError;
|
|
50
|
+
exports.isSessionLaunchInFlight = isSessionLaunchInFlight;
|
|
51
|
+
exports.runSessionLaunch = runSessionLaunch;
|
|
52
|
+
exports.forgetSessionLaunch = forgetSessionLaunch;
|
|
53
|
+
exports.settleSessionLaunch = settleSessionLaunch;
|
|
54
|
+
exports.resetSessionLaunchFlightsForTest = resetSessionLaunchFlightsForTest;
|
|
55
|
+
const global_state_1 = require("../../lib/global-state");
|
|
56
|
+
const logger_1 = require("../../lib/logger");
|
|
57
|
+
const session_starting_config_1 = require("../../config/session-starting-config");
|
|
58
|
+
const instance_input_lock_1 = require("../../lib/session/instance-input-lock");
|
|
59
|
+
const session_start_error_1 = require("../../lib/session/session-start-error");
|
|
60
|
+
const logger = (0, logger_1.createLogger)('session/session-launch-flight');
|
|
61
|
+
const flights = (0, global_state_1.getOrInitGlobal)('__sessionLaunchFlights', () => new Map());
|
|
62
|
+
/**
|
|
63
|
+
* Another request is starting this session, and the caller holds its input lock
|
|
64
|
+
* (R1). Nothing was typed; retrying after the launch is the whole remedy.
|
|
65
|
+
*
|
|
66
|
+
* A {@link SessionStartTimeoutError}, so every reader of `SESSION_STARTING`
|
|
67
|
+
* (the send service, the route's 503, `classifySendFailure`) answers it as the
|
|
68
|
+
* slow start it is.
|
|
69
|
+
*/
|
|
70
|
+
class SessionLaunchInFlightError extends session_start_error_1.SessionStartTimeoutError {
|
|
71
|
+
constructor(toolName, sessionName) {
|
|
72
|
+
super(toolName, sessionName, 0);
|
|
73
|
+
this.message =
|
|
74
|
+
`${toolName} is being started by another request (tmux session '${sessionName}'), ` +
|
|
75
|
+
'and this send holds its input, so it did not wait for that launch — the message was ' +
|
|
76
|
+
'not delivered and nothing was typed. Retry the send in a few seconds.';
|
|
77
|
+
this.name = 'SessionLaunchInFlightError';
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.SessionLaunchInFlightError = SessionLaunchInFlightError;
|
|
81
|
+
/**
|
|
82
|
+
* Another request's launch of this session did not finish within its start
|
|
83
|
+
* budget, and this caller stopped waiting for it (review P3-1). Nothing was
|
|
84
|
+
* typed; the launch is left running.
|
|
85
|
+
*/
|
|
86
|
+
class SessionLaunchWaitTimeoutError extends session_start_error_1.SessionStartTimeoutError {
|
|
87
|
+
constructor(toolName, sessionName, timeoutMs) {
|
|
88
|
+
super(toolName, sessionName, timeoutMs);
|
|
89
|
+
this.message =
|
|
90
|
+
`${toolName} is being started by another request (tmux session '${sessionName}'), and that ` +
|
|
91
|
+
`launch did not finish within ${Math.round(timeoutMs / 1000)}s — the message was not ` +
|
|
92
|
+
'delivered and nothing was typed. Retry the send in a few seconds, or run ' +
|
|
93
|
+
'`commandmate capture <worktree-id>` to see what the launch is waiting on.';
|
|
94
|
+
this.name = 'SessionLaunchWaitTimeoutError';
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
exports.SessionLaunchWaitTimeoutError = SessionLaunchWaitTimeoutError;
|
|
98
|
+
/** Code of {@link SessionLaunchModelMismatchError}. */
|
|
99
|
+
exports.SESSION_LAUNCH_MODEL_MISMATCH_CODE = 'SESSION_LAUNCH_MODEL_MISMATCH';
|
|
100
|
+
/**
|
|
101
|
+
* A start asked for a model, and the launch of the session already in
|
|
102
|
+
* progress is starting with another (review P3-2). Nothing was typed. The
|
|
103
|
+
* model is fixed when the process starts (#989 / #2771), so joining would
|
|
104
|
+
* silently run the request on the other model.
|
|
105
|
+
*/
|
|
106
|
+
class SessionLaunchModelMismatchError extends Error {
|
|
107
|
+
code = exports.SESSION_LAUNCH_MODEL_MISMATCH_CODE;
|
|
108
|
+
constructor(toolName, sessionName, requested, launching) {
|
|
109
|
+
super(`${toolName} is being started by another request (tmux session '${sessionName}') with ` +
|
|
110
|
+
`${launching === undefined ? 'its default model' : `model '${launching}'`}, not '${requested}'. ` +
|
|
111
|
+
'The model can only be set when starting a new session — the message was not delivered and ' +
|
|
112
|
+
'nothing was typed. Stop the session and resend with --model to switch models.');
|
|
113
|
+
this.name = 'SessionLaunchModelMismatchError';
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
exports.SessionLaunchModelMismatchError = SessionLaunchModelMismatchError;
|
|
117
|
+
/** Duck-typed on `code`, like the session-start errors (bundles do not share classes). */
|
|
118
|
+
function isSessionLaunchModelMismatchError(error) {
|
|
119
|
+
return (error instanceof Error && error.code === exports.SESSION_LAUNCH_MODEL_MISMATCH_CODE);
|
|
120
|
+
}
|
|
121
|
+
/** How long a caller may wait for `flight`, counted from when it began. */
|
|
122
|
+
function launchWaitLimitMs(flight) {
|
|
123
|
+
return flight.cliToolId === undefined
|
|
124
|
+
? (0, session_starting_config_1.getSessionStartingMaxMsAcrossTools)()
|
|
125
|
+
: (0, session_starting_config_1.getSessionStartingMaxMs)(flight.cliToolId);
|
|
126
|
+
}
|
|
127
|
+
/** `flight`'s outcome, or {@link SessionLaunchWaitTimeoutError} once its budget has run out. */
|
|
128
|
+
function waitForFlight(sessionName, toolName, flight) {
|
|
129
|
+
const limitMs = launchWaitLimitMs(flight);
|
|
130
|
+
const remaining = flight.startedAt + limitMs - Date.now();
|
|
131
|
+
const timedOut = () => {
|
|
132
|
+
logger.warn('session-launch-wait-timed-out', { sessionName, limitMs });
|
|
133
|
+
return new SessionLaunchWaitTimeoutError(toolName, sessionName, limitMs);
|
|
134
|
+
};
|
|
135
|
+
if (remaining <= 0)
|
|
136
|
+
return Promise.reject(timedOut());
|
|
137
|
+
return new Promise((resolve, reject) => {
|
|
138
|
+
const timer = setTimeout(() => reject(timedOut()), remaining);
|
|
139
|
+
timer.unref?.();
|
|
140
|
+
flight.promise.then(() => {
|
|
141
|
+
clearTimeout(timer);
|
|
142
|
+
resolve();
|
|
143
|
+
}, (error) => {
|
|
144
|
+
clearTimeout(timer);
|
|
145
|
+
reject(error);
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
/** Whether a launch of `sessionName` is in progress in this process. */
|
|
150
|
+
function isSessionLaunchInFlight(sessionName) {
|
|
151
|
+
return flights.has(sessionName);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Run `launch` as `sessionName`'s only launch.
|
|
155
|
+
*
|
|
156
|
+
* When one is already in progress, the caller joins it (same outcome, waited
|
|
157
|
+
* for within the launch's start budget) instead of starting a second — unless
|
|
158
|
+
* it asks for a model that launch is not starting with, or holds the session's
|
|
159
|
+
* input lock (R1); both are refused at once. Registration happens in the same
|
|
160
|
+
* synchronous step as the check, before `launch` reads anything (R4).
|
|
161
|
+
*
|
|
162
|
+
* @throws SessionLaunchModelMismatchError when another launch is in progress with another model
|
|
163
|
+
* @throws SessionLaunchInFlightError when another launch is in progress and the caller holds the input lock
|
|
164
|
+
* @throws SessionLaunchWaitTimeoutError when the joined launch outlives its start budget
|
|
165
|
+
*/
|
|
166
|
+
function runSessionLaunch(sessionName, toolName, launch, options = {}) {
|
|
167
|
+
const inFlight = flights.get(sessionName);
|
|
168
|
+
if (inFlight !== undefined) {
|
|
169
|
+
if (options.model !== undefined && options.model !== inFlight.model) {
|
|
170
|
+
logger.info('session-launch-model-mismatch-refused', { sessionName });
|
|
171
|
+
return Promise.reject(new SessionLaunchModelMismatchError(toolName, sessionName, options.model, inFlight.model));
|
|
172
|
+
}
|
|
173
|
+
if ((0, instance_input_lock_1.currentInstanceInputTicket)(sessionName) !== null) {
|
|
174
|
+
logger.info('session-launch-in-flight-refused', { sessionName });
|
|
175
|
+
return Promise.reject(new SessionLaunchInFlightError(toolName, sessionName));
|
|
176
|
+
}
|
|
177
|
+
logger.info('session-launch-joined', { sessionName });
|
|
178
|
+
return waitForFlight(sessionName, toolName, inFlight);
|
|
179
|
+
}
|
|
180
|
+
// The entry is in the map before `launch` runs a single line. Called in the
|
|
181
|
+
// caller's async context, so a launcher that holds the lock still owns it
|
|
182
|
+
// inside the launch (R2).
|
|
183
|
+
let settle;
|
|
184
|
+
const promise = new Promise((resolve, reject) => (settle = { resolve, reject }));
|
|
185
|
+
const flight = {
|
|
186
|
+
promise,
|
|
187
|
+
startedAt: Date.now(),
|
|
188
|
+
cliToolId: options.cliToolId,
|
|
189
|
+
model: options.model,
|
|
190
|
+
};
|
|
191
|
+
flights.set(sessionName, flight);
|
|
192
|
+
const clear = () => {
|
|
193
|
+
if (flights.get(sessionName) === flight)
|
|
194
|
+
flights.delete(sessionName);
|
|
195
|
+
};
|
|
196
|
+
promise.then(clear, clear);
|
|
197
|
+
let running;
|
|
198
|
+
try {
|
|
199
|
+
running = launch();
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
running = Promise.reject(error);
|
|
203
|
+
}
|
|
204
|
+
running.then(settle.resolve, settle.reject);
|
|
205
|
+
return promise;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* The session was killed: a launch still running against it is not one a new
|
|
209
|
+
* start may join (Issue #3195's case — a launch killed mid-way keeps running
|
|
210
|
+
* until its readiness wait runs out). The killed launch's own end then leaves
|
|
211
|
+
* a successor's entry alone.
|
|
212
|
+
*/
|
|
213
|
+
function forgetSessionLaunch(sessionName) {
|
|
214
|
+
flights.delete(sessionName);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Wait out a launch of `sessionName` another request has in progress, before
|
|
218
|
+
* reading whether the session is running (R4). Its outcome is not the caller's:
|
|
219
|
+
* a launch that failed is left for the caller's own check to find. The wait
|
|
220
|
+
* ends at the launch's start budget (review P3-1).
|
|
221
|
+
*
|
|
222
|
+
* @returns Whether there was a launch to wait for
|
|
223
|
+
* @throws SessionLaunchInFlightError when there is one and the caller holds the input lock (R1)
|
|
224
|
+
* @throws SessionLaunchWaitTimeoutError when it outlives its start budget
|
|
225
|
+
*/
|
|
226
|
+
async function settleSessionLaunch(sessionName, toolName) {
|
|
227
|
+
const inFlight = flights.get(sessionName);
|
|
228
|
+
if (inFlight === undefined)
|
|
229
|
+
return false;
|
|
230
|
+
if ((0, instance_input_lock_1.currentInstanceInputTicket)(sessionName) !== null) {
|
|
231
|
+
logger.info('session-launch-in-flight-refused', { sessionName });
|
|
232
|
+
throw new SessionLaunchInFlightError(toolName, sessionName);
|
|
233
|
+
}
|
|
234
|
+
await waitForFlight(sessionName, toolName, inFlight).catch((error) => {
|
|
235
|
+
if (error instanceof SessionLaunchWaitTimeoutError)
|
|
236
|
+
throw error;
|
|
237
|
+
});
|
|
238
|
+
return true;
|
|
239
|
+
}
|
|
240
|
+
/** Forget every launch in progress. Test-only. */
|
|
241
|
+
function resetSessionLaunchFlightsForTest() {
|
|
242
|
+
flights.clear();
|
|
243
|
+
}
|
|
@@ -36,6 +36,28 @@
|
|
|
36
36
|
* key back from its successor. `clearSessionStarting` without a token — the
|
|
37
37
|
* kill-session route — drops the record whoever wrote it.
|
|
38
38
|
*
|
|
39
|
+
* ## The stops that do not forget (Issue #4032)
|
|
40
|
+
*
|
|
41
|
+
* Only the kill-session route clears without a token. The other stops of a
|
|
42
|
+
* session kill the tmux session directly and call neither this nor
|
|
43
|
+
* `forgetSessionLaunch`:
|
|
44
|
+
*
|
|
45
|
+
* - `session-cleanup`'s `killWorktreeSession`, for the worktrees a repository
|
|
46
|
+
* delete or a `syncWorktreesAndCleanup` removes;
|
|
47
|
+
* - `cleanupGlobalSessions`, the `__global__` sessions, on every
|
|
48
|
+
* `syncWorktreesAndCleanup` — `commandmate sync`, repository scan and
|
|
49
|
+
* restore, and the end of a clone.
|
|
50
|
+
*
|
|
51
|
+
* A launch they cut short stays the session's launch until it settles: a
|
|
52
|
+
* start that comes in meanwhile joins it and gets its outcome (often the
|
|
53
|
+
* failure of the killed launch), and the "starting" record keeps answering.
|
|
54
|
+
* The flight is dropped as soon as the killed launch returns or throws, so a
|
|
55
|
+
* launch that fails fast frees the session early; the launch's own bound
|
|
56
|
+
* (`getSessionStartingMaxMs`, which #3981 put on a join's wait too) is only the
|
|
57
|
+
* longest it can last. A server shutdown drops both maps. Recorded rather than
|
|
58
|
+
* changed (Issue #4032). A stop that should forget calls
|
|
59
|
+
* `clearSessionStarting` without a token after its kill.
|
|
60
|
+
*
|
|
39
61
|
* ## The escape hatches
|
|
40
62
|
*
|
|
41
63
|
* A starting display that never ends would hide a stuck launch, which is worse
|
|
@@ -74,6 +96,8 @@ const auto_yes_state_1 = require("../../lib/auto-yes-state");
|
|
|
74
96
|
const status_reason_1 = require("../../lib/detection/status-reason");
|
|
75
97
|
const session_starting_config_1 = require("../../config/session-starting-config");
|
|
76
98
|
const global_state_1 = require("../global-state");
|
|
99
|
+
const session_name_1 = require("../../lib/cli-tools/session-name");
|
|
100
|
+
const session_launch_flight_1 = require("../../lib/session/session-launch-flight");
|
|
77
101
|
const records = (0, global_state_1.getOrInitGlobal)('__sessionStartingRecords', () => new Map());
|
|
78
102
|
/** On `globalThis` like the map, so tokens keep growing across route bundles. */
|
|
79
103
|
const tokenSeq = (0, global_state_1.getOrInitGlobal)('__sessionStartingTokenSeq', () => ({ last: 0 }));
|
|
@@ -131,7 +155,8 @@ function markSessionStarting(worktreeId, cliToolId, instanceId, at = Date.now())
|
|
|
131
155
|
*
|
|
132
156
|
* With a token, only that launch's record is dropped — a launch that was
|
|
133
157
|
* killed and replaced must not end its successor's display (Issue #3195).
|
|
134
|
-
* Without one (kill-session), the record is dropped whoever wrote it
|
|
158
|
+
* Without one (kill-session), the record is dropped whoever wrote it, and the
|
|
159
|
+
* session's launch in progress stops being one a new start joins (Issue #3981).
|
|
135
160
|
*
|
|
136
161
|
* @param worktreeId - Worktree ID
|
|
137
162
|
* @param cliToolId - Tool that was launched
|
|
@@ -141,13 +166,24 @@ function markSessionStarting(worktreeId, cliToolId, instanceId, at = Date.now())
|
|
|
141
166
|
function clearSessionStarting(worktreeId, cliToolId, instanceId, token) {
|
|
142
167
|
try {
|
|
143
168
|
const key = (0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId);
|
|
144
|
-
if (token
|
|
145
|
-
|
|
146
|
-
records.delete(key);
|
|
169
|
+
if (token === undefined || records.get(key)?.token === token)
|
|
170
|
+
records.delete(key);
|
|
147
171
|
}
|
|
148
172
|
catch {
|
|
149
173
|
// Nothing was recorded under an id that does not compose into a key.
|
|
150
174
|
}
|
|
175
|
+
if (token !== undefined)
|
|
176
|
+
return;
|
|
177
|
+
// Issue #3981: a killed launch is no longer the session's one launch
|
|
178
|
+
// (`session-launch-flight`); the next start is a launch of its own. Apart
|
|
179
|
+
// from the record above, so a name that does not resolve cannot leave the
|
|
180
|
+
// "starting" display behind (review P3-4).
|
|
181
|
+
try {
|
|
182
|
+
(0, session_launch_flight_1.forgetSessionLaunch)((0, session_name_1.resolveSessionName)(cliToolId, worktreeId, instanceId));
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
// No launch was registered under a name that does not resolve.
|
|
186
|
+
}
|
|
151
187
|
}
|
|
152
188
|
/** The record's start time while it still answers, else null (dropping an expired one). */
|
|
153
189
|
function activeSince(key, record, now) {
|
|
@@ -157,7 +157,10 @@ const SOURCE_LABEL = {
|
|
|
157
157
|
* is the only guidance a caller of `wait` gets, so it has to say which form
|
|
158
158
|
* actually works.
|
|
159
159
|
*/
|
|
160
|
-
function buildStructuredPromptQuestion(worktreeId, facts) {
|
|
160
|
+
function buildStructuredPromptQuestion(worktreeId, facts, instanceId) {
|
|
161
|
+
// Issue #4031: the `respond` this names goes to the instance whose prompt it
|
|
162
|
+
// is. Without an instance (the primary) the sentence is as before.
|
|
163
|
+
const target = instanceId ? ` --instance ${instanceId}` : '';
|
|
161
164
|
const parts = [
|
|
162
165
|
`A dialog is open in ${worktreeId}: the agent reported it via ${SOURCE_LABEL[facts.source]}` +
|
|
163
166
|
`${facts.toolName ? ` for ${facts.toolName}` : ''}, but the detection layer published no ` +
|
|
@@ -167,16 +170,16 @@ function buildStructuredPromptQuestion(worktreeId, facts) {
|
|
|
167
170
|
// Issue #1898. The numbers are real here — they address a decision the
|
|
168
171
|
// agent is holding, not a line on a screen — so the guidance says which one
|
|
169
172
|
// to send instead of warning that none of them can be trusted.
|
|
170
|
-
parts.push(`Answer it with \`commandmate respond ${worktreeId} <number
|
|
173
|
+
parts.push(`Answer it with \`commandmate respond ${worktreeId} <number>${target}\`: ` +
|
|
171
174
|
facts.decisionOptions
|
|
172
175
|
.map((option) => `${option.number} = ${option.label} (${option.reply})`)
|
|
173
176
|
.join(', ') +
|
|
174
177
|
`. The reply goes to the agent's own API, so no keys are sent to the terminal ` +
|
|
175
|
-
`and the label works too (\`respond ${worktreeId} "Allow once"\`).`);
|
|
178
|
+
`and the label works too (\`respond ${worktreeId} "Allow once"${target}\`).`);
|
|
176
179
|
}
|
|
177
180
|
else {
|
|
178
181
|
parts.push(`Answer it in the terminal, or send the option NUMBER with ` +
|
|
179
|
-
`\`commandmate respond ${worktreeId} <number
|
|
182
|
+
`\`commandmate respond ${worktreeId} <number>${target}\` — yes/no is not resolved on a numbered ` +
|
|
180
183
|
`dialog (Issue #1681).`);
|
|
181
184
|
}
|
|
182
185
|
if (facts.message) {
|
|
@@ -202,7 +205,7 @@ function buildStructuredPromptQuestion(worktreeId, facts) {
|
|
|
202
205
|
parts.push(`The agent asked${questionCount > 1 ? ` ${questionCount} questions, the first being` : ''}: ` +
|
|
203
206
|
`"${question}" — offering: ${labels.join(' / ')}. ` +
|
|
204
207
|
(answerable
|
|
205
|
-
? `Answer it with \`commandmate respond ${worktreeId} <number
|
|
208
|
+
? `Answer it with \`commandmate respond ${worktreeId} <number>${target}\`: ` +
|
|
206
209
|
labels.map((label, index) => `${index + 1} = ${label}`).join(', ') +
|
|
207
210
|
`. The number is this list's own position and the reply goes to the agent's own ` +
|
|
208
211
|
`API, so no keys are sent to the terminal (the label works too).`
|
|
@@ -212,11 +215,11 @@ function buildStructuredPromptQuestion(worktreeId, facts) {
|
|
|
212
215
|
return parts.join(' ');
|
|
213
216
|
}
|
|
214
217
|
/** The live `promptData` for a structured prompt. */
|
|
215
|
-
function buildStructuredPromptData(worktreeId, facts) {
|
|
218
|
+
function buildStructuredPromptData(worktreeId, facts, instanceId) {
|
|
216
219
|
return {
|
|
217
220
|
type: models_1.UNCLASSIFIED_PROMPT_TYPE,
|
|
218
221
|
status: 'pending',
|
|
219
|
-
question: buildStructuredPromptQuestion(worktreeId, facts),
|
|
222
|
+
question: buildStructuredPromptQuestion(worktreeId, facts, instanceId),
|
|
220
223
|
options: [],
|
|
221
224
|
source: facts.source,
|
|
222
225
|
...(facts.message ? { message: facts.message } : {}),
|
|
@@ -238,11 +241,11 @@ function buildStructuredPromptData(worktreeId, facts) {
|
|
|
238
241
|
};
|
|
239
242
|
}
|
|
240
243
|
/** The prompt-history row for a structured prompt the scraper never saw. */
|
|
241
|
-
function buildStructuredPromptHistoryRecord(worktreeId, facts) {
|
|
244
|
+
function buildStructuredPromptHistoryRecord(worktreeId, facts, instanceId) {
|
|
242
245
|
return {
|
|
243
246
|
type: models_1.UNCLASSIFIED_PROMPT_TYPE,
|
|
244
247
|
status: 'unclassified',
|
|
245
|
-
question: buildStructuredPromptQuestion(worktreeId, facts),
|
|
248
|
+
question: buildStructuredPromptQuestion(worktreeId, facts, instanceId),
|
|
246
249
|
options: [],
|
|
247
250
|
source: facts.source,
|
|
248
251
|
...(facts.message ? { message: facts.message } : {}),
|
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
* it is bound to; the turn model (`agent-event-turn`) knows how each delivery
|
|
8
8
|
* moved the instance's turn. This module joins the two:
|
|
9
9
|
*
|
|
10
|
-
* - {@link resolveEpisodeBinding}
|
|
10
|
+
* - {@link resolveEpisodeBinding} (defined in `waiting-episode-binding-resolve.ts`,
|
|
11
|
+
* imported here) decides what a new episode is bound to, from
|
|
11
12
|
* the turn model as it stands (design §2.4 規則 1). It is registered with the
|
|
12
13
|
* store, so an episode `observeWaitingEdge` opens is bound like any other.
|
|
13
14
|
* - {@link applyTurnOutcomesToEpisode} is the T table (design §2.4): what a
|
|
@@ -19,7 +20,8 @@
|
|
|
19
20
|
* - {@link captureLegacyStopTarget} / {@link settleLegacyStop} are the one
|
|
20
21
|
* closer that cannot be synchronous: `/api/hooks/claude-done` names no
|
|
21
22
|
* session and awaits a capture and a log before it is done (design 規則 6).
|
|
22
|
-
* - {@link planWaitingObservation}
|
|
23
|
+
* - {@link planWaitingObservation} (defined in `waiting-episode-binding-observation.ts`,
|
|
24
|
+
* imported here) / {@link commitWaitingObservation} are the
|
|
23
25
|
* tables O-1 and O-2 (design §2.4 規則 3・4・5): what one observer's reading
|
|
24
26
|
* of a frame does to the open episode. The three observers — the status
|
|
25
27
|
* probe, the response poller and the Auto-Yes poller — fix an
|
|
@@ -29,7 +29,37 @@ const tmux_1 = require("./tmux/tmux");
|
|
|
29
29
|
const worktrees_1 = require("./git/worktrees");
|
|
30
30
|
const worktree_db_1 = require("./db/worktree-db");
|
|
31
31
|
const session_ownership_1 = require("./cli-tools/session-ownership");
|
|
32
|
+
const session_kill_ledger_1 = require("./verification/session-kill-ledger");
|
|
32
33
|
const logger = (0, logger_1.createLogger)('session-cleanup');
|
|
34
|
+
/**
|
|
35
|
+
* Record a session the server's cleanup stopped (Issue #3993). env-clean never
|
|
36
|
+
* excuses a removal on this line — the cleanup runs after a `commandmate sync` a
|
|
37
|
+
* worker can issue — but names it next to the violation. The session name is
|
|
38
|
+
* the primary instance's, which is what {@link killWorktreeSession} stops; when
|
|
39
|
+
* it cannot be resolved the line names none. Best effort: never throws.
|
|
40
|
+
*/
|
|
41
|
+
function recordCleanupKill(worktreeId, cliToolId, sessionName) {
|
|
42
|
+
let name = sessionName;
|
|
43
|
+
if (name === undefined) {
|
|
44
|
+
try {
|
|
45
|
+
name = manager_1.CLIToolManager.getInstance().getTool(cliToolId).getSessionName(worktreeId);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
name = undefined;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
(0, session_kill_ledger_1.appendSessionKillRecord)({
|
|
52
|
+
version: session_kill_ledger_1.SESSION_KILL_LEDGER_VERSION,
|
|
53
|
+
at: Date.now(),
|
|
54
|
+
api: 'session-cleanup',
|
|
55
|
+
origin: 'server',
|
|
56
|
+
worktreeId,
|
|
57
|
+
instanceId: cliToolId,
|
|
58
|
+
sessionNames: name ? [name] : [],
|
|
59
|
+
callerCwd: null,
|
|
60
|
+
callerSession: null,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
33
63
|
/**
|
|
34
64
|
* Clean up all CLI tool sessions and pollers for a single worktree
|
|
35
65
|
*
|
|
@@ -65,6 +95,7 @@ async function cleanupWorktreeSessions(worktreeId, killSessionFn) {
|
|
|
65
95
|
if (killed) {
|
|
66
96
|
result.sessionsKilled.push(cliToolId);
|
|
67
97
|
logger.info('session:killed', { worktreeId, cliToolId });
|
|
98
|
+
recordCleanupKill(worktreeId, cliToolId);
|
|
68
99
|
}
|
|
69
100
|
}
|
|
70
101
|
catch (error) {
|
|
@@ -234,6 +265,7 @@ async function cleanupGlobalSessions() {
|
|
|
234
265
|
if (killed) {
|
|
235
266
|
sessionsKilled++;
|
|
236
267
|
logger.info('global-session:killed', { cliToolId, sessionName });
|
|
268
|
+
recordCleanupKill(global_session_constants_1.GLOBAL_SESSION_WORKTREE_ID, cliToolId, sessionName);
|
|
237
269
|
}
|
|
238
270
|
}
|
|
239
271
|
}
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
* claude-session.ts -> session-key-sender.ts -> tmux.ts
|
|
10
10
|
*/
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.sanitizeSessionEnvironment = sanitizeSessionEnvironment;
|
|
13
12
|
exports.waitForPrompt = waitForPrompt;
|
|
14
13
|
exports.sendMessageToSession = sendMessageToSession;
|
|
15
14
|
exports.stopSession = stopSession;
|
|
@@ -19,11 +18,8 @@ const submit_verified_sender_1 = require("./cli-tools/submit-verified-sender");
|
|
|
19
18
|
const tmux_capture_cache_1 = require("./tmux/tmux-capture-cache");
|
|
20
19
|
const errors_1 = require("./errors");
|
|
21
20
|
const cli_tool_timing_config_1 = require("../config/cli-tool-timing-config");
|
|
22
|
-
const child_process_1 = require("child_process");
|
|
23
|
-
const util_1 = require("util");
|
|
24
21
|
const logger_1 = require("../lib/logger");
|
|
25
22
|
const logger = (0, logger_1.createLogger)('session-key-sender');
|
|
26
|
-
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
27
23
|
/**
|
|
28
24
|
* Capture tmux pane output and strip ANSI escape sequences
|
|
29
25
|
*
|
|
@@ -43,29 +39,6 @@ async function getCleanPaneOutput(sessionName, lines = 50) {
|
|
|
43
39
|
*/
|
|
44
40
|
const PROMPT_POLL_INTERVAL = 200;
|
|
45
41
|
// =============================================================================
|
|
46
|
-
// Environment Sanitization
|
|
47
|
-
// =============================================================================
|
|
48
|
-
/**
|
|
49
|
-
* Remove CLAUDECODE environment variable from tmux session environment
|
|
50
|
-
* Prevents Claude Code from detecting nested session and refusing to start
|
|
51
|
-
* (SF-002: SRP - environment sanitization separated from session creation)
|
|
52
|
-
*
|
|
53
|
-
* MF-S3-002: tmux set-environment -g -u operates on the global tmux environment.
|
|
54
|
-
*
|
|
55
|
-
* SEC-SF-001: sessionName is validated by the caller chain:
|
|
56
|
-
* ClaudeTool.startSession() -> BaseCLITool.getSessionName() -> validateSessionName()
|
|
57
|
-
*
|
|
58
|
-
* @param sessionName - tmux session name
|
|
59
|
-
*/
|
|
60
|
-
async function sanitizeSessionEnvironment(sessionName) {
|
|
61
|
-
// 3-1: Remove from tmux global environment
|
|
62
|
-
await execAsync('tmux set-environment -g -u CLAUDECODE 2>/dev/null || true');
|
|
63
|
-
// 3-2: Unset inside the session shell (safety net)
|
|
64
|
-
// 100ms wait: empirically determined time for sendKeys command to reach the shell
|
|
65
|
-
await (0, tmux_1.sendKeys)(sessionName, 'unset CLAUDECODE', true);
|
|
66
|
-
await new Promise(resolve => setTimeout(resolve, cli_tool_timing_config_1.CLAUDE_ENV_SANITIZE_WAIT_MS));
|
|
67
|
-
}
|
|
68
|
-
// =============================================================================
|
|
69
42
|
// Prompt Wait
|
|
70
43
|
// =============================================================================
|
|
71
44
|
/**
|