commandmate 0.49.0 → 0.49.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +251 -248
- package/.next/app-path-routes-manifest.json +22 -21
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +9 -9
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +8 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/capabilities/route.js +1 -1
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js +2 -2
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +2 -2
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/route.js +1 -0
- package/.next/server/app/api/relays/[relayId]/route.js.nft.json +1 -0
- package/.next/server/app/api/relays/[relayId]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/relays/route.js +1 -1
- package/.next/server/app/api/relays/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +2 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +144 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +103 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.js +1 -1
- package/.next/server/app/sessions/page.js.nft.json +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +11 -11
- package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +22 -21
- package/.next/server/chunks/1062.js +1 -0
- package/.next/server/chunks/{936.js → 110.js} +1 -1
- package/.next/server/chunks/1501.js +5 -4
- package/.next/server/chunks/1656.js +2 -2
- package/.next/server/chunks/1957.js +2 -0
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2404.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2897.js +1 -0
- package/.next/server/chunks/3417.js +1 -0
- package/.next/server/chunks/3505.js +1 -1
- package/.next/server/chunks/{4280.js → 3756.js} +1 -1
- package/.next/server/chunks/3801.js +31 -0
- package/.next/server/chunks/4911.js +1 -0
- package/.next/server/chunks/4936.js +1 -0
- package/.next/server/chunks/5209.js +2 -1
- package/.next/server/chunks/5354.js +1 -1
- package/.next/server/chunks/{9130.js → 5630.js} +1 -1
- package/.next/server/chunks/610.js +1 -0
- package/.next/server/chunks/6119.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6486.js +1 -1
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/6808.js +4 -0
- package/.next/server/chunks/7023.js +14 -0
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/8581.js +8 -8
- package/.next/server/chunks/8728.js +2 -2
- package/.next/server/chunks/8782.js +1 -1
- package/.next/server/chunks/8807.js +63 -53
- package/.next/server/chunks/8918.js +103 -1
- package/.next/server/chunks/9198.js +144 -0
- package/.next/server/chunks/9390.js +1 -1
- package/.next/server/chunks/9584.js +1 -1
- package/.next/server/chunks/9627.js +1 -1
- package/.next/server/chunks/9731.js +3 -3
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{2407-ab92ae9837c39dce.js → 2407-07a237575e1ceb9e.js} +1 -1
- package/.next/static/chunks/3931-61ad1a4fc0208d0e.js +1 -0
- package/.next/static/chunks/5794-7975b8e51e731b19.js +1 -0
- package/.next/static/chunks/6966-d8dc6032410ffaba.js +1 -0
- package/.next/static/chunks/7197-ed3b3d99ac3bd450.js +1 -0
- package/.next/static/chunks/7636-a48cf0f7110250c5.js +1 -0
- package/.next/static/chunks/app/api/agents/update/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/agents/versions/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/app/release-notes/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/app/update/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/relays/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/remote/pair/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/settings/default-agents/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/skills/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/templates/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/layout-4f64316957b0a8e5.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/more/page-ff5af5ca48774c89.js +1 -0
- package/.next/static/chunks/app/page-b4863bfe0452e09d.js +1 -0
- package/.next/static/chunks/app/proxy/[...path]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/review/page-ff3efb96fdf9bb4b.js +1 -0
- package/.next/static/chunks/app/sessions/page-c6eb7c02db2f4c80.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/layout-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-33afc6aa96289fb0.js +1 -0
- package/.next/static/css/c1e307d05daf93b6.css +1 -0
- package/.next/trace +13 -13
- package/.next/types/app/api/relays/[relayId]/route.ts +347 -0
- package/.next/types/routes.d.ts +2 -1
- package/.next/types/validator.ts +9 -0
- package/dist/cli/commands/ask.d.ts.map +1 -1
- package/dist/cli/commands/ask.js +233 -17
- package/dist/cli/commands/attach.d.ts +4 -1
- package/dist/cli/commands/attach.d.ts.map +1 -1
- package/dist/cli/commands/attach.js +19 -7
- package/dist/cli/commands/command-target.d.ts +7 -0
- package/dist/cli/commands/command-target.d.ts.map +1 -1
- package/dist/cli/commands/command-target.js +10 -0
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +38 -2
- package/dist/cli/commands/message-dispatch.d.ts +39 -5
- package/dist/cli/commands/message-dispatch.d.ts.map +1 -1
- package/dist/cli/commands/message-dispatch.js +100 -8
- package/dist/cli/commands/relays.d.ts +26 -2
- package/dist/cli/commands/relays.d.ts.map +1 -1
- package/dist/cli/commands/relays.js +70 -5
- package/dist/cli/commands/respond-strict.d.ts.map +1 -1
- package/dist/cli/commands/respond-strict.js +22 -5
- package/dist/cli/commands/respond.d.ts +12 -0
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +83 -18
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +14 -8
- package/dist/cli/commands/wait-hook-stop-settle.d.ts +66 -0
- package/dist/cli/commands/wait-hook-stop-settle.d.ts.map +1 -0
- package/dist/cli/commands/wait-hook-stop-settle.js +150 -0
- package/dist/cli/commands/wait-instance.d.ts +29 -0
- package/dist/cli/commands/wait-instance.d.ts.map +1 -0
- package/dist/cli/commands/wait-instance.js +56 -0
- package/dist/cli/commands/wait-notices.d.ts +87 -0
- package/dist/cli/commands/wait-notices.d.ts.map +1 -0
- package/dist/cli/commands/wait-notices.js +301 -0
- package/dist/cli/commands/wait-poll-bookkeeping.d.ts +15 -0
- package/dist/cli/commands/wait-poll-bookkeeping.d.ts.map +1 -0
- package/dist/cli/commands/wait-poll-bookkeeping.js +57 -0
- package/dist/cli/commands/wait-poll-state.d.ts +136 -0
- package/dist/cli/commands/wait-poll-state.d.ts.map +1 -0
- package/dist/cli/commands/wait-poll-state.js +6 -0
- package/dist/cli/commands/wait-timing.d.ts +46 -0
- package/dist/cli/commands/wait-timing.d.ts.map +1 -0
- package/dist/cli/commands/wait-timing.js +99 -0
- package/dist/cli/commands/wait-turn-boundary.d.ts +284 -0
- package/dist/cli/commands/wait-turn-boundary.d.ts.map +1 -0
- package/dist/cli/commands/wait-turn-boundary.js +427 -0
- package/dist/cli/commands/wait-verify.d.ts +51 -0
- package/dist/cli/commands/wait-verify.d.ts.map +1 -0
- package/dist/cli/commands/wait-verify.js +128 -0
- package/dist/cli/commands/wait.d.ts +6 -105
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +240 -968
- package/dist/cli/commands/whoami.d.ts.map +1 -1
- package/dist/cli/commands/whoami.js +3 -1
- package/dist/cli/docs/agent-operations.d.ts +2 -2
- package/dist/cli/docs/agent-operations.d.ts.map +1 -1
- package/dist/cli/docs/agent-operations.js +24 -1
- package/dist/cli/types/api-responses.d.ts +49 -3
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/utils/api-client.d.ts +69 -1
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +226 -18
- package/dist/cli/utils/follow-up-command.d.ts +38 -0
- package/dist/cli/utils/follow-up-command.d.ts.map +1 -0
- package/dist/cli/utils/follow-up-command.js +57 -0
- package/dist/cli/utils/reply-ledger.d.ts +80 -1
- package/dist/cli/utils/reply-ledger.d.ts.map +1 -1
- package/dist/cli/utils/reply-ledger.js +147 -2
- package/dist/cli/utils/server-capabilities.d.ts +18 -0
- package/dist/cli/utils/server-capabilities.d.ts.map +1 -1
- package/dist/cli/utils/server-capabilities.js +36 -3
- package/dist/cli/utils/session-target.d.ts +1 -1
- package/dist/cli/utils/session-target.d.ts.map +1 -1
- package/dist/cli/utils/session-target.js +3 -0
- package/dist/cli/utils/verify-runner.d.ts +7 -0
- package/dist/cli/utils/verify-runner.d.ts.map +1 -1
- package/dist/cli/utils/verify-runner.js +51 -15
- package/dist/lib/cli-tools/session-name.d.ts.map +1 -1
- package/dist/lib/cli-tools/session-name.js +11 -3
- package/dist/lib/session/send-attempt-types.d.ts +48 -1
- package/dist/lib/session/send-attempt-types.d.ts.map +1 -1
- package/dist/lib/session/send-attempt-types.js +18 -1
- package/dist/lib/verification/session-kill-ledger.d.ts +110 -0
- package/dist/lib/verification/session-kill-ledger.d.ts.map +1 -0
- package/dist/lib/verification/session-kill-ledger.js +174 -0
- package/dist/server/locales/en/worktree.json +20 -3
- package/dist/server/locales/ja/worktree.json +20 -3
- package/dist/server/src/config/cli-tool-timing-config.js +1 -7
- package/dist/server/src/lib/auto-yes-poller.js +54 -11
- package/dist/server/src/lib/cli-tools/antigravity.js +45 -9
- package/dist/server/src/lib/cli-tools/base.js +39 -0
- package/dist/server/src/lib/cli-tools/codex.js +67 -15
- package/dist/server/src/lib/cli-tools/command-code-plan-review.js +24 -2
- package/dist/server/src/lib/cli-tools/command-code.js +7 -3
- package/dist/server/src/lib/cli-tools/copilot.js +125 -33
- package/dist/server/src/lib/cli-tools/gemini.js +37 -10
- package/dist/server/src/lib/cli-tools/launch-keys.js +39 -0
- package/dist/server/src/lib/cli-tools/opencode-v2.js +6 -2
- package/dist/server/src/lib/cli-tools/opencode.js +60 -15
- package/dist/server/src/lib/cli-tools/session-name.js +11 -3
- package/dist/server/src/lib/cli-tools/submit-composer-read.js +590 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender.js +512 -620
- package/dist/server/src/lib/cli-tools/vibe-local.js +4 -2
- package/dist/server/src/lib/db/db-migration-path.js +63 -2
- package/dist/server/src/lib/db/migrations/index.js +2 -0
- package/dist/server/src/lib/db/migrations/pre-migration-backup.js +266 -0
- package/dist/server/src/lib/db/migrations/runner.js +37 -4
- package/dist/server/src/lib/db/migrations/v62-session-relays-bind.js +102 -0
- package/dist/server/src/lib/db/relay-bind-db.js +437 -0
- package/dist/server/src/lib/db/relay-db.js +59 -96
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +5 -4
- package/dist/server/src/lib/detection/upstream-faults.js +40 -6
- package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +2 -3
- package/dist/server/src/lib/hooks/sources/opencode/client.js +12 -6
- package/dist/server/src/lib/polling/response-checker.js +7 -5
- package/dist/server/src/lib/prompt-answer-errors.js +362 -0
- package/dist/server/src/lib/prompt-answer-sender.js +264 -288
- package/dist/server/src/lib/push/failure-episode-state.js +4 -1
- package/dist/server/src/lib/realtime/terminal-broadcast.js +1 -4
- package/dist/server/src/lib/realtime-snippet.js +54 -0
- package/dist/server/src/lib/relay/relay-bind.js +294 -0
- package/dist/server/src/lib/relay/relay-boot.js +51 -0
- package/dist/server/src/lib/relay/relay-bound-reply.js +519 -0
- package/dist/server/src/lib/relay/relay-delivery.js +134 -220
- package/dist/server/src/lib/relay/relay-messages.js +39 -4
- package/dist/server/src/lib/relay/relay-overlap.js +92 -0
- package/dist/server/src/lib/relay/relay-system-line.js +3 -2
- package/dist/server/src/lib/relay/types.js +12 -1
- package/dist/server/src/lib/session/agent-event-state.js +4 -0
- package/dist/server/src/lib/session/agent-session-lifecycle.js +23 -0
- package/dist/server/src/lib/session/claude-session.js +59 -8
- package/dist/server/src/lib/session/composer-clear.js +54 -1
- package/dist/server/src/lib/session/current-output-builder.js +26 -8
- package/dist/server/src/lib/session/current-output-history-writers.js +1 -1
- package/dist/server/src/lib/session/instance-input-lock.js +664 -0
- package/dist/server/src/lib/session/prompt-submit-receipt.js +155 -0
- package/dist/server/src/lib/session/prompt-waiting-guard.js +10 -3
- package/dist/server/src/lib/session/send-attempt-state.js +65 -0
- package/dist/server/src/lib/session/send-attempt-types.js +18 -1
- package/dist/server/src/lib/session/send-user-message.js +84 -14
- package/dist/server/src/lib/session/session-launch-flight.js +243 -0
- package/dist/server/src/lib/session/session-starting-state.js +40 -4
- package/dist/server/src/lib/session/structured-prompt.js +12 -9
- package/dist/server/src/lib/session/waiting-episode-binding.js +4 -2
- package/dist/server/src/lib/session-cleanup.js +32 -0
- package/dist/server/src/lib/session-key-sender.js +0 -27
- package/dist/server/src/lib/verification/env-clean-gate.js +129 -0
- package/dist/server/src/lib/verification/env-snapshot.js +11 -2
- package/dist/server/src/lib/verification/session-kill-ledger.js +174 -0
- package/package.json +5 -1
- package/release-notes/0.49.1.json +66 -0
- package/release-notes/0.49.2.json +49 -0
- package/.next/server/chunks/1210.js +0 -1
- package/.next/server/chunks/1945.js +0 -14
- package/.next/server/chunks/1990.js +0 -103
- package/.next/server/chunks/4194.js +0 -67
- package/.next/server/chunks/5845.js +0 -1
- package/.next/server/chunks/720.js +0 -103
- package/.next/server/chunks/7604.js +0 -2
- package/.next/server/chunks/9540.js +0 -1
- package/.next/static/chunks/4768-ad6f82f034f21eae.js +0 -1
- package/.next/static/chunks/5794-80ac3f06f098ea29.js +0 -1
- package/.next/static/chunks/6654-f3534f35f16644bc.js +0 -1
- package/.next/static/chunks/7665-e9ef6e0a85b9fa49.js +0 -1
- package/.next/static/chunks/8606-cf6bdbff44a764cf.js +0 -1
- package/.next/static/chunks/9079-987939d231704218.js +0 -1
- package/.next/static/chunks/app/api/agents/update/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/agents/versions/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/app/release-notes/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/capabilities/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/relays/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/remote/pair/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/settings/default-agents/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/skills/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/templates/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/layout-aa8e66164a4367af.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/more/page-87c84987b2765213.js +0 -1
- package/.next/static/chunks/app/page-1b820c421db48c2c.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/review/page-e2fd4a590646a2d8.js +0 -1
- package/.next/static/chunks/app/sessions/page-cfd645305e25fd33.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-a8d7886703ffc7b4.js +0 -1
- package/.next/static/css/db8959555c3d9c96.css +0 -1
- /package/.next/static/{3_JtAZaKMJEDFIIfkHv4n → yGatWDsS532awSs51kXyd}/_buildManifest.js +0 -0
- /package/.next/static/{3_JtAZaKMJEDFIIfkHv4n → yGatWDsS532awSs51kXyd}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* wait Command - turn boundaries: completion basis, turn adoption, self-resume and the prompt ledger
|
|
4
|
+
* Issue #3964: split out of wait.ts; wait.ts re-exports what it exported.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.SELF_RESUME_HOLD_MS = exports.SELF_RESUME_CAPABILITY = exports.SELF_RESUME_PENDING_DETAIL = exports.PENDING_PROMPT_HOLD_MS = exports.TURN_OPENING_EVENT_TYPES = exports.COMPLETION_BASIS = void 0;
|
|
8
|
+
exports.publishesTurnRecord = publishesTurnRecord;
|
|
9
|
+
exports.adoptTurnStart = adoptTurnStart;
|
|
10
|
+
exports.describeTurnClose = describeTurnClose;
|
|
11
|
+
exports.turnSettled = turnSettled;
|
|
12
|
+
exports.reportsTurnBoundaries = reportsTurnBoundaries;
|
|
13
|
+
exports.pendingSelfResumeStop = pendingSelfResumeStop;
|
|
14
|
+
exports.readNewestPromptAt = readNewestPromptAt;
|
|
15
|
+
exports.outstandingPrompt = outstandingPrompt;
|
|
16
|
+
const wait_timing_1 = require("./wait-timing");
|
|
17
|
+
/**
|
|
18
|
+
* Why `wait` decided the agent was done, printed on the completion line
|
|
19
|
+
* (Issue #1839).
|
|
20
|
+
*
|
|
21
|
+
* `Completed: <id>` used to be the whole story, which made two very different
|
|
22
|
+
* situations indistinguishable in a log: the agent's own `Stop` hook arrived, or
|
|
23
|
+
* nothing but the screen said so. The measurement behind this Issue is exactly
|
|
24
|
+
* that difference — a 529 storm returns Claude to its composer in ~3 s with the
|
|
25
|
+
* scraper reporting `ready`/`input_prompt` and no `Stop` ever sent — so the
|
|
26
|
+
* basis belongs next to the verdict rather than in a triage session afterwards.
|
|
27
|
+
*/
|
|
28
|
+
exports.COMPLETION_BASIS = {
|
|
29
|
+
/** The agent reported the turn ended, and the report postdates this wait's turn. */
|
|
30
|
+
HOOK_STOP: 'hook_stop',
|
|
31
|
+
/** The tmux session went away after we had seen it alive. */
|
|
32
|
+
SESSION_GONE: 'session_gone',
|
|
33
|
+
/** The terminal frame says the agent is back at its composer. Nothing corroborated it. */
|
|
34
|
+
SCRAPER_READY: 'scraper_ready',
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Structured event types that mean "a turn is under way" (Issue #1839).
|
|
38
|
+
*
|
|
39
|
+
* Mirrors AGENT_EVENT_TYPES in src/lib/hooks/agent-event-types.ts; duplicated
|
|
40
|
+
* rather than imported because the CLI bundle keeps its own copy of the API
|
|
41
|
+
* shapes (see api-responses.ts).
|
|
42
|
+
*
|
|
43
|
+
* `notification` is deliberately absent, and that is the one measured deviation
|
|
44
|
+
* from the design sketched in Issue #1839. The Issue proposed accepting
|
|
45
|
+
* `stop` **or** `idle_prompt` as the end of a turn; the live capture of
|
|
46
|
+
* 2026-08-20 (see docs/design/upstream-fault-turn-boundary-1839.md) shows
|
|
47
|
+
* Claude 2.1.236 emitting `Notification(idle_prompt)` 62 s into a turn that
|
|
48
|
+
* ran nothing at all, because the composer had been idle for a minute. Reading
|
|
49
|
+
* it as a turn boundary would have re-created the false completion this gate
|
|
50
|
+
* exists to stop, one minute later. Only `Stop` ends a turn.
|
|
51
|
+
*
|
|
52
|
+
* Exported for the cross-layer pin in
|
|
53
|
+
* `tests/unit/session/status-contract-1926.test.ts`. The server opens a turn on
|
|
54
|
+
* the same three events (`src/lib/session/provisional-turn.ts`
|
|
55
|
+
* TURN_ACTIVITY_EVENTS), and since Issue #1930 `adoptTurnStart` reads that
|
|
56
|
+
* turn's `openedAt` rather than this set — so a set that drifted would change
|
|
57
|
+
* this gate silently. The set is still read here for the pre-#1930 fallback
|
|
58
|
+
* path, and the CLI cannot import the server module (`tsconfig.cli.json` sets
|
|
59
|
+
* `"paths": {}`), so the test is the only thing holding the two together.
|
|
60
|
+
*/
|
|
61
|
+
exports.TURN_OPENING_EVENT_TYPES = new Set([
|
|
62
|
+
'user_prompt_submit',
|
|
63
|
+
'pre_tool_use',
|
|
64
|
+
'post_tool_use',
|
|
65
|
+
]);
|
|
66
|
+
/**
|
|
67
|
+
* How far *before* this wait started a turn-opening event may sit and still be
|
|
68
|
+
* read as the turn this wait is about (Issue #1839).
|
|
69
|
+
*
|
|
70
|
+
* `wait` does not know when `send` ran, and the honest proxy is its own start:
|
|
71
|
+
* an orchestrator sends and then waits, so the turn's `UserPromptSubmit` lands
|
|
72
|
+
* after `wait` is already polling (measured at +0.6 s from the send). One poll
|
|
73
|
+
* interval of slack covers a `wait` that starts a moment late.
|
|
74
|
+
*
|
|
75
|
+
* The bound is what keeps this from being a new way to hang, and Issue #1930
|
|
76
|
+
* narrowed what it has to defend against. It was written when structured events
|
|
77
|
+
* were NOT fenced by generation on the way into `structuredEvents`, so a stale
|
|
78
|
+
* `user_prompt_submit` from a previous agent process could still be the last
|
|
79
|
+
* event on the wire and this window was the only thing stopping it from gating
|
|
80
|
+
* a wait for ever. The server fences the turn now and publishes null when it
|
|
81
|
+
* does, so the window's remaining job is narrower and sharper: a turn that has
|
|
82
|
+
* already CLOSED must have closed inside this wait to count, or `wait` on a
|
|
83
|
+
* session that finished an hour ago would inherit that turn's gate. An open
|
|
84
|
+
* turn is adopted whatever its age — see {@link adoptTurnStart}.
|
|
85
|
+
*/
|
|
86
|
+
const TURN_ADOPTION_GRACE_MS = wait_timing_1.POLL_INTERVAL_MS;
|
|
87
|
+
/**
|
|
88
|
+
* Whether this server publishes a real turn record (Issue #1930).
|
|
89
|
+
*
|
|
90
|
+
* `dialogPendingMaxMs` landed with the turn model and is set on every payload a
|
|
91
|
+
* server of that vintage produces, so its presence is the version probe. A
|
|
92
|
+
* *value* rather than a version string, for the reason #1924 gives for the
|
|
93
|
+
* capability block: a payload that has to be interpreted by its sender's
|
|
94
|
+
* version number is a payload nobody can read forward.
|
|
95
|
+
*
|
|
96
|
+
* The probe is needed because the two readings below disagree in exactly the
|
|
97
|
+
* case that matters. On a #1930 server, `openedAt` being null while
|
|
98
|
+
* `lastEventType` is `user_prompt_submit` means the turn was fenced off by a
|
|
99
|
+
* generation or aged out — the server has *decided* it is not this instance's
|
|
100
|
+
* turn. Falling back to the event on such a payload would put back the stale
|
|
101
|
+
* adoption the turn record exists to remove.
|
|
102
|
+
*/
|
|
103
|
+
function publishesTurnRecord(data) {
|
|
104
|
+
return data.structuredEvents?.dialogPendingMaxMs != null;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Adopt the turn this wait is about, if this poll shows one (Issue #1839,
|
|
108
|
+
* moved onto the turn record in #1930).
|
|
109
|
+
*
|
|
110
|
+
* ## What changed, and why the grace window is no longer the whole guard
|
|
111
|
+
*
|
|
112
|
+
* Before #1930 this read `lastEventType` / `lastEventAt` — the newest event of
|
|
113
|
+
* any kind — and refused anything older than {@link TURN_ADOPTION_GRACE_MS},
|
|
114
|
+
* because (in the words of that constant) structured events "are NOT fenced by
|
|
115
|
+
* generation on the way into `structuredEvents`", so a stale
|
|
116
|
+
* `user_prompt_submit` from a previous agent process could still be the last
|
|
117
|
+
* event on the wire. The bound was the only thing keeping such a record from
|
|
118
|
+
* gating a wait for ever.
|
|
119
|
+
*
|
|
120
|
+
* The server fences the turn now, and publishes null when it does. So an **open**
|
|
121
|
+
* turn is adopted whatever its age — which closes a hole the old reading had:
|
|
122
|
+
* a turn that opened ten minutes before this `wait` started, and is still
|
|
123
|
+
* running, used to be adopted only because its *newest* event was fresh. An
|
|
124
|
+
* agent that goes quiet mid-turn (thinking, a long tool call) has no fresh
|
|
125
|
+
* event, so the #1839 gate came down at exactly the moment a 529 storm would
|
|
126
|
+
* exploit it.
|
|
127
|
+
*
|
|
128
|
+
* A **closed** turn still has to have opened inside this wait's window, and the
|
|
129
|
+
* reason is the one the grace constant gives: `wait` does not know when `send`
|
|
130
|
+
* ran, so the last turn of a session that finished an hour ago must not gate a
|
|
131
|
+
* wait that has only just started. `commandmate wait` on an already-idle
|
|
132
|
+
* session therefore adopts nothing and completes on its first poll, exactly as
|
|
133
|
+
* it did before — #1975 measured that at 234/242/259 ms and it is the
|
|
134
|
+
* orchestrator's normal path.
|
|
135
|
+
*
|
|
136
|
+
* @param previous - the turn start adopted so far, or null
|
|
137
|
+
* @returns the newest adopted turn start, or `previous` when nothing qualified
|
|
138
|
+
*/
|
|
139
|
+
function adoptTurnStart(data, waitStartedAt, previous) {
|
|
140
|
+
const events = data.structuredEvents;
|
|
141
|
+
if (!events)
|
|
142
|
+
return previous;
|
|
143
|
+
if (!publishesTurnRecord(data)) {
|
|
144
|
+
// A server older than #1930. Same reading this function has had since
|
|
145
|
+
// #1839, kept so a newer CLI pointed at an older server does not silently
|
|
146
|
+
// lose the gate.
|
|
147
|
+
if (events.lastEventAt == null || events.lastEventType == null)
|
|
148
|
+
return previous;
|
|
149
|
+
if (!exports.TURN_OPENING_EVENT_TYPES.has(events.lastEventType))
|
|
150
|
+
return previous;
|
|
151
|
+
if (events.lastEventAt < waitStartedAt - TURN_ADOPTION_GRACE_MS)
|
|
152
|
+
return previous;
|
|
153
|
+
return previous === null || events.lastEventAt > previous ? events.lastEventAt : previous;
|
|
154
|
+
}
|
|
155
|
+
const openedAt = events.openedAt;
|
|
156
|
+
// Null covers every "there is no turn to adopt" case the server knows about:
|
|
157
|
+
// nothing reported, a previous generation, aged out, or a `stop` whose
|
|
158
|
+
// opening was never observed.
|
|
159
|
+
if (openedAt == null)
|
|
160
|
+
return previous;
|
|
161
|
+
if (events.closedAt != null && openedAt < waitStartedAt - TURN_ADOPTION_GRACE_MS) {
|
|
162
|
+
return previous;
|
|
163
|
+
}
|
|
164
|
+
return previous === null || openedAt > previous ? openedAt : previous;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* `structuredEvents.closedBy`, phrased for a diagnostic line (Issue #1930).
|
|
168
|
+
*
|
|
169
|
+
* The server's close-reason vocabulary and {@link COMPLETION_BASIS} answer two
|
|
170
|
+
* different questions — "why did the turn end" and "what did `wait` decide on"
|
|
171
|
+
* — and are deliberately printed side by side rather than folded together.
|
|
172
|
+
* `hook_stop` is the only place they meet: it is `closedBy: 'stop'` seen from
|
|
173
|
+
* the CLI's end. Everything else (`stale`, `scraper_evidence`, `session_end`,
|
|
174
|
+
* `generation`, `resync_idle`) is a reason the turn stopped being trusted, which
|
|
175
|
+
* is precisely what `wait` must NOT read as completion.
|
|
176
|
+
*/
|
|
177
|
+
function describeTurnClose(data) {
|
|
178
|
+
const events = data.structuredEvents;
|
|
179
|
+
if (!events)
|
|
180
|
+
return 'turn=unknown';
|
|
181
|
+
const id = events.turnId ?? 'none';
|
|
182
|
+
const closedBy = events.closedBy ?? (events.openedAt != null ? 'open' : 'none');
|
|
183
|
+
return `turn=${id} closedBy=${closedBy}`;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Whether the agent has reported the end of the turn this wait adopted
|
|
187
|
+
* (Issue #1839).
|
|
188
|
+
*
|
|
189
|
+
* True when no turn was adopted at all, which is the whole of the unchanged
|
|
190
|
+
* path: a session whose agent posts no hooks never adopts one, so every caller
|
|
191
|
+
* on a machine without hook injection sees precisely the pre-#1839 behaviour.
|
|
192
|
+
*/
|
|
193
|
+
function turnSettled(data, turnStartedAt) {
|
|
194
|
+
if (turnStartedAt === null)
|
|
195
|
+
return true;
|
|
196
|
+
const stoppedAt = data.lastStopEventAt;
|
|
197
|
+
return stoppedAt != null && stoppedAt >= turnStartedAt;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* The structured event that ends a turn (Issue #1975).
|
|
201
|
+
*
|
|
202
|
+
* The counterpart of {@link TURN_OPENING_EVENT_TYPES}, kept as a bare constant
|
|
203
|
+
* because the vocabulary a source declares in `capabilities.supportedEvents` is
|
|
204
|
+
* the wire's, not this build's: a tool that cannot say `stop` cannot release the
|
|
205
|
+
* hold below, so asking for the word by name is the whole of the check.
|
|
206
|
+
*/
|
|
207
|
+
const TURN_CLOSING_EVENT_TYPE = 'stop';
|
|
208
|
+
/**
|
|
209
|
+
* How long `wait` will hold a composer frame open for an agent that has been
|
|
210
|
+
* handed a prompt it has not reported the end of (Issue #1975).
|
|
211
|
+
*
|
|
212
|
+
* The hold's *reason* is exact — see {@link outstandingPrompt} — so this is not
|
|
213
|
+
* a settling window standing in for evidence. It is the bound the contract of
|
|
214
|
+
* this Issue asks for: hooks are fail-open on every path, so a `Stop` that is
|
|
215
|
+
* simply lost (the receiver was restarted, the machine-wide
|
|
216
|
+
* `~/.copilot/settings.json` was rewritten by another server mid-session, the
|
|
217
|
+
* 4-second curl in the hook timed out) must not turn `wait` into a command that
|
|
218
|
+
* never returns. After this it completes on the frame alone, exactly as it did
|
|
219
|
+
* before this Issue, and says so.
|
|
220
|
+
*
|
|
221
|
+
* 60s is the same dwell {@link UNCLASSIFIED_DWELL_MS} uses for the same job, and
|
|
222
|
+
* it is ~55x the widest send-to-turn-open window measured for this Issue
|
|
223
|
+
* (2026-08-22, copilot 1.0.80 against an isolated server: 0.04s / 0.75s / 0.88s
|
|
224
|
+
* / 1.10s over four sends, the last of them a cold session start). `--timeout`
|
|
225
|
+
* and `--stall-timeout` below 60s still win, as they do for the unclassified
|
|
226
|
+
* dwell: this pre-empts long waits, it does not extend short ones.
|
|
227
|
+
*/
|
|
228
|
+
exports.PENDING_PROMPT_HOLD_MS = 60_000;
|
|
229
|
+
/**
|
|
230
|
+
* Whether this tool's event source claims it can report both ends of a turn
|
|
231
|
+
* (Issue #1975).
|
|
232
|
+
*
|
|
233
|
+
* The gate that keeps the hold below off every path it has no evidence for.
|
|
234
|
+
* `structuredEvents.source.capabilities` is #1924's declaration, published to
|
|
235
|
+
* the CLI already, and the compatibility source a tool with no implementation
|
|
236
|
+
* gets (`src/lib/hooks/sources/legacy-relay.ts`) declares `supportedEvents: []`
|
|
237
|
+
* — so a tool that posts no hooks answers `false` here and takes precisely the
|
|
238
|
+
* pre-#1975 path. So does a server older than #1924, which sends no `source` at
|
|
239
|
+
* all.
|
|
240
|
+
*
|
|
241
|
+
* Both words are required. Without a turn-opening word nothing would ever open
|
|
242
|
+
* the turn this waits for; without `stop` nothing could ever close it, and the
|
|
243
|
+
* hold would only ever end at its own bound.
|
|
244
|
+
*/
|
|
245
|
+
function reportsTurnBoundaries(data) {
|
|
246
|
+
const declared = data.structuredEvents?.source?.capabilities?.supportedEvents;
|
|
247
|
+
if (!Array.isArray(declared))
|
|
248
|
+
return false;
|
|
249
|
+
return (declared.includes(TURN_CLOSING_EVENT_TYPE) &&
|
|
250
|
+
declared.some(event => exports.TURN_OPENING_EVENT_TYPES.has(event)));
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* The `stop` detail meaning "the agent ended its turn with its own background
|
|
254
|
+
* work still running, and resumes by itself when that work finishes"
|
|
255
|
+
* (Issue #2614).
|
|
256
|
+
*
|
|
257
|
+
* A copy of `SELF_RESUME_PENDING_DETAIL` in `src/lib/hooks/agent-event-types.ts`
|
|
258
|
+
* for the reason {@link TURN_OPENING_EVENT_TYPES} is a copy: the CLI builds with
|
|
259
|
+
* `"paths": {}`. `tests/unit/cli/commands/wait-self-resume-2614.test.ts` pins the
|
|
260
|
+
* two together.
|
|
261
|
+
*/
|
|
262
|
+
exports.SELF_RESUME_PENDING_DETAIL = 'self_resume_pending';
|
|
263
|
+
/**
|
|
264
|
+
* The capability a source declares when its `stop` can carry
|
|
265
|
+
* {@link SELF_RESUME_PENDING_DETAIL} (Issue #2614).
|
|
266
|
+
*
|
|
267
|
+
* Read by name rather than through the mirrored type in `api-responses.ts`,
|
|
268
|
+
* which predates it: `structuredEvents.source.capabilities` is published as the
|
|
269
|
+
* source's whole declaration, so a newer server sends the key and an older one
|
|
270
|
+
* simply does not.
|
|
271
|
+
*/
|
|
272
|
+
exports.SELF_RESUME_CAPABILITY = 'stopReportsSelfResume';
|
|
273
|
+
/**
|
|
274
|
+
* How long `wait` holds a `stop` whose agent said it would resume by itself
|
|
275
|
+
* (Issue #2614).
|
|
276
|
+
*
|
|
277
|
+
* Measured 2026-09-17 against antigravity 1.2.4: a `schedule` of 60 s closed the
|
|
278
|
+
* turn, the agent woke 58 s after its `Stop` and did it again three more times,
|
|
279
|
+
* and the real end came five minutes after the first `Stop` — which is where
|
|
280
|
+
* `wait` had already reported `Completed (basis=hook_stop)` and started a
|
|
281
|
+
* verification against a half-finished worktree. The wake is not something to
|
|
282
|
+
* time: it is a `post_tool_use` that opens a new turn, and #1839's gate takes
|
|
283
|
+
* over from there. What needs a bound is only the case where it never comes.
|
|
284
|
+
*
|
|
285
|
+
* A timer's own length is not on the wire (the `schedule` arguments reach the
|
|
286
|
+
* permission receiver and stop there), and a command sent to the background has
|
|
287
|
+
* no length at all, so the bound is the one the server already uses for the
|
|
288
|
+
* same question the other way round: how long an open turn is trusted with
|
|
289
|
+
* nothing heard (`TURN_STALE_AFTER_MS` in `src/lib/session/provisional-turn.ts`,
|
|
290
|
+
* pinned equal by `wait-self-resume-2614.test.ts`). Every wake starts a new
|
|
291
|
+
* `stop` and a new hold, so an agent that keeps rescheduling never reaches it.
|
|
292
|
+
*
|
|
293
|
+
* A constant, like {@link PENDING_PROMPT_HOLD_MS}: `--timeout` and
|
|
294
|
+
* `--stall-timeout` below it still win.
|
|
295
|
+
*/
|
|
296
|
+
exports.SELF_RESUME_HOLD_MS = 30 * 60 * 1000;
|
|
297
|
+
/**
|
|
298
|
+
* Whether this tool's event source can say, on its `stop`, that the agent will
|
|
299
|
+
* resume by itself (Issue #2614).
|
|
300
|
+
*
|
|
301
|
+
* The same kind of gate as {@link reportsTurnBoundaries}, and it requires that
|
|
302
|
+
* one too: the hold below is released by a turn-opening event, and a source
|
|
303
|
+
* that cannot send one could only ever end the hold at its bound. A server that
|
|
304
|
+
* predates the declaration answers `false`, and so does every source but the one
|
|
305
|
+
* that writes the detail.
|
|
306
|
+
*/
|
|
307
|
+
function reportsSelfResume(data) {
|
|
308
|
+
const declared = data.structuredEvents?.source?.capabilities;
|
|
309
|
+
return declared?.[exports.SELF_RESUME_CAPABILITY] === true && reportsTurnBoundaries(data);
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* The instant of the `stop` this agent said it would resume from, or null
|
|
313
|
+
* (Issue #2614).
|
|
314
|
+
*
|
|
315
|
+
* Non-null only while that `stop` is still the newest thing the agent has said.
|
|
316
|
+
* The wake is a `post_tool_use` (antigravity reports the timer's own tool call
|
|
317
|
+
* finishing when it fires), which replaces the displayed event and opens a new
|
|
318
|
+
* turn, so this answers null from the first poll after it — and a later `stop`
|
|
319
|
+
* is a different instant, which is how a hold knows it is about a new one.
|
|
320
|
+
*
|
|
321
|
+
* On a server that publishes a turn record the `stop` must also be what closed
|
|
322
|
+
* that turn: a turn ended by `generation` or `session_end` belongs to a process
|
|
323
|
+
* that is gone, and nothing it scheduled is going to wake anything.
|
|
324
|
+
*/
|
|
325
|
+
function pendingSelfResumeStop(data) {
|
|
326
|
+
if (!reportsSelfResume(data))
|
|
327
|
+
return null;
|
|
328
|
+
const events = data.structuredEvents;
|
|
329
|
+
if (!events || events.lastEventType !== TURN_CLOSING_EVENT_TYPE)
|
|
330
|
+
return null;
|
|
331
|
+
if (events.lastEventDetail !== exports.SELF_RESUME_PENDING_DETAIL)
|
|
332
|
+
return null;
|
|
333
|
+
// `closedBy` is the server's close-reason vocabulary; `'stop'` there is the
|
|
334
|
+
// agent's own `Stop`, the only close this hold is about.
|
|
335
|
+
if (publishesTurnRecord(data) && events.closedBy !== 'stop')
|
|
336
|
+
return null;
|
|
337
|
+
return events.lastEventAt ?? null;
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* When this (worktree, instance) was last handed a prompt (Issue #1975).
|
|
341
|
+
*
|
|
342
|
+
* `limit=1&unit=pairs` is "every row at or after the newest user message"
|
|
343
|
+
* (src/lib/db/chat-db.ts), which is the smallest query that is *guaranteed* to
|
|
344
|
+
* contain that message: plain `limit=1` returns the newest row of either role,
|
|
345
|
+
* and for a turn the agent has already answered that row is the assistant's.
|
|
346
|
+
*
|
|
347
|
+
* Scoped the same way the poll above is: `--instance` when the caller named one,
|
|
348
|
+
* otherwise the `cliToolId` the server resolved for that same poll. Asking
|
|
349
|
+
* unscoped would let a message sent to claude decide a wait on codex.
|
|
350
|
+
*
|
|
351
|
+
* Never throws. An unreadable ledger is not evidence that nothing was sent, so
|
|
352
|
+
* it is reported as such rather than as "nothing was sent" — the call site
|
|
353
|
+
* degrades to the pre-#1975 behaviour instead of holding on a guess.
|
|
354
|
+
*
|
|
355
|
+
* `quietWhenAborted` (Issue #3974): a read aborted by `signal` prints no note,
|
|
356
|
+
* for a caller that says what an aborted read leads to itself; other failures
|
|
357
|
+
* print it as before.
|
|
358
|
+
*/
|
|
359
|
+
async function readNewestPromptAt(client, worktreeId, options, data, signal, quietWhenAborted = false) {
|
|
360
|
+
const query = new URLSearchParams({ limit: '1', unit: 'pairs' });
|
|
361
|
+
if (options.instance)
|
|
362
|
+
query.set('instance', options.instance);
|
|
363
|
+
else if (data.cliToolId)
|
|
364
|
+
query.set('cliTool', data.cliToolId);
|
|
365
|
+
try {
|
|
366
|
+
// Issue #3956: `signal` only when a caller bounds the read; the others
|
|
367
|
+
// call `get` exactly as before.
|
|
368
|
+
const path = `/api/worktrees/${worktreeId}/messages?${query.toString()}`;
|
|
369
|
+
const rows = signal
|
|
370
|
+
? await client.get(path, { signal })
|
|
371
|
+
: await client.get(path);
|
|
372
|
+
let newest = null;
|
|
373
|
+
for (const row of rows ?? []) {
|
|
374
|
+
if (row.role !== 'user')
|
|
375
|
+
continue;
|
|
376
|
+
// ISO string on the wire (a JSON-serialized Date), so this is the only
|
|
377
|
+
// place the two clocks meet — and both sides of the comparison below are
|
|
378
|
+
// stamped by the server, so no CLI/server skew enters the verdict.
|
|
379
|
+
const at = Date.parse(row.timestamp);
|
|
380
|
+
if (Number.isNaN(at))
|
|
381
|
+
continue;
|
|
382
|
+
if (newest === null || at > newest)
|
|
383
|
+
newest = at;
|
|
384
|
+
}
|
|
385
|
+
return { readable: true, submittedAt: newest };
|
|
386
|
+
}
|
|
387
|
+
catch (error) {
|
|
388
|
+
if (quietWhenAborted && signal?.aborted)
|
|
389
|
+
return { readable: false };
|
|
390
|
+
console.error(`Note: could not read the message ledger for ${worktreeId} ` +
|
|
391
|
+
`(${error instanceof Error ? error.message : String(error)}); ` +
|
|
392
|
+
'completion will be judged from the frame alone.');
|
|
393
|
+
return { readable: false };
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Whether the newest prompt this instance was handed is still unanswered
|
|
398
|
+
* (Issue #1975).
|
|
399
|
+
*
|
|
400
|
+
* This is the distinction the whole Issue turns on, and it is a comparison of
|
|
401
|
+
* two server-stamped facts rather than a timer:
|
|
402
|
+
*
|
|
403
|
+
* - **idle before this wait began** — the agent's `Stop` postdates the newest
|
|
404
|
+
* prompt. Nothing is outstanding; `wait` completes on the first poll exactly
|
|
405
|
+
* as it always has. An orchestrator waiting on a session that finished long
|
|
406
|
+
* ago pays nothing.
|
|
407
|
+
* - **`send` a moment ago** — the newest prompt postdates the last `Stop`
|
|
408
|
+
* (or there has never been one). The agent has been given work and has not
|
|
409
|
+
* reported finishing it, so a composer frame is "it has not started yet",
|
|
410
|
+
* not "it is done".
|
|
411
|
+
*
|
|
412
|
+
* `wait` could not tell these apart before, because from `current-output` alone
|
|
413
|
+
* they are the same payload: in both, the last thing the agent said was the
|
|
414
|
+
* previous turn's `stop`, and `adoptTurnStart` adopts nothing. Measured against
|
|
415
|
+
* copilot 1.0.80 on 2026-08-22, the window in which that is true after a send is
|
|
416
|
+
* ~1s wide, and `wait`'s first poll is immediate — which is why the false
|
|
417
|
+
* completions came back in 0.3s with `basis=scraper_ready`, 3 times in 5.
|
|
418
|
+
*
|
|
419
|
+
* The fast-turn case falls out of the same comparison rather than needing a rule
|
|
420
|
+
* of its own: a turn that opens and closes between two polls leaves
|
|
421
|
+
* `lastEventType: 'stop'` (so no turn is adopted) but a `stop` that postdates
|
|
422
|
+
* the prompt — answered, and completed on the spot.
|
|
423
|
+
*/
|
|
424
|
+
function outstandingPrompt(data, submittedAt) {
|
|
425
|
+
const stoppedAt = data.lastStopEventAt;
|
|
426
|
+
return stoppedAt == null || stoppedAt < submittedAt;
|
|
427
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* wait Command - verification after a wait (--verify / --require-work) and exit-code merging
|
|
3
|
+
* Issue #3964: split out of wait.ts.
|
|
4
|
+
*/
|
|
5
|
+
import type { WaitOptions } from '../types';
|
|
6
|
+
import { ApiClient } from '../utils/api-client';
|
|
7
|
+
/** True when the caller asked for a verdict rather than "the agent stopped". */
|
|
8
|
+
export declare function verifyRequested(options: WaitOptions): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Whether this poll outcome should still be handed to the verification gates.
|
|
11
|
+
*
|
|
12
|
+
* A completion is the obvious case. NOT_STARTED joins it (Issue #1628) so the
|
|
13
|
+
* operator gets the gate results instead of a bare "no session": work committed
|
|
14
|
+
* by an agent whose session has since gone away is still worth reporting. The
|
|
15
|
+
* verdict is merged rather than substituted — mergeExitCode never lets a passing
|
|
16
|
+
* run overwrite NOT_STARTED, so "wait never saw this agent" survives to the exit
|
|
17
|
+
* code even when the gates are green.
|
|
18
|
+
*/
|
|
19
|
+
export declare function shouldVerify(exitCode: number, options: WaitOptions): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Read the task this wait is about, before waiting for it (Issue #1620).
|
|
22
|
+
*
|
|
23
|
+
* Timing is the whole point. Agents are asked to run the gates themselves
|
|
24
|
+
* before reporting completion, and doing so moves their task to a terminal
|
|
25
|
+
* status — after which a verification run started with only a worktree id has
|
|
26
|
+
* no contract to resolve, judges no scope, and still reports `passed`. Read
|
|
27
|
+
* while the task is still in flight, the id survives that transition and the
|
|
28
|
+
* run that follows is judged against the contract it was supposed to judge.
|
|
29
|
+
*
|
|
30
|
+
* Never throws: an unreadable ledger costs the attribution, and refusing to
|
|
31
|
+
* verify over it would cost every gate. The one exception is a client deadline
|
|
32
|
+
* (`--timeout`, Issue #3983), which is rethrown as the exit 124 it is.
|
|
33
|
+
*
|
|
34
|
+
* @returns the task id, or undefined to leave resolution to the server
|
|
35
|
+
*/
|
|
36
|
+
export declare function resolveWaitedTaskId(client: ApiClient, worktreeId: string): Promise<string | undefined>;
|
|
37
|
+
/**
|
|
38
|
+
* Run verification for one worktree after its completion was detected.
|
|
39
|
+
*
|
|
40
|
+
* Swallows ApiError into an exit code: with several worktrees in flight, one
|
|
41
|
+
* unreachable run must not abort the verdicts of the others.
|
|
42
|
+
*/
|
|
43
|
+
export declare function verifyAfterWait(client: ApiClient, worktreeId: string, options: WaitOptions, taskId: string | undefined): Promise<number>;
|
|
44
|
+
/**
|
|
45
|
+
* Fold one worktree's exit code into the aggregate.
|
|
46
|
+
*
|
|
47
|
+
* Ranked codes (see WAIT_EXIT_CODE_PRIORITY) beat unranked infrastructure
|
|
48
|
+
* codes, and among equals the first one observed stands.
|
|
49
|
+
*/
|
|
50
|
+
export declare function mergeExitCode(current: number, candidate: number): number;
|
|
51
|
+
//# sourceMappingURL=wait-verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait-verify.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/wait-verify.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAuC,MAAM,qBAAqB,CAAC;AAGrF,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAE7D;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAG5E;AAgBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAmB7B;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,OAAO,CAAC,MAAM,CAAC,CAyBjB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CASxE"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* wait Command - verification after a wait (--verify / --require-work) and exit-code merging
|
|
4
|
+
* Issue #3964: split out of wait.ts.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.verifyRequested = verifyRequested;
|
|
8
|
+
exports.shouldVerify = shouldVerify;
|
|
9
|
+
exports.resolveWaitedTaskId = resolveWaitedTaskId;
|
|
10
|
+
exports.verifyAfterWait = verifyAfterWait;
|
|
11
|
+
exports.mergeExitCode = mergeExitCode;
|
|
12
|
+
const types_1 = require("../types");
|
|
13
|
+
const api_client_1 = require("../utils/api-client");
|
|
14
|
+
const verify_runner_1 = require("../utils/verify-runner");
|
|
15
|
+
/** True when the caller asked for a verdict rather than "the agent stopped". */
|
|
16
|
+
function verifyRequested(options) {
|
|
17
|
+
return Boolean(options.verify || options.requireWork);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Whether this poll outcome should still be handed to the verification gates.
|
|
21
|
+
*
|
|
22
|
+
* A completion is the obvious case. NOT_STARTED joins it (Issue #1628) so the
|
|
23
|
+
* operator gets the gate results instead of a bare "no session": work committed
|
|
24
|
+
* by an agent whose session has since gone away is still worth reporting. The
|
|
25
|
+
* verdict is merged rather than substituted — mergeExitCode never lets a passing
|
|
26
|
+
* run overwrite NOT_STARTED, so "wait never saw this agent" survives to the exit
|
|
27
|
+
* code even when the gates are green.
|
|
28
|
+
*/
|
|
29
|
+
function shouldVerify(exitCode, options) {
|
|
30
|
+
if (!verifyRequested(options))
|
|
31
|
+
return false;
|
|
32
|
+
return exitCode === types_1.WaitExitCode.SUCCESS || exitCode === types_1.VerifyExitCode.NOT_STARTED;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Task statuses that mean "this wait is about that task".
|
|
36
|
+
*
|
|
37
|
+
* Mirrors ACTIVE_TASK_STATUSES in src/lib/db/tasks-db.ts. Deliberately narrower
|
|
38
|
+
* than the set the server will attach a run to: this is a guess made from a
|
|
39
|
+
* worktree id alone, and a task that had already finished before the wait began
|
|
40
|
+
* is a different delegation, not this one.
|
|
41
|
+
*/
|
|
42
|
+
const IN_FLIGHT_TASK_STATUSES = new Set([
|
|
43
|
+
'running',
|
|
44
|
+
'waiting_input',
|
|
45
|
+
'verifying',
|
|
46
|
+
]);
|
|
47
|
+
/**
|
|
48
|
+
* Read the task this wait is about, before waiting for it (Issue #1620).
|
|
49
|
+
*
|
|
50
|
+
* Timing is the whole point. Agents are asked to run the gates themselves
|
|
51
|
+
* before reporting completion, and doing so moves their task to a terminal
|
|
52
|
+
* status — after which a verification run started with only a worktree id has
|
|
53
|
+
* no contract to resolve, judges no scope, and still reports `passed`. Read
|
|
54
|
+
* while the task is still in flight, the id survives that transition and the
|
|
55
|
+
* run that follows is judged against the contract it was supposed to judge.
|
|
56
|
+
*
|
|
57
|
+
* Never throws: an unreadable ledger costs the attribution, and refusing to
|
|
58
|
+
* verify over it would cost every gate. The one exception is a client deadline
|
|
59
|
+
* (`--timeout`, Issue #3983), which is rethrown as the exit 124 it is.
|
|
60
|
+
*
|
|
61
|
+
* @returns the task id, or undefined to leave resolution to the server
|
|
62
|
+
*/
|
|
63
|
+
async function resolveWaitedTaskId(client, worktreeId) {
|
|
64
|
+
try {
|
|
65
|
+
const data = await client.get(`/api/worktrees/${worktreeId}/tasks?limit=1`);
|
|
66
|
+
const task = data?.tasks?.[0];
|
|
67
|
+
if (!task || !IN_FLIGHT_TASK_STATUSES.has(task.status))
|
|
68
|
+
return undefined;
|
|
69
|
+
return task.id;
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
// Issue #3983: `--timeout` ran out before the poll began — exit 124, and
|
|
73
|
+
// nothing after it (no poll, no verification) runs.
|
|
74
|
+
(0, api_client_1.rethrowIfDeadlineExceeded)(error);
|
|
75
|
+
console.error(`Note: could not read the task ledger for ${worktreeId} ` +
|
|
76
|
+
`(${error instanceof Error ? error.message : String(error)}); ` +
|
|
77
|
+
'verification will resolve its own task.');
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Run verification for one worktree after its completion was detected.
|
|
83
|
+
*
|
|
84
|
+
* Swallows ApiError into an exit code: with several worktrees in flight, one
|
|
85
|
+
* unreachable run must not abort the verdicts of the others.
|
|
86
|
+
*/
|
|
87
|
+
async function verifyAfterWait(client, worktreeId, options, taskId) {
|
|
88
|
+
// --verify runs every gate, and work-evidence is always part of "every gate",
|
|
89
|
+
// so combining it with --require-work is a superset rather than a conflict.
|
|
90
|
+
const gateIds = options.verify ? undefined : [verify_runner_1.WORK_EVIDENCE_GATE_ID];
|
|
91
|
+
try {
|
|
92
|
+
const outcome = await (0, verify_runner_1.runVerification)(client, {
|
|
93
|
+
worktreeId,
|
|
94
|
+
trigger: 'wait',
|
|
95
|
+
instanceId: options.instance,
|
|
96
|
+
taskId,
|
|
97
|
+
gateIds,
|
|
98
|
+
// stdout stays reserved for the prompt JSON contract.
|
|
99
|
+
resultStream: 'stderr',
|
|
100
|
+
});
|
|
101
|
+
return outcome.exitCode;
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
if (error instanceof api_client_1.ApiError) {
|
|
105
|
+
console.error(`Error: ${error.message}`);
|
|
106
|
+
return error.exitCode;
|
|
107
|
+
}
|
|
108
|
+
console.error(`Error: verification of ${worktreeId} failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
109
|
+
return types_1.ExitCode.UNEXPECTED_ERROR;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Fold one worktree's exit code into the aggregate.
|
|
114
|
+
*
|
|
115
|
+
* Ranked codes (see WAIT_EXIT_CODE_PRIORITY) beat unranked infrastructure
|
|
116
|
+
* codes, and among equals the first one observed stands.
|
|
117
|
+
*/
|
|
118
|
+
function mergeExitCode(current, candidate) {
|
|
119
|
+
if (candidate === types_1.WaitExitCode.SUCCESS)
|
|
120
|
+
return current;
|
|
121
|
+
if (current === types_1.WaitExitCode.SUCCESS)
|
|
122
|
+
return candidate;
|
|
123
|
+
const rank = (code) => {
|
|
124
|
+
const index = types_1.WAIT_EXIT_CODE_PRIORITY.indexOf(code);
|
|
125
|
+
return index === -1 ? Number.MAX_SAFE_INTEGER : index;
|
|
126
|
+
};
|
|
127
|
+
return rank(candidate) < rank(current) ? candidate : current;
|
|
128
|
+
}
|