commandmate 0.17.0 → 0.19.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 +120 -120
- package/.next/app-path-routes-manifest.json +19 -19
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +12 -12
- 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/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/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_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.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/todos/route.js +1 -1
- package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_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.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_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.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_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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +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/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_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.js +2 -2
- 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.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.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route_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_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.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 +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 +19 -19
- package/.next/server/chunks/1117.js +1 -1
- package/.next/server/chunks/3042.js +1 -1
- package/.next/server/chunks/3753.js +19 -23
- package/.next/server/chunks/5959.js +3 -3
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6274.js +10 -9
- package/.next/server/chunks/6283.js +1 -1
- package/.next/server/chunks/8681.js +1 -1
- package/.next/server/chunks/8807.js +492 -485
- package/.next/server/chunks/8856.js +1 -1
- 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/{6488-f4e447464c9e0e22.js → 6488-2c412c29258637b6.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/{page-5ffc84094830babb.js → page-f6e09d25cd3b56f9.js} +1 -1
- package/.next/trace +12 -12
- package/dist/cli/commands/auto-yes.d.ts.map +1 -1
- package/dist/cli/commands/auto-yes.js +9 -2
- package/dist/cli/commands/capture.d.ts +1 -0
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +112 -2
- package/dist/cli/commands/instances.d.ts +24 -0
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +44 -0
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +10 -2
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +47 -19
- package/dist/cli/commands/wait.d.ts +4 -1
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +134 -10
- package/dist/cli/types/api-responses.d.ts +10 -0
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/index.d.ts +16 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/utils/pager.d.ts +28 -0
- package/dist/cli/utils/pager.d.ts.map +1 -0
- package/dist/cli/utils/pager.js +57 -0
- package/dist/cli/utils/verify-runner.d.ts +6 -0
- package/dist/cli/utils/verify-runner.d.ts.map +1 -1
- package/dist/cli/utils/verify-runner.js +1 -0
- package/dist/lib/detection/ansi.d.ts +30 -0
- package/dist/lib/detection/ansi.d.ts.map +1 -0
- package/dist/lib/detection/ansi.js +39 -0
- package/dist/lib/tmux/transcript-squeeze.d.ts +76 -0
- package/dist/lib/tmux/transcript-squeeze.d.ts.map +1 -0
- package/dist/lib/tmux/transcript-squeeze.js +96 -0
- package/dist/server/server.js +18 -0
- package/dist/server/src/config/tmux-pane-config.js +33 -1
- package/dist/server/src/lib/cli-tools/antigravity.js +2 -1
- package/dist/server/src/lib/cli-tools/codex.js +3 -2
- package/dist/server/src/lib/cli-tools/copilot.js +2 -2
- package/dist/server/src/lib/cli-tools/gemini.js +2 -2
- package/dist/server/src/lib/cli-tools/opencode.js +2 -2
- package/dist/server/src/lib/cli-tools/vibe-local.js +2 -2
- package/dist/server/src/lib/db/agent-instances-db.js +53 -0
- package/dist/server/src/lib/db/migrations/index.js +2 -0
- package/dist/server/src/lib/db/migrations/runner.js +1 -1
- package/dist/server/src/lib/db/migrations/v52-orphaned-worktree-children.js +76 -0
- package/dist/server/src/lib/db/migrations/worktree-child-tables.js +119 -0
- package/dist/server/src/lib/db/tasks-db.js +46 -1
- package/dist/server/src/lib/db/verification-db.js +21 -3
- package/dist/server/src/lib/db/worktree-db.js +65 -42
- package/dist/server/src/lib/detection/cli-patterns.js +24 -1
- package/dist/server/src/lib/detection/status-detector.js +52 -2
- package/dist/server/src/lib/session/claude-session.js +4 -2
- package/dist/server/src/lib/tmux/read-mode-pager.js +161 -0
- package/dist/server/src/lib/tmux/read-mode.js +327 -0
- package/dist/server/src/lib/tmux/tmux.js +43 -5
- package/package.json +1 -1
- /package/.next/static/{gR8Sh86RrTynJON8SWkWK → -E7I667pJDTBamyG8M_Z-}/_buildManifest.js +0 -0
- /package/.next/static/{gR8Sh86RrTynJON8SWkWK → -E7I667pJDTBamyG8M_Z-}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-yes.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/auto-yes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"auto-yes.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/auto-yes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,oBAAoB,IAAI,OAAO,CAoG9C"}
|
|
@@ -11,6 +11,7 @@ const api_client_1 = require("../utils/api-client");
|
|
|
11
11
|
const command_helpers_1 = require("../utils/command-helpers");
|
|
12
12
|
const duration_constants_1 = require("../config/duration-constants");
|
|
13
13
|
const cli_tool_ids_1 = require("../config/cli-tool-ids");
|
|
14
|
+
const instances_1 = require("./instances");
|
|
14
15
|
function createAutoYesCommand() {
|
|
15
16
|
const cmd = new commander_1.Command('auto-yes');
|
|
16
17
|
cmd
|
|
@@ -71,8 +72,14 @@ function createAutoYesCommand() {
|
|
|
71
72
|
body.stopPattern = options.stopPattern;
|
|
72
73
|
}
|
|
73
74
|
}
|
|
74
|
-
|
|
75
|
-
|
|
75
|
+
// Issue #1629: the auto-yes poller keys on (worktree, cliTool, instance)
|
|
76
|
+
// and watches the session cliTool names, so the instance must be paired
|
|
77
|
+
// with the CLI tool its roster entry declares.
|
|
78
|
+
const agent = options.instance
|
|
79
|
+
? await (0, instances_1.resolveInstanceCliTool)(client, worktreeId, options.instance, options.agent)
|
|
80
|
+
: options.agent;
|
|
81
|
+
if (agent) {
|
|
82
|
+
body.cliToolId = agent;
|
|
76
83
|
}
|
|
77
84
|
// Issue #896: per-instance auto-yes
|
|
78
85
|
if (options.instance) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* capture Command - Get current terminal output
|
|
3
3
|
* Issue #518: [DR1-08] Factory pattern
|
|
4
|
+
* Issue #1623: `--pane` reads the raw tmux pane as a transcript (案B)
|
|
4
5
|
*/
|
|
5
6
|
import { Command } from 'commander';
|
|
6
7
|
export declare function createCaptureCommand(): Command;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/capture.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/capture.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6HpC,wBAAgB,oBAAoB,IAAI,OAAO,CA+E9C"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* capture Command - Get current terminal output
|
|
4
4
|
* Issue #518: [DR1-08] Factory pattern
|
|
5
|
+
* Issue #1623: `--pane` reads the raw tmux pane as a transcript (案B)
|
|
5
6
|
*/
|
|
6
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
8
|
exports.createCaptureCommand = createCaptureCommand;
|
|
@@ -10,6 +11,19 @@ const types_1 = require("../types");
|
|
|
10
11
|
const api_client_1 = require("../utils/api-client");
|
|
11
12
|
const command_helpers_1 = require("../utils/command-helpers");
|
|
12
13
|
const cli_tool_ids_1 = require("../config/cli-tool-ids");
|
|
14
|
+
const instances_1 = require("./instances");
|
|
15
|
+
const pager_1 = require("../utils/pager");
|
|
16
|
+
const transcript_squeeze_1 = require("../../lib/tmux/transcript-squeeze");
|
|
17
|
+
/**
|
|
18
|
+
* Rows of pane history the `--pane` viewer asks for.
|
|
19
|
+
*
|
|
20
|
+
* Deliberately NOT configurable and deliberately equal to the capture route's
|
|
21
|
+
* own default: Issue #1623 has to leave the detection pipeline's view of the
|
|
22
|
+
* pane untouched, and the cheapest way to guarantee that is for the viewer to
|
|
23
|
+
* make exactly the request everything else already makes. `--tail` narrows the
|
|
24
|
+
* RESULT instead (see {@link CaptureOptions.tail}).
|
|
25
|
+
*/
|
|
26
|
+
const PANE_CAPTURE_LINES = 1000;
|
|
13
27
|
/**
|
|
14
28
|
* Format capture output as JSON (excluding fullOutput for size).
|
|
15
29
|
*/
|
|
@@ -17,12 +31,91 @@ function formatJson(data) {
|
|
|
17
31
|
const { fullOutput: _fullOutput, ...rest } = data;
|
|
18
32
|
return JSON.stringify(rest, null, 2);
|
|
19
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Parse and validate `--tail N`.
|
|
36
|
+
*
|
|
37
|
+
* @param raw - Raw option value, if the user passed one
|
|
38
|
+
* @returns The parsed count, or undefined when the option was absent
|
|
39
|
+
*/
|
|
40
|
+
function parseTail(raw) {
|
|
41
|
+
if (raw === undefined)
|
|
42
|
+
return undefined;
|
|
43
|
+
const value = Number(raw);
|
|
44
|
+
if (!Number.isInteger(value) || value < 1) {
|
|
45
|
+
console.error('Error: --tail must be a positive integer.');
|
|
46
|
+
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
47
|
+
}
|
|
48
|
+
return value;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Resolve which CLI tool's session the pane should be read from.
|
|
52
|
+
*
|
|
53
|
+
* POST /capture demands an explicit `cliToolId`, while GET /current-output falls
|
|
54
|
+
* back to the worktree's own default server-side. Mirroring that fallback here
|
|
55
|
+
* (`worktree.cliToolId || 'claude'`, matching the route) keeps bare
|
|
56
|
+
* `capture <id> --pane` pointed at the same session the rest of the CLI uses.
|
|
57
|
+
*
|
|
58
|
+
* @param client - API client
|
|
59
|
+
* @param worktreeId - Worktree ID
|
|
60
|
+
* @param agent - Value of `--agent`, already validated
|
|
61
|
+
* @param instance - Value of `--instance`, already validated
|
|
62
|
+
* @returns CLI tool ID to capture
|
|
63
|
+
*/
|
|
64
|
+
async function resolvePaneCliTool(client, worktreeId, agent, instance) {
|
|
65
|
+
if (instance) {
|
|
66
|
+
const resolved = await (0, instances_1.resolveInstanceCliTool)(client, worktreeId, instance, agent);
|
|
67
|
+
if (resolved)
|
|
68
|
+
return resolved;
|
|
69
|
+
}
|
|
70
|
+
if (agent)
|
|
71
|
+
return agent;
|
|
72
|
+
const worktree = await client.get(`/api/worktrees/${worktreeId}`);
|
|
73
|
+
return worktree.cliToolId || 'claude';
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* `--pane` path: read the raw tmux pane and render it as a readable transcript.
|
|
77
|
+
*
|
|
78
|
+
* The squeeze happens CLIENT-side on purpose. The server keeps returning the
|
|
79
|
+
* unmodified frame, so nothing that consumes `/capture` — detection, Auto-Yes,
|
|
80
|
+
* the response saver — sees a different payload because this command exists.
|
|
81
|
+
*/
|
|
82
|
+
async function capturePane(worktreeId, options) {
|
|
83
|
+
const client = new api_client_1.ApiClient({ token: options.token });
|
|
84
|
+
const tail = parseTail(options.tail);
|
|
85
|
+
const cliToolId = await resolvePaneCliTool(client, worktreeId, options.agent, options.instance);
|
|
86
|
+
const data = await client.post(`/api/worktrees/${worktreeId}/capture`, {
|
|
87
|
+
cliToolId,
|
|
88
|
+
lines: PANE_CAPTURE_LINES,
|
|
89
|
+
...(options.instance ? { instanceId: options.instance } : {}),
|
|
90
|
+
});
|
|
91
|
+
const raw = data.output ?? '';
|
|
92
|
+
const squeezed = (0, transcript_squeeze_1.squeezeTranscript)(raw, { tail });
|
|
93
|
+
const text = options.raw ? raw : squeezed.text;
|
|
94
|
+
if (options.json) {
|
|
95
|
+
console.log(JSON.stringify({
|
|
96
|
+
cliToolId,
|
|
97
|
+
instanceId: options.instance ?? null,
|
|
98
|
+
output: text,
|
|
99
|
+
lines: options.raw ? squeezed.rawLines : squeezed.lines,
|
|
100
|
+
rawLines: squeezed.rawLines,
|
|
101
|
+
squeezed: !options.raw,
|
|
102
|
+
tailed: !options.raw && squeezed.tailed,
|
|
103
|
+
}, null, 2));
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
(0, pager_1.printMaybePaged)(text);
|
|
107
|
+
}
|
|
20
108
|
function createCaptureCommand() {
|
|
21
109
|
const cmd = new commander_1.Command('capture');
|
|
22
110
|
cmd
|
|
23
111
|
.description('Capture current terminal output from a worktree')
|
|
24
112
|
.argument('<worktree-id>', 'Worktree ID')
|
|
25
113
|
.option('--json', 'JSON output (excludes fullOutput)')
|
|
114
|
+
// Issue #1623: reading mode. Works without attaching and without tmux 3.2+,
|
|
115
|
+
// which is why it is the fallback the popup binding degrades to.
|
|
116
|
+
.option('--pane', 'Read the raw tmux pane as a transcript, with blank layout rows squeezed')
|
|
117
|
+
.option('--tail <n>', 'With --pane: keep only the last N lines OF THE SQUEEZED transcript')
|
|
118
|
+
.option('--raw', 'With --pane: skip the squeeze and print the pane verbatim')
|
|
26
119
|
.option('--agent <agent>', 'CLI tool agent (claude, codex, gemini, vibe-local, opencode, copilot, antigravity)')
|
|
27
120
|
.option('--instance <id>', 'Agent instance ID: <agent> or <agent>-<n> (e.g. claude-2). Defaults to the agent\'s primary instance.')
|
|
28
121
|
.option('--token <token>', command_helpers_1.TOKEN_WARNING)
|
|
@@ -42,11 +135,28 @@ function createCaptureCommand() {
|
|
|
42
135
|
console.error('Error: Invalid --instance. Must be an alphanumeric/underscore/hyphen identifier (max 64 chars).');
|
|
43
136
|
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
44
137
|
}
|
|
138
|
+
// Issue #1623: --tail / --raw only mean anything for the pane viewer.
|
|
139
|
+
// Silently ignoring them would look like the flag had no effect.
|
|
140
|
+
if (!options.pane && (options.tail !== undefined || options.raw)) {
|
|
141
|
+
console.error('Error: --tail and --raw require --pane.');
|
|
142
|
+
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
143
|
+
}
|
|
144
|
+
if (options.pane) {
|
|
145
|
+
await capturePane(worktreeId, options);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
45
148
|
const client = new api_client_1.ApiClient({ token: options.token });
|
|
149
|
+
// Issue #1629: /current-output takes the CLI tool at face value and
|
|
150
|
+
// otherwise falls back to the worktree default, so `--instance codex`
|
|
151
|
+
// alone captured the wrong (claude-named) session. Resolve the tool the
|
|
152
|
+
// instance is registered under before asking.
|
|
153
|
+
const agent = options.instance
|
|
154
|
+
? await (0, instances_1.resolveInstanceCliTool)(client, worktreeId, options.instance, options.agent)
|
|
155
|
+
: options.agent;
|
|
46
156
|
// Build path with optional cliTool/instance query parameters
|
|
47
157
|
const query = new URLSearchParams();
|
|
48
|
-
if (
|
|
49
|
-
query.set('cliTool',
|
|
158
|
+
if (agent) {
|
|
159
|
+
query.set('cliTool', agent);
|
|
50
160
|
}
|
|
51
161
|
if (options.instance) {
|
|
52
162
|
query.set('instance', options.instance);
|
|
@@ -9,5 +9,29 @@
|
|
|
9
9
|
* commandmate instances <worktree-id> kill <instance-id>
|
|
10
10
|
*/
|
|
11
11
|
import { Command } from 'commander';
|
|
12
|
+
import { ApiClient } from '../utils/api-client';
|
|
13
|
+
/**
|
|
14
|
+
* Resolve which CLI tool backs `instanceId`, from the worktree's roster
|
|
15
|
+
* (Issue #1629). Shared by every command that targets an instance: `send`,
|
|
16
|
+
* `respond`, `capture` and `auto-yes`.
|
|
17
|
+
*
|
|
18
|
+
* `--instance <id>` on its own carries no CLI tool, so the server used to fall
|
|
19
|
+
* back to the worktree default. Since the tool id is part of the tmux session
|
|
20
|
+
* name, `send --instance codex` against a claude-default worktree started
|
|
21
|
+
* Claude in `mcbd-claude-<worktree>-codex`. Resolving here means the resolved
|
|
22
|
+
* tool is sent explicitly to every endpoint the command touches — including
|
|
23
|
+
* `/tasks`, `/current-output` and `/prompt-response`, which have no other way
|
|
24
|
+
* to learn it.
|
|
25
|
+
*
|
|
26
|
+
* The roster wins over `--agent`: it is the user-maintained declaration of what
|
|
27
|
+
* a named instance is, so a contradiction is an error rather than a session
|
|
28
|
+
* whose name disagrees with the agent inside it. An instance the roster does
|
|
29
|
+
* not know (the ad-hoc `send --instance <new-id>` flow) keeps `--agent` as
|
|
30
|
+
* given, and an unreadable roster degrades to a warning so an older daemon
|
|
31
|
+
* behaves as it did before.
|
|
32
|
+
*
|
|
33
|
+
* @returns the CLI tool to send, or undefined to let the server decide
|
|
34
|
+
*/
|
|
35
|
+
export declare function resolveInstanceCliTool(client: ApiClient, worktreeId: string, instanceId: string, requestedAgent: string | undefined): Promise<string | undefined>;
|
|
12
36
|
export declare function createInstancesCommand(): Command;
|
|
13
37
|
//# sourceMappingURL=instances.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instances.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/instances.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"instances.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/instances.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,SAAS,EAAwC,MAAM,qBAAqB,CAAC;AAmDtF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GAAG,SAAS,GACjC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA0B7B;AAwKD,wBAAgB,sBAAsB,IAAI,OAAO,CAqEhD"}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* commandmate instances <worktree-id> kill <instance-id>
|
|
11
11
|
*/
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.resolveInstanceCliTool = resolveInstanceCliTool;
|
|
13
14
|
exports.createInstancesCommand = createInstancesCommand;
|
|
14
15
|
const commander_1 = require("commander");
|
|
15
16
|
const types_1 = require("../types");
|
|
@@ -38,6 +39,49 @@ function formatInstancesTable(rows) {
|
|
|
38
39
|
const dataLines = dataRows.map(r => r.map((cell, i) => cell.padEnd(colWidths[i])).join(' '));
|
|
39
40
|
return [headerLine, separator, ...dataLines].join('\n');
|
|
40
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Resolve which CLI tool backs `instanceId`, from the worktree's roster
|
|
44
|
+
* (Issue #1629). Shared by every command that targets an instance: `send`,
|
|
45
|
+
* `respond`, `capture` and `auto-yes`.
|
|
46
|
+
*
|
|
47
|
+
* `--instance <id>` on its own carries no CLI tool, so the server used to fall
|
|
48
|
+
* back to the worktree default. Since the tool id is part of the tmux session
|
|
49
|
+
* name, `send --instance codex` against a claude-default worktree started
|
|
50
|
+
* Claude in `mcbd-claude-<worktree>-codex`. Resolving here means the resolved
|
|
51
|
+
* tool is sent explicitly to every endpoint the command touches — including
|
|
52
|
+
* `/tasks`, `/current-output` and `/prompt-response`, which have no other way
|
|
53
|
+
* to learn it.
|
|
54
|
+
*
|
|
55
|
+
* The roster wins over `--agent`: it is the user-maintained declaration of what
|
|
56
|
+
* a named instance is, so a contradiction is an error rather than a session
|
|
57
|
+
* whose name disagrees with the agent inside it. An instance the roster does
|
|
58
|
+
* not know (the ad-hoc `send --instance <new-id>` flow) keeps `--agent` as
|
|
59
|
+
* given, and an unreadable roster degrades to a warning so an older daemon
|
|
60
|
+
* behaves as it did before.
|
|
61
|
+
*
|
|
62
|
+
* @returns the CLI tool to send, or undefined to let the server decide
|
|
63
|
+
*/
|
|
64
|
+
async function resolveInstanceCliTool(client, worktreeId, instanceId, requestedAgent) {
|
|
65
|
+
let registered;
|
|
66
|
+
try {
|
|
67
|
+
const instances = await (0, agent_instances_1.fetchAgentInstances)(client, worktreeId);
|
|
68
|
+
registered = instances.find((inst) => inst.id === instanceId);
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
console.error(`Warning: could not read the agent-instance roster (${(0, types_1.getErrorMessage)(error)}); using --agent as given.`);
|
|
72
|
+
return requestedAgent;
|
|
73
|
+
}
|
|
74
|
+
if (!registered) {
|
|
75
|
+
return requestedAgent;
|
|
76
|
+
}
|
|
77
|
+
if (requestedAgent && requestedAgent !== registered.cliTool) {
|
|
78
|
+
console.error(`Error: instance '${instanceId}' is registered as ${registered.cliTool}, but --agent ${requestedAgent} was given. `
|
|
79
|
+
+ `Drop --agent, pass --agent ${registered.cliTool}, or re-register the instance.`);
|
|
80
|
+
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
81
|
+
return requestedAgent;
|
|
82
|
+
}
|
|
83
|
+
return registered.cliTool;
|
|
84
|
+
}
|
|
41
85
|
/**
|
|
42
86
|
* List action: roster + live running/auto-yes status per instance.
|
|
43
87
|
* Probes GET .../current-output?cliTool=&instance= per instance (same
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"respond.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/respond.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"respond.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/respond.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,oBAAoB,IAAI,OAAO,CAyE9C"}
|
|
@@ -12,6 +12,7 @@ const types_1 = require("../types");
|
|
|
12
12
|
const api_client_1 = require("../utils/api-client");
|
|
13
13
|
const command_helpers_1 = require("../utils/command-helpers");
|
|
14
14
|
const cli_tool_ids_1 = require("../config/cli-tool-ids");
|
|
15
|
+
const instances_1 = require("./instances");
|
|
15
16
|
function createRespondCommand() {
|
|
16
17
|
const cmd = new commander_1.Command('respond');
|
|
17
18
|
cmd
|
|
@@ -44,10 +45,17 @@ function createRespondCommand() {
|
|
|
44
45
|
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
45
46
|
}
|
|
46
47
|
const client = new api_client_1.ApiClient({ token: options.token });
|
|
48
|
+
// Issue #1629: /prompt-response derives the session name from cliTool
|
|
49
|
+
// and falls back to the worktree default, so `--instance codex` alone
|
|
50
|
+
// answered into a session that was never started. Resolve the tool the
|
|
51
|
+
// instance is registered under first.
|
|
52
|
+
const agent = options.instance
|
|
53
|
+
? await (0, instances_1.resolveInstanceCliTool)(client, worktreeId, options.instance, options.agent)
|
|
54
|
+
: options.agent;
|
|
47
55
|
// [DR2-06] Use prompt-response API with cliTool (not cliToolId)
|
|
48
56
|
const body = { answer };
|
|
49
|
-
if (
|
|
50
|
-
body.cliTool =
|
|
57
|
+
if (agent) {
|
|
58
|
+
body.cliTool = agent;
|
|
51
59
|
}
|
|
52
60
|
// Issue #868: target a specific agent instance
|
|
53
61
|
if (options.instance) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/send.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/send.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgKpC,wBAAgB,iBAAiB,IAAI,OAAO,CAoK3C"}
|
|
@@ -13,28 +13,41 @@ const duration_constants_1 = require("../config/duration-constants");
|
|
|
13
13
|
const cli_tool_ids_1 = require("../config/cli-tool-ids");
|
|
14
14
|
const model_validation_1 = require("../config/model-validation");
|
|
15
15
|
const agent_instances_1 = require("../utils/agent-instances");
|
|
16
|
+
const instances_1 = require("./instances");
|
|
17
|
+
/** Auto-yes duration used when --duration is omitted. */
|
|
18
|
+
const DEFAULT_AUTO_YES_DURATION = '1h';
|
|
16
19
|
/**
|
|
17
|
-
*
|
|
18
|
-
* Validates duration and exits on invalid input.
|
|
20
|
+
* Resolve --duration to milliseconds, exiting on an invalid value.
|
|
19
21
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
22
|
+
* Issue #1608: this is called from the option-validation block at the top of
|
|
23
|
+
* the action, not from enableAutoYes(). enableAutoYes() runs after --contract
|
|
24
|
+
* has already created the task row, so validating there left a `pending` task
|
|
25
|
+
* behind for a message that was never sent.
|
|
23
26
|
*/
|
|
24
|
-
|
|
25
|
-
const durationMs =
|
|
26
|
-
? (0, duration_constants_1.parseDurationToMs)(options.duration)
|
|
27
|
-
: (0, duration_constants_1.parseDurationToMs)('1h'); // default 1h
|
|
27
|
+
function resolveAutoYesDurationMs(duration) {
|
|
28
|
+
const durationMs = (0, duration_constants_1.parseDurationToMs)(duration ?? DEFAULT_AUTO_YES_DURATION);
|
|
28
29
|
if (durationMs === null) {
|
|
29
30
|
console.error(`Error: Invalid duration. Must be one of: ${duration_constants_1.ALLOWED_DURATIONS.join(', ')}`);
|
|
30
31
|
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
31
32
|
}
|
|
33
|
+
return durationMs;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Build auto-yes request body and send it to the API (DRY extraction).
|
|
37
|
+
*
|
|
38
|
+
* @param client - API client instance
|
|
39
|
+
* @param worktreeId - Target worktree ID
|
|
40
|
+
* @param options - Send command options containing auto-yes settings
|
|
41
|
+
* @param durationMs - Duration already validated by resolveAutoYesDurationMs()
|
|
42
|
+
* @param agent - CLI tool resolved for --instance (Issue #1629), else --agent
|
|
43
|
+
*/
|
|
44
|
+
async function enableAutoYes(client, worktreeId, options, durationMs, agent) {
|
|
32
45
|
const autoYesBody = {
|
|
33
46
|
enabled: true,
|
|
34
47
|
duration: durationMs,
|
|
35
48
|
};
|
|
36
|
-
if (
|
|
37
|
-
autoYesBody.cliToolId =
|
|
49
|
+
if (agent) {
|
|
50
|
+
autoYesBody.cliToolId = agent;
|
|
38
51
|
}
|
|
39
52
|
// Issue #896: per-instance auto-yes. When --instance is given, the poller keys
|
|
40
53
|
// on worktreeId:cliToolId:instanceId so the targeted instance is auto-answered
|
|
@@ -74,10 +87,10 @@ async function registerInstance(client, worktreeId, instanceId, cliTool) {
|
|
|
74
87
|
* from that worktree's verify.yaml. Every violation the server found is printed
|
|
75
88
|
* before exiting, so a broken contract is fixed in one pass (Issue #1545).
|
|
76
89
|
*/
|
|
77
|
-
async function createContractTask(client, worktreeId, options) {
|
|
90
|
+
async function createContractTask(client, worktreeId, options, agent) {
|
|
78
91
|
const body = { contractPath: options.contract };
|
|
79
|
-
if (
|
|
80
|
-
body.cliToolId =
|
|
92
|
+
if (agent) {
|
|
93
|
+
body.cliToolId = agent;
|
|
81
94
|
}
|
|
82
95
|
if (options.instance) {
|
|
83
96
|
body.instanceId = options.instance;
|
|
@@ -187,14 +200,29 @@ function createSendCommand() {
|
|
|
187
200
|
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
188
201
|
}
|
|
189
202
|
}
|
|
203
|
+
// Issue #1608: every option that can be judged from its own value is
|
|
204
|
+
// judged here, before the first side effect. --duration used to be the
|
|
205
|
+
// exception: enableAutoYes() validated it, and that runs after
|
|
206
|
+
// --contract has already created the task row, so `--duration 2h` left
|
|
207
|
+
// a `pending` task for a message that was never sent. Validated
|
|
208
|
+
// unconditionally, like --stop-pattern and --model above: a value the
|
|
209
|
+
// CLI cannot honour is an error whether or not --auto-yes accompanies it.
|
|
210
|
+
const autoYesDurationMs = resolveAutoYesDurationMs(options.duration);
|
|
190
211
|
const client = new api_client_1.ApiClient({ token: options.token });
|
|
212
|
+
// Issue #1629: --instance names an agent instance, not a CLI tool, and
|
|
213
|
+
// the roster is the only place that pairs the two. Resolve it once, up
|
|
214
|
+
// front, so the task row, the send and auto-yes all name the same tool
|
|
215
|
+
// as the session that actually starts.
|
|
216
|
+
const agent = options.instance
|
|
217
|
+
? await (0, instances_1.resolveInstanceCliTool)(client, worktreeId, options.instance, options.agent)
|
|
218
|
+
: options.agent;
|
|
191
219
|
// Issue #1545: resolve the contract before anything with a side effect,
|
|
192
220
|
// so an invalid contract cannot leave auto-yes enabled for a message
|
|
193
221
|
// that was never sent.
|
|
194
222
|
let taskId;
|
|
195
223
|
let content = message;
|
|
196
224
|
if (options.contract) {
|
|
197
|
-
const task = await createContractTask(client, worktreeId, options);
|
|
225
|
+
const task = await createContractTask(client, worktreeId, options, agent);
|
|
198
226
|
taskId = task.taskId;
|
|
199
227
|
content = task.message;
|
|
200
228
|
console.error(`Task created: ${taskId}`);
|
|
@@ -202,12 +230,12 @@ function createSendCommand() {
|
|
|
202
230
|
}
|
|
203
231
|
// --auto-yes: enable auto-yes first (unless --model is specified, then after send) [DR2-02]
|
|
204
232
|
if (options.autoYes && !options.model) {
|
|
205
|
-
await enableAutoYes(client, worktreeId, options);
|
|
233
|
+
await enableAutoYes(client, worktreeId, options, autoYesDurationMs, agent);
|
|
206
234
|
}
|
|
207
235
|
// [DR2-05] Send API uses "content" not "message"
|
|
208
236
|
const sendBody = { content };
|
|
209
|
-
if (
|
|
210
|
-
sendBody.cliToolId =
|
|
237
|
+
if (agent) {
|
|
238
|
+
sendBody.cliToolId = agent;
|
|
211
239
|
}
|
|
212
240
|
// Issue #868: Include instance ID in send body
|
|
213
241
|
if (options.instance) {
|
|
@@ -240,7 +268,7 @@ function createSendCommand() {
|
|
|
240
268
|
// Issue #576: Enable auto-yes AFTER send when --model is specified
|
|
241
269
|
// This avoids auto-yes interfering with the /model command interaction
|
|
242
270
|
if (options.autoYes && options.model) {
|
|
243
|
-
await enableAutoYes(client, worktreeId, options);
|
|
271
|
+
await enableAutoYes(client, worktreeId, options, autoYesDurationMs, agent);
|
|
244
272
|
}
|
|
245
273
|
}
|
|
246
274
|
catch (error) {
|
|
@@ -4,10 +4,13 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Exit codes [DR1-03]:
|
|
6
6
|
* - 0: SUCCESS (agent completed)
|
|
7
|
-
* - 10: PROMPT_DETECTED (agent waiting for user input
|
|
7
|
+
* - 10: PROMPT_DETECTED (agent waiting for user input, including arrow-key
|
|
8
|
+
* selection lists — Issue #1628)
|
|
8
9
|
* - 124: TIMEOUT (--timeout exceeded)
|
|
9
10
|
* Issue #1544 adds --verify / --require-work, which can turn a detected
|
|
10
11
|
* completion into 20 (VERIFY_FAILED) or 21 (NOT_STARTED).
|
|
12
|
+
* Issue #1628 also returns 21 without --verify when the session was never
|
|
13
|
+
* running: a wait with nothing to wait for must not report success.
|
|
11
14
|
* Infrastructure errors use ExitCode (1, 2, 99)
|
|
12
15
|
*/
|
|
13
16
|
import { Command } from 'commander';
|
|
@@ -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;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwSpC,wBAAgB,iBAAiB,IAAI,OAAO,CA6G3C"}
|