commandmate 0.16.0 → 0.18.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 +298 -228
- package/.next/app-path-routes-manifest.json +39 -29
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +12 -12
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +57 -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 +3 -3
- 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/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js +1 -0
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -0
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/hooks/claude-done/route.js +1 -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/metrics/vibe/route.js +37 -0
- package/.next/server/app/api/metrics/vibe/route.js.nft.json +1 -0
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/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_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.js +4 -0
- package/.next/server/app/api/tasks/[taskId]/cancel/route.js.nft.json +1 -0
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/tasks/[taskId]/route.js +4 -0
- package/.next/server/app/api/tasks/[taskId]/route.js.nft.json +1 -0
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/templates/[id]/route.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route.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 -0
- package/.next/server/app/api/verification/runs/[runId]/route.js.nft.json +1 -0
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/verification/runs/route.js +1 -0
- package/.next/server/app/api/verification/runs/route.js.nft.json +1 -0
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -0
- 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]/cli-tool/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/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.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]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -2
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -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/route.js +2 -2
- 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 +6 -0
- package/.next/server/app/api/worktrees/[id]/tasks/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -0
- 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 +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_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_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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +4 -0
- package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/verify/runs/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -0
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page.js +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.js +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +2 -2
- 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 +39 -29
- package/.next/server/chunks/1068.js +1 -1
- package/.next/server/chunks/1117.js +1 -1
- package/.next/server/chunks/1503.js +2 -0
- package/.next/server/chunks/2366.js +1 -0
- package/.next/server/chunks/3042.js +1 -1
- package/.next/server/chunks/3736.js +1 -1
- package/.next/server/chunks/4444.js +1 -1
- package/.next/server/chunks/4689.js +25 -0
- package/.next/server/chunks/5381.js +50 -10
- package/.next/server/chunks/5959.js +3 -3
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6274.js +13 -0
- package/.next/server/chunks/646.js +1 -1
- package/.next/server/chunks/8681.js +1 -1
- package/.next/server/chunks/8807.js +194 -51
- package/.next/server/chunks/8856.js +4 -0
- package/.next/server/chunks/9687.js +2 -2
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/-BSmW0Ae2YsxyCl_ue7_d/_buildManifest.js +1 -0
- package/.next/static/chunks/{4560-8ffb0bb19f2ba998.js → 4560-0917ae2e6a0e5400.js} +1 -1
- package/.next/static/chunks/{6488-c2a968ec806975c2.js → 6488-109e3825c7249e47.js} +1 -1
- package/.next/static/chunks/app/api/app/update/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/assistant/conversation/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/assistant/current-output/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/assistant/messages/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/assistant/session/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/assistant/start/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/assistant/terminal/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/assistant/tools/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/skills/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/templates/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/todos/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/proxy/[...path]/route-8440b6c72bed83a1.js +1 -0
- package/.next/static/chunks/app/repositories/page-1ed1e5a542ecc168.js +1 -0
- package/.next/static/chunks/app/review/{page-f431d630097c2e85.js → page-b559bfb11c46931b.js} +1 -1
- package/.next/static/chunks/app/sessions/{page-20f07a99db64d2ca.js → page-3fa7e767d0ab3889.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/page-12b3c5f32fc6094e.js +1 -0
- package/.next/trace +12 -11
- package/.next/types/app/api/hooks/agent-event/route.ts +347 -0
- package/.next/types/app/api/metrics/vibe/route.ts +347 -0
- package/.next/types/app/api/tasks/[taskId]/cancel/route.ts +347 -0
- package/.next/types/app/api/tasks/[taskId]/route.ts +347 -0
- package/.next/types/app/api/verification/runs/[runId]/route.ts +347 -0
- package/.next/types/app/api/verification/runs/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/tasks/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/verify/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/verify/runs/[runId]/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/verify/runs/route.ts +347 -0
- package/.next/types/routes.d.ts +11 -1
- package/.next/types/validator.ts +90 -0
- package/dist/cli/commands/report.d.ts +1 -0
- package/dist/cli/commands/report.d.ts.map +1 -1
- package/dist/cli/commands/report.js +54 -0
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +116 -14
- package/dist/cli/commands/task.d.ts +11 -0
- package/dist/cli/commands/task.d.ts.map +1 -0
- package/dist/cli/commands/task.js +126 -0
- package/dist/cli/commands/verify.d.ts +19 -0
- package/dist/cli/commands/verify.d.ts.map +1 -0
- package/dist/cli/commands/verify.js +229 -0
- package/dist/cli/commands/wait.d.ts +2 -0
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +128 -13
- package/dist/cli/docs/agent-operations.d.ts +2 -2
- package/dist/cli/docs/agent-operations.d.ts.map +1 -1
- package/dist/cli/docs/agent-operations.js +92 -3
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +6 -0
- package/dist/cli/types/api-responses.d.ts +180 -0
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/index.d.ts +82 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/types/index.js +30 -1
- package/dist/cli/utils/api-client.d.ts +8 -0
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/verify-runner.d.ts +63 -0
- package/dist/cli/utils/verify-runner.d.ts.map +1 -0
- package/dist/cli/utils/verify-runner.js +175 -0
- package/dist/server/server.js +15 -0
- package/dist/server/src/config/auto-yes-config.js +22 -0
- package/dist/server/src/lib/auto-yes-poller.js +34 -2
- package/dist/server/src/lib/auto-yes-state.js +6 -19
- package/dist/server/src/lib/db/db.js +34 -1
- package/dist/server/src/lib/db/migrations/index.js +6 -0
- package/dist/server/src/lib/db/migrations/runner.js +1 -1
- package/dist/server/src/lib/db/migrations/v49-verification-runs.js +86 -0
- package/dist/server/src/lib/db/migrations/v50-tasks.js +68 -0
- package/dist/server/src/lib/db/migrations/v51-task-events.js +58 -0
- package/dist/server/src/lib/db/task-events-db.js +59 -0
- package/dist/server/src/lib/db/tasks-db.js +263 -0
- package/dist/server/src/lib/db/verification-db.js +290 -0
- package/dist/server/src/lib/polling/auto-yes-policy.js +117 -0
- package/dist/server/src/lib/polling/auto-yes-resolver.js +144 -4
- package/dist/server/src/lib/polling/response-checker.js +8 -0
- package/dist/server/src/lib/session/agent-event-state.js +46 -0
- package/dist/server/src/lib/session/current-output-builder.js +4 -0
- package/dist/server/src/lib/session/status-mapping.js +146 -0
- package/dist/server/src/lib/tasks/contract-parser.js +385 -0
- package/dist/server/src/lib/tasks/task-state-machine.js +183 -0
- package/dist/server/src/lib/tasks/task-transition-service.js +106 -0
- package/dist/server/src/lib/verification/verification-reconciler.js +49 -0
- package/dist/server/src/types/sidebar.js +7 -20
- package/package.json +5 -2
- package/scripts/hooks/cmate-agent-event.sh +175 -0
- package/.next/server/chunks/2064.js +0 -2
- package/.next/static/AKqbAyuzbFfg05qpbCI_K/_buildManifest.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/assistant/conversation/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/assistant/current-output/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/assistant/messages/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/assistant/session/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/assistant/start/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/assistant/terminal/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/assistant/tools/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/skills/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/templates/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/todos/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-55e398bd20e2d7a9.js +0 -1
- package/.next/static/chunks/app/repositories/page-3c4fb889da48ce24.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-59a63a2c013ec1eb.js +0 -1
- /package/.next/static/{AKqbAyuzbFfg05qpbCI_K → -BSmW0Ae2YsxyCl_ue7_d}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TaskStatus state machine (Issue #1548, Phase 3-1).
|
|
4
|
+
*
|
|
5
|
+
* Pure and side-effect free: given a status and an event, it answers what the
|
|
6
|
+
* status becomes, or `null` when the event does not apply. Phase 2-1 let each
|
|
7
|
+
* firing point decide the next status for itself, which meant the rules lived in
|
|
8
|
+
* six places and agreed with each other only by coincidence. They live here now,
|
|
9
|
+
* and `applyTaskEvent` is the only thing allowed to act on the answer.
|
|
10
|
+
*
|
|
11
|
+
* This is a different layer from `SessionStatus`. SessionStatus is derived from
|
|
12
|
+
* screen-scraped terminal output — low level, volatile, recomputed every poll.
|
|
13
|
+
* TaskStatus is durable and only moves because something *happened*. A
|
|
14
|
+
* SessionStatus reading is at most one of the events that can cause a move; it
|
|
15
|
+
* never writes TaskStatus itself.
|
|
16
|
+
*
|
|
17
|
+
* Rejection is not an error. A prompt detected while a verification run is in
|
|
18
|
+
* flight is an ordinary race, not a bug, so `transitionTask` returns `null` and
|
|
19
|
+
* the caller records the attempt and moves on. Throwing would turn a race into
|
|
20
|
+
* a crashed poller.
|
|
21
|
+
*
|
|
22
|
+
* @module lib/tasks/task-state-machine
|
|
23
|
+
*/
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.TASK_EVENTS = void 0;
|
|
26
|
+
exports.transitionTask = transitionTask;
|
|
27
|
+
exports.TASK_EVENTS = [
|
|
28
|
+
'message_sent',
|
|
29
|
+
'send_failed',
|
|
30
|
+
'prompt_detected',
|
|
31
|
+
'prompt_answered_auto',
|
|
32
|
+
'prompt_answered_human',
|
|
33
|
+
'agent_idle',
|
|
34
|
+
'verify_started',
|
|
35
|
+
'verify_passed',
|
|
36
|
+
'verify_failed',
|
|
37
|
+
'verify_not_started',
|
|
38
|
+
'cancel',
|
|
39
|
+
];
|
|
40
|
+
/**
|
|
41
|
+
* The status `current` becomes when `event` happens, or `null` if it does not
|
|
42
|
+
* apply.
|
|
43
|
+
*
|
|
44
|
+
* Both switches are exhaustive by `satisfies never`, so adding a TaskStatus or a
|
|
45
|
+
* TaskEvent fails the build here instead of silently defaulting to "rejected" —
|
|
46
|
+
* a new event that quietly transitions nothing is indistinguishable from one
|
|
47
|
+
* that is wired up wrong.
|
|
48
|
+
*/
|
|
49
|
+
function transitionTask(current, event) {
|
|
50
|
+
switch (current) {
|
|
51
|
+
case 'pending':
|
|
52
|
+
// Nothing has been sent yet, so nothing about the agent's behaviour can
|
|
53
|
+
// be true of this task.
|
|
54
|
+
switch (event) {
|
|
55
|
+
case 'message_sent':
|
|
56
|
+
return 'running';
|
|
57
|
+
case 'send_failed':
|
|
58
|
+
return 'failed';
|
|
59
|
+
case 'cancel':
|
|
60
|
+
return 'cancelled';
|
|
61
|
+
case 'prompt_detected':
|
|
62
|
+
case 'prompt_answered_auto':
|
|
63
|
+
case 'prompt_answered_human':
|
|
64
|
+
case 'agent_idle':
|
|
65
|
+
case 'verify_started':
|
|
66
|
+
case 'verify_passed':
|
|
67
|
+
case 'verify_failed':
|
|
68
|
+
case 'verify_not_started':
|
|
69
|
+
return null;
|
|
70
|
+
default:
|
|
71
|
+
return assertNever(event);
|
|
72
|
+
}
|
|
73
|
+
case 'running':
|
|
74
|
+
switch (event) {
|
|
75
|
+
case 'prompt_detected':
|
|
76
|
+
return 'waiting_input';
|
|
77
|
+
// The agent going quiet without a verification run is not a verdict.
|
|
78
|
+
// The status is held and only the event is recorded, so "it stopped
|
|
79
|
+
// producing output" stays visible without being mistaken for "done".
|
|
80
|
+
case 'agent_idle':
|
|
81
|
+
return 'running';
|
|
82
|
+
case 'verify_started':
|
|
83
|
+
return 'verifying';
|
|
84
|
+
case 'send_failed':
|
|
85
|
+
return 'failed';
|
|
86
|
+
case 'cancel':
|
|
87
|
+
return 'cancelled';
|
|
88
|
+
case 'message_sent':
|
|
89
|
+
case 'prompt_answered_auto':
|
|
90
|
+
case 'prompt_answered_human':
|
|
91
|
+
case 'verify_passed':
|
|
92
|
+
case 'verify_failed':
|
|
93
|
+
case 'verify_not_started':
|
|
94
|
+
return null;
|
|
95
|
+
default:
|
|
96
|
+
return assertNever(event);
|
|
97
|
+
}
|
|
98
|
+
case 'waiting_input':
|
|
99
|
+
switch (event) {
|
|
100
|
+
case 'prompt_answered_auto':
|
|
101
|
+
case 'prompt_answered_human':
|
|
102
|
+
return 'running';
|
|
103
|
+
case 'agent_idle':
|
|
104
|
+
return 'running';
|
|
105
|
+
case 'verify_started':
|
|
106
|
+
return 'verifying';
|
|
107
|
+
case 'cancel':
|
|
108
|
+
return 'cancelled';
|
|
109
|
+
case 'message_sent':
|
|
110
|
+
case 'send_failed':
|
|
111
|
+
case 'prompt_detected':
|
|
112
|
+
case 'verify_passed':
|
|
113
|
+
case 'verify_failed':
|
|
114
|
+
case 'verify_not_started':
|
|
115
|
+
return null;
|
|
116
|
+
default:
|
|
117
|
+
return assertNever(event);
|
|
118
|
+
}
|
|
119
|
+
case 'verifying':
|
|
120
|
+
// A run is in flight. Only that run's verdict — or an explicit cancel —
|
|
121
|
+
// moves the task, so a prompt or a send racing the gates cannot overwrite
|
|
122
|
+
// the outcome the gates are about to produce.
|
|
123
|
+
switch (event) {
|
|
124
|
+
case 'verify_passed':
|
|
125
|
+
return 'succeeded';
|
|
126
|
+
case 'verify_failed':
|
|
127
|
+
return 'failed';
|
|
128
|
+
case 'verify_not_started':
|
|
129
|
+
return 'not_started';
|
|
130
|
+
case 'cancel':
|
|
131
|
+
return 'cancelled';
|
|
132
|
+
case 'message_sent':
|
|
133
|
+
case 'send_failed':
|
|
134
|
+
case 'prompt_detected':
|
|
135
|
+
case 'prompt_answered_auto':
|
|
136
|
+
case 'prompt_answered_human':
|
|
137
|
+
case 'agent_idle':
|
|
138
|
+
case 'verify_started':
|
|
139
|
+
return null;
|
|
140
|
+
default:
|
|
141
|
+
return assertNever(event);
|
|
142
|
+
}
|
|
143
|
+
case 'failed':
|
|
144
|
+
case 'not_started':
|
|
145
|
+
// Not the end of the story. Re-instructing an agent whose work did not
|
|
146
|
+
// pass reopens the same task, and the number of times that happens is the
|
|
147
|
+
// fix-loop count Phase 4 Eval reports. Re-running the gates alone reopens
|
|
148
|
+
// it too — a task can fail on a flaky gate and pass on the retry.
|
|
149
|
+
switch (event) {
|
|
150
|
+
case 'message_sent':
|
|
151
|
+
return 'running';
|
|
152
|
+
case 'verify_started':
|
|
153
|
+
return 'verifying';
|
|
154
|
+
case 'cancel':
|
|
155
|
+
return 'cancelled';
|
|
156
|
+
case 'send_failed':
|
|
157
|
+
case 'prompt_detected':
|
|
158
|
+
case 'prompt_answered_auto':
|
|
159
|
+
case 'prompt_answered_human':
|
|
160
|
+
case 'agent_idle':
|
|
161
|
+
case 'verify_passed':
|
|
162
|
+
case 'verify_failed':
|
|
163
|
+
case 'verify_not_started':
|
|
164
|
+
return null;
|
|
165
|
+
default:
|
|
166
|
+
return assertNever(event);
|
|
167
|
+
}
|
|
168
|
+
case 'succeeded':
|
|
169
|
+
case 'cancelled':
|
|
170
|
+
// Closed for good. `succeeded` in particular is a verdict a verification
|
|
171
|
+
// run produced; letting any later event walk it back would make "this
|
|
172
|
+
// task passed" a claim with no fixed meaning.
|
|
173
|
+
return null;
|
|
174
|
+
default:
|
|
175
|
+
return assertNever(current);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/** Compile-time exhaustiveness guard; unreachable at runtime. */
|
|
179
|
+
function assertNever(value) {
|
|
180
|
+
const _exhaustive = value;
|
|
181
|
+
void _exhaustive;
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The only writer of `tasks.status` (Issue #1548, Phase 3-1).
|
|
4
|
+
*
|
|
5
|
+
* `applyTaskEvent` reads the current status, asks the state machine what the
|
|
6
|
+
* event means, and — in one transaction — writes the new status and appends the
|
|
7
|
+
* event. Phase 2-1 had each firing point call `updateTaskStatus` with a status
|
|
8
|
+
* it chose itself; `updateTaskStatus` is no longer reachable from the
|
|
9
|
+
* `@/lib/db` barrel so that this is the only door.
|
|
10
|
+
*
|
|
11
|
+
* A rejected transition still writes a `task_events` row (`to_status = NULL`).
|
|
12
|
+
* The event happened; the machine declined to act on it. That distinction is
|
|
13
|
+
* what tells a wiring bug apart from a race, and it is invisible if rejected
|
|
14
|
+
* events are dropped.
|
|
15
|
+
*
|
|
16
|
+
* The UPDATE and the INSERT are one transaction because a status with no event
|
|
17
|
+
* behind it, or an event whose status never landed, would each make the log
|
|
18
|
+
* lie about the table it exists to explain. better-sqlite3 is synchronous, so a
|
|
19
|
+
* transaction here also serialises concurrent callers with no further work.
|
|
20
|
+
*
|
|
21
|
+
* @module lib/tasks/task-transition-service
|
|
22
|
+
*/
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.applyTaskEvent = applyTaskEvent;
|
|
25
|
+
exports.applyEventToActiveTask = applyEventToActiveTask;
|
|
26
|
+
const tasks_db_1 = require("../../lib/db/tasks-db");
|
|
27
|
+
const task_events_db_1 = require("../../lib/db/task-events-db");
|
|
28
|
+
const logger_1 = require("../../lib/logger");
|
|
29
|
+
const task_state_machine_1 = require("./task-state-machine");
|
|
30
|
+
const logger = (0, logger_1.createLogger)('lib/tasks/task-transition-service');
|
|
31
|
+
/**
|
|
32
|
+
* Apply `event` to a task.
|
|
33
|
+
*
|
|
34
|
+
* @param payload - Structured detail for the log. `runId` is also written to
|
|
35
|
+
* `tasks.last_verification_run_id` on an accepted transition, so the task's
|
|
36
|
+
* pointer to the run that last judged it and the event naming that run cannot
|
|
37
|
+
* disagree.
|
|
38
|
+
* @returns null when the task does not exist — a deleted worktree takes its
|
|
39
|
+
* tasks with it, and a poller still holding the id must not crash for it
|
|
40
|
+
*/
|
|
41
|
+
function applyTaskEvent(db, taskId, event, payload) {
|
|
42
|
+
const apply = db.transaction(() => {
|
|
43
|
+
const task = (0, tasks_db_1.getTask)(db, taskId);
|
|
44
|
+
if (!task) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
const fromStatus = task.status;
|
|
48
|
+
const toStatus = (0, task_state_machine_1.transitionTask)(fromStatus, event);
|
|
49
|
+
const now = Date.now();
|
|
50
|
+
const eventId = (0, task_events_db_1.insertTaskEvent)(db, {
|
|
51
|
+
taskId,
|
|
52
|
+
event,
|
|
53
|
+
fromStatus,
|
|
54
|
+
toStatus,
|
|
55
|
+
payload,
|
|
56
|
+
createdAt: now,
|
|
57
|
+
});
|
|
58
|
+
if (toStatus === null) {
|
|
59
|
+
return { task, fromStatus, toStatus: null, eventId };
|
|
60
|
+
}
|
|
61
|
+
const updated = (0, tasks_db_1.updateTaskStatus)(db, taskId, toStatus, payload?.runId === undefined ? {} : { lastVerificationRunId: payload.runId });
|
|
62
|
+
return { task: updated, fromStatus, toStatus, eventId };
|
|
63
|
+
});
|
|
64
|
+
const result = apply();
|
|
65
|
+
if (result === null) {
|
|
66
|
+
logger.warn('task-event-unknown-task', { taskId, event });
|
|
67
|
+
}
|
|
68
|
+
else if (result.toStatus === null) {
|
|
69
|
+
logger.warn('task-event-rejected', { taskId, event, fromStatus: result.fromStatus });
|
|
70
|
+
}
|
|
71
|
+
return result;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Raise `event` on whichever task is currently governing one agent instance.
|
|
75
|
+
*
|
|
76
|
+
* The no-op is the important case. Prompts, auto-answers and human replies
|
|
77
|
+
* happen constantly in sessions that were never sent a contract, and every
|
|
78
|
+
* firing point calls this unconditionally — so "no active task" has to mean
|
|
79
|
+
* "nothing happens", not "nothing to do, but raise something anyway". Anything
|
|
80
|
+
* else would make Phase 3-1 a behaviour change for contract-less use.
|
|
81
|
+
*
|
|
82
|
+
* Never throws: these callers are pollers and API routes whose real job is the
|
|
83
|
+
* message itself, and a task-log failure must not take that down with it.
|
|
84
|
+
*
|
|
85
|
+
* @param instanceId - Agent instance id; the tool id itself for the primary
|
|
86
|
+
* @returns The result, or null when no active task governs this instance
|
|
87
|
+
*/
|
|
88
|
+
function applyEventToActiveTask(db, worktreeId, cliToolId, instanceId, event, payload) {
|
|
89
|
+
try {
|
|
90
|
+
const task = (0, tasks_db_1.getActiveTaskForInstance)(db, worktreeId, cliToolId, instanceId);
|
|
91
|
+
if (!task) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
return applyTaskEvent(db, task.id, event, payload);
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
logger.warn('task-event-failed', {
|
|
98
|
+
worktreeId,
|
|
99
|
+
cliToolId,
|
|
100
|
+
instanceId,
|
|
101
|
+
event,
|
|
102
|
+
error: error instanceof Error ? error.message : String(error),
|
|
103
|
+
});
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Startup recovery for verification runs orphaned by a restart (Issue #1543).
|
|
4
|
+
*
|
|
5
|
+
* `verification_runs` is opened in `running` state and closed when the gates
|
|
6
|
+
* finish, so a run in flight when the process dies leaves a `running` row that
|
|
7
|
+
* nothing will ever close. Those rows are not merely stale: the per-worktree
|
|
8
|
+
* conflict check treats an open run as "verification in progress", so a single
|
|
9
|
+
* crash would lock that worktree out of verification permanently.
|
|
10
|
+
*
|
|
11
|
+
* Every run this finds is an orphan by construction — gate execution lives in
|
|
12
|
+
* process memory, so after a restart none of them is actually running. They are
|
|
13
|
+
* closed as `error` rather than `failed`: no gate reached a verdict about the
|
|
14
|
+
* work, which is exactly the distinction `error` encodes.
|
|
15
|
+
*
|
|
16
|
+
* Follows the shape of {@link reconcileAllAssistantExecutions}
|
|
17
|
+
* (`src/lib/assistant/non-interactive-execution-reconciler.ts`).
|
|
18
|
+
*
|
|
19
|
+
* @module lib/verification/verification-reconciler
|
|
20
|
+
*/
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.reconcileOrphanVerificationRuns = reconcileOrphanVerificationRuns;
|
|
23
|
+
const db_1 = require("../../lib/db");
|
|
24
|
+
const RECONCILE_NOTE = '[reconciled after server restart: the runner process is gone]';
|
|
25
|
+
/**
|
|
26
|
+
* Close every `running` verification run and its open gate results.
|
|
27
|
+
*
|
|
28
|
+
* @returns counts of what was closed, so startup can log a non-zero recovery
|
|
29
|
+
*/
|
|
30
|
+
function reconcileOrphanVerificationRuns(db) {
|
|
31
|
+
const report = { runs: 0, gates: 0 };
|
|
32
|
+
for (const run of (0, db_1.listRunningVerificationRuns)(db)) {
|
|
33
|
+
const detail = (0, db_1.getVerificationRun)(db, run.id);
|
|
34
|
+
for (const gate of detail?.gates ?? []) {
|
|
35
|
+
if (gate.status !== 'running')
|
|
36
|
+
continue;
|
|
37
|
+
(0, db_1.finishGateResult)(db, gate.id, {
|
|
38
|
+
status: 'error',
|
|
39
|
+
exitCode: null,
|
|
40
|
+
durationMs: null,
|
|
41
|
+
logTail: [gate.logTail, RECONCILE_NOTE].filter(Boolean).join('\n'),
|
|
42
|
+
});
|
|
43
|
+
report.gates += 1;
|
|
44
|
+
}
|
|
45
|
+
(0, db_1.finishVerificationRun)(db, run.id, 'error');
|
|
46
|
+
report.runs += 1;
|
|
47
|
+
}
|
|
48
|
+
return report;
|
|
49
|
+
}
|
|
@@ -5,28 +5,15 @@
|
|
|
5
5
|
* Types for sidebar components and branch status display
|
|
6
6
|
*/
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.deriveCliStatus =
|
|
8
|
+
exports.deriveCliStatus = void 0;
|
|
9
9
|
exports.aggregateCliStatus = aggregateCliStatus;
|
|
10
10
|
exports.formatCliStatusBreakdown = formatCliStatusBreakdown;
|
|
11
11
|
exports.calculateHasUnread = calculateHasUnread;
|
|
12
12
|
exports.toBranchItem = toBranchItem;
|
|
13
13
|
const types_1 = require("../lib/cli-tools/types");
|
|
14
14
|
const selected_agents_validator_1 = require("../lib/selected-agents-validator");
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
* Shared by sidebar (toBranchItem) and WorktreeDetailRefactored tab dots.
|
|
18
|
-
*/
|
|
19
|
-
function deriveCliStatus(toolStatus) {
|
|
20
|
-
if (!toolStatus)
|
|
21
|
-
return 'idle';
|
|
22
|
-
if (toolStatus.isWaitingForResponse)
|
|
23
|
-
return 'waiting';
|
|
24
|
-
if (toolStatus.isProcessing)
|
|
25
|
-
return 'running';
|
|
26
|
-
if (toolStatus.isRunning)
|
|
27
|
-
return 'ready';
|
|
28
|
-
return 'idle';
|
|
29
|
-
}
|
|
15
|
+
const status_mapping_1 = require("../lib/session/status-mapping");
|
|
16
|
+
Object.defineProperty(exports, "deriveCliStatus", { enumerable: true, get: function () { return status_mapping_1.deriveCliStatus; } });
|
|
30
17
|
/**
|
|
31
18
|
* Aggregate per-agent CLI statuses into a single representative BranchStatus
|
|
32
19
|
* for the sidebar's single status indicator (Issue #867).
|
|
@@ -140,7 +127,7 @@ function deriveSidebarCliStatus(worktree) {
|
|
|
140
127
|
if (!byInstance) {
|
|
141
128
|
const agents = worktree.selectedAgents ?? selected_agents_validator_1.DEFAULT_SELECTED_AGENTS;
|
|
142
129
|
for (const agent of agents) {
|
|
143
|
-
cliStatus[agent] = deriveCliStatus(worktree.sessionStatusByCli?.[agent]);
|
|
130
|
+
cliStatus[agent] = (0, status_mapping_1.deriveCliStatus)(worktree.sessionStatusByCli?.[agent]);
|
|
144
131
|
cliStatusLabels[agent] = (0, types_1.getCliToolDisplayName)(agent);
|
|
145
132
|
}
|
|
146
133
|
return { cliStatus, cliStatusLabels };
|
|
@@ -152,7 +139,7 @@ function deriveSidebarCliStatus(worktree) {
|
|
|
152
139
|
const rosterIds = new Set();
|
|
153
140
|
for (const instance of roster) {
|
|
154
141
|
rosterIds.add(instance.id);
|
|
155
|
-
cliStatus[instance.id] = deriveCliStatus(byInstance[instance.id]);
|
|
142
|
+
cliStatus[instance.id] = (0, status_mapping_1.deriveCliStatus)(byInstance[instance.id]);
|
|
156
143
|
cliStatusLabels[instance.id] = (0, types_1.getInstanceLabel)(instance);
|
|
157
144
|
}
|
|
158
145
|
// Surface any RUNNING instance missing from the roster (e.g. a `claude`
|
|
@@ -161,7 +148,7 @@ function deriveSidebarCliStatus(worktree) {
|
|
|
161
148
|
for (const [instanceId, status] of Object.entries(byInstance)) {
|
|
162
149
|
if (rosterIds.has(instanceId))
|
|
163
150
|
continue;
|
|
164
|
-
const derived = deriveCliStatus(status);
|
|
151
|
+
const derived = (0, status_mapping_1.deriveCliStatus)(status);
|
|
165
152
|
if (derived === 'idle')
|
|
166
153
|
continue;
|
|
167
154
|
cliStatus[instanceId] = derived;
|
|
@@ -177,7 +164,7 @@ function deriveSidebarCliStatus(worktree) {
|
|
|
177
164
|
*/
|
|
178
165
|
function toBranchItem(worktree) {
|
|
179
166
|
// Issue #608: Derive top-level status from worktree session flags
|
|
180
|
-
const status = deriveCliStatus(worktree.isSessionRunning !== undefined
|
|
167
|
+
const status = (0, status_mapping_1.deriveCliStatus)(worktree.isSessionRunning !== undefined
|
|
181
168
|
? {
|
|
182
169
|
isRunning: worktree.isSessionRunning ?? false,
|
|
183
170
|
isWaitingForResponse: worktree.isWaitingForResponse ?? false,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "commandmate",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.0",
|
|
4
4
|
"description": "A local control plane for agent CLIs — orchestration and visibility for Claude Code, Codex, Gemini CLI, and more across Git worktrees",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude-code",
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
".next/",
|
|
33
33
|
"!.next/cache",
|
|
34
34
|
"public/",
|
|
35
|
+
"scripts/hooks/",
|
|
35
36
|
".env.example"
|
|
36
37
|
],
|
|
37
38
|
"scripts": {
|
|
@@ -43,6 +44,7 @@
|
|
|
43
44
|
"prepublishOnly": "npm run build:all",
|
|
44
45
|
"start": "NODE_ENV=production node dist/server/server.js",
|
|
45
46
|
"lint": "eslint src --ext .js,.jsx,.ts,.tsx",
|
|
47
|
+
"check:tracking": "./scripts/check-commandmate-tracking.sh",
|
|
46
48
|
"test": "NODE_ENV=test vitest",
|
|
47
49
|
"test:ui": "NODE_ENV=test vitest --ui",
|
|
48
50
|
"test:coverage": "NODE_ENV=test vitest --coverage",
|
|
@@ -104,7 +106,8 @@
|
|
|
104
106
|
"ws": "^8.18.3",
|
|
105
107
|
"xterm": "^5.3.0",
|
|
106
108
|
"xterm-addon-fit": "^0.8.0",
|
|
107
|
-
"xterm-addon-web-links": "^0.9.0"
|
|
109
|
+
"xterm-addon-web-links": "^0.9.0",
|
|
110
|
+
"yaml": "^2.9.0"
|
|
108
111
|
},
|
|
109
112
|
"devDependencies": {
|
|
110
113
|
"@playwright/test": "^1.56.1",
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# cmate-agent-event.sh — post a structured agent lifecycle event to CommandMate.
|
|
4
|
+
#
|
|
5
|
+
# Wired into an agent CLI's own completion hook (Claude Code `Stop`, Codex
|
|
6
|
+
# `notify`) so the server learns that a turn ended from the agent itself rather
|
|
7
|
+
# than by reading the terminal. See docs/user-guide/agent-event-hooks.md.
|
|
8
|
+
#
|
|
9
|
+
# Written for bash 3.2 — the version macOS still ships — so no associative
|
|
10
|
+
# arrays, `mapfile`, or `${var^^}`.
|
|
11
|
+
#
|
|
12
|
+
# Exits 0 even when the POST fails: a hook that breaks the agent's session
|
|
13
|
+
# because the CommandMate server happens to be down is worse than a missed
|
|
14
|
+
# event. Pass --strict to propagate the failure instead.
|
|
15
|
+
|
|
16
|
+
set -u
|
|
17
|
+
|
|
18
|
+
PROGRAM_NAME="cmate-agent-event.sh"
|
|
19
|
+
|
|
20
|
+
usage() {
|
|
21
|
+
cat <<'USAGE'
|
|
22
|
+
Usage: cmate-agent-event.sh [options] [JSON]
|
|
23
|
+
|
|
24
|
+
Options:
|
|
25
|
+
--tool ID Agent CLI id (default: $CM_AGENT_TOOL, else "claude")
|
|
26
|
+
--event EVENT stop | notification | session_start (default: "stop")
|
|
27
|
+
--cwd PATH Agent working directory (default: $CLAUDE_PROJECT_DIR, else $PWD)
|
|
28
|
+
--session-id ID Opaque agent session id
|
|
29
|
+
--json JSON Hook payload to read cwd/session/event from
|
|
30
|
+
--stdin-json Read that payload from stdin instead
|
|
31
|
+
--url URL Endpoint (default: http://$CM_HOST:$CM_PORT/api/hooks/agent-event)
|
|
32
|
+
--strict Exit non-zero when the POST fails
|
|
33
|
+
-h, --help Show this help
|
|
34
|
+
|
|
35
|
+
Environment:
|
|
36
|
+
CM_HOST Server host (default: 127.0.0.1)
|
|
37
|
+
CM_PORT Server port (default: 3000)
|
|
38
|
+
CM_HOOK_URL Full endpoint URL; overrides CM_HOST/CM_PORT
|
|
39
|
+
CM_AUTH_TOKEN Sent as "Authorization: Bearer <token>" when set
|
|
40
|
+
USAGE
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
die() {
|
|
44
|
+
printf '%s: %s\n' "$PROGRAM_NAME" "$1" >&2
|
|
45
|
+
exit 2
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
# Extract a flat JSON string field. Good enough for the small, machine-generated
|
|
49
|
+
# payloads agent CLIs pass; anything richer belongs in the --cwd flag.
|
|
50
|
+
json_string_field() {
|
|
51
|
+
printf '%s' "$1" | tr -d '\n' |
|
|
52
|
+
sed -n 's/.*"'"$2"'"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p'
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
# Escape a value for embedding in a JSON string literal.
|
|
56
|
+
json_escape() {
|
|
57
|
+
printf '%s' "$1" | sed -e 's/\\/\\\\/g' -e 's/"/\\"/g'
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
# Map an agent's own event name onto the API vocabulary.
|
|
61
|
+
map_event_name() {
|
|
62
|
+
case "$1" in
|
|
63
|
+
Stop|SubagentStop|agent-turn-complete) printf 'stop' ;;
|
|
64
|
+
Notification) printf 'notification' ;;
|
|
65
|
+
SessionStart) printf 'session_start' ;;
|
|
66
|
+
*) printf '' ;;
|
|
67
|
+
esac
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
TOOL="${CM_AGENT_TOOL:-claude}"
|
|
71
|
+
EVENT=""
|
|
72
|
+
CWD=""
|
|
73
|
+
SESSION_ID=""
|
|
74
|
+
HOOK_JSON=""
|
|
75
|
+
READ_STDIN=0
|
|
76
|
+
URL="${CM_HOOK_URL:-}"
|
|
77
|
+
STRICT=0
|
|
78
|
+
|
|
79
|
+
while [ $# -gt 0 ]; do
|
|
80
|
+
case "$1" in
|
|
81
|
+
--tool) [ $# -ge 2 ] || die "--tool requires a value"; TOOL="$2"; shift 2 ;;
|
|
82
|
+
--event) [ $# -ge 2 ] || die "--event requires a value"; EVENT="$2"; shift 2 ;;
|
|
83
|
+
--cwd) [ $# -ge 2 ] || die "--cwd requires a value"; CWD="$2"; shift 2 ;;
|
|
84
|
+
--session-id) [ $# -ge 2 ] || die "--session-id requires a value"; SESSION_ID="$2"; shift 2 ;;
|
|
85
|
+
--json) [ $# -ge 2 ] || die "--json requires a value"; HOOK_JSON="$2"; shift 2 ;;
|
|
86
|
+
--url) [ $# -ge 2 ] || die "--url requires a value"; URL="$2"; shift 2 ;;
|
|
87
|
+
--stdin-json) READ_STDIN=1; shift ;;
|
|
88
|
+
--strict) STRICT=1; shift ;;
|
|
89
|
+
-h|--help) usage; exit 0 ;;
|
|
90
|
+
--) shift; break ;;
|
|
91
|
+
-*) die "unknown option: $1" ;;
|
|
92
|
+
# Codex passes its notify payload as a bare positional argument.
|
|
93
|
+
*) HOOK_JSON="$1"; shift ;;
|
|
94
|
+
esac
|
|
95
|
+
done
|
|
96
|
+
|
|
97
|
+
if [ "$READ_STDIN" -eq 1 ]; then
|
|
98
|
+
HOOK_JSON="$(cat)"
|
|
99
|
+
fi
|
|
100
|
+
|
|
101
|
+
if [ -n "$HOOK_JSON" ]; then
|
|
102
|
+
if [ -z "$EVENT" ]; then
|
|
103
|
+
JSON_EVENT="$(json_string_field "$HOOK_JSON" 'hook_event_name')"
|
|
104
|
+
if [ -z "$JSON_EVENT" ]; then
|
|
105
|
+
JSON_EVENT="$(json_string_field "$HOOK_JSON" 'type')"
|
|
106
|
+
fi
|
|
107
|
+
if [ -n "$JSON_EVENT" ]; then
|
|
108
|
+
EVENT="$(map_event_name "$JSON_EVENT")"
|
|
109
|
+
[ -n "$EVENT" ] || die "unrecognized hook event name: $JSON_EVENT"
|
|
110
|
+
fi
|
|
111
|
+
fi
|
|
112
|
+
if [ -z "$SESSION_ID" ]; then
|
|
113
|
+
SESSION_ID="$(json_string_field "$HOOK_JSON" 'session_id')"
|
|
114
|
+
fi
|
|
115
|
+
if [ -z "$SESSION_ID" ]; then
|
|
116
|
+
SESSION_ID="$(json_string_field "$HOOK_JSON" 'turn-id')"
|
|
117
|
+
fi
|
|
118
|
+
fi
|
|
119
|
+
|
|
120
|
+
[ -n "$EVENT" ] || EVENT="stop"
|
|
121
|
+
|
|
122
|
+
case "$EVENT" in
|
|
123
|
+
stop|notification|session_start) ;;
|
|
124
|
+
*) die "--event must be one of: stop, notification, session_start (got \"$EVENT\")" ;;
|
|
125
|
+
esac
|
|
126
|
+
|
|
127
|
+
[ -n "$TOOL" ] || die "--tool must not be empty"
|
|
128
|
+
|
|
129
|
+
if [ -z "$CWD" ]; then
|
|
130
|
+
CWD="${CM_AGENT_CWD:-}"
|
|
131
|
+
fi
|
|
132
|
+
if [ -z "$CWD" ]; then
|
|
133
|
+
CWD="${CLAUDE_PROJECT_DIR:-}"
|
|
134
|
+
fi
|
|
135
|
+
if [ -z "$CWD" ] && [ -n "$HOOK_JSON" ]; then
|
|
136
|
+
CWD="$(json_string_field "$HOOK_JSON" 'cwd')"
|
|
137
|
+
fi
|
|
138
|
+
if [ -z "$CWD" ]; then
|
|
139
|
+
CWD="$PWD"
|
|
140
|
+
fi
|
|
141
|
+
|
|
142
|
+
case "$CWD" in
|
|
143
|
+
/*) ;;
|
|
144
|
+
*) die "--cwd must be an absolute path (got \"$CWD\")" ;;
|
|
145
|
+
esac
|
|
146
|
+
|
|
147
|
+
if [ -z "$URL" ]; then
|
|
148
|
+
URL="http://${CM_HOST:-127.0.0.1}:${CM_PORT:-3000}/api/hooks/agent-event"
|
|
149
|
+
fi
|
|
150
|
+
|
|
151
|
+
BODY="{\"tool\":\"$(json_escape "$TOOL")\""
|
|
152
|
+
BODY="$BODY,\"event\":\"$(json_escape "$EVENT")\""
|
|
153
|
+
BODY="$BODY,\"cwd\":\"$(json_escape "$CWD")\""
|
|
154
|
+
if [ -n "$SESSION_ID" ]; then
|
|
155
|
+
BODY="$BODY,\"sessionId\":\"$(json_escape "$SESSION_ID")\""
|
|
156
|
+
fi
|
|
157
|
+
BODY="$BODY}"
|
|
158
|
+
|
|
159
|
+
# Token via --header rather than the command line of a subprocess: argv is world
|
|
160
|
+
# readable in `ps` on most systems.
|
|
161
|
+
set -- -fsS -X POST -H 'Content-Type: application/json' --max-time "${CM_HOOK_TIMEOUT:-5}"
|
|
162
|
+
if [ -n "${CM_AUTH_TOKEN:-}" ]; then
|
|
163
|
+
set -- "$@" -H "Authorization: Bearer ${CM_AUTH_TOKEN}"
|
|
164
|
+
fi
|
|
165
|
+
set -- "$@" --data-binary "$BODY" "$URL"
|
|
166
|
+
|
|
167
|
+
if curl "$@" >/dev/null; then
|
|
168
|
+
exit 0
|
|
169
|
+
fi
|
|
170
|
+
|
|
171
|
+
printf '%s: failed to POST %s to %s\n' "$PROGRAM_NAME" "$EVENT" "$URL" >&2
|
|
172
|
+
if [ "$STRICT" -eq 1 ]; then
|
|
173
|
+
exit 1
|
|
174
|
+
fi
|
|
175
|
+
exit 0
|