commandmate 0.16.0 → 0.17.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 +286 -216
- package/.next/app-path-routes-manifest.json +37 -27
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +9 -9
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +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 +37 -27
- 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 +192 -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/chunks/{4560-8ffb0bb19f2ba998.js → 4560-0917ae2e6a0e5400.js} +1 -1
- package/.next/static/chunks/{6488-c2a968ec806975c2.js → 6488-f4e447464c9e0e22.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-5ffc84094830babb.js +1 -0
- package/.next/static/gR8Sh86RrTynJON8SWkWK/_buildManifest.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 +86 -3
- 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 +78 -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 +170 -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 +57 -0
- package/dist/cli/utils/verify-runner.d.ts.map +1 -0
- package/dist/cli/utils/verify-runner.js +174 -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 +218 -0
- package/dist/server/src/lib/db/verification-db.js +272 -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 → gR8Sh86RrTynJON8SWkWK}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Verification run driver shared by `commandmate verify` and `wait --verify`
|
|
4
|
+
* (Issue #1544).
|
|
5
|
+
*
|
|
6
|
+
* The server answers a verify request with 202 and a run id rather than a
|
|
7
|
+
* verdict — gates are whole test suites and builds — so every caller has to
|
|
8
|
+
* start a run, poll it to a terminal status, and translate that status into an
|
|
9
|
+
* exit code. That sequence lives here once so `verify` and `wait` cannot drift
|
|
10
|
+
* apart on what "passed" means.
|
|
11
|
+
*
|
|
12
|
+
* @module cli/utils/verify-runner
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.WORK_EVIDENCE_GATE_ID = exports.VERIFY_POLL_INTERVAL_MS = void 0;
|
|
16
|
+
exports.exitCodeForRunStatus = exitCodeForRunStatus;
|
|
17
|
+
exports.parseGateIds = parseGateIds;
|
|
18
|
+
exports.runVerification = runVerification;
|
|
19
|
+
const types_1 = require("../types");
|
|
20
|
+
const api_client_1 = require("./api-client");
|
|
21
|
+
/** Matches the wait command's cadence; runs are minutes long, not seconds. */
|
|
22
|
+
exports.VERIFY_POLL_INTERVAL_MS = 5000;
|
|
23
|
+
/** Built-in gate id; mirrors WORK_EVIDENCE_GATE_ID in lib/verification/gate-runner.ts. */
|
|
24
|
+
exports.WORK_EVIDENCE_GATE_ID = 'work-evidence';
|
|
25
|
+
const GATE_LABELS = {
|
|
26
|
+
passed: 'PASS',
|
|
27
|
+
failed: 'FAIL',
|
|
28
|
+
timeout: 'TIMEOUT',
|
|
29
|
+
skipped: 'SKIP',
|
|
30
|
+
error: 'ERROR',
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Translate a terminal run status into a process exit code.
|
|
34
|
+
*
|
|
35
|
+
* `error` and `cancelled` mean no verdict was reached, so they take the generic
|
|
36
|
+
* UNEXPECTED_ERROR code rather than VERIFY_FAILED — a caller branching on 20
|
|
37
|
+
* must be able to trust that gates actually ran and judged the work.
|
|
38
|
+
*/
|
|
39
|
+
function exitCodeForRunStatus(status) {
|
|
40
|
+
switch (status) {
|
|
41
|
+
case 'passed':
|
|
42
|
+
return types_1.VerifyExitCode.SUCCESS;
|
|
43
|
+
case 'failed':
|
|
44
|
+
return types_1.VerifyExitCode.VERIFY_FAILED;
|
|
45
|
+
case 'not_started':
|
|
46
|
+
return types_1.VerifyExitCode.NOT_STARTED;
|
|
47
|
+
default:
|
|
48
|
+
return types_1.ExitCode.UNEXPECTED_ERROR;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Parse `--gates a,b` into a gate id list.
|
|
53
|
+
* @returns The ids, or null when the value names no gate at all.
|
|
54
|
+
*/
|
|
55
|
+
function parseGateIds(value) {
|
|
56
|
+
if (value === undefined)
|
|
57
|
+
return undefined;
|
|
58
|
+
const ids = value
|
|
59
|
+
.split(',')
|
|
60
|
+
.map((id) => id.trim())
|
|
61
|
+
.filter((id) => id !== '');
|
|
62
|
+
return ids.length > 0 ? ids : null;
|
|
63
|
+
}
|
|
64
|
+
function formatDetail(gate) {
|
|
65
|
+
// The work-evidence gate's verdict is a count, not an exit status; surfacing
|
|
66
|
+
// the counts is what tells a caller *why* a run came back not_started.
|
|
67
|
+
if (gate.gateId === exports.WORK_EVIDENCE_GATE_ID && gate.logTail) {
|
|
68
|
+
const match = /commits=(\d+)\s+uncommitted=(\d+)/.exec(gate.logTail);
|
|
69
|
+
if (match)
|
|
70
|
+
return `commits=${match[1]}, uncommitted=${match[2]}`;
|
|
71
|
+
}
|
|
72
|
+
if (gate.status === 'skipped') {
|
|
73
|
+
const reason = gate.logTail?.split('\n')[0]?.trim();
|
|
74
|
+
return reason ? reason.slice(0, 160) : 'not run';
|
|
75
|
+
}
|
|
76
|
+
const parts = [];
|
|
77
|
+
if (gate.exitCode !== null && gate.exitCode !== undefined)
|
|
78
|
+
parts.push(`exit=${gate.exitCode}`);
|
|
79
|
+
if (gate.durationMs !== null && gate.durationMs !== undefined) {
|
|
80
|
+
parts.push(`${(gate.durationMs / 1000).toFixed(1)}s`);
|
|
81
|
+
}
|
|
82
|
+
return parts.join(', ');
|
|
83
|
+
}
|
|
84
|
+
function formatGateLine(gate) {
|
|
85
|
+
const label = GATE_LABELS[gate.status] ?? gate.status.toUpperCase();
|
|
86
|
+
const detail = formatDetail(gate);
|
|
87
|
+
return detail ? `GATE ${gate.gateId} ${label} (${detail})` : `GATE ${gate.gateId} ${label}`;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Print each gate exactly once, when it reaches a terminal status.
|
|
91
|
+
* @param reported - Gate row ids already printed; mutated in place.
|
|
92
|
+
*/
|
|
93
|
+
function reportGates(gates, reported) {
|
|
94
|
+
for (const gate of gates) {
|
|
95
|
+
if (gate.status === 'running' || reported.has(gate.id))
|
|
96
|
+
continue;
|
|
97
|
+
reported.add(gate.id);
|
|
98
|
+
console.error(formatGateLine(gate));
|
|
99
|
+
// A failing gate without its log forces the caller back to the API to learn
|
|
100
|
+
// anything actionable, which defeats the point of a CLI verdict.
|
|
101
|
+
if (gate.status !== 'passed' && gate.logTail) {
|
|
102
|
+
console.error(gate.logTail.replace(/\n+$/, ''));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function sleep(ms) {
|
|
107
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Turn the verify route's 409 into an error that names the blocking run.
|
|
111
|
+
*
|
|
112
|
+
* handleApiError() maps 409 through its default branch to "Unexpected HTTP
|
|
113
|
+
* status: 409", which tells the caller nothing about what to do next.
|
|
114
|
+
*/
|
|
115
|
+
function withConflictMessage(error, worktreeId) {
|
|
116
|
+
if (!(error instanceof api_client_1.ApiError) || error.statusCode !== 409)
|
|
117
|
+
return error;
|
|
118
|
+
const running = error.payload?.runningRunId;
|
|
119
|
+
const which = typeof running === 'number' ? ` (run ${running})` : '';
|
|
120
|
+
return new api_client_1.ApiError(`A verification run is already in progress for '${worktreeId}'${which}. ` +
|
|
121
|
+
'Wait for it to finish, then retry.', error.exitCode, error.statusCode, error.payload);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Start a verification run and poll it to a verdict.
|
|
125
|
+
*
|
|
126
|
+
* @throws ApiError when the run cannot be started or the server stops answering
|
|
127
|
+
*/
|
|
128
|
+
async function runVerification(client, request) {
|
|
129
|
+
const { worktreeId } = request;
|
|
130
|
+
let runId;
|
|
131
|
+
try {
|
|
132
|
+
const started = await client.post(`/api/worktrees/${worktreeId}/verify`, {
|
|
133
|
+
trigger: request.trigger,
|
|
134
|
+
instanceId: request.instanceId,
|
|
135
|
+
gateIds: request.gateIds,
|
|
136
|
+
});
|
|
137
|
+
runId = (0, api_client_1.assertResponseShape)(started, ['runId'], `POST /api/worktrees/${worktreeId}/verify`).runId;
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
throw withConflictMessage(error, worktreeId);
|
|
141
|
+
}
|
|
142
|
+
console.error(`Verifying: ${worktreeId} (run ${runId})`);
|
|
143
|
+
const startedAt = Date.now();
|
|
144
|
+
const reported = new Set();
|
|
145
|
+
const runPath = `/api/worktrees/${worktreeId}/verify/runs/${runId}`;
|
|
146
|
+
let lastRun;
|
|
147
|
+
while (true) {
|
|
148
|
+
const body = await client.get(runPath);
|
|
149
|
+
const run = (0, api_client_1.assertResponseShape)(body, ['run'], `GET ${runPath}`).run;
|
|
150
|
+
lastRun = run;
|
|
151
|
+
reportGates(run.gates ?? [], reported);
|
|
152
|
+
if (run.status !== 'running') {
|
|
153
|
+
if (!request.suppressResultLine) {
|
|
154
|
+
const line = `RESULT ${run.status}`;
|
|
155
|
+
if (request.resultStream === 'stderr')
|
|
156
|
+
console.error(line);
|
|
157
|
+
else
|
|
158
|
+
console.log(line);
|
|
159
|
+
}
|
|
160
|
+
return { exitCode: exitCodeForRunStatus(run.status), run };
|
|
161
|
+
}
|
|
162
|
+
// Checked after the terminal-status branch so a run that finishes exactly on
|
|
163
|
+
// the deadline still reports its verdict instead of a timeout.
|
|
164
|
+
if (request.timeoutSec) {
|
|
165
|
+
const elapsed = (Date.now() - startedAt) / 1000;
|
|
166
|
+
if (elapsed >= request.timeoutSec) {
|
|
167
|
+
console.error(`Timeout: verification of ${worktreeId} exceeded ${request.timeoutSec}s ` +
|
|
168
|
+
`(run ${runId} is still running server-side)`);
|
|
169
|
+
return { exitCode: types_1.VerifyExitCode.TIMEOUT, run: lastRun };
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
await sleep(exports.VERIFY_POLL_INTERVAL_MS);
|
|
173
|
+
}
|
|
174
|
+
}
|
package/dist/server/server.js
CHANGED
|
@@ -226,6 +226,21 @@ app.prepare().then(() => {
|
|
|
226
226
|
catch (error) {
|
|
227
227
|
console.error('Error reconciling Skill operations:', error);
|
|
228
228
|
}
|
|
229
|
+
// Issue #1543: close verification runs that a crash left in `running`.
|
|
230
|
+
// Gate execution lives in process memory, so none of them survived the
|
|
231
|
+
// restart; leaving the rows open would keep their worktrees permanently
|
|
232
|
+
// 409-locked against a new run. Dynamic import for the same reason as the
|
|
233
|
+
// Skill reconciler above — do not hoist to a static import.
|
|
234
|
+
try {
|
|
235
|
+
const { reconcileOrphanVerificationRuns } = await Promise.resolve().then(() => __importStar(require('./src/lib/verification/verification-reconciler')));
|
|
236
|
+
const verifyReport = reconcileOrphanVerificationRuns(db);
|
|
237
|
+
if (verifyReport.runs > 0) {
|
|
238
|
+
console.log(`Verification runs reconciled: runs=${verifyReport.runs} gates=${verifyReport.gates}`);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
catch (error) {
|
|
242
|
+
console.error('Error reconciling verification runs:', error);
|
|
243
|
+
}
|
|
229
244
|
// Get repository paths from environment variables
|
|
230
245
|
const repositoryPaths = (0, worktrees_1.getRepositoryPaths)();
|
|
231
246
|
// Issue #490: Also include DB-registered repositories (e.g. cloned repos)
|
|
@@ -16,6 +16,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
16
16
|
exports.MAX_STOP_PATTERN_LENGTH = exports.AUTO_STOP_ERROR_THRESHOLD = exports.AUTO_YES_COUNTDOWN_INTERVAL_MS = exports.FULL_CAPTURE_LINES = exports.REDUCED_CAPTURE_LINES = exports.THINKING_POLLING_INTERVAL_MS = exports.DURATION_LABELS = exports.DEFAULT_AUTO_YES_DURATION = exports.ALLOWED_DURATIONS = void 0;
|
|
17
17
|
exports.isAllowedDuration = isAllowedDuration;
|
|
18
18
|
exports.validateStopPattern = validateStopPattern;
|
|
19
|
+
exports.executeRegexWithTimeout = executeRegexWithTimeout;
|
|
19
20
|
exports.formatTimeRemaining = formatTimeRemaining;
|
|
20
21
|
const safe_regex2_1 = __importDefault(require("safe-regex2"));
|
|
21
22
|
const tmux_pane_config_1 = require("../config/tmux-pane-config");
|
|
@@ -92,6 +93,27 @@ function validateStopPattern(pattern) {
|
|
|
92
93
|
return { valid: false, error: 'Invalid regular expression syntax' };
|
|
93
94
|
}
|
|
94
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* Execute a regex test with timeout protection.
|
|
98
|
+
* Uses synchronous execution with safe-regex2 pre-validation as the primary defense.
|
|
99
|
+
*
|
|
100
|
+
* Lives here rather than in auto-yes-state.ts (Issue #1547) so the auto-yes
|
|
101
|
+
* resolver can use it: the resolver is imported by a 'use client' hook, and
|
|
102
|
+
* auto-yes-state pulls in path-validator, which imports `fs`.
|
|
103
|
+
*
|
|
104
|
+
* @param regex - Pre-compiled RegExp to test
|
|
105
|
+
* @param text - Text to test against
|
|
106
|
+
* @param _timeoutMs - Reserved for future timeout implementation (default: 100ms)
|
|
107
|
+
* @returns true/false for match result, null if execution failed
|
|
108
|
+
*/
|
|
109
|
+
function executeRegexWithTimeout(regex, text, _timeoutMs = 100) {
|
|
110
|
+
try {
|
|
111
|
+
return regex.test(text);
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
95
117
|
// =============================================================================
|
|
96
118
|
// Time Formatting
|
|
97
119
|
// =============================================================================
|
|
@@ -61,6 +61,9 @@ exports.isAnyPollerActiveForWorktree = isAnyPollerActiveForWorktree;
|
|
|
61
61
|
const cli_session_1 = require("./session/cli-session");
|
|
62
62
|
const prompt_detector_1 = require("./detection/prompt-detector");
|
|
63
63
|
const auto_yes_resolver_1 = require("./polling/auto-yes-resolver");
|
|
64
|
+
const auto_yes_policy_1 = require("./polling/auto-yes-policy");
|
|
65
|
+
const task_transition_service_1 = require("./tasks/task-transition-service");
|
|
66
|
+
const db_instance_1 = require("./db/db-instance");
|
|
64
67
|
const prompt_answer_sender_1 = require("./prompt-answer-sender");
|
|
65
68
|
const manager_1 = require("./cli-tools/manager");
|
|
66
69
|
const cli_patterns_1 = require("./detection/cli-patterns");
|
|
@@ -291,8 +294,26 @@ async function detectAndRespondToPrompt(worktreeId, pollerState, cliToolId, clea
|
|
|
291
294
|
if (isDuplicatePrompt(pollerState, promptKey)) {
|
|
292
295
|
return 'duplicate';
|
|
293
296
|
}
|
|
294
|
-
// 3. Resolve auto answer
|
|
295
|
-
|
|
297
|
+
// 3. Resolve auto answer under the execution contract's policy (Issue #1547).
|
|
298
|
+
// Auto-Yes calls detectPrompt directly instead of going through
|
|
299
|
+
// status-detector, so this is the only place the policy can gate an
|
|
300
|
+
// auto-answer: a prompt the policy withholds is left for a human, and the
|
|
301
|
+
// response poller's prompt path (WS broadcast + Web Push, see
|
|
302
|
+
// polling/response-checker.ts) is what tells them it is waiting.
|
|
303
|
+
const policy = (0, auto_yes_policy_1.getSessionAutoYesPolicy)(worktreeId, cliToolId, instanceId);
|
|
304
|
+
const resolution = (0, auto_yes_resolver_1.resolveAutoAnswerWithPolicy)(promptDetection.promptData, policy);
|
|
305
|
+
if (resolution.suppressedBy) {
|
|
306
|
+
logger.warn('poller:auto-yes-suppressed-by-policy', {
|
|
307
|
+
worktreeId,
|
|
308
|
+
cliToolId,
|
|
309
|
+
instanceId,
|
|
310
|
+
reason: resolution.suppressedBy,
|
|
311
|
+
mode: policy?.mode ?? null,
|
|
312
|
+
pattern: resolution.pattern,
|
|
313
|
+
promptType: promptDetection.promptData.type,
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
const answer = resolution.answer;
|
|
296
317
|
if (answer === null) {
|
|
297
318
|
return 'no_answer';
|
|
298
319
|
}
|
|
@@ -318,6 +339,13 @@ async function detectAndRespondToPrompt(worktreeId, pollerState, cliToolId, clea
|
|
|
318
339
|
pollerState.lastAnsweredPromptKey = promptKey;
|
|
319
340
|
pollerState.lastAnsweredAt = Date.now();
|
|
320
341
|
logger.info('poller:response-sent', { worktreeId, cliToolId, instanceId });
|
|
342
|
+
// Issue #1548: the prompt was answered without a human. Raised only after
|
|
343
|
+
// the keys actually reached tmux, so a send that threw is not logged as an
|
|
344
|
+
// answer. No-ops when this instance is not running a contract.
|
|
345
|
+
(0, task_transition_service_1.applyEventToActiveTask)((0, db_instance_1.getDbInstance)(), worktreeId, cliToolId,
|
|
346
|
+
// Undefined means the primary instance, which the task lookup identifies
|
|
347
|
+
// by the tool id itself (see getActiveTaskForInstance).
|
|
348
|
+
instanceId ?? cliToolId, 'prompt_answered_auto', { promptType: promptDetection.promptData.type });
|
|
321
349
|
// Dynamic imports avoid a module cycle through terminal-broadcast ->
|
|
322
350
|
// current-output-builder -> auto-yes-manager -> this poller.
|
|
323
351
|
const [{ startPolling: startResponsePolling }, { broadcastTerminalSnapshotAfterInteraction }] = await Promise.all([
|
|
@@ -455,6 +483,8 @@ function startAutoYesPolling(worktreeId, cliToolId, instanceId) {
|
|
|
455
483
|
stopCheckBaselineLength: -1,
|
|
456
484
|
};
|
|
457
485
|
autoYesPollerStates.set(compositeKey, pollerState);
|
|
486
|
+
// A task may have been recorded moments ago; start from a fresh policy read.
|
|
487
|
+
(0, auto_yes_policy_1.invalidateSessionAutoYesPolicy)(compositeKey);
|
|
458
488
|
// Start polling immediately
|
|
459
489
|
pollerState.timerId = setTimeout(() => {
|
|
460
490
|
pollAutoYes(worktreeId, cliToolId, effectiveInstanceId);
|
|
@@ -477,6 +507,7 @@ function stopAutoYesPolling(compositeKey) {
|
|
|
477
507
|
clearTimeout(pollerState.timerId);
|
|
478
508
|
}
|
|
479
509
|
autoYesPollerStates.delete(compositeKey);
|
|
510
|
+
(0, auto_yes_policy_1.invalidateSessionAutoYesPolicy)(compositeKey);
|
|
480
511
|
logger.info('poller:stopped', { compositeKey });
|
|
481
512
|
}
|
|
482
513
|
/**
|
|
@@ -487,6 +518,7 @@ function stopAllAutoYesPolling() {
|
|
|
487
518
|
if (pollerState.timerId) {
|
|
488
519
|
clearTimeout(pollerState.timerId);
|
|
489
520
|
}
|
|
521
|
+
(0, auto_yes_policy_1.invalidateSessionAutoYesPolicy)(key);
|
|
490
522
|
logger.info('poller:stopped', { compositeKey: key, reason: 'shutdown' });
|
|
491
523
|
}
|
|
492
524
|
autoYesPollerStates.clear();
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* auto-yes-poller.ts -> auto-yes-state.ts -> path-validator.ts
|
|
12
12
|
*/
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.THINKING_CHECK_LINE_COUNT = exports.MAX_CONCURRENT_POLLERS = exports.MAX_CONSECUTIVE_ERRORS = exports.MAX_BACKOFF_MS = exports.DUPLICATE_RETRY_EXPIRY_MS = exports.COOLDOWN_INTERVAL_MS = exports.POLLING_INTERVAL_MS = exports.COMPOSITE_KEY_SEPARATOR = void 0;
|
|
14
|
+
exports.THINKING_CHECK_LINE_COUNT = exports.MAX_CONCURRENT_POLLERS = exports.MAX_CONSECUTIVE_ERRORS = exports.MAX_BACKOFF_MS = exports.DUPLICATE_RETRY_EXPIRY_MS = exports.COOLDOWN_INTERVAL_MS = exports.POLLING_INTERVAL_MS = exports.executeRegexWithTimeout = exports.COMPOSITE_KEY_SEPARATOR = void 0;
|
|
15
15
|
exports.buildCompositeKey = buildCompositeKey;
|
|
16
16
|
exports.extractWorktreeId = extractWorktreeId;
|
|
17
17
|
exports.extractCliToolId = extractCliToolId;
|
|
@@ -21,7 +21,6 @@ exports.getAutoYesState = getAutoYesState;
|
|
|
21
21
|
exports.setAutoYesEnabled = setAutoYesEnabled;
|
|
22
22
|
exports.disableAutoYes = disableAutoYes;
|
|
23
23
|
exports.clearAllAutoYesStates = clearAllAutoYesStates;
|
|
24
|
-
exports.executeRegexWithTimeout = executeRegexWithTimeout;
|
|
25
24
|
exports.checkStopCondition = checkStopCondition;
|
|
26
25
|
exports.deleteAutoYesState = deleteAutoYesState;
|
|
27
26
|
exports.getAutoYesStateCompositeKeys = getAutoYesStateCompositeKeys;
|
|
@@ -230,23 +229,11 @@ function clearAllAutoYesStates() {
|
|
|
230
229
|
// Stop Condition (Issue #314)
|
|
231
230
|
// =============================================================================
|
|
232
231
|
/**
|
|
233
|
-
*
|
|
234
|
-
*
|
|
235
|
-
*
|
|
236
|
-
* @internal Exported for testing purposes only.
|
|
237
|
-
* @param regex - Pre-compiled RegExp to test
|
|
238
|
-
* @param text - Text to test against
|
|
239
|
-
* @param _timeoutMs - Reserved for future timeout implementation (default: 100ms)
|
|
240
|
-
* @returns true/false for match result, null if execution failed
|
|
232
|
+
* Re-exported from the shared auto-yes config (Issue #1547 moved it there so the
|
|
233
|
+
* client-safe auto-yes resolver can share the same guarded execution path).
|
|
241
234
|
*/
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
return regex.test(text);
|
|
245
|
-
}
|
|
246
|
-
catch {
|
|
247
|
-
return null;
|
|
248
|
-
}
|
|
249
|
-
}
|
|
235
|
+
var auto_yes_config_2 = require("../config/auto-yes-config");
|
|
236
|
+
Object.defineProperty(exports, "executeRegexWithTimeout", { enumerable: true, get: function () { return auto_yes_config_2.executeRegexWithTimeout; } });
|
|
250
237
|
/**
|
|
251
238
|
* Check if the terminal output matches the stop condition pattern.
|
|
252
239
|
* If matched, disables auto-yes for the worktree/agent.
|
|
@@ -279,7 +266,7 @@ function checkStopCondition(compositeKey, cleanOutput, onStopMatched) {
|
|
|
279
266
|
}
|
|
280
267
|
try {
|
|
281
268
|
const regex = new RegExp(autoYesState.stopPattern);
|
|
282
|
-
const matched = executeRegexWithTimeout(regex, cleanOutput);
|
|
269
|
+
const matched = (0, auto_yes_config_1.executeRegexWithTimeout)(regex, cleanOutput);
|
|
283
270
|
if (matched === null) {
|
|
284
271
|
// Execution failed - disable to prevent future errors
|
|
285
272
|
logger.warn('stop-condition-check', { detail: String({ compositeKey }) });
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
exports.removeAgentInstance = exports.addAgentInstance = exports.setAgentInstances = exports.countAgentInstances = exports.getAgentInstance = exports.getAgentInstances = exports.deleteSessionState = exports.clearInProgressMessageId = exports.setInProgressMessageId = exports.updateSessionState = exports.getSessionState = exports.getMessagesByDateRange = exports.ACTIVE_FILTER = exports.markPendingPromptsAsAnswered = exports.updatePromptData = exports.getMessageById = exports.recomputeLastUserMessage = exports.clearLastUserMessage = exports.updateLastUserMessage = exports.deleteMessagesByInstance = exports.deleteMessagesByCliTool = exports.deleteMessageById = exports.deleteAllMessages = exports.getLastMessage = exports.getLastUserMessage = exports.getMessages = exports.updateMessageContent = exports.createMessage = exports.getLastAssistantMessageAt = exports.deleteWorktreesByIds = exports.deleteRepositoryWorktrees = exports.migrateWorktreeIdPreservingChildren = exports.getWorktreesByRepository = exports.getWorktreeIdsByRepository = exports.getInitialBranch = exports.saveInitialBranch = exports.updateVibeLocalContextWindow = exports.updateVibeLocalModel = exports.updateSelectedAgents = exports.updateCliToolId = exports.updateStatus = exports.updateFavorite = exports.updateLastViewedAt = exports.updateWorktreeLink = exports.updateWorktreeDescription = exports.upsertWorktree = exports.getWorktreeById = exports.getRepositories = exports.getWorktrees = exports.initDatabase = void 0;
|
|
14
14
|
exports.getAssistantExecutionById = exports.updateAssistantExecution = exports.createAssistantExecution = exports.archiveAssistantMessagesFrom = exports.archiveAllAssistantMessages = exports.getAssistantMessageById = exports.getAssistantMessages = exports.updateAssistantMessageStatus = exports.createAssistantMessage = exports.updateAssistantConversation = exports.createAssistantConversation = exports.getAssistantConversationByRepositoryAndCliTool = exports.getAssistantConversationById = exports.updateDailyReportContent = exports.saveDailyReport = exports.getDailyReport = exports.recoverStuckSendingTimers = exports.clearTimerHistory = exports.cleanupOldTimers = exports.getPendingTimerCountByWorktree = exports.cancelTimersByWorktree = exports.cancelTimer = exports.updateTimerStatus = exports.getPendingTimers = exports.getTimerById = exports.getTimersByWorktree = exports.createTimer = exports.WORKTREE_TODO_STATUSES = exports.isWorktreeTodoStatus = exports.reorderWorktreeTodos = exports.deleteWorktreeTodo = exports.updateWorktreeTodo = exports.createWorktreeTodo = exports.getWorktreeTodoById = exports.getTodosByWorktreeId = exports.deleteTodo = exports.updateTodo = exports.createTodo = exports.getTodoById = exports.getAllTodos = exports.getTodosByRepositoryId = exports.MemoDbError = exports.reorderMemos = exports.deleteMemo = exports.updateMemo = exports.createMemo = exports.getMemoById = exports.getMemosByWorktreeId = exports.InvalidAgentInstanceError = exports.AgentInstanceLimitError = void 0;
|
|
15
|
-
exports.deletePushSubscriptionByEndpoint = exports.updatePushSubscriptionPreferences = exports.getPushSubscriptionsForKind = exports.getAllPushSubscriptions = exports.getPushSubscriptionByEndpoint = exports.upsertPushSubscription = exports.deleteAssistantSessionState = exports.updateAssistantSessionState = exports.getAssistantSessionState = exports.listRunningAssistantExecutions = exports.getRunningAssistantExecutionByConversation = exports.getLatestAssistantExecutionByConversation = void 0;
|
|
15
|
+
exports.listTaskEvents = exports.ACTIVE_TASK_STATUSES = exports.TERMINAL_TASK_STATUSES = exports.TASK_STATUSES = exports.isTerminalTaskStatus = exports.getActiveTaskForInstance = exports.getActiveTask = exports.listTasks = exports.getTask = exports.createTask = exports.VERIFICATION_TRIGGERS = exports.MAX_RUN_HISTORY_DAYS = exports.MAX_RUN_HISTORY_LIMIT = exports.DEFAULT_RUN_HISTORY_LIMIT = exports.listVerificationRunsForPeriod = exports.listRunningVerificationRuns = exports.getRunningVerificationRun = exports.listVerificationRuns = exports.getVerificationRun = exports.finishGateResult = exports.createGateResult = exports.finishVerificationRun = exports.createVerificationRun = exports.deletePushSubscriptionByEndpoint = exports.updatePushSubscriptionPreferences = exports.getPushSubscriptionsForKind = exports.getAllPushSubscriptions = exports.getPushSubscriptionByEndpoint = exports.upsertPushSubscription = exports.deleteAssistantSessionState = exports.updateAssistantSessionState = exports.getAssistantSessionState = exports.listRunningAssistantExecutions = exports.getRunningAssistantExecutionByConversation = exports.getLatestAssistantExecutionByConversation = void 0;
|
|
16
16
|
// init-db
|
|
17
17
|
var init_db_1 = require("./init-db");
|
|
18
18
|
Object.defineProperty(exports, "initDatabase", { enumerable: true, get: function () { return init_db_1.initDatabase; } });
|
|
@@ -150,3 +150,36 @@ Object.defineProperty(exports, "getAllPushSubscriptions", { enumerable: true, ge
|
|
|
150
150
|
Object.defineProperty(exports, "getPushSubscriptionsForKind", { enumerable: true, get: function () { return push_subscriptions_db_1.getPushSubscriptionsForKind; } });
|
|
151
151
|
Object.defineProperty(exports, "updatePushSubscriptionPreferences", { enumerable: true, get: function () { return push_subscriptions_db_1.updatePushSubscriptionPreferences; } });
|
|
152
152
|
Object.defineProperty(exports, "deletePushSubscriptionByEndpoint", { enumerable: true, get: function () { return push_subscriptions_db_1.deletePushSubscriptionByEndpoint; } });
|
|
153
|
+
// verification-db (verification gate runs, Issue #1542)
|
|
154
|
+
var verification_db_1 = require("./verification-db");
|
|
155
|
+
Object.defineProperty(exports, "createVerificationRun", { enumerable: true, get: function () { return verification_db_1.createVerificationRun; } });
|
|
156
|
+
Object.defineProperty(exports, "finishVerificationRun", { enumerable: true, get: function () { return verification_db_1.finishVerificationRun; } });
|
|
157
|
+
Object.defineProperty(exports, "createGateResult", { enumerable: true, get: function () { return verification_db_1.createGateResult; } });
|
|
158
|
+
Object.defineProperty(exports, "finishGateResult", { enumerable: true, get: function () { return verification_db_1.finishGateResult; } });
|
|
159
|
+
Object.defineProperty(exports, "getVerificationRun", { enumerable: true, get: function () { return verification_db_1.getVerificationRun; } });
|
|
160
|
+
Object.defineProperty(exports, "listVerificationRuns", { enumerable: true, get: function () { return verification_db_1.listVerificationRuns; } });
|
|
161
|
+
Object.defineProperty(exports, "getRunningVerificationRun", { enumerable: true, get: function () { return verification_db_1.getRunningVerificationRun; } });
|
|
162
|
+
Object.defineProperty(exports, "listRunningVerificationRuns", { enumerable: true, get: function () { return verification_db_1.listRunningVerificationRuns; } });
|
|
163
|
+
Object.defineProperty(exports, "listVerificationRunsForPeriod", { enumerable: true, get: function () { return verification_db_1.listVerificationRunsForPeriod; } });
|
|
164
|
+
Object.defineProperty(exports, "DEFAULT_RUN_HISTORY_LIMIT", { enumerable: true, get: function () { return verification_db_1.DEFAULT_RUN_HISTORY_LIMIT; } });
|
|
165
|
+
Object.defineProperty(exports, "MAX_RUN_HISTORY_LIMIT", { enumerable: true, get: function () { return verification_db_1.MAX_RUN_HISTORY_LIMIT; } });
|
|
166
|
+
Object.defineProperty(exports, "MAX_RUN_HISTORY_DAYS", { enumerable: true, get: function () { return verification_db_1.MAX_RUN_HISTORY_DAYS; } });
|
|
167
|
+
Object.defineProperty(exports, "VERIFICATION_TRIGGERS", { enumerable: true, get: function () { return verification_db_1.VERIFICATION_TRIGGERS; } });
|
|
168
|
+
// tasks-db (execution contracts, Issue #1545)
|
|
169
|
+
var tasks_db_1 = require("./tasks-db");
|
|
170
|
+
Object.defineProperty(exports, "createTask", { enumerable: true, get: function () { return tasks_db_1.createTask; } });
|
|
171
|
+
Object.defineProperty(exports, "getTask", { enumerable: true, get: function () { return tasks_db_1.getTask; } });
|
|
172
|
+
Object.defineProperty(exports, "listTasks", { enumerable: true, get: function () { return tasks_db_1.listTasks; } });
|
|
173
|
+
Object.defineProperty(exports, "getActiveTask", { enumerable: true, get: function () { return tasks_db_1.getActiveTask; } });
|
|
174
|
+
Object.defineProperty(exports, "getActiveTaskForInstance", { enumerable: true, get: function () { return tasks_db_1.getActiveTaskForInstance; } });
|
|
175
|
+
Object.defineProperty(exports, "isTerminalTaskStatus", { enumerable: true, get: function () { return tasks_db_1.isTerminalTaskStatus; } });
|
|
176
|
+
Object.defineProperty(exports, "TASK_STATUSES", { enumerable: true, get: function () { return tasks_db_1.TASK_STATUSES; } });
|
|
177
|
+
Object.defineProperty(exports, "TERMINAL_TASK_STATUSES", { enumerable: true, get: function () { return tasks_db_1.TERMINAL_TASK_STATUSES; } });
|
|
178
|
+
Object.defineProperty(exports, "ACTIVE_TASK_STATUSES", { enumerable: true, get: function () { return tasks_db_1.ACTIVE_TASK_STATUSES; } });
|
|
179
|
+
// task-events-db (task state machine log, Issue #1548).
|
|
180
|
+
// `updateTaskStatus` and `insertTaskEvent` are intentionally absent from this
|
|
181
|
+
// barrel: `applyTaskEvent` (@/lib/tasks/task-transition-service) is the only
|
|
182
|
+
// writer of either, and reaching around it would put a status in the table with
|
|
183
|
+
// no event explaining it.
|
|
184
|
+
var task_events_db_1 = require("./task-events-db");
|
|
185
|
+
Object.defineProperty(exports, "listTaskEvents", { enumerable: true, get: function () { return task_events_db_1.listTaskEvents; } });
|
|
@@ -32,6 +32,9 @@ const v45_skill_installations_1 = require("./v45-skill-installations");
|
|
|
32
32
|
const v46_skill_installations_cascade_1 = require("./v46-skill-installations-cascade");
|
|
33
33
|
const v47_skill_installations_roots_1 = require("./v47-skill-installations-roots");
|
|
34
34
|
const v48_skill_operations_audit_index_1 = require("./v48-skill-operations-audit-index");
|
|
35
|
+
const v49_verification_runs_1 = require("./v49-verification-runs");
|
|
36
|
+
const v50_tasks_1 = require("./v50-tasks");
|
|
37
|
+
const v51_task_events_1 = require("./v51-task-events");
|
|
35
38
|
/**
|
|
36
39
|
* Complete ordered list of all migrations.
|
|
37
40
|
* Used internally by the barrel file (db-migrations.ts); NOT exported from the barrel (DR2-004).
|
|
@@ -67,4 +70,7 @@ exports.migrations = [
|
|
|
67
70
|
...v46_skill_installations_cascade_1.v46_migrations,
|
|
68
71
|
...v47_skill_installations_roots_1.v47_migrations,
|
|
69
72
|
...v48_skill_operations_audit_index_1.v48_migrations,
|
|
73
|
+
...v49_verification_runs_1.v49_migrations,
|
|
74
|
+
...v50_tasks_1.v50_migrations,
|
|
75
|
+
...v51_task_events_1.v51_migrations,
|
|
70
76
|
];
|
|
@@ -17,7 +17,7 @@ const path_1 = __importDefault(require("path"));
|
|
|
17
17
|
* Current schema version
|
|
18
18
|
* Increment this when adding new migrations
|
|
19
19
|
*/
|
|
20
|
-
exports.CURRENT_SCHEMA_VERSION =
|
|
20
|
+
exports.CURRENT_SCHEMA_VERSION = 51;
|
|
21
21
|
/**
|
|
22
22
|
* Get current schema version from database
|
|
23
23
|
*/
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Migration v49: verification_runs / verification_gate_results (Issue #1542).
|
|
4
|
+
*
|
|
5
|
+
* The first place an *interactive* agent's work gets a recorded verdict.
|
|
6
|
+
* `execution_logs` already stores status + exit_code + result, but only for
|
|
7
|
+
* scheduled executions; interactive sessions leave nothing behind but
|
|
8
|
+
* `chat_messages`, so "the agent finished" has never been distinguishable from
|
|
9
|
+
* "the agent produced something that passes".
|
|
10
|
+
*
|
|
11
|
+
* One run per verification attempt, one gate result per command inside it.
|
|
12
|
+
* Gate results cascade with their run: a run is the only thing that gives a
|
|
13
|
+
* gate result meaning, so an orphan row is not a record, it is noise.
|
|
14
|
+
*
|
|
15
|
+
* Both status vocabularies are CHECK-constrained rather than validated in the
|
|
16
|
+
* writer alone. The distinctions they encode are the point of the table and a
|
|
17
|
+
* typo that lands as a new status value would silently create a bucket nothing
|
|
18
|
+
* queries:
|
|
19
|
+
* run.not_started — the work-evidence gate failed (no commits, no diff);
|
|
20
|
+
* distinct from `failed`, which means the work was judged.
|
|
21
|
+
* run.error — the runner broke before any gate ran (bad config, spawn
|
|
22
|
+
* failure); no verdict was reached about the work at all.
|
|
23
|
+
* gate.skipped — deliberately not run (e.g. skipInPrimaryCheckout); the
|
|
24
|
+
* reason belongs in log_tail so a skip is never mistaken
|
|
25
|
+
* for a pass.
|
|
26
|
+
*
|
|
27
|
+
* `task_id` is a free column, not a foreign key: the `tasks` table arrives in
|
|
28
|
+
* Phase 2 (#1545). Declaring a REFERENCES clause against a table that does not
|
|
29
|
+
* exist yet would make every insert fail once foreign_keys is ON.
|
|
30
|
+
*
|
|
31
|
+
* Timestamps are epoch milliseconds (INTEGER), matching v44 onward.
|
|
32
|
+
*/
|
|
33
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
|
+
exports.v49_migrations = void 0;
|
|
35
|
+
exports.v49_migrations = [
|
|
36
|
+
{
|
|
37
|
+
version: 49,
|
|
38
|
+
name: 'add-verification-runs',
|
|
39
|
+
up: (db) => {
|
|
40
|
+
db.exec(`
|
|
41
|
+
CREATE TABLE IF NOT EXISTS verification_runs (
|
|
42
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
43
|
+
worktree_id TEXT NOT NULL,
|
|
44
|
+
instance_id TEXT,
|
|
45
|
+
task_id TEXT,
|
|
46
|
+
trigger TEXT NOT NULL CHECK (trigger IN ('manual','wait','api','task')),
|
|
47
|
+
status TEXT NOT NULL CHECK (status IN ('running','passed','failed','not_started','error','cancelled')),
|
|
48
|
+
base_ref TEXT,
|
|
49
|
+
started_at INTEGER NOT NULL,
|
|
50
|
+
finished_at INTEGER
|
|
51
|
+
);
|
|
52
|
+
`);
|
|
53
|
+
db.exec(`
|
|
54
|
+
CREATE TABLE IF NOT EXISTS verification_gate_results (
|
|
55
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
56
|
+
run_id INTEGER NOT NULL REFERENCES verification_runs(id) ON DELETE CASCADE,
|
|
57
|
+
gate_id TEXT NOT NULL,
|
|
58
|
+
command TEXT NOT NULL,
|
|
59
|
+
status TEXT NOT NULL CHECK (status IN ('running','passed','failed','timeout','skipped','error')),
|
|
60
|
+
exit_code INTEGER,
|
|
61
|
+
duration_ms INTEGER,
|
|
62
|
+
log_tail TEXT,
|
|
63
|
+
started_at INTEGER NOT NULL,
|
|
64
|
+
finished_at INTEGER
|
|
65
|
+
);
|
|
66
|
+
`);
|
|
67
|
+
db.exec(`
|
|
68
|
+
CREATE INDEX IF NOT EXISTS idx_verification_runs_worktree
|
|
69
|
+
ON verification_runs(worktree_id, started_at DESC);
|
|
70
|
+
`);
|
|
71
|
+
db.exec(`
|
|
72
|
+
CREATE INDEX IF NOT EXISTS idx_verification_gate_results_run
|
|
73
|
+
ON verification_gate_results(run_id);
|
|
74
|
+
`);
|
|
75
|
+
},
|
|
76
|
+
down: (db) => {
|
|
77
|
+
// Child first, mirroring the dependency direction. Under
|
|
78
|
+
// PRAGMA foreign_keys = ON (how db-instance.ts opens the database) the
|
|
79
|
+
// reverse order also works today, but only because the cascade absorbs
|
|
80
|
+
// the parent's implicit DELETE — that is a property of the cascade, not
|
|
81
|
+
// of DROP TABLE.
|
|
82
|
+
db.exec('DROP TABLE IF EXISTS verification_gate_results;');
|
|
83
|
+
db.exec('DROP TABLE IF EXISTS verification_runs;');
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
];
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Migration v50: tasks (Issue #1545, Phase 2-1).
|
|
4
|
+
*
|
|
5
|
+
* The table the execution contract lands in. Until now a message sent to an
|
|
6
|
+
* agent left only a `chat_messages` row: what the agent was *supposed* to do,
|
|
7
|
+
* which paths it was allowed to touch, and what would count as done existed
|
|
8
|
+
* nowhere the system could read back. A task row is that record.
|
|
9
|
+
*
|
|
10
|
+
* `contract_json` is a parsed snapshot, not a path to re-read. A contract file
|
|
11
|
+
* edited after the send must not retroactively change what the running task
|
|
12
|
+
* agreed to — otherwise "did it meet the contract?" has no fixed answer.
|
|
13
|
+
* `contract_path` is kept alongside it for provenance only.
|
|
14
|
+
*
|
|
15
|
+
* The `status` vocabulary is CHECK-constrained because the distinctions are the
|
|
16
|
+
* point of the table and a typo landing as a new value would create a bucket
|
|
17
|
+
* nothing queries:
|
|
18
|
+
* pending — row exists, message not sent yet
|
|
19
|
+
* running — sent; the agent is working
|
|
20
|
+
* waiting_input — blocked on a prompt (used by the Phase 3-1 state machine)
|
|
21
|
+
* verifying — a verification run is in flight for this task
|
|
22
|
+
* succeeded — that run came back `passed`
|
|
23
|
+
* failed — the run came back `failed`, or no verdict was reachable
|
|
24
|
+
* not_started — the run came back `not_started` (no work evidence at all)
|
|
25
|
+
* cancelled — abandoned explicitly
|
|
26
|
+
*
|
|
27
|
+
* `last_verification_run_id` deliberately carries no REFERENCES clause, for the
|
|
28
|
+
* same reason `verification_runs.task_id` (v49) does not point here: the two
|
|
29
|
+
* tables reference each other, so a foreign key in either direction would order
|
|
30
|
+
* the migrations against themselves. Application code keeps them consistent.
|
|
31
|
+
*
|
|
32
|
+
* Timestamps are epoch milliseconds (INTEGER), matching v44 onward.
|
|
33
|
+
*/
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
exports.v50_migrations = void 0;
|
|
36
|
+
exports.v50_migrations = [
|
|
37
|
+
{
|
|
38
|
+
version: 50,
|
|
39
|
+
name: 'add-tasks',
|
|
40
|
+
up: (db) => {
|
|
41
|
+
db.exec(`
|
|
42
|
+
CREATE TABLE IF NOT EXISTS tasks (
|
|
43
|
+
id TEXT PRIMARY KEY,
|
|
44
|
+
worktree_id TEXT NOT NULL,
|
|
45
|
+
cli_tool_id TEXT NOT NULL,
|
|
46
|
+
instance_id TEXT,
|
|
47
|
+
title TEXT NOT NULL,
|
|
48
|
+
goal TEXT NOT NULL,
|
|
49
|
+
contract_path TEXT,
|
|
50
|
+
contract_json TEXT NOT NULL,
|
|
51
|
+
status TEXT NOT NULL CHECK (status IN ('pending','running','waiting_input','verifying','succeeded','failed','not_started','cancelled')),
|
|
52
|
+
last_verification_run_id INTEGER,
|
|
53
|
+
created_at INTEGER NOT NULL,
|
|
54
|
+
updated_at INTEGER NOT NULL,
|
|
55
|
+
started_at INTEGER,
|
|
56
|
+
finished_at INTEGER
|
|
57
|
+
);
|
|
58
|
+
`);
|
|
59
|
+
db.exec(`
|
|
60
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_worktree
|
|
61
|
+
ON tasks(worktree_id, created_at DESC);
|
|
62
|
+
`);
|
|
63
|
+
},
|
|
64
|
+
down: (db) => {
|
|
65
|
+
db.exec('DROP TABLE IF EXISTS tasks;');
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
];
|