commandmate 0.24.0 → 0.26.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 +266 -266
- package/.next/app-path-routes-manifest.json +15 -15
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +3 -3
- package/.next/react-loadable-manifest.json +3 -3
- package/.next/required-server-files.json +1 -1
- 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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_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_client-reference-manifest.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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +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_client-reference-manifest.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_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_client-reference-manifest.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.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_client-reference-manifest.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_client-reference-manifest.js +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_client-reference-manifest.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
- package/.next/server/app/chat/page.js +2 -2
- package/.next/server/app/chat/page.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page.js +2 -2
- package/.next/server/app/login/page.js.nft.json +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page.js +2 -2
- package/.next/server/app/more/page.js.nft.json +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page.js +1 -1
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page.js +2 -2
- package/.next/server/app/repositories/page.js.nft.json +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page.js +1 -1
- package/.next/server/app/review/page.js.nft.json +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.js +1 -1
- package/.next/server/app/sessions/page.js.nft.json +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page.js +2 -2
- package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page.js +2 -2
- package/.next/server/app/skills/installed/page.js.nft.json +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page.js +2 -2
- package/.next/server/app/skills/page.js.nft.json +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +6 -6
- package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +15 -15
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2404.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3346.js +1 -1
- package/.next/server/chunks/4455.js +1 -1
- package/.next/server/chunks/5164.js +1 -1
- package/.next/server/chunks/5571.js +1 -1
- package/.next/server/chunks/5959.js +4 -4
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6274.js +12 -9
- package/.next/server/chunks/6285.js +1 -1
- package/.next/server/chunks/7458.js +6 -6
- package/.next/server/chunks/848.js +1 -1
- package/.next/server/chunks/8730.js +1 -0
- package/.next/server/chunks/880.js +1 -1
- package/.next/server/chunks/9328.js +1 -1
- package/.next/server/chunks/9373.js +4 -3
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/2053-dfac2d49227cc942.js +1 -0
- package/.next/static/chunks/3898-ef488bfa804507d9.js +1 -0
- package/.next/static/chunks/5229-35f9acab97a553c5.js +1 -0
- package/.next/static/chunks/{6381-18a6a02a94d00d76.js → 6381-9303430933084b56.js} +1 -1
- package/.next/static/chunks/{9599-d29d2f8eeaf7c249.js → 8649-f551b0010dba4986.js} +1 -1
- package/.next/static/chunks/9263.f2034ec525abcf72.js +1 -0
- package/.next/static/chunks/app/chat/page-439b35c9cb90dbe0.js +1 -0
- package/.next/static/chunks/app/login/page-eefd515d8c37e5ee.js +1 -0
- package/.next/static/chunks/app/more/page-889b7546a8a553dc.js +1 -0
- package/.next/static/chunks/app/page-a8d04ac0e3e4c9fc.js +1 -0
- package/.next/static/chunks/app/repositories/page-f3c4d8839b1ca203.js +1 -0
- package/.next/static/chunks/app/review/page-6dc88649fe88ac16.js +1 -0
- package/.next/static/chunks/app/sessions/page-2c9ed9e969097688.js +1 -0
- package/.next/static/chunks/app/skills/[skillId]/page-19beef6121c4c982.js +1 -0
- package/.next/static/chunks/app/skills/installed/page-d5b9cef6d21fabda.js +1 -0
- package/.next/static/chunks/app/skills/page-06ef637e07dd9377.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/files/[...path]/{page-9ddcb224594f620f.js → page-5fed3984fafcd910.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/page-fbdf4621a2911ac1.js +1 -0
- package/.next/static/chunks/{webpack-3534d858912a6c92.js → webpack-9d892a9ff07c289d.js} +1 -1
- package/.next/static/css/e865c4979a41aa03.css +1 -0
- package/.next/trace +12 -12
- package/README.md +96 -45
- package/dist/cli/commands/task.d.ts.map +1 -1
- package/dist/cli/commands/task.js +2 -1
- package/dist/cli/commands/verify.d.ts +14 -0
- package/dist/cli/commands/verify.d.ts.map +1 -1
- package/dist/cli/commands/verify.js +109 -3
- 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 +184 -4
- package/dist/cli/types/api-responses.d.ts +172 -0
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/index.d.ts +31 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/types/index.js +26 -0
- package/dist/cli/utils/verify-runner.d.ts +36 -1
- package/dist/cli/utils/verify-runner.d.ts.map +1 -1
- package/dist/cli/utils/verify-runner.js +114 -6
- package/dist/server/src/config/activity-bar-config.js +5 -1
- package/dist/server/src/lib/auto-yes-poller.js +40 -4
- package/dist/server/src/lib/auto-yes-state.js +108 -3
- package/dist/server/src/lib/cli-tools/antigravity.js +8 -4
- package/dist/server/src/lib/cli-tools/codex.js +63 -30
- package/dist/server/src/lib/cli-tools/copilot.js +5 -1
- package/dist/server/src/lib/cli-tools/gemini.js +15 -15
- package/dist/server/src/lib/cli-tools/opencode.js +9 -3
- package/dist/server/src/lib/detection/cli-patterns.js +148 -6
- package/dist/server/src/lib/detection/status-detector.js +28 -0
- package/dist/server/src/lib/detection/upstream-faults.js +120 -0
- package/dist/server/src/lib/hooks/permission-decision-service.js +13 -5
- package/dist/server/src/lib/hooks/sources/antigravity/hooks-config.js +18 -11
- package/dist/server/src/lib/hooks/sources/antigravity/source.js +10 -9
- package/dist/server/src/lib/hooks/sources/claude/source.js +5 -2
- package/dist/server/src/lib/hooks/sources/codex/hooks-config.js +26 -18
- package/dist/server/src/lib/hooks/sources/codex/source.js +6 -9
- package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +22 -12
- package/dist/server/src/lib/hooks/sources/copilot/source.js +1 -1
- package/dist/server/src/lib/hooks/sources/define-source.js +6 -4
- package/dist/server/src/lib/hooks/sources/gemini/settings-generator.js +14 -8
- package/dist/server/src/lib/hooks/sources/gemini/source.js +29 -29
- package/dist/server/src/lib/hooks/sources/index.js +4 -1
- package/dist/server/src/lib/hooks/sources/launch-command.js +61 -0
- package/dist/server/src/lib/hooks/sources/legacy-relay.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode/source.js +10 -7
- package/dist/server/src/lib/polling/prompt-dedup-state.js +95 -0
- package/dist/server/src/lib/polling/response-checker.js +12 -0
- package/dist/server/src/lib/polling/response-poller-core.js +11 -1
- package/dist/server/src/lib/session/agent-session-lifecycle.js +28 -7
- package/dist/server/src/lib/session/claude-session.js +5 -1
- package/dist/server/src/lib/session/current-output-builder.js +34 -0
- package/dist/server/src/lib/verification/env-snapshot.js +21 -3
- package/dist/server/src/lib/verification/gate-runner.js +258 -7
- package/dist/server/src/lib/verification/machine-lock.js +204 -0
- package/dist/server/src/lib/verification/scope-gate.js +126 -13
- package/dist/server/src/lib/verification/verify-config.js +85 -3
- package/dist/server/src/lib/verification/worktree-index.js +140 -0
- package/package.json +1 -1
- package/.next/server/chunks/3451.js +0 -1
- package/.next/static/chunks/2053-52d3c82014e1cd54.js +0 -1
- package/.next/static/chunks/5229-0610b4e3288e777d.js +0 -1
- package/.next/static/chunks/744-3ad06d8c8ca482fc.js +0 -1
- package/.next/static/chunks/9263.5259f73f89220d64.js +0 -1
- package/.next/static/chunks/app/chat/page-15d13fc024d78f5d.js +0 -1
- package/.next/static/chunks/app/login/page-0247a3fb569bb22b.js +0 -1
- package/.next/static/chunks/app/more/page-b8ba537baeac8d5b.js +0 -1
- package/.next/static/chunks/app/page-afc64708362f31e5.js +0 -1
- package/.next/static/chunks/app/repositories/page-3469dacb6be7842f.js +0 -1
- package/.next/static/chunks/app/review/page-2d9cb7e068f8f35a.js +0 -1
- package/.next/static/chunks/app/sessions/page-7470c2bfd89e0df9.js +0 -1
- package/.next/static/chunks/app/skills/[skillId]/page-5e24481162f7ea78.js +0 -1
- package/.next/static/chunks/app/skills/installed/page-efd2d710a27f9735.js +0 -1
- package/.next/static/chunks/app/skills/page-0498adfc6e48684b.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-e611d30e47989e5d.js +0 -1
- package/.next/static/css/3ac44cfc082d02ad.css +0 -1
- /package/.next/static/{smu4mnL7qMf8w38n9dQJE → hNdNiFes2xLls68SWhAU9}/_buildManifest.js +0 -0
- /package/.next/static/{smu4mnL7qMf8w38n9dQJE → hNdNiFes2xLls68SWhAU9}/_ssgManifest.js +0 -0
package/README.md
CHANGED
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
**[commandmate website →](https://kewton.github.io/CommandMate/)**
|
|
13
13
|
|
|
14
14
|
<p align="center">
|
|
15
|
-
<img src="./docs/images/demo-desktop.gif" width="600" alt="
|
|
15
|
+
<img src="./docs/images/demo-desktop.gif" width="600" alt="A task contract is sent, the verification gates run, and the exit code returns RESULT passed" />
|
|
16
16
|
</p>
|
|
17
17
|
|
|
18
|
-
> **
|
|
18
|
+
> **From vibe coding to Vibe Engineering.**
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
Vibe Engineering — the AI does the building; the system, not your expertise, guarantees the engineering.
|
|
21
21
|
|
|
22
22
|
```bash
|
|
23
23
|
npx commandmate@latest
|
|
@@ -27,11 +27,11 @@ npx commandmate@latest
|
|
|
27
27
|
|
|
28
28
|
---
|
|
29
29
|
|
|
30
|
-
CommandMate adds
|
|
31
|
-
It does not replace tmux, Git worktrees, or your
|
|
30
|
+
CommandMate adds the machinery — a contract before the work, verification gates after it, Skills that carry the method — on top of the agent CLIs you already use.
|
|
31
|
+
It does not replace tmux, Git worktrees, your terminal, or your agent CLI. It puts a frame around them, so the work arrives verified instead of merely finished.
|
|
32
32
|
|
|
33
33
|
<p align="center">
|
|
34
|
-
<img src="./docs/images/demo-mobile.gif" width="300" alt="
|
|
34
|
+
<img src="./docs/images/demo-mobile.gif" width="300" alt="A waiting agent reaches you, and the prompt is answered from a phone" />
|
|
35
35
|
</p>
|
|
36
36
|
|
|
37
37
|
Works on desktop and mobile — monitor and steer sessions from any browser, including your phone.
|
|
@@ -44,8 +44,13 @@ If this is the kind of AI development workflow you want, [give the repo a star](
|
|
|
44
44
|
|
|
45
45
|
| Feature | What it does | Why it matters |
|
|
46
46
|
|---------|-------------|----------------|
|
|
47
|
+
| **Task Contract** | Declare the goal, the changeable scope and the gates before the work starts, then `send --contract` hands them to the agent | The agent works to a written definition of done instead of guessing at one |
|
|
48
|
+
| **Verification Gates** | Gates declared in `.commandmate/verify.yaml` run through `verify` / `wait --verify` and return exit `0` / `20` / `21` | "Done" is what a verification run returned, not what the agent said |
|
|
49
|
+
| **Evidence & Metrics** | The built-in work-evidence and scope gates, plus `verify history`, `task show` and `report metrics` | Commits, gate logs and numbers are left behind for the next decision |
|
|
50
|
+
| **Skills Catalog** | Install and update official Skills per worktree, from the web UI or `commandmate skill` | The method is installed for the agent to read, not kept in someone's head |
|
|
51
|
+
| **Never miss a waiting agent** | A waiting agent shows up as a badge, a toast, the tab title, the PWA app badge and a push notification | You find out the moment an agent needs you, even away from the desk |
|
|
47
52
|
| **Git Worktree Sessions** | One session per worktree, parallel execution | Multiple issues progress simultaneously without interference |
|
|
48
|
-
| **Multi-Agent Support** | Choose Claude Code, Codex, Gemini, or local models per
|
|
53
|
+
| **Multi-Agent Support** | Choose Claude Code, Codex, Gemini CLI, Copilot, OpenCode, Antigravity or local models per worktree | Pick the right agent for each task |
|
|
49
54
|
| **Auto Yes Mode** | Agent runs without stopping for confirmations | Optional unattended mode for trusted workflows — review the Security section before enabling |
|
|
50
55
|
| **Web UI (Desktop & Mobile)** | Full session control from any browser | Monitor and steer from your desk or your phone |
|
|
51
56
|
| **File Viewer & Markdown Editor** | Browse and edit worktree files in the browser | Review changes and update AI instructions without opening an IDE |
|
|
@@ -111,12 +116,16 @@ development machine or phone will already have.
|
|
|
111
116
|
flowchart LR
|
|
112
117
|
A["Browser / Phone"] -->|HTTP| B["CommandMate Server"]
|
|
113
118
|
B --> C["Session Manager"]
|
|
119
|
+
G["Task Contract\n.commandmate/tasks/*.yaml"] --> C
|
|
114
120
|
C -->|"spawn / attach"| D["tmux sessions\n(per worktree)"]
|
|
115
|
-
D --> E["
|
|
121
|
+
D --> E["Agent CLI"]
|
|
116
122
|
C <-->|"read / write"| F[("Local DB\n& State")]
|
|
123
|
+
E --> H["Verification Gates\n.commandmate/verify.yaml"]
|
|
124
|
+
H -->|"exit 0 / 20 / 21"| B
|
|
117
125
|
```
|
|
118
126
|
|
|
119
127
|
Each Git worktree gets its own tmux session, so multiple tasks run in parallel without interference.
|
|
128
|
+
The contract goes in before the session starts; the gates run after it stops, and their exit code is the verdict.
|
|
120
129
|
|
|
121
130
|
---
|
|
122
131
|
|
|
@@ -405,55 +414,92 @@ npm start
|
|
|
405
414
|
---
|
|
406
415
|
|
|
407
416
|
<details>
|
|
408
|
-
<summary><strong>
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
|
413
|
-
|
|
414
|
-
|
|
|
415
|
-
|
|
|
416
|
-
|
|
|
417
|
-
|
|
|
418
|
-
|
|
|
419
|
-
|
|
|
420
|
-
|
|
|
421
|
-
| Token Authentication | Yes | N/A (Anthropic account) | N/A (app) | No | N/A (cloud) |
|
|
422
|
-
| Free / OSS | Yes | Requires Pro/Max | Free + Paid | Yes | $20/mo |
|
|
423
|
-
| Runs 100% Locally | Yes | Via Anthropic API | Server-routed | Yes | Cloud fallback |
|
|
417
|
+
<summary><strong>With / Without CommandMate</strong></summary>
|
|
418
|
+
|
|
419
|
+
The comparison that matters is not against other products; it is against the way of working.
|
|
420
|
+
|
|
421
|
+
| Dimension | Vibe coding | Vibe Engineering with CommandMate |
|
|
422
|
+
|---|---|---|
|
|
423
|
+
| What "done" means | The agent says it's done | A verification run says so — exit 0 / 20 / 21 |
|
|
424
|
+
| Scope of change | Whatever the agent touched | Declared in the contract, enforced by the scope gate |
|
|
425
|
+
| Method | In someone's head | Installed as Skills from the Catalog (`cmate-task-contract`, `cmate-verify`, …) |
|
|
426
|
+
| Evidence | A chat transcript | Commits, gate logs, `verify history`, `report metrics` |
|
|
427
|
+
| Parallel work | Terminal tabs | One worktree and one contract per task |
|
|
428
|
+
| When it stops | You notice, eventually | Waiting is surfaced: badge, toast, tab title, push |
|
|
429
|
+
| Which agent | Locked to one | Claude Code, Codex, Gemini CLI, Copilot, OpenCode, Antigravity, local models |
|
|
424
430
|
|
|
425
431
|
</details>
|
|
426
432
|
|
|
427
433
|
---
|
|
428
434
|
|
|
429
|
-
##
|
|
435
|
+
## Vibe Engineering workflow
|
|
430
436
|
|
|
431
437
|
<a id="issue-driven-development"></a>
|
|
432
438
|
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
439
|
+
We do not make the AI smarter. We make the software-engineering ability its user needed into a system.
|
|
440
|
+
That system is three things you can hand to any agent: the method, as installed Skills; the contract,
|
|
441
|
+
declared before the work; the gates, which decide afterwards whether the work is done.
|
|
442
|
+
|
|
443
|
+
```
|
|
444
|
+
Requirement → Contract → Agent runs (any CLI, per worktree) → Verified result
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
### 1. Install the method as Skills
|
|
436
448
|
|
|
437
|
-
|
|
449
|
+
Skills come from the official Catalog
|
|
450
|
+
([Kewton/commandmate-skills](https://github.com/Kewton/commandmate-skills)) and install into the
|
|
451
|
+
worktree you choose — from the web UI (`/skills`, or the Skills pane of a worktree) or from the CLI.
|
|
438
452
|
|
|
453
|
+
```bash
|
|
454
|
+
commandmate skill list
|
|
455
|
+
commandmate skill install cmate-task-contract --worktree <worktree-id> --version <version> --yes
|
|
439
456
|
```
|
|
440
|
-
|
|
457
|
+
|
|
458
|
+
| Skill | What it covers |
|
|
459
|
+
|-------|----------------|
|
|
460
|
+
| `cmate-issue-authoring` | Turns a feature description into a set of implementable issues |
|
|
461
|
+
| `cmate-issue-refinement` | Refines a vague issue into an implementable specification, read-only |
|
|
462
|
+
| `cmate-task-contract` | Drafts `.commandmate/tasks/<name>.yaml` from an issue: goal, scope, gates |
|
|
463
|
+
| `cmate-verify` | Declares the gates in `.commandmate/verify.yaml` and runs them for a real exit code |
|
|
464
|
+
| `cmate-verify-advisor` | Proposes gate improvements from the verification history |
|
|
465
|
+
| `cmate-worker-development` | The six steps a worker follows: read, investigate, plan, implement, verify, evidence |
|
|
466
|
+
| `cmate-acceptance-test` | Checks the issue's acceptance criteria and returns Go / Conditional Go / No-Go |
|
|
467
|
+
| `cmate-orchestrate` | Plans several issues in parallel, dispatches them with contracts, judges by exit code |
|
|
468
|
+
|
|
469
|
+
The Catalog also publishes `cmate-repository-analysis`, `cmate-orchestrate-monitor`,
|
|
470
|
+
`cmate-worktree-setup` and `cmate-worktree-cleanup`. See the
|
|
471
|
+
[Skills guide](./docs/user-guide/skills.md) for the support matrix, the install roots, and the
|
|
472
|
+
rollback story.
|
|
473
|
+
|
|
474
|
+
### 2. Declare the contract, then let the gates judge
|
|
475
|
+
|
|
476
|
+
```bash
|
|
477
|
+
# .commandmate/tasks/issue-123.yaml declares goal, scope.allow / scope.deny and the gates to run
|
|
478
|
+
commandmate send <worktree-id> --contract .commandmate/tasks/issue-123.yaml
|
|
479
|
+
commandmate wait <worktree-id> --verify
|
|
441
480
|
```
|
|
442
481
|
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
482
|
+
`--contract` supplies the message, so you do not pass one yourself. `wait --verify` runs the gates
|
|
483
|
+
once the agent stops and returns the verdict as its exit code: **0** everything passed, **20** a gate
|
|
484
|
+
failed, **21** the work-evidence gate found neither a commit nor an uncommitted change.
|
|
485
|
+
|
|
486
|
+
The contract format is specified in [Task Contract](./docs/design/task-contract.md), the gate format
|
|
487
|
+
in [Verification gates](./docs/design/verification-config.md) — both specifications are written in
|
|
488
|
+
Japanese, but the YAML they specify is the same on either side.
|
|
489
|
+
|
|
490
|
+
### Read next
|
|
491
|
+
|
|
492
|
+
| Document | What it gives you |
|
|
493
|
+
|----------|-------------------|
|
|
494
|
+
| [Concept](./docs/en/concept.md) | The Vision, the Mission, and how each implementation item maps to a feature |
|
|
495
|
+
| [Tutorial](./docs/en/user-guide/tutorial.md) | Fork a sample repository and run one task through contract and verification in about fifteen minutes |
|
|
496
|
+
| [Product Highlights](./docs/en/features/product-highlights.md) | A feature-by-feature tour of the product |
|
|
497
|
+
| [CLI Operations Guide](./docs/en/user-guide/cli-operations-guide.md) | Every agent-facing command, in depth |
|
|
498
|
+
|
|
499
|
+
> **Developing CommandMate itself?** The `/work-plan`, `/pm-auto-dev` and other slash commands under
|
|
500
|
+
> `.claude/commands` belong to **this repository only** — they are not installed into yours, and the
|
|
501
|
+
> portable equivalents are the Catalog Skills above. See the
|
|
502
|
+
> [Commands guide](./docs/en/user-guide/commands-guide.md).
|
|
457
503
|
|
|
458
504
|
---
|
|
459
505
|
|
|
@@ -462,9 +508,14 @@ For details, see the [issues](https://github.com/Kewton/CommandMate/issues), [de
|
|
|
462
508
|
| Document | Description |
|
|
463
509
|
|----------|-------------|
|
|
464
510
|
| [CLI Setup Guide](./docs/en/user-guide/cli-setup-guide.md) | Installation and initial setup |
|
|
511
|
+
| [Tutorial](./docs/en/user-guide/tutorial.md) | Fork a sample repository and go from contract to verified result in about fifteen minutes |
|
|
465
512
|
| [Web App Guide](./docs/en/user-guide/webapp-guide.md) | Basic web app operations |
|
|
466
513
|
| [Quick Start](./docs/en/user-guide/quick-start.md) | Using Claude Code commands |
|
|
467
|
-
| [
|
|
514
|
+
| [CLI Operations Guide](./docs/en/user-guide/cli-operations-guide.md) | Driving sessions from the CLI: execution contracts, verification gates, Skills, agent instances |
|
|
515
|
+
| [Concept](./docs/en/concept.md) | The canonical Vision, Mission and core principle, and how each implementation item maps to a feature |
|
|
516
|
+
| [Product Highlights](./docs/en/features/product-highlights.md) | A feature-by-feature tour of the product |
|
|
517
|
+
| [Skills Guide](./docs/en/user-guide/skills.md) | Installing official Catalog Skills into a worktree |
|
|
518
|
+
| [Agent Event Hooks](./docs/en/user-guide/agent-event-hooks.md) | Structured agent events instead of terminal scraping |
|
|
468
519
|
| [Architecture](./docs/en/architecture.md) | System design |
|
|
469
520
|
| [Deployment Guide](./docs/en/DEPLOYMENT.md) | Production environment setup |
|
|
470
521
|
| [UI/UX Guide](./docs/en/UI_UX_GUIDE.md) | UI implementation details |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/task.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6BpC,wBAAgB,iBAAiB,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/task.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6BpC,wBAAgB,iBAAiB,IAAI,OAAO,CA4H3C"}
|
|
@@ -108,7 +108,8 @@ function createTaskCommand() {
|
|
|
108
108
|
// — verify.yaml can be opened, this cannot. Printing the id alone would
|
|
109
109
|
// leave a reader unable to tell which criterion the run was judged by.
|
|
110
110
|
for (const gate of task.contract.verify.gateDefinitions ?? []) {
|
|
111
|
-
|
|
111
|
+
const mutex = gate.mutex ? `, mutex=${gate.mutex}` : '';
|
|
112
|
+
console.log(`GATE-DEF: ${gate.id} ${gate.command} (timeoutSec=${gate.timeoutSec}${mutex})`);
|
|
112
113
|
}
|
|
113
114
|
console.log(`AUTO-YES: ${task.contract.autoYes.mode ?? 'unset'}`);
|
|
114
115
|
console.log(`CREATED: ${task.createdAt}`);
|
|
@@ -15,5 +15,19 @@
|
|
|
15
15
|
* succeeds exits 0 even when it finds nothing.
|
|
16
16
|
*/
|
|
17
17
|
import { Command } from 'commander';
|
|
18
|
+
import type { VerificationScopeDetail } from '../types/api-responses';
|
|
19
|
+
/**
|
|
20
|
+
* Read the scope gate's report back into structured evidence.
|
|
21
|
+
*
|
|
22
|
+
* Parsing the gate's own prose is not the shape anyone would choose, but it is
|
|
23
|
+
* the only one available: `verification_gate_results` has no column for
|
|
24
|
+
* structured detail, and the CLI's `formatDetail` already reads work-evidence's
|
|
25
|
+
* counts out of `logTail` the same way (src/cli/utils/verify-runner.ts).
|
|
26
|
+
*
|
|
27
|
+
* Returns null when the tail is not a report — a skip, an error, or a gate that
|
|
28
|
+
* was never entered all write a sentence — because an empty `admitted` on those
|
|
29
|
+
* would claim the gate looked and found nothing.
|
|
30
|
+
*/
|
|
31
|
+
export declare function parseScopeEvidence(logTail: string | null | undefined): VerificationScopeDetail | null;
|
|
18
32
|
export declare function createVerifyCommand(): Command;
|
|
19
33
|
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,KAAK,EAMV,uBAAuB,EAExB,MAAM,wBAAwB,CAAC;AAmChC;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,uBAAuB,GAAG,IAAI,CA8BrG;AAyED,wBAAgB,mBAAmB,IAAI,OAAO,CA0D7C"}
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
* succeeds exits 0 even when it finds nothing.
|
|
17
17
|
*/
|
|
18
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.parseScopeEvidence = parseScopeEvidence;
|
|
19
20
|
exports.createVerifyCommand = createVerifyCommand;
|
|
20
21
|
const commander_1 = require("commander");
|
|
21
22
|
const types_1 = require("../types");
|
|
@@ -27,6 +28,103 @@ const MAX_HISTORY_DAYS = 90;
|
|
|
27
28
|
const MAX_HISTORY_LIMIT = 500;
|
|
28
29
|
/** Gate statuses that mean the gate did not pass. `skipped` is not a failure. */
|
|
29
30
|
const FAILED_GATE_STATUSES = new Set(['failed', 'timeout', 'error']);
|
|
31
|
+
// =============================================================================
|
|
32
|
+
// Scope-gate evidence (Issue #1841)
|
|
33
|
+
// =============================================================================
|
|
34
|
+
/** Built-in gate id; mirrors SCOPE_GATE_ID in lib/verification/verify-config.ts. */
|
|
35
|
+
const SCOPE_GATE_ID = 'scope';
|
|
36
|
+
/**
|
|
37
|
+
* Separator the scope gate puts between a path and the rule that decided it.
|
|
38
|
+
*
|
|
39
|
+
* Mirrors SCOPE_PATTERN_ARROW in `src/lib/verification/scope-gate.ts`. The two
|
|
40
|
+
* cannot import each other — tsconfig.cli.json compiles `src/cli/**` alone,
|
|
41
|
+
* with no path aliases, so the CLI bundle never pulls in the server's
|
|
42
|
+
* dependency graph — so a round-trip test feeds a real gate report through this
|
|
43
|
+
* parser instead of trusting the constants to be edited together.
|
|
44
|
+
*/
|
|
45
|
+
const SCOPE_PATTERN_ARROW = ' \u2190 ';
|
|
46
|
+
/**
|
|
47
|
+
* Read the scope gate's report back into structured evidence.
|
|
48
|
+
*
|
|
49
|
+
* Parsing the gate's own prose is not the shape anyone would choose, but it is
|
|
50
|
+
* the only one available: `verification_gate_results` has no column for
|
|
51
|
+
* structured detail, and the CLI's `formatDetail` already reads work-evidence's
|
|
52
|
+
* counts out of `logTail` the same way (src/cli/utils/verify-runner.ts).
|
|
53
|
+
*
|
|
54
|
+
* Returns null when the tail is not a report — a skip, an error, or a gate that
|
|
55
|
+
* was never entered all write a sentence — because an empty `admitted` on those
|
|
56
|
+
* would claim the gate looked and found nothing.
|
|
57
|
+
*/
|
|
58
|
+
function parseScopeEvidence(logTail) {
|
|
59
|
+
if (!logTail)
|
|
60
|
+
return null;
|
|
61
|
+
const summary = /^scope: baseRef=.* changed=(\d+) violations=(\d+)$/m.exec(logTail);
|
|
62
|
+
if (!summary)
|
|
63
|
+
return null;
|
|
64
|
+
const changed = Number(summary[1]);
|
|
65
|
+
const violationTotal = Number(summary[2]);
|
|
66
|
+
const admitted = [];
|
|
67
|
+
const violations = [];
|
|
68
|
+
for (const line of logTail.split('\n')) {
|
|
69
|
+
if (line.startsWith(' + ')) {
|
|
70
|
+
const [path, pattern] = splitAtArrow(line.slice(4));
|
|
71
|
+
// The gate always names the admitting rule; a `+` line without one is
|
|
72
|
+
// output this parser does not understand, and inventing an empty pattern
|
|
73
|
+
// for it would put a claim in the JSON that nothing made.
|
|
74
|
+
if (pattern !== null)
|
|
75
|
+
admitted.push({ path, pattern });
|
|
76
|
+
}
|
|
77
|
+
else if (line.startsWith(' - ')) {
|
|
78
|
+
violations.push(splitAtArrow(line.slice(4))[0]);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
admitted,
|
|
83
|
+
violations,
|
|
84
|
+
// From the summary line, not from the lists: both are capped at 100 by the
|
|
85
|
+
// report, and `changed` counts every path either way. Admitted is the
|
|
86
|
+
// remainder because the gate classifies each changed path exactly once.
|
|
87
|
+
totals: { changed, admitted: changed - violationTotal, violations: violationTotal },
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Split `<path> \u2190 <pattern>`, keeping the whole line as the path when no
|
|
92
|
+
* arrow is present (an allow-miss violation has no rule to name).
|
|
93
|
+
*
|
|
94
|
+
* Split at the *last* arrow so a path containing the sequence still yields the
|
|
95
|
+
* pattern the gate wrote.
|
|
96
|
+
*/
|
|
97
|
+
function splitAtArrow(text) {
|
|
98
|
+
const at = text.lastIndexOf(SCOPE_PATTERN_ARROW);
|
|
99
|
+
if (at === -1)
|
|
100
|
+
return [text, null];
|
|
101
|
+
return [text.slice(0, at), text.slice(at + SCOPE_PATTERN_ARROW.length)];
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Attach the evidence the CLI parses out of gate logs before a run is printed
|
|
105
|
+
* as JSON: {@link parseScopeEvidence} on the scope gate (Issue #1841), and the
|
|
106
|
+
* retry record on any gate that was re-run (Issue #1772).
|
|
107
|
+
*
|
|
108
|
+
* Copies rather than mutates: the run object is also what the polling loop
|
|
109
|
+
* reported from, and a JSON-only field has no business appearing in it.
|
|
110
|
+
*/
|
|
111
|
+
function withGateEvidence(run) {
|
|
112
|
+
const gates = run.gates ?? [];
|
|
113
|
+
return {
|
|
114
|
+
...run,
|
|
115
|
+
gates: gates.map((gate) => {
|
|
116
|
+
const scope = gate.gateId === SCOPE_GATE_ID ? parseScopeEvidence(gate.logTail) : null;
|
|
117
|
+
const flaky = (0, verify_runner_1.parseFlakyMarker)(gate.logTail);
|
|
118
|
+
if (!scope && !flaky)
|
|
119
|
+
return gate;
|
|
120
|
+
return {
|
|
121
|
+
...gate,
|
|
122
|
+
...(scope ? { scope } : {}),
|
|
123
|
+
...(flaky ? { flaky } : {}),
|
|
124
|
+
};
|
|
125
|
+
}),
|
|
126
|
+
};
|
|
127
|
+
}
|
|
30
128
|
function formatSeconds(durationMs) {
|
|
31
129
|
return durationMs === null ? 'n/a' : `${(durationMs / 1000).toFixed(1)}s`;
|
|
32
130
|
}
|
|
@@ -96,7 +194,7 @@ function createVerifyCommand() {
|
|
|
96
194
|
suppressResultLine: options.json,
|
|
97
195
|
});
|
|
98
196
|
if (options.json && outcome.run) {
|
|
99
|
-
console.log(JSON.stringify(outcome.run));
|
|
197
|
+
console.log(JSON.stringify(withGateEvidence(outcome.run)));
|
|
100
198
|
}
|
|
101
199
|
process.exit(outcome.exitCode);
|
|
102
200
|
}
|
|
@@ -206,7 +304,11 @@ function addShowCommand(parent) {
|
|
|
206
304
|
}
|
|
207
305
|
const run = data.run;
|
|
208
306
|
if (json) {
|
|
209
|
-
|
|
307
|
+
// `show` is the forensic surface — the one a reader reaches for to
|
|
308
|
+
// reconstruct a run days later — so the scope evidence and the retry
|
|
309
|
+
// record have to be readable here too, not only on the run that
|
|
310
|
+
// produced them.
|
|
311
|
+
console.log(JSON.stringify(withGateEvidence(run), null, 2));
|
|
210
312
|
return;
|
|
211
313
|
}
|
|
212
314
|
console.log(`run #${run.id} ${run.status} worktree=${run.worktreeId} trigger=${run.trigger}`);
|
|
@@ -219,7 +321,11 @@ function addShowCommand(parent) {
|
|
|
219
321
|
// judged, so "which of these was the repository's own definition of
|
|
220
322
|
// passing" should not have to be inferred from an absent marker.
|
|
221
323
|
const source = gate.source ? ` src=${gate.source}` : '';
|
|
222
|
-
|
|
324
|
+
// Appended rather than replacing `status`, which is the stored column
|
|
325
|
+
// this view exists to show verbatim (#1772). The marker in the log
|
|
326
|
+
// tail below carries both runs' numbers.
|
|
327
|
+
const flaky = (0, verify_runner_1.parseFlakyMarker)(gate.logTail)?.outcome === 'flaky' ? ` ${verify_runner_1.FLAKY_GATE_LABEL}` : '';
|
|
328
|
+
console.log(` ${gate.gateId} ${gate.status} exit=${exit} ${formatSeconds(gate.durationMs)}${source}${flaky}`);
|
|
223
329
|
if (gate.logTail) {
|
|
224
330
|
for (const line of gate.logTail.split('\n')) {
|
|
225
331
|
console.log(` | ${line}`);
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
* layer could not classify at all — Issue #1708. Both are reported as
|
|
10
10
|
* exit 10 with a distinguishing `type` rather than a new exit code, so
|
|
11
11
|
* callers that already branch on 10 keep working.)
|
|
12
|
+
* - 11: UPSTREAM_FAULT (--fail-on-upstream-fault only, Issue #1839: the agent
|
|
13
|
+
* came back to its composer with an upstream API failure on the frame)
|
|
12
14
|
* - 124: TIMEOUT (--timeout exceeded)
|
|
13
15
|
* Issue #1544 adds --verify / --require-work, which can turn a detected
|
|
14
16
|
* completion into 20 (VERIFY_FAILED) or 21 (NOT_STARTED).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/wait.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/wait.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsqBpC,wBAAgB,iBAAiB,IAAI,OAAO,CA8G3C"}
|