commandmate 0.49.1 → 0.49.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +246 -243
- package/.next/app-path-routes-manifest.json +18 -17
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +12 -12
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +8 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/capabilities/route.js +1 -1
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route.js +1 -1
- package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js +2 -2
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +2 -2
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route.js +1 -1
- package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route.js +1 -1
- package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js +4 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/resolve/route.js +1 -0
- package/.next/server/app/api/relays/[relayId]/resolve/route.js.nft.json +1 -0
- package/.next/server/app/api/relays/[relayId]/resolve/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/relays/[relayId]/route.js +1 -1
- package/.next/server/app/api/relays/[relayId]/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/route.js +4 -1
- package/.next/server/app/api/relays/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +2 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -144
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +3 -3
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +10 -10
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +18 -17
- package/.next/server/chunks/1308.js +1 -0
- package/.next/server/chunks/1501.js +5 -4
- package/.next/server/chunks/1656.js +2 -2
- package/.next/server/chunks/1957.js +2 -0
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2897.js +1 -0
- package/.next/server/chunks/3417.js +1 -0
- package/.next/server/chunks/3505.js +1 -1
- package/.next/server/chunks/3801.js +8 -8
- package/.next/server/chunks/4207.js +1 -1
- package/.next/server/chunks/4490.js +1 -0
- package/.next/server/chunks/4911.js +1 -0
- package/.next/server/chunks/4936.js +1 -0
- package/.next/server/chunks/5209.js +2 -1
- package/.next/server/chunks/5350.js +212 -0
- package/.next/server/chunks/5354.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/7023.js +3 -3
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/7926.js +1 -0
- package/.next/server/chunks/8581.js +15 -15
- package/.next/server/chunks/8728.js +2 -2
- package/.next/server/chunks/8782.js +1 -1
- package/.next/server/chunks/8807.js +89 -88
- package/.next/server/chunks/8918.js +3 -3
- package/.next/server/chunks/9169.js +1 -0
- package/.next/server/chunks/9390.js +1 -1
- package/.next/server/chunks/9584.js +1 -1
- package/.next/server/chunks/9627.js +5 -5
- package/.next/server/chunks/9702.js +1 -0
- package/.next/server/chunks/9731.js +3 -3
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{2407-675ba6b21844dc3b.js → 2407-87ec01332344ec2b.js} +1 -1
- package/.next/static/chunks/3931-3ef48b8d97357282.js +1 -0
- package/.next/static/chunks/5794-7975b8e51e731b19.js +1 -0
- package/.next/static/chunks/6966-d8dc6032410ffaba.js +1 -0
- package/.next/static/chunks/7197-ed3b3d99ac3bd450.js +1 -0
- package/.next/static/chunks/7636-a48cf0f7110250c5.js +1 -0
- package/.next/static/chunks/app/api/agents/update/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/agents/versions/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/app/release-notes/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/app/update/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/resolve/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/relays/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/remote/pair/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/settings/default-agents/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/skills/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/templates/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/layout-b9d8aef70e4f17b2.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/more/page-ff5af5ca48774c89.js +1 -0
- package/.next/static/chunks/app/page-b4863bfe0452e09d.js +1 -0
- package/.next/static/chunks/app/proxy/[...path]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/review/page-ff3efb96fdf9bb4b.js +1 -0
- package/.next/static/chunks/app/sessions/{page-890fd50ec9739973.js → page-c6eb7c02db2f4c80.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-f6a151304860b549.js +1 -0
- package/.next/trace +13 -13
- package/.next/types/app/api/relays/[relayId]/resolve/route.ts +347 -0
- package/.next/types/routes.d.ts +2 -1
- package/.next/types/validator.ts +9 -0
- package/dist/cli/commands/ask.d.ts.map +1 -1
- package/dist/cli/commands/ask.js +56 -5
- package/dist/cli/commands/attach.d.ts +4 -1
- package/dist/cli/commands/attach.d.ts.map +1 -1
- package/dist/cli/commands/attach.js +19 -7
- package/dist/cli/commands/command-target.d.ts +7 -0
- package/dist/cli/commands/command-target.d.ts.map +1 -1
- package/dist/cli/commands/command-target.js +10 -0
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +38 -2
- package/dist/cli/commands/message-dispatch.d.ts +17 -3
- package/dist/cli/commands/message-dispatch.d.ts.map +1 -1
- package/dist/cli/commands/message-dispatch.js +14 -8
- package/dist/cli/commands/prompt.d.ts.map +1 -1
- package/dist/cli/commands/prompt.js +2 -1
- package/dist/cli/commands/relays.d.ts +4 -1
- package/dist/cli/commands/relays.d.ts.map +1 -1
- package/dist/cli/commands/relays.js +146 -8
- package/dist/cli/commands/report.d.ts +7 -2
- package/dist/cli/commands/report.d.ts.map +1 -1
- package/dist/cli/commands/report.js +19 -6
- package/dist/cli/commands/respond-strict.d.ts.map +1 -1
- package/dist/cli/commands/respond-strict.js +29 -5
- package/dist/cli/commands/respond.d.ts +2 -2
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +40 -37
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +8 -4
- package/dist/cli/commands/task.d.ts +22 -0
- package/dist/cli/commands/task.d.ts.map +1 -1
- package/dist/cli/commands/task.js +26 -18
- package/dist/cli/commands/wait-instance.d.ts +9 -1
- package/dist/cli/commands/wait-instance.d.ts.map +1 -1
- package/dist/cli/commands/wait-instance.js +15 -0
- package/dist/cli/commands/wait-poll-state.d.ts +18 -0
- package/dist/cli/commands/wait-poll-state.d.ts.map +1 -1
- package/dist/cli/commands/wait-verify.d.ts +2 -1
- package/dist/cli/commands/wait-verify.d.ts.map +1 -1
- package/dist/cli/commands/wait-verify.js +5 -1
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +37 -13
- package/dist/cli/commands/whoami.d.ts.map +1 -1
- package/dist/cli/commands/whoami.js +3 -1
- package/dist/cli/docs/agent-operations.d.ts +1 -1
- package/dist/cli/docs/agent-operations.d.ts.map +1 -1
- package/dist/cli/docs/agent-operations.js +1 -0
- package/dist/cli/types/api-responses.d.ts +55 -1
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/utils/api-client-deadline.d.ts +28 -0
- package/dist/cli/utils/api-client-deadline.d.ts.map +1 -0
- package/dist/cli/utils/api-client-deadline.js +46 -0
- package/dist/cli/utils/api-client-errors.d.ts +118 -0
- package/dist/cli/utils/api-client-errors.d.ts.map +1 -0
- package/dist/cli/utils/api-client-errors.js +210 -0
- package/dist/cli/utils/api-client.d.ts +33 -109
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +202 -227
- package/dist/cli/utils/follow-up-command.d.ts +38 -0
- package/dist/cli/utils/follow-up-command.d.ts.map +1 -0
- package/dist/cli/utils/follow-up-command.js +57 -0
- package/dist/cli/utils/reply-ledger.d.ts +1 -1
- package/dist/cli/utils/reply-ledger.d.ts.map +1 -1
- package/dist/cli/utils/reply-ledger.js +7 -2
- package/dist/cli/utils/server-capabilities.d.ts +18 -0
- package/dist/cli/utils/server-capabilities.d.ts.map +1 -1
- package/dist/cli/utils/server-capabilities.js +36 -3
- package/dist/cli/utils/session-target.d.ts +1 -1
- package/dist/cli/utils/session-target.d.ts.map +1 -1
- package/dist/cli/utils/session-target.js +3 -0
- package/dist/cli/utils/verify-runner.d.ts +7 -0
- package/dist/cli/utils/verify-runner.d.ts.map +1 -1
- package/dist/cli/utils/verify-runner.js +51 -15
- package/dist/lib/cli-tools/session-name.d.ts.map +1 -1
- package/dist/lib/cli-tools/session-name.js +11 -3
- package/dist/lib/cli-tools/types.d.ts +6 -0
- package/dist/lib/cli-tools/types.d.ts.map +1 -1
- package/dist/lib/session/send-attempt-types.d.ts +25 -0
- package/dist/lib/session/send-attempt-types.d.ts.map +1 -1
- package/dist/lib/session/send-attempt-types.js +10 -1
- package/dist/lib/verification/session-kill-ledger.d.ts +110 -0
- package/dist/lib/verification/session-kill-ledger.d.ts.map +1 -0
- package/dist/lib/verification/session-kill-ledger.js +174 -0
- package/dist/server/locales/en/worktree.json +9 -0
- package/dist/server/locales/ja/worktree.json +9 -0
- package/dist/server/src/config/cli-tool-timing-config.js +1 -7
- package/dist/server/src/lib/auto-yes-poller.js +5 -1
- package/dist/server/src/lib/cli-tools/antigravity.js +5 -2
- package/dist/server/src/lib/cli-tools/base.js +39 -0
- package/dist/server/src/lib/cli-tools/claude.js +8 -2
- package/dist/server/src/lib/cli-tools/codex.js +7 -4
- package/dist/server/src/lib/cli-tools/command-code.js +14 -18
- package/dist/server/src/lib/cli-tools/copilot.js +159 -28
- package/dist/server/src/lib/cli-tools/gemini.js +10 -2
- package/dist/server/src/lib/cli-tools/launch-keys.js +39 -0
- package/dist/server/src/lib/cli-tools/opencode-v2.js +6 -2
- package/dist/server/src/lib/cli-tools/opencode.js +162 -8
- package/dist/server/src/lib/cli-tools/prompt-wait-dialog.js +115 -0
- package/dist/server/src/lib/cli-tools/session-name.js +11 -3
- package/dist/server/src/lib/cli-tools/submit-composer-read.js +57 -14
- package/dist/server/src/lib/cli-tools/submit-verified-sender-composer.js +78 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender-lock.js +116 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender-report.js +250 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender-shared.js +106 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender.js +143 -187
- package/dist/server/src/lib/cli-tools/vibe-local.js +91 -2
- package/dist/server/src/lib/db/chat-db.js +14 -1
- package/dist/server/src/lib/db/db-instance.js +114 -2
- package/dist/server/src/lib/db/db-migration-path.js +63 -2
- package/dist/server/src/lib/db/migrations/index.js +2 -0
- package/dist/server/src/lib/db/migrations/runner.js +1 -1
- package/dist/server/src/lib/db/migrations/v63-session-relays-delivery-attempt.js +61 -0
- package/dist/server/src/lib/db/relay-bind-db-base.js +89 -0
- package/dist/server/src/lib/db/relay-bind-db-delivery.js +223 -0
- package/dist/server/src/lib/db/relay-bind-db-pending.js +183 -0
- package/dist/server/src/lib/db/relay-bind-db.js +88 -167
- package/dist/server/src/lib/db/relay-db-base.js +20 -0
- package/dist/server/src/lib/db/relay-db-count.js +49 -0
- package/dist/server/src/lib/db/relay-db-delivery.js +104 -0
- package/dist/server/src/lib/db/relay-db-hold.js +250 -0
- package/dist/server/src/lib/db/relay-db.js +33 -92
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +5 -4
- package/dist/server/src/lib/detection/tools/opencode/composer-own-text.js +119 -0
- package/dist/server/src/lib/detection/tools/opencode/readiness.js +62 -0
- package/dist/server/src/lib/detection/tools/vibe-local/readiness.js +70 -0
- package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +2 -3
- package/dist/server/src/lib/prompt-answer-errors.js +76 -2
- package/dist/server/src/lib/relay/relay-bound-reply.js +20 -9
- package/dist/server/src/lib/relay/relay-delivery.js +359 -79
- package/dist/server/src/lib/relay/relay-messages.js +13 -0
- package/dist/server/src/lib/relay/relay-system-line.js +28 -15
- package/dist/server/src/lib/relay/types.js +14 -2
- package/dist/server/src/lib/session/agent-event-state.js +4 -0
- package/dist/server/src/lib/session/agent-session-lifecycle.js +6 -1
- package/dist/server/src/lib/session/claude-session.js +26 -7
- package/dist/server/src/lib/session/current-output-builder.js +7 -3
- package/dist/server/src/lib/session/current-output-history-writers.js +1 -1
- package/dist/server/src/lib/session/instance-input-lock.js +47 -2
- package/dist/server/src/lib/session/prompt-submit-receipt.js +224 -0
- package/dist/server/src/lib/session/prompt-waiting-guard.js +16 -3
- package/dist/server/src/lib/session/respond-target.js +82 -0
- package/dist/server/src/lib/session/send-attempt-state.js +177 -2
- package/dist/server/src/lib/session/send-attempt-types.js +10 -1
- package/dist/server/src/lib/session/send-user-message.js +80 -8
- package/dist/server/src/lib/session/session-launch-flight.js +243 -0
- package/dist/server/src/lib/session/session-starting-state.js +40 -4
- package/dist/server/src/lib/session/structured-prompt.js +17 -9
- package/dist/server/src/lib/session/waiting-episode-binding.js +4 -2
- package/dist/server/src/lib/session/worktree-session-reconcile.js +10 -0
- package/dist/server/src/lib/session-cleanup.js +32 -0
- package/dist/server/src/lib/session-key-sender.js +6 -28
- package/dist/server/src/lib/verification/env-clean-gate.js +129 -0
- package/dist/server/src/lib/verification/env-snapshot.js +11 -2
- package/dist/server/src/lib/verification/session-kill-ledger.js +174 -0
- package/package.json +5 -1
- package/release-notes/0.49.2.json +49 -0
- package/release-notes/0.49.3.json +52 -0
- package/.next/server/chunks/2422.js +0 -1
- package/.next/server/chunks/3773.js +0 -1
- package/.next/server/chunks/5630.js +0 -1
- package/.next/server/chunks/5775.js +0 -1
- package/.next/server/chunks/6808.js +0 -4
- package/.next/server/chunks/7604.js +0 -2
- package/.next/server/chunks/9198.js +0 -144
- package/.next/static/chunks/3931-1a1abab16248f14d.js +0 -1
- package/.next/static/chunks/4768-ad6f82f034f21eae.js +0 -1
- package/.next/static/chunks/5794-80ac3f06f098ea29.js +0 -1
- package/.next/static/chunks/6654-f3534f35f16644bc.js +0 -1
- package/.next/static/chunks/7665-e9ef6e0a85b9fa49.js +0 -1
- package/.next/static/chunks/8606-ce17ffa77f39608e.js +0 -1
- package/.next/static/chunks/app/api/agents/update/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/agents/versions/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/app/release-notes/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/capabilities/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/relays/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/remote/pair/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/settings/default-agents/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/templates/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/layout-8bfac4724277b47f.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/more/page-87c84987b2765213.js +0 -1
- package/.next/static/chunks/app/page-1b820c421db48c2c.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/review/page-e2fd4a590646a2d8.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-f6d3ab8185d93aae.js +0 -1
- /package/.next/static/{fqfSDqQMweROeHUzOt_m1 → LNfVZiq6FZwKsV7L9Mi6M}/_buildManifest.js +0 -0
- /package/.next/static/{fqfSDqQMweROeHUzOt_m1 → LNfVZiq6FZwKsV7L9Mi6M}/_ssgManifest.js +0 -0
|
@@ -69,6 +69,7 @@ const agent_event_structured_state_1 = require("../../lib/session/agent-event-st
|
|
|
69
69
|
const agent_event_awaiting_instruction_1 = require("../../lib/session/agent-event-awaiting-instruction");
|
|
70
70
|
const agent_event_ask_user_question_1 = require("../../lib/session/agent-event-ask-user-question");
|
|
71
71
|
const global_state_1 = require("../global-state");
|
|
72
|
+
const prompt_submit_receipt_1 = require("../../lib/session/prompt-submit-receipt");
|
|
72
73
|
var agent_event_dedup_2 = require("../../lib/session/agent-event-dedup");
|
|
73
74
|
Object.defineProperty(exports, "AGENT_EVENT_DEDUP_WINDOW_MS", { enumerable: true, get: function () { return agent_event_dedup_2.AGENT_EVENT_DEDUP_WINDOW_MS; } });
|
|
74
75
|
Object.defineProperty(exports, "agentEventKeyClaimedAt", { enumerable: true, get: function () { return agent_event_dedup_2.agentEventKeyClaimedAt; } });
|
|
@@ -224,6 +225,9 @@ function recordAgentEvent(worktreeId, cliToolId, instanceId, record, options = {
|
|
|
224
225
|
return { recorded: false, skipped: 'late-session-start' };
|
|
225
226
|
}
|
|
226
227
|
lastAgentEvent.set(key, record);
|
|
228
|
+
// Issue #4035: what the sender asks before trusting an empty-looking composer
|
|
229
|
+
// on a session's first prompt.
|
|
230
|
+
(0, prompt_submit_receipt_1.notePromptSubmitHook)({ worktreeId, cliToolId, instanceId }, record.event, record.at);
|
|
227
231
|
const outcomes = [];
|
|
228
232
|
if (record.event === 'session_start') {
|
|
229
233
|
// Issue #2357: a new agent process, whatever model it names first is its
|
|
@@ -46,6 +46,7 @@ const session_generation_archive_1 = require("../../lib/session/session-generati
|
|
|
46
46
|
const session_starting_state_1 = require("../../lib/session/session-starting-state");
|
|
47
47
|
const auto_yes_enter_fallback_state_1 = require("../../lib/polling/auto-yes-enter-fallback-state");
|
|
48
48
|
const instance_input_lock_1 = require("../../lib/session/instance-input-lock");
|
|
49
|
+
const prompt_submit_receipt_1 = require("../../lib/session/prompt-submit-receipt");
|
|
49
50
|
const session_name_1 = require("../../lib/cli-tools/session-name");
|
|
50
51
|
const logger_1 = require("../../lib/logger");
|
|
51
52
|
const logger = (0, logger_1.createLogger)('lib/session/agent-session-lifecycle');
|
|
@@ -93,7 +94,11 @@ function beginAgentSession(target, at = Date.now()) {
|
|
|
93
94
|
// `invalidateInstanceInput`). In memory only; a name that does not resolve
|
|
94
95
|
// has no lock to expire.
|
|
95
96
|
try {
|
|
96
|
-
|
|
97
|
+
const sessionName = (0, session_name_1.resolveSessionName)(target.cliToolId, target.worktreeId, target.instanceId);
|
|
98
|
+
(0, instance_input_lock_1.invalidateInstanceInput)(sessionName);
|
|
99
|
+
// Issue #4035: the new process's first prompt is confirmed by its own
|
|
100
|
+
// `UserPromptSubmit`, which is looked up by this session name.
|
|
101
|
+
(0, prompt_submit_receipt_1.notePromptSubmitSession)(sessionName, target, at);
|
|
97
102
|
}
|
|
98
103
|
catch (error) {
|
|
99
104
|
logger.warn('instance-input-invalidate-failed', {
|
|
@@ -35,6 +35,8 @@ const agent_event_state_1 = require("../../lib/session/agent-event-state");
|
|
|
35
35
|
const session_start_error_1 = require("../../lib/session/session-start-error");
|
|
36
36
|
const launch_screen_1 = require("../../lib/session/launch-screen");
|
|
37
37
|
const instance_input_lock_1 = require("../../lib/session/instance-input-lock");
|
|
38
|
+
const session_launch_flight_1 = require("../../lib/session/session-launch-flight");
|
|
39
|
+
const launch_keys_1 = require("../../lib/cli-tools/launch-keys");
|
|
38
40
|
const logger = (0, logger_1.createLogger)('claude-session');
|
|
39
41
|
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
40
42
|
// ----- Helper Functions -----
|
|
@@ -686,12 +688,22 @@ async function startClaudeSession(options) {
|
|
|
686
688
|
sessionName,
|
|
687
689
|
workingDirectory: worktreePath,
|
|
688
690
|
});
|
|
689
|
-
// SF-S2-003: Sanitize environment after createSession, before launching
|
|
690
|
-
|
|
691
|
-
//
|
|
692
|
-
//
|
|
693
|
-
//
|
|
694
|
-
|
|
691
|
+
// SF-S2-003: Sanitize environment after createSession, before launching
|
|
692
|
+
// Claude CLI (what session-key-sender's `sanitizeSessionEnvironment` did
|
|
693
|
+
// until #4032 removed it): drop CLAUDECODE from
|
|
694
|
+
// tmux's global environment (MF-S3-002), then `unset` it in the pane's
|
|
695
|
+
// shell, then start Claude in interactive mode using the dynamically
|
|
696
|
+
// resolved path.
|
|
697
|
+
//
|
|
698
|
+
// Issue #3981: the two lines are typed in ONE writer's turn of the input
|
|
699
|
+
// lock (#3975 locked only the launch line; the `unset` went out before it
|
|
700
|
+
// with no lock), so neither lands inside a send's body. The sanitize's
|
|
701
|
+
// 100 ms pause between them is gone: both lines queue in the same shell's
|
|
702
|
+
// input in order, so the `unset` runs first without it, and a pause inside
|
|
703
|
+
// the turn would only hold sends off longer. The init polls below stay
|
|
704
|
+
// outside the lock.
|
|
705
|
+
await execAsync('tmux set-environment -g -u CLAUDECODE 2>/dev/null || true');
|
|
706
|
+
await (0, launch_keys_1.typeLaunchLines)(sessionName, ['unset CLAUDECODE', (0, launch_screen_1.withLaunchScreenCleared)(launchCommand)]);
|
|
695
707
|
// Wait for Claude to initialize with dynamic detection (OCP-001)
|
|
696
708
|
// Use constants instead of hardcoded values
|
|
697
709
|
const maxWaitTime = exports.CLAUDE_INIT_TIMEOUT;
|
|
@@ -799,7 +811,14 @@ async function startClaudeSession(options) {
|
|
|
799
811
|
*/
|
|
800
812
|
async function sendMessageToClaude(worktreeId, message, instanceId) {
|
|
801
813
|
const sessionName = getSessionName(worktreeId, instanceId);
|
|
802
|
-
|
|
814
|
+
// Issue #3981: a session another request is still launching shows a shell
|
|
815
|
+
// (`❯ ` can pass for Claude's prompt) — wait for that launch, or, holding the
|
|
816
|
+
// input lock as the send service does, refuse with nothing typed (R1).
|
|
817
|
+
await (0, session_launch_flight_1.settleSessionLaunch)(sessionName, 'Claude Code');
|
|
818
|
+
await (0, session_key_sender_1.sendMessageToSession)(sessionName, message, exports.CLAUDE_POST_PROMPT_DELAY, exports.CLAUDE_SEND_PROMPT_WAIT_TIMEOUT,
|
|
819
|
+
// Issue #4048: the instance this send is for, so the first prompt's hook
|
|
820
|
+
// check reads that instance's entry — the same one the name resolves to.
|
|
821
|
+
{ worktreeId, instanceId });
|
|
803
822
|
}
|
|
804
823
|
/**
|
|
805
824
|
* Capture Claude session output
|
|
@@ -237,7 +237,7 @@ function readAgentEvents(worktreeId, cliToolId, instanceId, resolvedInstanceId)
|
|
|
237
237
|
* every value below is derived from the arguments, and nothing is assigned
|
|
238
238
|
* outside this function.
|
|
239
239
|
*/
|
|
240
|
-
function composePromptData({ worktreeId, cliToolId, output, captureWindowLines, statusResult, startingSince, promptWaiting, askUserQuestion, eventSource, }) {
|
|
240
|
+
function composePromptData({ worktreeId, cliToolId, respondInstanceId, output, captureWindowLines, statusResult, startingSince, promptWaiting, askUserQuestion, eventSource, }) {
|
|
241
241
|
const scraperPromptWaiting = statusResult.hasActivePrompt;
|
|
242
242
|
// Issue #1726: the agent's own account of what it asked. It contributes only
|
|
243
243
|
// where some other layer has already established that a dialog is on screen —
|
|
@@ -338,9 +338,9 @@ function composePromptData({ worktreeId, cliToolId, output, captureWindowLines,
|
|
|
338
338
|
: scraperPromptWaiting
|
|
339
339
|
? correctedPromptData ??
|
|
340
340
|
scraperPromptData ??
|
|
341
|
-
(structuredFacts ? (0, structured_prompt_1.buildStructuredPromptData)(worktreeId, structuredFacts) : null)
|
|
341
|
+
(structuredFacts ? (0, structured_prompt_1.buildStructuredPromptData)(worktreeId, structuredFacts, respondInstanceId) : null)
|
|
342
342
|
: structuredFacts
|
|
343
|
-
? (0, structured_prompt_1.buildStructuredPromptData)(worktreeId, structuredFacts)
|
|
343
|
+
? (0, structured_prompt_1.buildStructuredPromptData)(worktreeId, structuredFacts, respondInstanceId)
|
|
344
344
|
: null;
|
|
345
345
|
// Issue #2870: whether `/prompt-response` would answer the prompt published
|
|
346
346
|
// above, read by the SAME function it re-verifies with. In #2868 `promptData`
|
|
@@ -813,6 +813,7 @@ async function buildPayload(db, worktreeId, cliToolId, instanceId) {
|
|
|
813
813
|
const { structuredFacts, promptData, promptAnswerable } = composePromptData({
|
|
814
814
|
worktreeId,
|
|
815
815
|
cliToolId,
|
|
816
|
+
respondInstanceId: resolvedInstanceId,
|
|
816
817
|
output,
|
|
817
818
|
captureWindowLines,
|
|
818
819
|
statusResult,
|
|
@@ -920,6 +921,9 @@ async function buildPayload(db, worktreeId, cliToolId, instanceId) {
|
|
|
920
921
|
worktreeId,
|
|
921
922
|
cliToolId,
|
|
922
923
|
instanceId: resolvedInstanceId,
|
|
924
|
+
// Issue #4063: the instance the live payload's question names, so the
|
|
925
|
+
// row says the same `respond` whichever caller wrote it.
|
|
926
|
+
respondInstanceId: resolvedInstanceId,
|
|
923
927
|
state: promptWaiting,
|
|
924
928
|
facts: structuredFacts,
|
|
925
929
|
});
|
|
@@ -221,7 +221,7 @@ function recordUnclassifiedFrame(db, params) {
|
|
|
221
221
|
* nothing else.
|
|
222
222
|
*/
|
|
223
223
|
function recordStructuredPrompt(db, params) {
|
|
224
|
-
const record = (0, structured_prompt_1.buildStructuredPromptHistoryRecord)(params.worktreeId, params.facts);
|
|
224
|
+
const record = (0, structured_prompt_1.buildStructuredPromptHistoryRecord)(params.worktreeId, params.facts, params.respondInstanceId);
|
|
225
225
|
try {
|
|
226
226
|
const message = (0, db_1.createMessage)(db, {
|
|
227
227
|
worktreeId: params.worktreeId,
|
|
@@ -61,6 +61,7 @@ exports.currentInstanceInputTicket = currentInstanceInputTicket;
|
|
|
61
61
|
exports.withInstanceInputLock = withInstanceInputLock;
|
|
62
62
|
exports.instanceInputReadMark = instanceInputReadMark;
|
|
63
63
|
exports.instanceInputLaunchReadMark = instanceInputLaunchReadMark;
|
|
64
|
+
exports.instanceInputGenerationMark = instanceInputGenerationMark;
|
|
64
65
|
exports.answerUnderInstanceInputLock = answerUnderInstanceInputLock;
|
|
65
66
|
exports.leaveCarriedPasteMark = leaveCarriedPasteMark;
|
|
66
67
|
exports.getCarriedPasteMark = getCarriedPasteMark;
|
|
@@ -70,6 +71,7 @@ exports.invalidateInstanceInput = invalidateInstanceInput;
|
|
|
70
71
|
exports.isInputBoundaryRefusal = isInputBoundaryRefusal;
|
|
71
72
|
exports.observeInputStart = observeInputStart;
|
|
72
73
|
exports.noteInputStart = noteInputStart;
|
|
74
|
+
exports.noteInputTicket = noteInputTicket;
|
|
73
75
|
exports.noteDispatchStart = noteDispatchStart;
|
|
74
76
|
exports.noteDispatchFailed = noteDispatchFailed;
|
|
75
77
|
exports.resetInstanceInputLocks = resetInstanceInputLocks;
|
|
@@ -364,6 +366,18 @@ function instanceInputReadMark() {
|
|
|
364
366
|
function instanceInputLaunchReadMark() {
|
|
365
367
|
return (generationSeq.exclusiveEvents ?? 0) + (generationSeq.sharedReleases ?? 0);
|
|
366
368
|
}
|
|
369
|
+
/**
|
|
370
|
+
* The generation counter as it stands now (Issue #4065): every ticket granted
|
|
371
|
+
* from here on carries a larger generation. A send request reads it once, at
|
|
372
|
+
* its outermost entry (the send route before it reads the body; the send
|
|
373
|
+
* service for the timer and relay), and a refusal it records before any lock
|
|
374
|
+
* was granted to it carries the value — so it is not taken over the record of
|
|
375
|
+
* a send granted after the request began. Process-wide, like the generations
|
|
376
|
+
* themselves; 0 before any grant.
|
|
377
|
+
*/
|
|
378
|
+
function instanceInputGenerationMark() {
|
|
379
|
+
return generationSeq.last;
|
|
380
|
+
}
|
|
367
381
|
function skipOfLockError(error) {
|
|
368
382
|
const code = typeof error === 'object' && error !== null ? error.code : undefined;
|
|
369
383
|
if (code === exports.INSTANCE_INPUT_LOCK_TIMEOUT_CODE)
|
|
@@ -584,12 +598,16 @@ const inputStartScope = (0, global_state_1.getOrInitGlobal)('__instanceInputStar
|
|
|
584
598
|
* {@link noteInputStart}, so a caller can read state as of the moment the
|
|
585
599
|
* body started going in (Issue #3957: the send route's open-turn reading). A
|
|
586
600
|
* throw is logged and does not fail the send.
|
|
601
|
+
* @param request - Issue #4065: told, synchronously and as it happens, the
|
|
602
|
+
* generation of the body's input lock ({@link noteInputTicket}) and a
|
|
603
|
+
* dispatch ({@link noteDispatchStart}) — so a send that throws afterwards
|
|
604
|
+
* still leaves them with the caller.
|
|
587
605
|
* @returns `fn`'s value, and the moment input started — null when nothing in
|
|
588
606
|
* `fn` noted one (a path that never types a body: opencode's HTTP delivery,
|
|
589
607
|
* or a send refused before its first key). Never set when `fn` throws.
|
|
590
608
|
*/
|
|
591
|
-
async function observeInputStart(fn, onStart, boundary) {
|
|
592
|
-
const observer = { at: null, onStart, boundary, dispatchOpen: false };
|
|
609
|
+
async function observeInputStart(fn, onStart, boundary, request) {
|
|
610
|
+
const observer = { at: null, onStart, boundary, dispatchOpen: false, request };
|
|
593
611
|
const value = await inputStartScope.run(observer, fn);
|
|
594
612
|
return { value, inputStartedAt: observer.at };
|
|
595
613
|
}
|
|
@@ -623,6 +641,25 @@ function runBoundaryHook(observer, at, kind) {
|
|
|
623
641
|
throw error instanceof InputBoundaryRefusedError ? error : new InputBoundaryRefusedError(error);
|
|
624
642
|
}
|
|
625
643
|
}
|
|
644
|
+
/**
|
|
645
|
+
* Tell the request observing this context the generation its body's input
|
|
646
|
+
* lock was granted under (Issue #4065). Called by the shared sender right
|
|
647
|
+
* after its lock is granted or joined — never for a launch key, an answer, a
|
|
648
|
+
* trust dialog or copilot's `/model` and selection-list keys, whose tickets
|
|
649
|
+
* are not the body's. Synchronous, never throws; outside an
|
|
650
|
+
* {@link observeInputStart} context it does nothing.
|
|
651
|
+
*/
|
|
652
|
+
function noteInputTicket(ticket) {
|
|
653
|
+
const observer = inputStartScope.getStore();
|
|
654
|
+
if (observer?.request?.onTicket === undefined)
|
|
655
|
+
return;
|
|
656
|
+
try {
|
|
657
|
+
observer.request.onTicket(ticket.generation);
|
|
658
|
+
}
|
|
659
|
+
catch (error) {
|
|
660
|
+
logger.warn('input-ticket-observer-failed', { error: error instanceof Error ? error.message : String(error) });
|
|
661
|
+
}
|
|
662
|
+
}
|
|
626
663
|
/**
|
|
627
664
|
* Note that a body is about to be DISPATCHED without being typed (Issue #3957):
|
|
628
665
|
* opencode's HTTP send, which reports no input start. Runs the required
|
|
@@ -636,6 +673,14 @@ function noteDispatchStart(now = new Date()) {
|
|
|
636
673
|
return;
|
|
637
674
|
runBoundaryHook(observer, now, 'dispatch');
|
|
638
675
|
observer.dispatchOpen = true;
|
|
676
|
+
// Issue #4065: after the required hook, so a refused dispatch — nothing went
|
|
677
|
+
// out — is not reported as one.
|
|
678
|
+
try {
|
|
679
|
+
observer.request?.onDispatch?.();
|
|
680
|
+
}
|
|
681
|
+
catch (error) {
|
|
682
|
+
logger.warn('dispatch-start-observer-failed', { error: error instanceof Error ? error.message : String(error) });
|
|
683
|
+
}
|
|
639
684
|
}
|
|
640
685
|
/**
|
|
641
686
|
* Say how a dispatch noted by {@link noteDispatchStart} ended when it did not
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Whether the agent itself reported a sent prompt (Issue #4035).
|
|
4
|
+
*
|
|
5
|
+
* The submit-verified sender decides "the message left the composer" from the
|
|
6
|
+
* screen. Two of its rules say only that the body is NOT in the composer — B
|
|
7
|
+
* (no composer, or an empty one) and F (other text, such as claude's dim
|
|
8
|
+
* `Try "…"` placeholder) — and right after a claude session starts that is not
|
|
9
|
+
* the same thing: measured on Claude Code 2.1.314 (`tests/fixtures/claude-first-send-4035/`),
|
|
10
|
+
* keys typed in the first second after the prompt appeared were drawn into the
|
|
11
|
+
* composer ~1.7 s later, the Enter typed after them was lost, and the frame
|
|
12
|
+
* read after the Enter still showed the idle placeholder, so F answered
|
|
13
|
+
* `submitted` for a body that sat unsent until the next send threw it away.
|
|
14
|
+
*
|
|
15
|
+
* Claude reports every submitted prompt with its `UserPromptSubmit` hook. This
|
|
16
|
+
* module keeps, per tmux session this server started, when that hook last
|
|
17
|
+
* arrived, so the sender can ask for it before trusting B or F on the
|
|
18
|
+
* session's first prompt ({@link readPromptSubmitReceipt}). It also keeps a
|
|
19
|
+
* fingerprint (digests, never the text) of the last body the sender reported
|
|
20
|
+
* submitted, so a later send that has to clear that very body out of the
|
|
21
|
+
* composer can say so ({@link matchesSubmittedBody}).
|
|
22
|
+
*
|
|
23
|
+
* In memory on `globalThis`, like the other per-session state; a session this
|
|
24
|
+
* server did not start (one adopted after a restart) has no entry, and every
|
|
25
|
+
* question about it is answered "not required", i.e. exactly as before.
|
|
26
|
+
*
|
|
27
|
+
* @module lib/session/prompt-submit-receipt
|
|
28
|
+
*/
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.reportsPrompts = reportsPrompts;
|
|
31
|
+
exports.notePromptSubmitSession = notePromptSubmitSession;
|
|
32
|
+
exports.notePromptSubmitHook = notePromptSubmitHook;
|
|
33
|
+
exports.getPromptSubmitTarget = getPromptSubmitTarget;
|
|
34
|
+
exports.readPromptSubmitReceipt = readPromptSubmitReceipt;
|
|
35
|
+
exports.noteSubmittedBody = noteSubmittedBody;
|
|
36
|
+
exports.findSubmittedBody = findSubmittedBody;
|
|
37
|
+
exports.matchesSubmittedBody = matchesSubmittedBody;
|
|
38
|
+
exports.clearPromptSubmitReceipts = clearPromptSubmitReceipts;
|
|
39
|
+
const crypto_1 = require("crypto");
|
|
40
|
+
const auto_yes_state_1 = require("../../lib/auto-yes-state");
|
|
41
|
+
const global_state_1 = require("../../lib/global-state");
|
|
42
|
+
const send_attempt_state_1 = require("../../lib/session/send-attempt-state");
|
|
43
|
+
/** How many sessions are tracked at once; the least recently started is forgotten first. */
|
|
44
|
+
const MAX_TRACKED_SESSIONS = 1024;
|
|
45
|
+
/**
|
|
46
|
+
* Compacted characters a body's prefix fingerprint covers. A composer read is
|
|
47
|
+
* cut by the reader, so a long body is recognised by its beginning.
|
|
48
|
+
*/
|
|
49
|
+
const BODY_PREFIX_CHARS = 64;
|
|
50
|
+
const sessions = (0, global_state_1.getOrInitGlobal)('__promptSubmitSessions', () => new Map());
|
|
51
|
+
const sessionByInstance = (0, global_state_1.getOrInitGlobal)('__promptSubmitSessionByInstance', () => new Map());
|
|
52
|
+
function instanceKey(target) {
|
|
53
|
+
return (0, auto_yes_state_1.buildCompositeKey)(target.worktreeId, target.cliToolId, target.instanceId);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The tools whose prompt hook is trusted as proof of a submit — and, since
|
|
57
|
+
* Issue #4048, the only ones whose `lastSend` a found body may demote.
|
|
58
|
+
*/
|
|
59
|
+
function reportsPrompts(cliToolId) {
|
|
60
|
+
// Claude only. codex's hooks run in a machine-wide daemon that can file a
|
|
61
|
+
// turn under the wrong instance (#2874), and copilot's arrive out of order
|
|
62
|
+
// (#1903); neither is evidence about one pane's composer.
|
|
63
|
+
return cliToolId === 'claude';
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* The entry a send looks at (Issue #4048). By name alone, the name's entry. With
|
|
67
|
+
* an explicit target, the same entry only when the target's instance currently
|
|
68
|
+
* maps to this very name and the entry is that instance's — a target and a name
|
|
69
|
+
* that disagree are no entry at all, so nothing about another instance (or a
|
|
70
|
+
* generation the instance no longer runs under this name) is taken as proof.
|
|
71
|
+
* Looking never registers or resets anything.
|
|
72
|
+
*/
|
|
73
|
+
function entryFor(sessionName, cliToolId, expected) {
|
|
74
|
+
const entry = sessions.get(sessionName);
|
|
75
|
+
if (entry === undefined || expected === undefined)
|
|
76
|
+
return entry;
|
|
77
|
+
let key;
|
|
78
|
+
try {
|
|
79
|
+
key = instanceKey({ worktreeId: expected.worktreeId, cliToolId, instanceId: expected.instanceId });
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
if (sessionByInstance.get(key) !== sessionName)
|
|
85
|
+
return undefined;
|
|
86
|
+
if (instanceKey(entry.target) !== key)
|
|
87
|
+
return undefined;
|
|
88
|
+
return entry;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* A session's generation began here (`beginAgentSession`). Forgets what was
|
|
92
|
+
* known about the previous process in the same pane name.
|
|
93
|
+
*/
|
|
94
|
+
function notePromptSubmitSession(sessionName, target, at = Date.now()) {
|
|
95
|
+
sessions.delete(sessionName);
|
|
96
|
+
sessions.set(sessionName, { target, startedAt: at, lastEventAt: null, lastPromptAt: null, submittedBody: null });
|
|
97
|
+
sessionByInstance.set(instanceKey(target), sessionName);
|
|
98
|
+
while (sessions.size > MAX_TRACKED_SESSIONS) {
|
|
99
|
+
const oldest = sessions.keys().next().value;
|
|
100
|
+
if (oldest === undefined)
|
|
101
|
+
break;
|
|
102
|
+
const entry = sessions.get(oldest);
|
|
103
|
+
sessions.delete(oldest);
|
|
104
|
+
if (entry !== undefined && sessionByInstance.get(instanceKey(entry.target)) === oldest) {
|
|
105
|
+
sessionByInstance.delete(instanceKey(entry.target));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/** A hook was applied for this instance (`recordAgentEvent`). */
|
|
110
|
+
function notePromptSubmitHook(target, event, at) {
|
|
111
|
+
let sessionName;
|
|
112
|
+
try {
|
|
113
|
+
sessionName = sessionByInstance.get(instanceKey(target));
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const entry = sessionName === undefined ? undefined : sessions.get(sessionName);
|
|
119
|
+
if (entry === undefined)
|
|
120
|
+
return;
|
|
121
|
+
entry.lastEventAt = at;
|
|
122
|
+
if (event === 'user_prompt_submit') {
|
|
123
|
+
entry.lastPromptAt = at;
|
|
124
|
+
// Issue #4048: the agent took a prompt, so a body the screen alone called
|
|
125
|
+
// submitted is no longer one to look for — the late report was that body's,
|
|
126
|
+
// or a later send went through after it. Either way no later send may find
|
|
127
|
+
// it and demote a record (review: X restored after Y's success).
|
|
128
|
+
entry.submittedBody = null;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* The instance a session this server started runs, or null. With `expected`
|
|
133
|
+
* (Issue #4048), null unless the explicit target names the same entry.
|
|
134
|
+
*/
|
|
135
|
+
function getPromptSubmitTarget(sessionName, expected) {
|
|
136
|
+
if (expected === undefined)
|
|
137
|
+
return sessions.get(sessionName)?.target ?? null;
|
|
138
|
+
return entryFor(sessionName, expected.cliToolId, expected)?.target ?? null;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Whether the screen's B/F verdict for a send whose first Enter went in at
|
|
142
|
+
* `enteredAt` needs the agent's own report (Issue #4035).
|
|
143
|
+
*
|
|
144
|
+
* `expected` (Issue #4048) is the instance the send was made for; a name that
|
|
145
|
+
* does not resolve to that instance's entry answers `not-required` (never
|
|
146
|
+
* `received`), exactly as a session this server did not start.
|
|
147
|
+
*
|
|
148
|
+
* Known limit, kept as it is (Issue #4048 item 3): the question is asked on
|
|
149
|
+
* every read, and a session whose first hook (`SessionStart`) has not arrived
|
|
150
|
+
* by the read-back is answered `not-required` — the screen's B/F verdict then
|
|
151
|
+
* stands and the send returns at once, before a hook that is only late could
|
|
152
|
+
* turn it into `awaited`. Pinned by `prompt-submit-receipt-4048.test.ts`.
|
|
153
|
+
*/
|
|
154
|
+
function readPromptSubmitReceipt(sessionName, cliToolId, enteredAt, expected) {
|
|
155
|
+
if (!reportsPrompts(cliToolId))
|
|
156
|
+
return 'not-required';
|
|
157
|
+
const entry = entryFor(sessionName, cliToolId, expected);
|
|
158
|
+
if (entry === undefined || entry.target.cliToolId !== cliToolId)
|
|
159
|
+
return 'not-required';
|
|
160
|
+
if (entry.lastPromptAt !== null && entry.lastPromptAt >= enteredAt)
|
|
161
|
+
return 'received';
|
|
162
|
+
// Issue #4048 item 3 (known limit): no hook yet from this process — the
|
|
163
|
+
// screen decides, and a `SessionStart` that arrives after this read is not
|
|
164
|
+
// waited for.
|
|
165
|
+
if (entry.lastEventAt === null || entry.lastEventAt < entry.startedAt)
|
|
166
|
+
return 'not-required';
|
|
167
|
+
if (entry.lastPromptAt !== null && entry.lastPromptAt >= entry.startedAt)
|
|
168
|
+
return 'not-required';
|
|
169
|
+
return 'awaited';
|
|
170
|
+
}
|
|
171
|
+
function compact(text) {
|
|
172
|
+
return text.replace(/\s+/g, '');
|
|
173
|
+
}
|
|
174
|
+
function digest(text) {
|
|
175
|
+
return (0, crypto_1.createHash)('sha256').update(text, 'utf8').digest('hex').slice(0, 16);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* The sender reported this body submitted on this session from the screen
|
|
179
|
+
* alone — not for one the agent's hook reported, which did leave.
|
|
180
|
+
*
|
|
181
|
+
* `expected` (Issue #4048): with an explicit target, nothing is noted unless it
|
|
182
|
+
* names the same entry as the session name.
|
|
183
|
+
*/
|
|
184
|
+
function noteSubmittedBody(sessionName, message, expected) {
|
|
185
|
+
const entry = expected === undefined ? sessions.get(sessionName) : entryFor(sessionName, expected.cliToolId, expected);
|
|
186
|
+
if (entry === undefined)
|
|
187
|
+
return;
|
|
188
|
+
const body = compact(message);
|
|
189
|
+
entry.submittedBody = {
|
|
190
|
+
full: digest(body),
|
|
191
|
+
prefix: body.length >= BODY_PREFIX_CHARS ? digest(body.slice(0, BODY_PREFIX_CHARS)) : null,
|
|
192
|
+
messageDigest: (0, send_attempt_state_1.sendMessageDigest)(message),
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* The body last reported submitted on this session, when a composer read is it
|
|
197
|
+
* — the whole of it, or (for a read long enough) its beginning — or null.
|
|
198
|
+
* `messageDigest` is the attempt's digest, for demoting only that attempt's
|
|
199
|
+
* record (Issue #4048).
|
|
200
|
+
*/
|
|
201
|
+
function findSubmittedBody(sessionName, composerText, expected) {
|
|
202
|
+
const entry = expected === undefined ? sessions.get(sessionName) : entryFor(sessionName, expected.cliToolId, expected);
|
|
203
|
+
const body = entry?.submittedBody;
|
|
204
|
+
if (body === null || body === undefined)
|
|
205
|
+
return null;
|
|
206
|
+
const read = compact(composerText);
|
|
207
|
+
if (read === '')
|
|
208
|
+
return null;
|
|
209
|
+
const matched = digest(read) === body.full ||
|
|
210
|
+
(body.prefix !== null && read.length >= BODY_PREFIX_CHARS && digest(read.slice(0, BODY_PREFIX_CHARS)) === body.prefix);
|
|
211
|
+
return matched ? { messageDigest: body.messageDigest } : null;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Whether a composer read is the body last reported submitted on this session:
|
|
215
|
+
* the whole of it, or — for a read long enough — its beginning.
|
|
216
|
+
*/
|
|
217
|
+
function matchesSubmittedBody(sessionName, composerText) {
|
|
218
|
+
return findSubmittedBody(sessionName, composerText) !== null;
|
|
219
|
+
}
|
|
220
|
+
/** Forget every session (tests). */
|
|
221
|
+
function clearPromptSubmitReceipts() {
|
|
222
|
+
sessions.clear();
|
|
223
|
+
sessionByInstance.clear();
|
|
224
|
+
}
|
|
@@ -24,6 +24,7 @@ exports.PROMPT_WAITING_CODE = void 0;
|
|
|
24
24
|
exports.isPromptWaiting = isPromptWaiting;
|
|
25
25
|
exports.promptWaitingMessage = promptWaitingMessage;
|
|
26
26
|
const manager_1 = require("../../lib/cli-tools/manager");
|
|
27
|
+
const respond_target_1 = require("../../lib/session/respond-target");
|
|
27
28
|
const cli_session_1 = require("../../lib/session/cli-session");
|
|
28
29
|
const status_detector_1 = require("../../lib/detection/status-detector");
|
|
29
30
|
const status_capture_config_1 = require("../../config/status-capture-config");
|
|
@@ -128,13 +129,25 @@ async function isPromptWaiting(worktreeId, cliToolId, instanceId, options) {
|
|
|
128
129
|
* That is precisely the state where a guard turns into an outage, so the message
|
|
129
130
|
* has to name the way past it and how long it lasts if they do nothing.
|
|
130
131
|
*
|
|
132
|
+
* Issue #4031: the commands it names carry ` --instance <id>` when the refused
|
|
133
|
+
* request named an instance, so the answer goes to the instance that is
|
|
134
|
+
* waiting. A request for the primary instance (no `instanceId`) gets the
|
|
135
|
+
* sentence as before.
|
|
136
|
+
*
|
|
137
|
+
* Issue #4049: a request that named only a tool other than the worktree
|
|
138
|
+
* default gets ` --agent <tool>` instead (the caller decides, through
|
|
139
|
+
* `respondAgentFor`), since a bare `respond` goes to the default tool.
|
|
140
|
+
*
|
|
131
141
|
* @param blockedBy - Which layer refused; omitted callers get the plain message
|
|
142
|
+
* @param instanceId - The instance the refused request named, if any
|
|
143
|
+
* @param agent - The tool to name when no instance was named (`respondAgentFor`)
|
|
132
144
|
*/
|
|
133
|
-
function promptWaitingMessage(worktreeId, blockedBy) {
|
|
145
|
+
function promptWaitingMessage(worktreeId, blockedBy, instanceId, agent) {
|
|
146
|
+
const target = (0, respond_target_1.respondTargetFlags)(instanceId, agent);
|
|
134
147
|
const base = `${worktreeId} is waiting on a prompt. Sending now would type into the ` +
|
|
135
148
|
`prompt's input line instead of reaching the agent, and would leave that ` +
|
|
136
149
|
`text in place for the next answer. Answer the prompt first: ` +
|
|
137
|
-
`\`commandmate respond ${worktreeId} <answer
|
|
150
|
+
`\`commandmate respond ${worktreeId} <answer>${target}\`.`;
|
|
138
151
|
if (blockedBy !== 'structured')
|
|
139
152
|
return base;
|
|
140
153
|
const ttlMinutes = Math.round(prompt_waiting_composition_1.STRUCTURED_SEND_BLOCK_MAX_AGE_MS / 60_000);
|
|
@@ -142,6 +155,6 @@ function promptWaitingMessage(worktreeId, blockedBy) {
|
|
|
142
155
|
`visible to the terminal scraper, so if the pane looks idle the record has ` +
|
|
143
156
|
`outlived its dialog: it stops blocking sends ${ttlMinutes} minutes after ` +
|
|
144
157
|
`it was reported, or immediately with ` +
|
|
145
|
-
`\`commandmate send ${worktreeId} <message
|
|
158
|
+
`\`commandmate send ${worktreeId} <message>${target} --ignore-structured-prompt\` ` +
|
|
146
159
|
`(server-wide: ${prompt_waiting_composition_1.STRUCTURED_SEND_GUARD_ENV}=off).`);
|
|
147
160
|
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Where the `respond` a server-side guidance sentence names has to go
|
|
4
|
+
* (Issue #4049).
|
|
5
|
+
*
|
|
6
|
+
* #4031 gave the PROMPT_WAITING refusal and the structured-dialog question a
|
|
7
|
+
* ` --instance <id>` when the request named an instance. A request that named
|
|
8
|
+
* only a tool (`send … --agent codex`) still got a bare `commandmate respond
|
|
9
|
+
* <id> <answer>`, and the CLI resolves a bare `respond` to the worktree's
|
|
10
|
+
* default tool — so the answer could reach a different agent than the one that
|
|
11
|
+
* is waiting.
|
|
12
|
+
*
|
|
13
|
+
* Type-only imports and string building, like `structured-prompt`, so the
|
|
14
|
+
* client bundle that reads that module can read this one too.
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.respondTargetFlags = respondTargetFlags;
|
|
18
|
+
exports.respondAgentFor = respondAgentFor;
|
|
19
|
+
exports.commandCodePlanReviewSendMessage = commandCodePlanReviewSendMessage;
|
|
20
|
+
/**
|
|
21
|
+
* The flags that aim a `respond` (or `send`) at the waiting session, by the
|
|
22
|
+
* CLI's own order (`targetFlags` in `src/cli/utils/follow-up-command.ts`): an
|
|
23
|
+
* instance first, else a tool, else nothing — the sentence as it was before.
|
|
24
|
+
*
|
|
25
|
+
* @param instanceId - The instance the request named, if any
|
|
26
|
+
* @param agent - The tool to name when no instance was named (see {@link respondAgentFor})
|
|
27
|
+
*/
|
|
28
|
+
function respondTargetFlags(instanceId, agent) {
|
|
29
|
+
if (instanceId)
|
|
30
|
+
return ` --instance ${instanceId}`;
|
|
31
|
+
if (agent)
|
|
32
|
+
return ` --agent ${agent}`;
|
|
33
|
+
return '';
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The tool a guidance `respond` must name, or undefined when a bare one already
|
|
37
|
+
* reaches the waiting session.
|
|
38
|
+
*
|
|
39
|
+
* Only a request that named a tool explicitly and no instance gets one, and
|
|
40
|
+
* only when that tool is not what an unqualified request resolves to (the
|
|
41
|
+
* worktree default): `--agent claude` on a claude worktree, and a request that
|
|
42
|
+
* named nothing, keep the sentence they had (#4031's "primary and default are
|
|
43
|
+
* unchanged").
|
|
44
|
+
*
|
|
45
|
+
* @param requestedCliTool - The tool the request named explicitly, if any
|
|
46
|
+
* @param instanceId - The instance the request named, if any
|
|
47
|
+
* @param unqualifiedCliTool - The tool a request naming nothing resolves to
|
|
48
|
+
*/
|
|
49
|
+
function respondAgentFor(requestedCliTool, instanceId, unqualifiedCliTool) {
|
|
50
|
+
if (instanceId || !requestedCliTool)
|
|
51
|
+
return undefined;
|
|
52
|
+
return requestedCliTool === unqualifiedCliTool ? undefined : requestedCliTool;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Why `send` stops at the plan review overlay (Issue #3125).
|
|
56
|
+
*
|
|
57
|
+
* The overlay replaces the composer until a human decides, so waiting for the
|
|
58
|
+
* composer only ran out the clock (`prompt not ready` after the full timeout).
|
|
59
|
+
* Its comments, Submit review, approval and cancel go through `respond`.
|
|
60
|
+
*
|
|
61
|
+
* Issue #4049: a function, not a constant. The constant named a
|
|
62
|
+
* `<worktree-id>` placeholder and no instance, so on `command-code-2` the
|
|
63
|
+
* `respond` it showed went to the primary instance. The primary instance
|
|
64
|
+
* (no id, or the tool's own id — #868) gets no `--instance`.
|
|
65
|
+
*
|
|
66
|
+
* Issue #4063: and the tool, by {@link respondTargetFlags}' rule, when the
|
|
67
|
+
* request named Command Code on a worktree whose default is another tool
|
|
68
|
+
* ({@link respondAgentFor}). `CommandCodeTool.sendMessage` does not know the
|
|
69
|
+
* request, so the routes (send, terminal) rebuild the sentence with the `agent`
|
|
70
|
+
* they resolved; the tool's own throw leaves it out. Kept here, with no import
|
|
71
|
+
* beyond types, so those routes do not load the tool module.
|
|
72
|
+
*
|
|
73
|
+
* @param worktreeId - The worktree whose session is showing the review
|
|
74
|
+
* @param instanceId - The instance the send was for, if any
|
|
75
|
+
* @param agent - The tool the `respond` must name when no instance is (see `respondAgentFor`)
|
|
76
|
+
*/
|
|
77
|
+
function commandCodePlanReviewSendMessage(worktreeId, instanceId, agent) {
|
|
78
|
+
const target = respondTargetFlags(instanceId && instanceId !== 'command-code' ? instanceId : undefined, agent);
|
|
79
|
+
return ('Command Code is showing a plan review (REVIEW), which takes review comments, not messages. ' +
|
|
80
|
+
`Comment with \`commandmate respond ${worktreeId} "<text>"${target}\`, then \`--plan-review submit\` (ctrl+r), ` +
|
|
81
|
+
'`--plan-review approve` (ctrl+a) or `--plan-review cancel` (esc).');
|
|
82
|
+
}
|