commandmate 0.26.0 → 0.27.0
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 +431 -403
- package/.next/app-path-routes-manifest.json +26 -22
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +9 -9
- package/.next/react-loadable-manifest.json +6 -6
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +24 -0
- package/.next/server/app/_not-found/page_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.js +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/session/route.js +1 -1
- package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/start/route.js +1 -1
- package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/terminal/route.js +2 -2
- package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/tools/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 -0
- package/.next/server/app/api/capabilities/route.js.nft.json +1 -0
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -0
- 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.js +2 -2
- package/.next/server/app/api/fs/browse/route.js.nft.json +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.js +2 -2
- package/.next/server/app/api/fs/recent-paths/route.js.nft.json +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 +1 -1
- 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 +19 -1
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route.js +1 -1
- package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route.js +1 -1
- package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/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.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/validate-path/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/todos/route.js +1 -1
- package/.next/server/app/api/todos/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 -0
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -0
- 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.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +2 -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]/env/route.js +2 -0
- package/.next/server/app/api/worktrees/[id]/env/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -0
- 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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +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_client-reference-manifest.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_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_client-reference-manifest.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_client-reference-manifest.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_client-reference-manifest.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_client-reference-manifest.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_client-reference-manifest.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_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_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]/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 +1 -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_client-reference-manifest.js +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]/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]/resolve-target/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -0
- 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 -5
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -6
- package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +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 +3 -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 +1 -1
- 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]/start-polling/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/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 +1 -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 +3 -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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +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/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]/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/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/chat/page.js +2 -2
- package/.next/server/app/chat/page.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page.js +2 -2
- package/.next/server/app/login/page.js.nft.json +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.js +2 -2
- package/.next/server/app/more/page.js.nft.json +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.js +1 -1
- package/.next/server/app/page.js.nft.json +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.js +2 -2
- package/.next/server/app/repositories/page.js.nft.json +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.js.nft.json +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.js +2 -2
- package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page.js +2 -2
- package/.next/server/app/skills/installed/page.js.nft.json +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page.js +2 -2
- package/.next/server/app/skills/page.js.nft.json +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +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 +9 -7
- 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 +26 -22
- package/.next/server/chunks/1029.js +1 -1
- package/.next/server/chunks/1068.js +3 -1
- package/.next/server/chunks/1296.js +1 -1
- package/.next/server/chunks/1538.js +7 -0
- package/.next/server/chunks/1601.js +2 -2
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2404.js +3 -2
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2546.js +1 -1
- package/.next/server/chunks/2689.js +13 -0
- package/.next/server/chunks/2759.js +8 -0
- package/.next/server/chunks/2839.js +1 -0
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3292.js +1 -0
- package/.next/server/chunks/3417.js +1 -1
- package/.next/server/chunks/3480.js +1 -17
- package/.next/server/chunks/4393.js +1 -1
- package/.next/server/chunks/4423.js +1 -0
- package/.next/server/chunks/4444.js +22 -8
- package/.next/server/chunks/4565.js +3 -0
- package/.next/server/chunks/467.js +1 -0
- package/.next/server/chunks/4905.js +5 -0
- package/.next/server/chunks/5017.js +1 -0
- package/.next/server/chunks/5089.js +1 -0
- package/.next/server/chunks/5164.js +1 -1
- package/.next/server/chunks/5220.js +1 -0
- package/.next/server/chunks/5354.js +1 -0
- package/.next/server/chunks/552.js +19 -0
- package/.next/server/chunks/5571.js +1 -1
- package/.next/server/chunks/5998.js +3 -3
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6274.js +11 -11
- package/.next/server/chunks/6285.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/7472.js +1 -0
- package/.next/server/chunks/7506.js +1 -0
- package/.next/server/chunks/848.js +1 -1
- package/.next/server/chunks/8536.js +1 -1
- package/.next/server/chunks/880.js +1 -1
- package/.next/server/chunks/8807.js +5 -5
- package/.next/server/chunks/9067.js +1 -1
- package/.next/server/chunks/9284.js +1 -0
- package/.next/server/chunks/9358.js +1 -1
- package/.next/server/chunks/9508.js +1 -0
- package/.next/server/chunks/9938.js +1 -0
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{2053-dfac2d49227cc942.js → 2053-c0e931eb4391baa1.js} +1 -1
- package/.next/static/chunks/3361-5d6e93fba8a92bc1.js +1 -0
- package/.next/static/chunks/3922.0d2e64daf9f187da.js +1 -0
- package/.next/static/chunks/{5229-35f9acab97a553c5.js → 5229-1f5f19740a8d6c11.js} +1 -1
- package/.next/static/chunks/{6381-9303430933084b56.js → 6381-b7250e8ca7a44c6c.js} +1 -1
- package/.next/static/chunks/{8649-f551b0010dba4986.js → 8521-c43994fb58501d13.js} +1 -1
- package/.next/static/chunks/app/api/app/update/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/conversation/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/current-output/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/messages/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/session/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/start/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/terminal/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/tools/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/templates/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/todos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/chat/{page-439b35c9cb90dbe0.js → page-231df45127e876c2.js} +1 -1
- package/.next/static/chunks/app/login/{page-eefd515d8c37e5ee.js → page-adc51f0f7cbb7ac6.js} +1 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/more/{page-889b7546a8a553dc.js → page-3266dfa945972649.js} +1 -1
- package/.next/static/chunks/app/{page-a8d04ac0e3e4c9fc.js → page-0305431f43195431.js} +1 -1
- package/.next/static/chunks/app/proxy/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/repositories/{page-f3c4d8839b1ca203.js → page-ae8fa55749976f79.js} +1 -1
- package/.next/static/chunks/app/review/{page-6dc88649fe88ac16.js → page-8f63aff862fee421.js} +1 -1
- package/.next/static/chunks/app/sessions/{page-2c9ed9e969097688.js → page-4d5382b257077c14.js} +1 -1
- package/.next/static/chunks/app/skills/[skillId]/{page-19beef6121c4c982.js → page-aaf0bcb1dfb558b9.js} +1 -1
- package/.next/static/chunks/app/skills/installed/{page-d5b9cef6d21fabda.js → page-dafc486410e839b7.js} +1 -1
- package/.next/static/chunks/app/skills/{page-06ef637e07dd9377.js → page-9e3c91da31514893.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/files/[...path]/{page-5fed3984fafcd910.js → page-90f96977c741bbf8.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-e4f28966b4fc0ce1.js +1 -0
- package/.next/static/chunks/{webpack-9d892a9ff07c289d.js → webpack-6a9668cf54a26eba.js} +1 -1
- package/.next/static/css/928e5a8830fbf997.css +1 -0
- package/.next/static/t0BoV4H46ZgKmTjSi7GIz/_buildManifest.js +1 -0
- package/.next/trace +13 -12
- package/.next/types/app/api/capabilities/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/clear-composer/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/env/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/resolve-target/route.ts +347 -0
- package/.next/types/routes.d.ts +5 -1
- package/.next/types/validator.ts +36 -0
- package/dist/cli/commands/auto-yes.d.ts.map +1 -1
- package/dist/cli/commands/auto-yes.js +40 -2
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +28 -13
- package/dist/cli/commands/instances.d.ts +30 -18
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +32 -36
- package/dist/cli/commands/ls.d.ts.map +1 -1
- package/dist/cli/commands/ls.js +73 -1
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +18 -1
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +21 -15
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +38 -0
- package/dist/cli/commands/wait.d.ts +26 -0
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +390 -43
- package/dist/cli/config/cli-dependencies.d.ts.map +1 -1
- package/dist/cli/config/cli-dependencies.js +16 -0
- package/dist/cli/config/cli-tool-ids.d.ts +11 -0
- package/dist/cli/config/cli-tool-ids.d.ts.map +1 -1
- package/dist/cli/config/cli-tool-ids.js +12 -1
- package/dist/cli/types/api-responses.d.ts +443 -2
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/utils/api-client.d.ts +18 -0
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +22 -0
- package/dist/cli/utils/server-capabilities.d.ts +56 -0
- package/dist/cli/utils/server-capabilities.d.ts.map +1 -0
- package/dist/cli/utils/server-capabilities.js +166 -0
- package/dist/cli/utils/session-target.d.ts +70 -0
- package/dist/cli/utils/session-target.d.ts.map +1 -0
- package/dist/cli/utils/session-target.js +118 -0
- package/dist/lib/cli-tools/copilot-executable.d.ts +79 -0
- package/dist/lib/cli-tools/copilot-executable.d.ts.map +1 -0
- package/dist/lib/cli-tools/copilot-executable.js +155 -0
- package/dist/lib/cli-tools/types.d.ts +61 -0
- package/dist/lib/cli-tools/types.d.ts.map +1 -1
- package/dist/lib/cli-tools/types.js +41 -0
- package/dist/lib/detection/ansi.d.ts +2 -1
- package/dist/lib/detection/ansi.d.ts.map +1 -1
- package/dist/lib/detection/ansi.js +3 -2
- package/dist/lib/detection/tools/verified-against.d.ts +84 -0
- package/dist/lib/detection/tools/verified-against.d.ts.map +1 -0
- package/dist/lib/detection/tools/verified-against.js +88 -0
- package/dist/lib/detection/version-probes.d.ts +207 -0
- package/dist/lib/detection/version-probes.d.ts.map +1 -0
- package/dist/lib/detection/version-probes.js +290 -0
- package/dist/lib/security/env-sanitizer.d.ts +198 -0
- package/dist/lib/security/env-sanitizer.d.ts.map +1 -0
- package/dist/lib/security/env-sanitizer.js +232 -0
- package/dist/server/locales/en/notifications.json +17 -6
- package/dist/server/locales/ja/notifications.json +17 -6
- package/dist/server/src/config/activity-bar-config.js +4 -0
- package/dist/server/src/config/cli-tool-timing-config.js +59 -2
- package/dist/server/src/config/copilot-constants.js +11 -1
- package/dist/server/src/config/detection-evidence-config.js +129 -0
- package/dist/server/src/config/schedule-config.js +56 -7
- package/dist/server/src/config/tmux-pane-config.js +18 -1
- package/dist/server/src/lib/auto-yes-poller.js +36 -0
- package/dist/server/src/lib/cli-tools/antigravity.js +4 -2
- package/dist/server/src/lib/cli-tools/base.js +131 -10
- package/dist/server/src/lib/cli-tools/capture-spec.js +56 -0
- package/dist/server/src/lib/cli-tools/claude.js +1 -1
- package/dist/server/src/lib/cli-tools/codex.js +6 -2
- package/dist/server/src/lib/cli-tools/composer-spec.js +96 -0
- package/dist/server/src/lib/cli-tools/copilot-executable.js +155 -0
- package/dist/server/src/lib/cli-tools/copilot.js +307 -81
- package/dist/server/src/lib/cli-tools/gemini.js +8 -6
- package/dist/server/src/lib/cli-tools/graceful-exit.js +181 -0
- package/dist/server/src/lib/cli-tools/index.js +11 -1
- package/dist/server/src/lib/cli-tools/manager.js +56 -4
- package/dist/server/src/lib/cli-tools/opencode-config.js +195 -24
- package/dist/server/src/lib/cli-tools/opencode.js +233 -30
- package/dist/server/src/lib/cli-tools/session-name.js +57 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender.js +213 -30
- package/dist/server/src/lib/cli-tools/types.js +41 -0
- package/dist/server/src/lib/cli-tools/vibe-local.js +7 -3
- package/dist/server/src/lib/cmate-cli-tool-parser.js +29 -1
- package/dist/server/src/lib/cmate-parser.js +12 -4
- package/dist/server/src/lib/db/db.js +5 -1
- package/dist/server/src/lib/db/migrations/v41-push-subscriptions.js +11 -0
- package/dist/server/src/lib/db/push-subscriptions-db.js +60 -3
- package/dist/server/src/lib/detection/ansi.js +3 -2
- package/dist/server/src/lib/detection/cli-patterns.js +901 -67
- package/dist/server/src/lib/detection/composer-text.js +455 -0
- package/dist/server/src/lib/detection/idle-evidence-observation.js +51 -0
- package/dist/server/src/lib/detection/model-info-extractor.js +195 -4
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +19 -0
- package/dist/server/src/lib/detection/status-detector.js +76 -675
- package/dist/server/src/lib/detection/status-reason.js +57 -0
- package/dist/server/src/lib/detection/tools/antigravity/detect.js +75 -0
- package/dist/server/src/lib/detection/tools/claude/detect.js +144 -0
- package/dist/server/src/lib/detection/tools/claude/patterns.js +98 -0
- package/dist/server/src/lib/detection/tools/claude/prompt.js +124 -0
- package/dist/server/src/lib/detection/tools/codex/detect.js +343 -0
- package/dist/server/src/lib/detection/tools/codex/prompt.js +104 -0
- package/dist/server/src/lib/detection/tools/copilot/detect.js +185 -0
- package/dist/server/src/lib/detection/tools/copilot/prompt.js +89 -0
- package/dist/server/src/lib/detection/tools/dialog-block.js +159 -0
- package/dist/server/src/lib/detection/tools/frame.js +47 -0
- package/dist/server/src/lib/detection/tools/opencode/detect.js +242 -0
- package/dist/server/src/lib/detection/tools/opencode/prompt.js +85 -0
- package/dist/server/src/lib/detection/tools/registry.js +58 -0
- package/dist/server/src/lib/detection/tools/run-detection.js +202 -0
- package/dist/server/src/lib/detection/tools/types.js +34 -0
- package/dist/server/src/lib/detection/tools/verified-against.js +88 -0
- package/dist/server/src/lib/hooks/agent-event-types.js +19 -1
- package/dist/server/src/lib/hooks/permission-adjudication.js +160 -0
- package/dist/server/src/lib/hooks/permission-decision-service.js +81 -14
- package/dist/server/src/lib/hooks/permission-decision-state.js +62 -0
- package/dist/server/src/lib/hooks/permission-request-payload.js +18 -1
- package/dist/server/src/lib/hooks/sources/antigravity/source.js +10 -0
- package/dist/server/src/lib/hooks/sources/claude/source.js +20 -0
- package/dist/server/src/lib/hooks/sources/codex/source.js +10 -0
- package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +403 -50
- package/dist/server/src/lib/hooks/sources/copilot/source.js +40 -4
- package/dist/server/src/lib/hooks/sources/define-source.js +23 -1
- package/dist/server/src/lib/hooks/sources/event-mapper.js +29 -1
- package/dist/server/src/lib/hooks/sources/gemini/source.js +10 -0
- package/dist/server/src/lib/hooks/sources/index.js +3 -1
- package/dist/server/src/lib/hooks/sources/launch-command.js +96 -1
- package/dist/server/src/lib/hooks/sources/legacy-relay.js +12 -0
- package/dist/server/src/lib/hooks/sources/opencode/client.js +295 -32
- package/dist/server/src/lib/hooks/sources/opencode/ingest.js +120 -42
- package/dist/server/src/lib/hooks/sources/opencode/mappers.js +95 -3
- package/dist/server/src/lib/hooks/sources/opencode/ports.js +70 -9
- package/dist/server/src/lib/hooks/sources/opencode/runtime.js +62 -4
- package/dist/server/src/lib/hooks/sources/opencode/source.js +54 -3
- package/dist/server/src/lib/hooks/sources/opencode/subscription.js +254 -26
- package/dist/server/src/lib/hooks/sources/opencode/turn-gate.js +119 -4
- package/dist/server/src/lib/hooks/sources/pending-decisions.js +40 -2
- package/dist/server/src/lib/hooks/tool-input-normalization-state.js +67 -0
- package/dist/server/src/lib/hooks/tool-input-normalization.js +157 -0
- package/dist/server/src/lib/job-executor.js +16 -4
- package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +184 -0
- package/dist/server/src/lib/polling/response-checker.js +243 -26
- package/dist/server/src/lib/push/failure-episode-state.js +127 -0
- package/dist/server/src/lib/push/failure-push-notifier.js +344 -0
- package/dist/server/src/lib/push/index.js +35 -1
- package/dist/server/src/lib/push/prompt-card-state.js +93 -0
- package/dist/server/src/lib/push/prompt-push-gate.js +130 -0
- package/dist/server/src/lib/push/push-sender.js +82 -7
- package/dist/server/src/lib/push/resolution-push-notifier.js +193 -0
- package/dist/server/src/lib/push/waiting-push-notifier.js +42 -0
- package/dist/server/src/lib/response-cleaner.js +93 -20
- package/dist/server/src/lib/response-extractor.js +98 -5
- package/dist/server/src/lib/security/env-sanitizer.js +179 -5
- package/dist/server/src/lib/session/agent-event-state.js +1038 -189
- package/dist/server/src/lib/session/agent-session-lifecycle.js +8 -0
- package/dist/server/src/lib/session/claude-executor.js +23 -3
- package/dist/server/src/lib/session/claude-session.js +11 -1
- package/dist/server/src/lib/session/composer-clear.js +95 -0
- package/dist/server/src/lib/session/current-output-builder.js +267 -25
- package/dist/server/src/lib/session/provisional-turn.js +310 -0
- package/dist/server/src/lib/session/resolve-session-target.js +156 -0
- package/dist/server/src/lib/session/send-user-message.js +14 -18
- package/dist/server/src/lib/session/session-start-error.js +53 -1
- package/dist/server/src/lib/session/status-evidence.js +217 -0
- package/dist/server/src/lib/session/structured-prompt.js +46 -4
- package/dist/server/src/lib/session/waiting-episode-state.js +24 -0
- package/dist/server/src/lib/tmux/key-sequence.js +120 -0
- package/dist/server/src/lib/tmux/tmux.js +91 -19
- package/dist/server/src/lib/tui-accumulator.js +68 -1
- package/dist/server/src/lib/verification/gate-runner.js +84 -1
- package/dist/server/src/lib/ws-server.js +8 -5
- package/dist/server/src/types/cli-tool-contracts.js +75 -0
- package/dist/server/src/types/terminal-keys.js +37 -0
- package/dist/types/cli-tool-contracts.d.ts +235 -0
- package/dist/types/cli-tool-contracts.d.ts.map +1 -0
- package/dist/types/cli-tool-contracts.js +75 -0
- package/package.json +3 -2
- package/public/sw.js +65 -2
- package/.next/server/chunks/1841.js +0 -1
- package/.next/server/chunks/233.js +0 -1
- package/.next/server/chunks/3022.js +0 -1
- package/.next/server/chunks/3270.js +0 -1
- package/.next/server/chunks/4455.js +0 -1
- package/.next/server/chunks/5959.js +0 -27
- package/.next/server/chunks/7458.js +0 -6
- package/.next/server/chunks/8730.js +0 -1
- package/.next/server/chunks/9058.js +0 -1
- package/.next/server/chunks/9687.js +0 -3
- package/.next/static/chunks/3898-ef488bfa804507d9.js +0 -1
- package/.next/static/chunks/9263.f2034ec525abcf72.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/conversation/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/current-output/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/messages/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/session/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/start/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/terminal/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/tools/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/templates/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/todos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-fbdf4621a2911ac1.js +0 -1
- package/.next/static/css/e865c4979a41aa03.css +0 -1
- package/.next/static/hNdNiFes2xLls68SWhAU9/_buildManifest.js +0 -1
- /package/.next/static/{hNdNiFes2xLls68SWhAU9 → t0BoV4H46ZgKmTjSi7GIz}/_ssgManifest.js +0 -0
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
* Infrastructure errors use ExitCode (1, 2, 99)
|
|
21
21
|
*/
|
|
22
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.TURN_OPENING_EVENT_TYPES = void 0;
|
|
23
24
|
exports.createWaitCommand = createWaitCommand;
|
|
24
25
|
const commander_1 = require("commander");
|
|
25
26
|
const types_1 = require("../types");
|
|
@@ -83,8 +84,17 @@ const COMPLETION_BASIS = {
|
|
|
83
84
|
* ran nothing at all, because the composer had been idle for a minute. Reading
|
|
84
85
|
* it as a turn boundary would have re-created the false completion this gate
|
|
85
86
|
* exists to stop, one minute later. Only `Stop` ends a turn.
|
|
87
|
+
*
|
|
88
|
+
* Exported for the cross-layer pin in
|
|
89
|
+
* `tests/unit/session/status-contract-1926.test.ts`. The server opens a turn on
|
|
90
|
+
* the same three events (`src/lib/session/provisional-turn.ts`
|
|
91
|
+
* TURN_ACTIVITY_EVENTS), and since Issue #1930 `adoptTurnStart` reads that
|
|
92
|
+
* turn's `openedAt` rather than this set — so a set that drifted would change
|
|
93
|
+
* this gate silently. The set is still read here for the pre-#1930 fallback
|
|
94
|
+
* path, and the CLI cannot import the server module (`tsconfig.cli.json` sets
|
|
95
|
+
* `"paths": {}`), so the test is the only thing holding the two together.
|
|
86
96
|
*/
|
|
87
|
-
|
|
97
|
+
exports.TURN_OPENING_EVENT_TYPES = new Set([
|
|
88
98
|
'user_prompt_submit',
|
|
89
99
|
'pre_tool_use',
|
|
90
100
|
'post_tool_use',
|
|
@@ -98,14 +108,16 @@ const TURN_OPENING_EVENT_TYPES = new Set([
|
|
|
98
108
|
* after `wait` is already polling (measured at +0.6 s from the send). One poll
|
|
99
109
|
* interval of slack covers a `wait` that starts a moment late.
|
|
100
110
|
*
|
|
101
|
-
* The bound is what keeps this from being a new way to hang
|
|
102
|
-
*
|
|
103
|
-
* fenced by generation on the way into `structuredEvents
|
|
104
|
-
* `user_prompt_submit` from a previous agent process
|
|
105
|
-
* on the wire
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
111
|
+
* The bound is what keeps this from being a new way to hang, and Issue #1930
|
|
112
|
+
* narrowed what it has to defend against. It was written when structured events
|
|
113
|
+
* were NOT fenced by generation on the way into `structuredEvents`, so a stale
|
|
114
|
+
* `user_prompt_submit` from a previous agent process could still be the last
|
|
115
|
+
* event on the wire and this window was the only thing stopping it from gating
|
|
116
|
+
* a wait for ever. The server fences the turn now and publishes null when it
|
|
117
|
+
* does, so the window's remaining job is narrower and sharper: a turn that has
|
|
118
|
+
* already CLOSED must have closed inside this wait to count, or `wait` on a
|
|
119
|
+
* session that finished an hour ago would inherit that turn's gate. An open
|
|
120
|
+
* turn is adopted whatever its age — see {@link adoptTurnStart}.
|
|
109
121
|
*/
|
|
110
122
|
const TURN_ADOPTION_GRACE_MS = POLL_INTERVAL_MS;
|
|
111
123
|
/**
|
|
@@ -174,6 +186,11 @@ const SUPPRESSION_CAUSE = {
|
|
|
174
186
|
'deny-pattern-unusable': CONTRACT_POLICY_CAUSE,
|
|
175
187
|
'type-not-allowed': CONTRACT_POLICY_CAUSE,
|
|
176
188
|
'agent-launch-dialog': "while the agent's launch dialog was on screen",
|
|
189
|
+
// Issue #1924. Deliberately not "by contract policy": no contract was
|
|
190
|
+
// consulted. The frame looked like a numbered list to the generic estimator
|
|
191
|
+
// and like prose to the tool's own detector, and an operator who reads this
|
|
192
|
+
// should go and look at the pane rather than at `denyPatterns`.
|
|
193
|
+
'unclassified-frame': 'because no tool-specific dialog detector recognised the frame',
|
|
177
194
|
};
|
|
178
195
|
/**
|
|
179
196
|
* {@link SUPPRESSION_CAUSE} for a reason that arrived over the wire.
|
|
@@ -214,20 +231,102 @@ function formatSuppressionNotice(suppression, ageSeconds) {
|
|
|
214
231
|
return ` auto-yes suppressed this prompt ${cause}: ${parts.join(' ')} (${ageSeconds}s ago)`;
|
|
215
232
|
}
|
|
216
233
|
/**
|
|
217
|
-
*
|
|
234
|
+
* Whether this server publishes a real turn record (Issue #1930).
|
|
235
|
+
*
|
|
236
|
+
* `dialogPendingMaxMs` landed with the turn model and is set on every payload a
|
|
237
|
+
* server of that vintage produces, so its presence is the version probe. A
|
|
238
|
+
* *value* rather than a version string, for the reason #1924 gives for the
|
|
239
|
+
* capability block: a payload that has to be interpreted by its sender's
|
|
240
|
+
* version number is a payload nobody can read forward.
|
|
241
|
+
*
|
|
242
|
+
* The probe is needed because the two readings below disagree in exactly the
|
|
243
|
+
* case that matters. On a #1930 server, `openedAt` being null while
|
|
244
|
+
* `lastEventType` is `user_prompt_submit` means the turn was fenced off by a
|
|
245
|
+
* generation or aged out — the server has *decided* it is not this instance's
|
|
246
|
+
* turn. Falling back to the event on such a payload would put back the stale
|
|
247
|
+
* adoption the turn record exists to remove.
|
|
248
|
+
*/
|
|
249
|
+
function publishesTurnRecord(data) {
|
|
250
|
+
return data.structuredEvents?.dialogPendingMaxMs != null;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Adopt the turn this wait is about, if this poll shows one (Issue #1839,
|
|
254
|
+
* moved onto the turn record in #1930).
|
|
255
|
+
*
|
|
256
|
+
* ## What changed, and why the grace window is no longer the whole guard
|
|
257
|
+
*
|
|
258
|
+
* Before #1930 this read `lastEventType` / `lastEventAt` — the newest event of
|
|
259
|
+
* any kind — and refused anything older than {@link TURN_ADOPTION_GRACE_MS},
|
|
260
|
+
* because (in the words of that constant) structured events "are NOT fenced by
|
|
261
|
+
* generation on the way into `structuredEvents`", so a stale
|
|
262
|
+
* `user_prompt_submit` from a previous agent process could still be the last
|
|
263
|
+
* event on the wire. The bound was the only thing keeping such a record from
|
|
264
|
+
* gating a wait for ever.
|
|
265
|
+
*
|
|
266
|
+
* The server fences the turn now, and publishes null when it does. So an **open**
|
|
267
|
+
* turn is adopted whatever its age — which closes a hole the old reading had:
|
|
268
|
+
* a turn that opened ten minutes before this `wait` started, and is still
|
|
269
|
+
* running, used to be adopted only because its *newest* event was fresh. An
|
|
270
|
+
* agent that goes quiet mid-turn (thinking, a long tool call) has no fresh
|
|
271
|
+
* event, so the #1839 gate came down at exactly the moment a 529 storm would
|
|
272
|
+
* exploit it.
|
|
273
|
+
*
|
|
274
|
+
* A **closed** turn still has to have opened inside this wait's window, and the
|
|
275
|
+
* reason is the one the grace constant gives: `wait` does not know when `send`
|
|
276
|
+
* ran, so the last turn of a session that finished an hour ago must not gate a
|
|
277
|
+
* wait that has only just started. `commandmate wait` on an already-idle
|
|
278
|
+
* session therefore adopts nothing and completes on its first poll, exactly as
|
|
279
|
+
* it did before — #1975 measured that at 234/242/259 ms and it is the
|
|
280
|
+
* orchestrator's normal path.
|
|
218
281
|
*
|
|
219
282
|
* @param previous - the turn start adopted so far, or null
|
|
220
283
|
* @returns the newest adopted turn start, or `previous` when nothing qualified
|
|
221
284
|
*/
|
|
222
285
|
function adoptTurnStart(data, waitStartedAt, previous) {
|
|
223
286
|
const events = data.structuredEvents;
|
|
224
|
-
if (!events
|
|
287
|
+
if (!events)
|
|
225
288
|
return previous;
|
|
226
|
-
if (!
|
|
289
|
+
if (!publishesTurnRecord(data)) {
|
|
290
|
+
// A server older than #1930. Same reading this function has had since
|
|
291
|
+
// #1839, kept so a newer CLI pointed at an older server does not silently
|
|
292
|
+
// lose the gate.
|
|
293
|
+
if (events.lastEventAt == null || events.lastEventType == null)
|
|
294
|
+
return previous;
|
|
295
|
+
if (!exports.TURN_OPENING_EVENT_TYPES.has(events.lastEventType))
|
|
296
|
+
return previous;
|
|
297
|
+
if (events.lastEventAt < waitStartedAt - TURN_ADOPTION_GRACE_MS)
|
|
298
|
+
return previous;
|
|
299
|
+
return previous === null || events.lastEventAt > previous ? events.lastEventAt : previous;
|
|
300
|
+
}
|
|
301
|
+
const openedAt = events.openedAt;
|
|
302
|
+
// Null covers every "there is no turn to adopt" case the server knows about:
|
|
303
|
+
// nothing reported, a previous generation, aged out, or a `stop` whose
|
|
304
|
+
// opening was never observed.
|
|
305
|
+
if (openedAt == null)
|
|
227
306
|
return previous;
|
|
228
|
-
if (events.
|
|
307
|
+
if (events.closedAt != null && openedAt < waitStartedAt - TURN_ADOPTION_GRACE_MS) {
|
|
229
308
|
return previous;
|
|
230
|
-
|
|
309
|
+
}
|
|
310
|
+
return previous === null || openedAt > previous ? openedAt : previous;
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* `structuredEvents.closedBy`, phrased for a diagnostic line (Issue #1930).
|
|
314
|
+
*
|
|
315
|
+
* The server's close-reason vocabulary and {@link COMPLETION_BASIS} answer two
|
|
316
|
+
* different questions — "why did the turn end" and "what did `wait` decide on"
|
|
317
|
+
* — and are deliberately printed side by side rather than folded together.
|
|
318
|
+
* `hook_stop` is the only place they meet: it is `closedBy: 'stop'` seen from
|
|
319
|
+
* the CLI's end. Everything else (`stale`, `scraper_evidence`, `session_end`,
|
|
320
|
+
* `generation`, `resync_idle`) is a reason the turn stopped being trusted, which
|
|
321
|
+
* is precisely what `wait` must NOT read as completion.
|
|
322
|
+
*/
|
|
323
|
+
function describeTurnClose(data) {
|
|
324
|
+
const events = data.structuredEvents;
|
|
325
|
+
if (!events)
|
|
326
|
+
return 'turn=unknown';
|
|
327
|
+
const id = events.turnId ?? 'none';
|
|
328
|
+
const closedBy = events.closedBy ?? (events.openedAt != null ? 'open' : 'none');
|
|
329
|
+
return `turn=${id} closedBy=${closedBy}`;
|
|
231
330
|
}
|
|
232
331
|
/**
|
|
233
332
|
* Whether the agent has reported the end of the turn this wait adopted
|
|
@@ -243,6 +342,137 @@ function turnSettled(data, turnStartedAt) {
|
|
|
243
342
|
const stoppedAt = data.lastStopEventAt;
|
|
244
343
|
return stoppedAt != null && stoppedAt >= turnStartedAt;
|
|
245
344
|
}
|
|
345
|
+
/**
|
|
346
|
+
* The structured event that ends a turn (Issue #1975).
|
|
347
|
+
*
|
|
348
|
+
* The counterpart of {@link TURN_OPENING_EVENT_TYPES}, kept as a bare constant
|
|
349
|
+
* because the vocabulary a source declares in `capabilities.supportedEvents` is
|
|
350
|
+
* the wire's, not this build's: a tool that cannot say `stop` cannot release the
|
|
351
|
+
* hold below, so asking for the word by name is the whole of the check.
|
|
352
|
+
*/
|
|
353
|
+
const TURN_CLOSING_EVENT_TYPE = 'stop';
|
|
354
|
+
/**
|
|
355
|
+
* How long `wait` will hold a composer frame open for an agent that has been
|
|
356
|
+
* handed a prompt it has not reported the end of (Issue #1975).
|
|
357
|
+
*
|
|
358
|
+
* The hold's *reason* is exact — see {@link outstandingPrompt} — so this is not
|
|
359
|
+
* a settling window standing in for evidence. It is the bound the contract of
|
|
360
|
+
* this Issue asks for: hooks are fail-open on every path, so a `Stop` that is
|
|
361
|
+
* simply lost (the receiver was restarted, the machine-wide
|
|
362
|
+
* `~/.copilot/settings.json` was rewritten by another server mid-session, the
|
|
363
|
+
* 4-second curl in the hook timed out) must not turn `wait` into a command that
|
|
364
|
+
* never returns. After this it completes on the frame alone, exactly as it did
|
|
365
|
+
* before this Issue, and says so.
|
|
366
|
+
*
|
|
367
|
+
* 60s is the same dwell {@link UNCLASSIFIED_DWELL_MS} uses for the same job, and
|
|
368
|
+
* it is ~55x the widest send-to-turn-open window measured for this Issue
|
|
369
|
+
* (2026-08-22, copilot 1.0.80 against an isolated server: 0.04s / 0.75s / 0.88s
|
|
370
|
+
* / 1.10s over four sends, the last of them a cold session start). `--timeout`
|
|
371
|
+
* and `--stall-timeout` below 60s still win, as they do for the unclassified
|
|
372
|
+
* dwell: this pre-empts long waits, it does not extend short ones.
|
|
373
|
+
*/
|
|
374
|
+
const PENDING_PROMPT_HOLD_MS = 60_000;
|
|
375
|
+
/**
|
|
376
|
+
* Whether this tool's event source claims it can report both ends of a turn
|
|
377
|
+
* (Issue #1975).
|
|
378
|
+
*
|
|
379
|
+
* The gate that keeps the hold below off every path it has no evidence for.
|
|
380
|
+
* `structuredEvents.source.capabilities` is #1924's declaration, published to
|
|
381
|
+
* the CLI already, and the compatibility source a tool with no implementation
|
|
382
|
+
* gets (`src/lib/hooks/sources/legacy-relay.ts`) declares `supportedEvents: []`
|
|
383
|
+
* — so a tool that posts no hooks answers `false` here and takes precisely the
|
|
384
|
+
* pre-#1975 path. So does a server older than #1924, which sends no `source` at
|
|
385
|
+
* all.
|
|
386
|
+
*
|
|
387
|
+
* Both words are required. Without a turn-opening word nothing would ever open
|
|
388
|
+
* the turn this waits for; without `stop` nothing could ever close it, and the
|
|
389
|
+
* hold would only ever end at its own bound.
|
|
390
|
+
*/
|
|
391
|
+
function reportsTurnBoundaries(data) {
|
|
392
|
+
const declared = data.structuredEvents?.source?.capabilities?.supportedEvents;
|
|
393
|
+
if (!Array.isArray(declared))
|
|
394
|
+
return false;
|
|
395
|
+
return (declared.includes(TURN_CLOSING_EVENT_TYPE) &&
|
|
396
|
+
declared.some(event => exports.TURN_OPENING_EVENT_TYPES.has(event)));
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* When this (worktree, instance) was last handed a prompt (Issue #1975).
|
|
400
|
+
*
|
|
401
|
+
* `limit=1&unit=pairs` is "every row at or after the newest user message"
|
|
402
|
+
* (src/lib/db/chat-db.ts), which is the smallest query that is *guaranteed* to
|
|
403
|
+
* contain that message: plain `limit=1` returns the newest row of either role,
|
|
404
|
+
* and for a turn the agent has already answered that row is the assistant's.
|
|
405
|
+
*
|
|
406
|
+
* Scoped the same way the poll above is: `--instance` when the caller named one,
|
|
407
|
+
* otherwise the `cliToolId` the server resolved for that same poll. Asking
|
|
408
|
+
* unscoped would let a message sent to claude decide a wait on codex.
|
|
409
|
+
*
|
|
410
|
+
* Never throws. An unreadable ledger is not evidence that nothing was sent, so
|
|
411
|
+
* it is reported as such rather than as "nothing was sent" — the call site
|
|
412
|
+
* degrades to the pre-#1975 behaviour instead of holding on a guess.
|
|
413
|
+
*/
|
|
414
|
+
async function readNewestPromptAt(client, worktreeId, options, data) {
|
|
415
|
+
const query = new URLSearchParams({ limit: '1', unit: 'pairs' });
|
|
416
|
+
if (options.instance)
|
|
417
|
+
query.set('instance', options.instance);
|
|
418
|
+
else if (data.cliToolId)
|
|
419
|
+
query.set('cliTool', data.cliToolId);
|
|
420
|
+
try {
|
|
421
|
+
const rows = await client.get(`/api/worktrees/${worktreeId}/messages?${query.toString()}`);
|
|
422
|
+
let newest = null;
|
|
423
|
+
for (const row of rows ?? []) {
|
|
424
|
+
if (row.role !== 'user')
|
|
425
|
+
continue;
|
|
426
|
+
// ISO string on the wire (a JSON-serialized Date), so this is the only
|
|
427
|
+
// place the two clocks meet — and both sides of the comparison below are
|
|
428
|
+
// stamped by the server, so no CLI/server skew enters the verdict.
|
|
429
|
+
const at = Date.parse(row.timestamp);
|
|
430
|
+
if (Number.isNaN(at))
|
|
431
|
+
continue;
|
|
432
|
+
if (newest === null || at > newest)
|
|
433
|
+
newest = at;
|
|
434
|
+
}
|
|
435
|
+
return { readable: true, submittedAt: newest };
|
|
436
|
+
}
|
|
437
|
+
catch (error) {
|
|
438
|
+
console.error(`Note: could not read the message ledger for ${worktreeId} ` +
|
|
439
|
+
`(${error instanceof Error ? error.message : String(error)}); ` +
|
|
440
|
+
'completion will be judged from the frame alone.');
|
|
441
|
+
return { readable: false };
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* Whether the newest prompt this instance was handed is still unanswered
|
|
446
|
+
* (Issue #1975).
|
|
447
|
+
*
|
|
448
|
+
* This is the distinction the whole Issue turns on, and it is a comparison of
|
|
449
|
+
* two server-stamped facts rather than a timer:
|
|
450
|
+
*
|
|
451
|
+
* - **idle before this wait began** — the agent's `Stop` postdates the newest
|
|
452
|
+
* prompt. Nothing is outstanding; `wait` completes on the first poll exactly
|
|
453
|
+
* as it always has. An orchestrator waiting on a session that finished long
|
|
454
|
+
* ago pays nothing.
|
|
455
|
+
* - **`send` a moment ago** — the newest prompt postdates the last `Stop`
|
|
456
|
+
* (or there has never been one). The agent has been given work and has not
|
|
457
|
+
* reported finishing it, so a composer frame is "it has not started yet",
|
|
458
|
+
* not "it is done".
|
|
459
|
+
*
|
|
460
|
+
* `wait` could not tell these apart before, because from `current-output` alone
|
|
461
|
+
* they are the same payload: in both, the last thing the agent said was the
|
|
462
|
+
* previous turn's `stop`, and `adoptTurnStart` adopts nothing. Measured against
|
|
463
|
+
* copilot 1.0.80 on 2026-08-22, the window in which that is true after a send is
|
|
464
|
+
* ~1s wide, and `wait`'s first poll is immediate — which is why the false
|
|
465
|
+
* completions came back in 0.3s with `basis=scraper_ready`, 3 times in 5.
|
|
466
|
+
*
|
|
467
|
+
* The fast-turn case falls out of the same comparison rather than needing a rule
|
|
468
|
+
* of its own: a turn that opens and closes between two polls leaves
|
|
469
|
+
* `lastEventType: 'stop'` (so no turn is adopted) but a `stop` that postdates
|
|
470
|
+
* the prompt — answered, and completed on the spot.
|
|
471
|
+
*/
|
|
472
|
+
function outstandingPrompt(data, submittedAt) {
|
|
473
|
+
const stoppedAt = data.lastStopEventAt;
|
|
474
|
+
return stoppedAt == null || stoppedAt < submittedAt;
|
|
475
|
+
}
|
|
246
476
|
/**
|
|
247
477
|
* Poll a single worktree until completion, prompt, or timeout.
|
|
248
478
|
*/
|
|
@@ -270,6 +500,13 @@ async function pollWorktree(client, worktreeId, options) {
|
|
|
270
500
|
* reported none (Issue #1839). See {@link adoptTurnStart}.
|
|
271
501
|
*/
|
|
272
502
|
let turnStartedAt = null;
|
|
503
|
+
/**
|
|
504
|
+
* Whether the chat ledger is still worth asking (Issue #1975). Cleared by the
|
|
505
|
+
* first read that fails, after which this wait judges completion from the
|
|
506
|
+
* frame alone — the pre-#1975 behaviour — rather than re-reporting the same
|
|
507
|
+
* unreachable endpoint on every poll.
|
|
508
|
+
*/
|
|
509
|
+
let promptLedgerReadable = true;
|
|
273
510
|
while (true) {
|
|
274
511
|
// Check timeout
|
|
275
512
|
if (options.timeout) {
|
|
@@ -322,12 +559,23 @@ async function pollWorktree(client, worktreeId, options) {
|
|
|
322
559
|
continue;
|
|
323
560
|
}
|
|
324
561
|
// Default (agent mode): output prompt info and exit 10
|
|
562
|
+
//
|
|
563
|
+
// Issue #1898: the degraded `unclassified` payload carries no `options`
|
|
564
|
+
// — by construction, because nothing parsed the screen — but for a
|
|
565
|
+
// source whose approvals are answered by decision id it does carry
|
|
566
|
+
// `decisionOptions`, which ARE answerable (`respond <id> 1`). Reporting
|
|
567
|
+
// an empty list there told the caller a dialog was open and gave it
|
|
568
|
+
// nothing to do about it, which is the whole of #1898-3 seen from the
|
|
569
|
+
// pipeline's side.
|
|
570
|
+
const promptOptions = data.promptData.options?.length
|
|
571
|
+
? data.promptData.options
|
|
572
|
+
: (data.promptData.decisionOptions ?? []);
|
|
325
573
|
const promptOutput = {
|
|
326
574
|
worktreeId,
|
|
327
575
|
cliToolId: data.cliToolId || 'claude',
|
|
328
576
|
type: data.promptData.type || 'unknown',
|
|
329
577
|
question: data.promptData.question || '',
|
|
330
|
-
options:
|
|
578
|
+
options: promptOptions,
|
|
331
579
|
status: data.promptData.status || 'pending',
|
|
332
580
|
...(data.promptData.approvalTarget !== undefined && {
|
|
333
581
|
approvalTarget: data.promptData.approvalTarget,
|
|
@@ -385,30 +633,35 @@ async function pollWorktree(client, worktreeId, options) {
|
|
|
385
633
|
// to burn its whole --timeout without ever mentioning it. Treat a
|
|
386
634
|
// PERSISTENT unclassified frame as a stop reason of its own.
|
|
387
635
|
//
|
|
388
|
-
// The dwell deliberately spans
|
|
389
|
-
// completion check below is suppressed while it is up. That is the
|
|
390
|
-
// point, and it is worth spelling out because the obvious reading is
|
|
391
|
-
// wrong one
|
|
636
|
+
// The dwell deliberately spans ALL THREE states that raise this flag, and
|
|
637
|
+
// the completion check below is suppressed while it is up. That is the
|
|
638
|
+
// whole point, and it is worth spelling out because the obvious reading is
|
|
639
|
+
// the wrong one. The server's definition (`isUnclassifiedFrame` in
|
|
640
|
+
// `src/lib/session/status-evidence.ts`, restated there by Issue #2011):
|
|
392
641
|
//
|
|
393
|
-
// isUnclassifiedActive =
|
|
642
|
+
// isUnclassifiedActive =
|
|
643
|
+
// running && (default | unknown_frame | no_recent_output)
|
|
394
644
|
//
|
|
395
|
-
//
|
|
396
|
-
// into it — once the Auto-Yes poller stamps
|
|
397
|
-
// frame that stopped changing flips from
|
|
398
|
-
// `
|
|
399
|
-
//
|
|
645
|
+
// `no_recent_output` is there because a static unrecognised overlay
|
|
646
|
+
// DEGRADES into it — once the Auto-Yes poller stamps
|
|
647
|
+
// lastServerResponseTimestamp, a frame that stopped changing flips from
|
|
648
|
+
// `running`/`default` after STALE_OUTPUT_THRESHOLD_MS (5s). `unknown_frame`
|
|
649
|
+
// is the same floor for a tool that opts out of the generic composer check
|
|
650
|
+
// (copilot, opencode), and says "this tool's own rules looked and read
|
|
651
|
+
// nothing". Both arrive about twelve times faster than this dwell. Letting
|
|
652
|
+
// the completion check claim one turned a stalled worker into `Completed`,
|
|
653
|
+
// which is worse than the timeout Issue #1708 complained about: exit 124
|
|
654
|
+
// stops a pipeline, exit 0 lets it merge. Measured before this guard: two
|
|
655
|
+
// unclassified polls followed by the degraded state returned SUCCESS.
|
|
400
656
|
//
|
|
401
|
-
//
|
|
402
|
-
//
|
|
403
|
-
//
|
|
404
|
-
//
|
|
405
|
-
//
|
|
406
|
-
//
|
|
407
|
-
//
|
|
408
|
-
//
|
|
409
|
-
// A genuine completion is `ready`/`input_prompt` — the agent back at its
|
|
410
|
-
// composer — which does not raise the flag at all, so it still exits
|
|
411
|
-
// SUCCESS on the first poll, unchanged.
|
|
657
|
+
// What is deliberately NOT in the set is `ready`/`input_prompt` with
|
|
658
|
+
// `statusEvidence: 'none'` — the agent back at its composer on a frame no
|
|
659
|
+
// tool-specific idle rule could vouch for. That frame WAS classified; what
|
|
660
|
+
// is missing is positive proof, which is a different question and §4 D1's
|
|
661
|
+
// to answer. Issue #1927 folded the two together and every idle Claude pane
|
|
662
|
+
// stopped completing (#2011). Whether `wait` should hold for evidence as
|
|
663
|
+
// well as classification is open, and any answer belongs in the same place
|
|
664
|
+
// as the rollout that produces the evidence — not here.
|
|
412
665
|
if (data.isUnclassifiedActive === true) {
|
|
413
666
|
if (unclassifiedSince === null)
|
|
414
667
|
unclassifiedSince = Date.now();
|
|
@@ -452,14 +705,22 @@ async function pollWorktree(client, worktreeId, options) {
|
|
|
452
705
|
// "nothing to wait for" (NOT_STARTED), not a completion. See `everRunning`.
|
|
453
706
|
if (!data.isRunning && !everRunning) {
|
|
454
707
|
console.error(`Not started: ${worktreeId} has no running ${data.cliToolId ?? 'agent'} session` +
|
|
455
|
-
`${options.instance ? ` for instance ${options.instance}` : ''}
|
|
708
|
+
`${options.instance ? ` for instance ${options.instance}` : ''}` +
|
|
709
|
+
// Issue #1884: name the stage that chose the agent above. `wait` has
|
|
710
|
+
// no --agent to correct a mis-resolution with, so "no running claude
|
|
711
|
+
// session for instance opencode" was the entire evidence an operator
|
|
712
|
+
// got for a live agent reported as absent. `worktree-default` here
|
|
713
|
+
// means the instance is neither in the roster nor named after a
|
|
714
|
+
// tool; `client-fallback`, that the server is too old to resolve.
|
|
715
|
+
`${data.resolvedBy ? ` (resolvedBy=${data.resolvedBy})` : ''}.`);
|
|
456
716
|
return { exitCode: types_1.VerifyExitCode.NOT_STARTED };
|
|
457
717
|
}
|
|
458
718
|
// Issue #1708 narrowed Path B: `ready` is only a completion when the frame
|
|
459
|
-
// was actually understood. `
|
|
460
|
-
// of an
|
|
461
|
-
// `Completed` is how a stalled worker gets
|
|
462
|
-
// session that went away really is
|
|
719
|
+
// was actually understood. A structured `hook_stop` over an unreadable
|
|
720
|
+
// pane is the degraded form of an overlay nobody could parse (see the note
|
|
721
|
+
// above), and reporting it as `Completed` is how a stalled worker gets
|
|
722
|
+
// merged. Path A is untouched — a session that went away really is
|
|
723
|
+
// finished, and carries no flag anyway.
|
|
463
724
|
if (!data.isRunning) {
|
|
464
725
|
console.error(`Completed: ${worktreeId} (basis=${COMPLETION_BASIS.SESSION_GONE})`);
|
|
465
726
|
return { exitCode: types_1.WaitExitCode.SUCCESS };
|
|
@@ -487,13 +748,62 @@ async function pollWorktree(client, worktreeId, options) {
|
|
|
487
748
|
if (!turnSettled(data, turnStartedAt)) {
|
|
488
749
|
console.error(`Waiting: ${worktreeId} is back at its composer, but its agent has not reported ` +
|
|
489
750
|
`the end of this turn (turnStartedAt=${turnStartedAt}, ` +
|
|
490
|
-
`lastStopEventAt=${data.lastStopEventAt ?? 'none'}). ` +
|
|
751
|
+
`lastStopEventAt=${data.lastStopEventAt ?? 'none'}, ${describeTurnClose(data)}). ` +
|
|
491
752
|
'Not reporting completion; inspect with ' +
|
|
492
753
|
`\`commandmate capture ${worktreeId} --json\`.`);
|
|
493
754
|
await sleep(POLL_INTERVAL_MS);
|
|
494
755
|
continue;
|
|
495
756
|
}
|
|
496
|
-
|
|
757
|
+
// Issue #1975: the same frame, one question further back. #1839's gate
|
|
758
|
+
// above can only fire once a turn has been ADOPTED, and `send` leaves a
|
|
759
|
+
// window ~1s wide in which nothing has been: the newest structured event
|
|
760
|
+
// is still the previous turn's `stop`, so `adoptTurnStart` takes nothing,
|
|
761
|
+
// `turnSettled` reads null as "settled", and the composer the agent has
|
|
762
|
+
// not touched yet is read as the composer it came back to. Measured
|
|
763
|
+
// 2026-08-22 against copilot 1.0.80 on an isolated server: 3 of 5
|
|
764
|
+
// send-then-wait runs came back in ~0.3s with `basis=scraper_ready` and
|
|
765
|
+
// no artefact on disk.
|
|
766
|
+
//
|
|
767
|
+
// So ask the ledger instead of the clock: has this instance been handed
|
|
768
|
+
// a prompt that the agent has not reported the end of? See
|
|
769
|
+
// {@link outstandingPrompt} for why that comparison is the one that
|
|
770
|
+
// separates "not started" from "finished", and
|
|
771
|
+
// {@link reportsTurnBoundaries} for why a tool that posts no hooks never
|
|
772
|
+
// reaches it.
|
|
773
|
+
let answeredNewestPrompt = false;
|
|
774
|
+
if (turnStartedAt === null && promptLedgerReadable && reportsTurnBoundaries(data)) {
|
|
775
|
+
const ledger = await readNewestPromptAt(client, worktreeId, options, data);
|
|
776
|
+
// One notice, then stop asking: a ledger that failed once will fail
|
|
777
|
+
// every poll, and the point of degrading is to stop paying for it.
|
|
778
|
+
promptLedgerReadable = ledger.readable;
|
|
779
|
+
if (ledger.readable && ledger.submittedAt !== null) {
|
|
780
|
+
if (outstandingPrompt(data, ledger.submittedAt)) {
|
|
781
|
+
const heldMs = Date.now() - startTime;
|
|
782
|
+
if (heldMs < PENDING_PROMPT_HOLD_MS) {
|
|
783
|
+
console.error(`Waiting: ${worktreeId} is at its composer, but the newest prompt sent to it ` +
|
|
784
|
+
`has no reported end (sentAt=${new Date(ledger.submittedAt).toISOString()}, ` +
|
|
785
|
+
`lastStopEventAt=${data.lastStopEventAt ?? 'none'}, ${describeTurnClose(data)}). ` +
|
|
786
|
+
'Not reporting completion: the agent has not started this turn yet.');
|
|
787
|
+
await sleep(POLL_INTERVAL_MS);
|
|
788
|
+
continue;
|
|
789
|
+
}
|
|
790
|
+
console.error(`Note: ${worktreeId} has been at its composer for ` +
|
|
791
|
+
`${Math.round(heldMs / 1000)}s with the newest prompt still unreported by its ` +
|
|
792
|
+
'agent. Its hooks are not answering; completing on the frame alone.');
|
|
793
|
+
}
|
|
794
|
+
else {
|
|
795
|
+
answeredNewestPrompt = true;
|
|
796
|
+
}
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
// `hook_stop` on both branches that have one, and they are the same
|
|
800
|
+
// statement made from two records: the agent reported the end of the
|
|
801
|
+
// turn this wait is about. `scraper_ready` keeps its documented meaning
|
|
802
|
+
// — "the screen said so and nothing corroborated it" — which is now
|
|
803
|
+
// exactly the set of cases that reach it.
|
|
804
|
+
const basis = turnStartedAt !== null || answeredNewestPrompt
|
|
805
|
+
? COMPLETION_BASIS.HOOK_STOP
|
|
806
|
+
: COMPLETION_BASIS.SCRAPER_READY;
|
|
497
807
|
console.error(`Completed: ${worktreeId} (basis=${basis})`);
|
|
498
808
|
return { exitCode: types_1.WaitExitCode.SUCCESS };
|
|
499
809
|
}
|
|
@@ -635,6 +945,43 @@ function createWaitCommand() {
|
|
|
635
945
|
.option('--require-work', 'After completion, run only the work-evidence gate; exit 21 when the worktree has no commits and no uncommitted changes')
|
|
636
946
|
.option('--fail-on-upstream-fault', 'Exit 11 instead of 0 when the agent returns to its composer with an upstream API failure (529/limit/API Error) on the frame')
|
|
637
947
|
.option('--token <token>', command_helpers_1.TOKEN_WARNING)
|
|
948
|
+
// Issue #1926 (design 規約 3): the unclassified dwell is a stop reason with
|
|
949
|
+
// no flag of its own, so `--help` is the only place a caller can find out
|
|
950
|
+
// that it exists — and the only place the interaction with --stall-timeout
|
|
951
|
+
// and --timeout can be stated. Leaving it to the guide means an operator
|
|
952
|
+
// debugging an unexpected exit 10 has nowhere local to look.
|
|
953
|
+
.addHelpText('after', `
|
|
954
|
+
Unclassified frames (exit 10, Issue #1708):
|
|
955
|
+
A frame that is interactive but that the detection layer could not parse
|
|
956
|
+
raises isUnclassifiedActive. It is not an immediate stop reason: a capture
|
|
957
|
+
taken mid-repaint raises it for a single poll. Only after it has held for
|
|
958
|
+
60 s does wait exit 10 with {"type":"unclassified"}, and --on-prompt human
|
|
959
|
+
keeps waiting through it like any other prompt.
|
|
960
|
+
|
|
961
|
+
Distinct from statusEvidence: 'none', which says the verdict rests on no
|
|
962
|
+
positive proof — an idle composer no tool-specific rule vouched for is
|
|
963
|
+
classified but unproven, and wait completes on it (Issue #2011).
|
|
964
|
+
|
|
965
|
+
The 60 s dwell is a constant, not a flag. --timeout and --stall-timeout below
|
|
966
|
+
60 s therefore always win and return 124 instead: the dwell pre-empts long
|
|
967
|
+
waits, it never extends short ones. Inspect the raw pane with
|
|
968
|
+
\`commandmate capture <id> --pane\`; see also statusEvidence /
|
|
969
|
+
sessionStatusReason / lastKnownStatus in \`commandmate capture <id> --json\`.
|
|
970
|
+
|
|
971
|
+
A prompt the agent has not answered yet (Issue #1975):
|
|
972
|
+
A composer frame right after a send looks exactly like a composer frame the
|
|
973
|
+
agent came back to. When the tool's event source declares it reports both
|
|
974
|
+
ends of a turn, wait therefore checks the chat ledger: if the newest prompt
|
|
975
|
+
sent to this instance postdates the agent's last reported Stop, the turn has
|
|
976
|
+
not been answered and wait keeps polling rather than reporting completion.
|
|
977
|
+
|
|
978
|
+
Like the dwell above this is a constant, not a flag: the hold ends after 60 s
|
|
979
|
+
with a note on stderr and a completion of basis=scraper_ready, so hooks that
|
|
980
|
+
stop answering cannot make wait hang, and --timeout / --stall-timeout below
|
|
981
|
+
60 s still win and return 124. A tool that posts no hooks (supportedEvents is
|
|
982
|
+
empty) never enters this path at all. The completion line says which record
|
|
983
|
+
decided it: basis=hook_stop when the agent reported the end of that turn.
|
|
984
|
+
`)
|
|
638
985
|
.action(async (worktreeIds, options) => {
|
|
639
986
|
try {
|
|
640
987
|
// [SEC4-04] Validate all worktree IDs
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-dependencies.d.ts","sourceRoot":"","sources":["../../../src/cli/config/cli-dependencies.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"cli-dependencies.d.ts","sourceRoot":"","sources":["../../../src/cli/config/cli-dependencies.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,eAAe,EAsDzC,CAAC;AAEF;;GAEG;AACH,wBAAgB,eAAe,IAAI,eAAe,EAAE,CAEnD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,eAAe,EAAE,CAE3D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,eAAe,EAAE,CAE3D"}
|
|
@@ -50,6 +50,22 @@ exports.DEPENDENCIES = [
|
|
|
50
50
|
versionArg: '--version',
|
|
51
51
|
required: false,
|
|
52
52
|
},
|
|
53
|
+
// Issue #1907: agent CLIs CommandMate can drive but does not require. Copilot
|
|
54
|
+
// is checked as the standalone `copilot` executable, NOT as `gh copilot` —
|
|
55
|
+
// that is a preview command built into gh which exits 0 (and offers to
|
|
56
|
+
// download the CLI) on a machine that has no copilot at all.
|
|
57
|
+
{
|
|
58
|
+
name: 'GitHub Copilot CLI',
|
|
59
|
+
command: 'copilot',
|
|
60
|
+
versionArg: '--version',
|
|
61
|
+
required: false,
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: 'OpenCode CLI',
|
|
65
|
+
command: 'opencode',
|
|
66
|
+
versionArg: '--version',
|
|
67
|
+
required: false,
|
|
68
|
+
},
|
|
53
69
|
];
|
|
54
70
|
/**
|
|
55
71
|
* Get all dependencies
|
|
@@ -20,4 +20,15 @@
|
|
|
20
20
|
*/
|
|
21
21
|
export { CLI_TOOL_IDS, isCliToolType as isCliToolId } from '../../lib/cli-tools/types';
|
|
22
22
|
export type { CLIToolType as CLIToolId } from '../../lib/cli-tools/types';
|
|
23
|
+
/**
|
|
24
|
+
* The agent addressed when nothing else declares one (Issue #1925).
|
|
25
|
+
*
|
|
26
|
+
* Only the CLI's compatibility path uses it: against a current server the
|
|
27
|
+
* answer comes from `GET /api/worktrees/:id/resolve-target`, which applies the
|
|
28
|
+
* worktree's own setting first and reports reaching this value as
|
|
29
|
+
* `resolvedBy: 'fallback'` so a worktree with no agent of its own is visible
|
|
30
|
+
* rather than silently Claude. Named here so the CLI has one such value instead
|
|
31
|
+
* of the `|| 'claude'` that used to sit in `capture`.
|
|
32
|
+
*/
|
|
33
|
+
export declare const DEFAULT_CLI_TOOL_ID = "claude";
|
|
23
34
|
//# sourceMappingURL=cli-tool-ids.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-tool-ids.d.ts","sourceRoot":"","sources":["../../../src/cli/config/cli-tool-ids.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACvF,YAAY,EAAE,WAAW,IAAI,SAAS,EAAE,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli-tool-ids.d.ts","sourceRoot":"","sources":["../../../src/cli/config/cli-tool-ids.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACvF,YAAY,EAAE,WAAW,IAAI,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE1E;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,WAAW,CAAC"}
|
|
@@ -20,7 +20,18 @@
|
|
|
20
20
|
* identity to lock in the single-source contract.
|
|
21
21
|
*/
|
|
22
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
-
exports.isCliToolId = exports.CLI_TOOL_IDS = void 0;
|
|
23
|
+
exports.DEFAULT_CLI_TOOL_ID = exports.isCliToolId = exports.CLI_TOOL_IDS = void 0;
|
|
24
24
|
var types_1 = require("../../lib/cli-tools/types");
|
|
25
25
|
Object.defineProperty(exports, "CLI_TOOL_IDS", { enumerable: true, get: function () { return types_1.CLI_TOOL_IDS; } });
|
|
26
26
|
Object.defineProperty(exports, "isCliToolId", { enumerable: true, get: function () { return types_1.isCliToolType; } });
|
|
27
|
+
/**
|
|
28
|
+
* The agent addressed when nothing else declares one (Issue #1925).
|
|
29
|
+
*
|
|
30
|
+
* Only the CLI's compatibility path uses it: against a current server the
|
|
31
|
+
* answer comes from `GET /api/worktrees/:id/resolve-target`, which applies the
|
|
32
|
+
* worktree's own setting first and reports reaching this value as
|
|
33
|
+
* `resolvedBy: 'fallback'` so a worktree with no agent of its own is visible
|
|
34
|
+
* rather than silently Claude. Named here so the CLI has one such value instead
|
|
35
|
+
* of the `|| 'claude'` that used to sit in `capture`.
|
|
36
|
+
*/
|
|
37
|
+
exports.DEFAULT_CLI_TOOL_ID = 'claude';
|