commandmate 0.49.2 → 0.50.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 +476 -423
- package/.next/app-path-routes-manifest.json +28 -21
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +9 -9
- package/.next/react-loadable-manifest.json +1 -1
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +40 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/release-notes/route_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/capabilities/route.js +1 -1
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route.js +1 -1
- package/.next/server/app/api/daily-summary/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js.nft.json +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.js +1 -103
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +2 -2
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route.js +1 -1
- package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route.js +1 -1
- package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js +4 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/resolve/route.js +1 -0
- package/.next/server/app/api/relays/[relayId]/resolve/route.js.nft.json +1 -0
- package/.next/server/app/api/relays/[relayId]/resolve/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/relays/[relayId]/route.js +1 -1
- package/.next/server/app/api/relays/[relayId]/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/route.js +4 -1
- package/.next/server/app/api/relays/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/remote/pair/route.js +2 -2
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/role-defaults/route.js +1 -0
- package/.next/server/app/api/repositories/[id]/role-defaults/route.js.nft.json +1 -0
- package/.next/server/app/api/repositories/[id]/role-defaults/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/roles/[id]/route.js +1 -0
- package/.next/server/app/api/roles/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/roles/[id]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/roles/route.js +1 -0
- package/.next/server/app/api/roles/route.js.nft.json +1 -0
- package/.next/server/app/api/roles/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/settings/agent-role-defaults/route.js +1 -0
- package/.next/server/app/api/settings/agent-role-defaults/route.js.nft.json +1 -0
- package/.next/server/app/api/settings/agent-role-defaults/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/settings/default-agents/route.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-surface-mode/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.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/verification/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/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 +3 -3
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/roles/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/instances/roles/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/instances/roles/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/instances/roles/settle/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/instances/roles/settle/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/instances/roles/settle/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -144
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +3 -104
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/tasks/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -103
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_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/config/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/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/apply-default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/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 +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page.js +2 -2
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.js +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +10 -10
- 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 +28 -21
- package/.next/server/chunks/1184.js +5 -0
- package/.next/server/chunks/1501.js +5 -5
- package/.next/server/chunks/1656.js +2 -2
- package/.next/server/chunks/1957.js +2 -2
- package/.next/server/chunks/1990.js +103 -0
- 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/2819.js +1 -0
- package/.next/server/chunks/2897.js +1 -1
- package/.next/server/chunks/3042.js +2 -0
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3294.js +3 -0
- package/.next/server/chunks/3417.js +1 -1
- package/.next/server/chunks/3480.js +1 -1
- package/.next/server/chunks/3505.js +2 -6
- package/.next/server/chunks/3543.js +1 -1
- package/.next/server/chunks/3801.js +7 -7
- package/.next/server/chunks/3945.js +1 -1
- package/.next/server/chunks/4207.js +1 -1
- package/.next/server/chunks/454.js +1 -0
- package/.next/server/chunks/4645.js +1 -0
- package/.next/server/chunks/4911.js +1 -1
- package/.next/server/chunks/5209.js +2 -2
- package/.next/server/chunks/5350.js +216 -0
- package/.next/server/chunks/5354.js +1 -1
- package/.next/server/chunks/5571.js +1 -1
- package/.next/server/chunks/6009.js +12 -0
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6285.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6486.js +2 -2
- package/.next/server/chunks/6569.js +1 -0
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/6793.js +4 -4
- package/.next/server/chunks/696.js +3 -0
- package/.next/server/chunks/7023.js +3 -3
- package/.next/server/chunks/7083.js +1 -0
- package/.next/server/chunks/741.js +1 -0
- package/.next/server/chunks/7662.js +1 -0
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/8143.js +33 -0
- package/.next/server/chunks/8581.js +6 -6
- package/.next/server/chunks/8728.js +2 -2
- package/.next/server/chunks/8782.js +1 -1
- package/.next/server/chunks/8807.js +181 -93
- package/.next/server/chunks/8918.js +3 -105
- package/.next/server/chunks/8955.js +1 -0
- package/.next/server/chunks/9169.js +1 -0
- package/.next/server/chunks/923.js +1 -0
- package/.next/server/chunks/9390.js +2 -2
- package/.next/server/chunks/9627.js +9 -9
- package/.next/server/chunks/973.js +1 -0
- package/.next/server/chunks/9731.js +3 -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/2314-2c9d587a27e8f731.js +1 -0
- package/.next/static/chunks/2407-ee881c99e218975b.js +1 -0
- package/.next/static/chunks/3931-24d7e245a93feb25.js +1 -0
- package/.next/static/chunks/4548-9afa02fd18afa6c7.js +1 -0
- package/.next/static/chunks/{5794-7975b8e51e731b19.js → 5794-38b3b504b3d97e04.js} +1 -1
- package/.next/static/chunks/{6966-d8dc6032410ffaba.js → 6966-dbfa4a43397f8c6d.js} +1 -1
- package/.next/static/chunks/7090-28e83f5a0efdb3b4.js +1 -0
- package/.next/static/chunks/7229.016d007c467a3600.js +1 -0
- package/.next/static/chunks/{8407-35bbfc84793d7004.js → 8407-dd6a8062fc449899.js} +1 -1
- package/.next/static/chunks/app/api/agents/update/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/agents/versions/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/app/release-notes/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/app/update/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/resolve/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/relays/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/remote/pair/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/role-defaults/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/roles/[id]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/roles/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/settings/agent-role-defaults/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/settings/default-agents/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/skills/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/templates/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/roles/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/roles/settle/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/layout-7bf800fcc5e025b1.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/more/{page-ff5af5ca48774c89.js → page-e8f5780f6e4fb657.js} +1 -1
- package/.next/static/chunks/app/{page-b4863bfe0452e09d.js → page-869f353a4ac4e15b.js} +1 -1
- package/.next/static/chunks/app/proxy/[...path]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/repositories/page-bedb505687010f18.js +1 -0
- package/.next/static/chunks/app/review/page-87c4a9b0de50fa80.js +1 -0
- package/.next/static/chunks/app/sessions/{page-c6eb7c02db2f4c80.js → page-82ca46793789fce4.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-570eb79fbbd1a934.js +1 -0
- package/.next/static/chunks/{webpack-838df0273b03af19.js → webpack-16b1a3143fa42ca0.js} +1 -1
- package/.next/static/css/d4f2c9522cf1b449.css +1 -0
- package/.next/static/z4d8-5MaLkoD-4EhueZwk/_buildManifest.js +1 -0
- package/.next/trace +14 -13
- package/.next/types/app/api/relays/[relayId]/resolve/route.ts +347 -0
- package/.next/types/app/api/repositories/[id]/role-defaults/route.ts +347 -0
- package/.next/types/app/api/roles/[id]/route.ts +347 -0
- package/.next/types/app/api/roles/route.ts +347 -0
- package/.next/types/app/api/settings/agent-role-defaults/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/instances/roles/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/instances/roles/settle/route.ts +347 -0
- package/.next/types/routes.d.ts +8 -1
- package/.next/types/validator.ts +63 -0
- package/dist/cli/commands/instances.d.ts +1 -0
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +290 -33
- package/dist/cli/commands/message-dispatch.d.ts +25 -3
- package/dist/cli/commands/message-dispatch.d.ts.map +1 -1
- package/dist/cli/commands/message-dispatch.js +26 -6
- package/dist/cli/commands/prompt.d.ts.map +1 -1
- package/dist/cli/commands/prompt.js +2 -1
- package/dist/cli/commands/relays.d.ts +7 -0
- package/dist/cli/commands/relays.d.ts.map +1 -1
- package/dist/cli/commands/relays.js +179 -6
- package/dist/cli/commands/report.d.ts +7 -2
- package/dist/cli/commands/report.d.ts.map +1 -1
- package/dist/cli/commands/report.js +19 -6
- package/dist/cli/commands/respond-strict.d.ts.map +1 -1
- package/dist/cli/commands/respond-strict.js +9 -2
- package/dist/cli/commands/roles.d.ts +11 -0
- package/dist/cli/commands/roles.d.ts.map +1 -0
- package/dist/cli/commands/roles.js +392 -0
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +526 -38
- package/dist/cli/commands/task.d.ts +22 -0
- package/dist/cli/commands/task.d.ts.map +1 -1
- package/dist/cli/commands/task.js +26 -18
- package/dist/cli/docs/agent-operations.d.ts +1 -1
- package/dist/cli/docs/agent-operations.d.ts.map +1 -1
- package/dist/cli/docs/agent-operations.js +91 -3
- package/dist/cli/index.d.ts +4 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +6 -0
- package/dist/cli/types/api-responses.d.ts +106 -0
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/index.d.ts +38 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/types/index.js +15 -1
- package/dist/cli/utils/agent-instances.d.ts +29 -1
- package/dist/cli/utils/agent-instances.d.ts.map +1 -1
- package/dist/cli/utils/agent-instances.js +67 -7
- package/dist/cli/utils/agent-roles.d.ts +75 -0
- package/dist/cli/utils/agent-roles.d.ts.map +1 -0
- package/dist/cli/utils/agent-roles.js +238 -0
- package/dist/cli/utils/api-client-deadline.d.ts +28 -0
- package/dist/cli/utils/api-client-deadline.d.ts.map +1 -0
- package/dist/cli/utils/api-client-deadline.js +46 -0
- package/dist/cli/utils/api-client-errors.d.ts +140 -0
- package/dist/cli/utils/api-client-errors.d.ts.map +1 -0
- package/dist/cli/utils/api-client-errors.js +222 -0
- package/dist/cli/utils/api-client.d.ts +9 -131
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +43 -258
- package/dist/cli/utils/role-failure.d.ts +31 -0
- package/dist/cli/utils/role-failure.d.ts.map +1 -0
- package/dist/cli/utils/role-failure.js +90 -0
- package/dist/cli/utils/role-input.d.ts +16 -0
- package/dist/cli/utils/role-input.d.ts.map +1 -0
- package/dist/cli/utils/role-input.js +78 -0
- package/dist/cli/utils/security-logger.d.ts +17 -0
- package/dist/cli/utils/security-logger.d.ts.map +1 -1
- package/dist/cli/utils/security-logger.js +44 -5
- package/dist/lib/cli-tools/types.d.ts +6 -0
- package/dist/lib/cli-tools/types.d.ts.map +1 -1
- package/dist/lib/detection/tools/verified-against.d.ts +16 -0
- package/dist/lib/detection/tools/verified-against.d.ts.map +1 -1
- package/dist/lib/detection/tools/verified-against.js +16 -0
- package/dist/lib/session/send-attempt-types.d.ts +4 -0
- package/dist/lib/session/send-attempt-types.d.ts.map +1 -1
- package/dist/lib/verification/verify-config.d.ts +22 -0
- package/dist/lib/verification/verify-config.d.ts.map +1 -1
- package/dist/lib/verification/verify-config.js +32 -2
- package/dist/server/locales/en/worktree.json +30 -4
- package/dist/server/locales/ja/worktree.json +30 -4
- package/dist/server/src/config/safe-directory.js +30 -0
- package/dist/server/src/lib/agent-roles/adapters.js +174 -0
- package/dist/server/src/lib/agent-roles/artifacts.js +638 -0
- package/dist/server/src/lib/agent-roles/composition.js +222 -0
- package/dist/server/src/lib/agent-roles/fingerprint.js +21 -0
- package/dist/server/src/lib/agent-roles/jsonc.js +85 -0
- package/dist/server/src/lib/agent-roles/launch-errors.js +58 -0
- package/dist/server/src/lib/agent-roles/pane-env.js +63 -0
- package/dist/server/src/lib/agent-roles/resolve.js +375 -0
- package/dist/server/src/lib/agent-roles/toml-basic.js +140 -0
- package/dist/server/src/lib/agent-roles/unicode.js +16 -0
- package/dist/server/src/lib/agent-roles/validation.js +61 -0
- package/dist/server/src/lib/cli-tools/antigravity.js +39 -6
- package/dist/server/src/lib/cli-tools/base.js +63 -5
- package/dist/server/src/lib/cli-tools/claude-auto-default-nudge.js +141 -0
- package/dist/server/src/lib/cli-tools/claude.js +15 -3
- package/dist/server/src/lib/cli-tools/codex.js +134 -21
- package/dist/server/src/lib/cli-tools/command-code.js +28 -13
- package/dist/server/src/lib/cli-tools/copilot.js +189 -31
- package/dist/server/src/lib/cli-tools/gemini.js +37 -3
- package/dist/server/src/lib/cli-tools/launch-answer-skips.js +76 -0
- package/dist/server/src/lib/cli-tools/opencode-v2.js +10 -0
- package/dist/server/src/lib/cli-tools/opencode.js +214 -12
- package/dist/server/src/lib/cli-tools/prompt-wait-dialog.js +115 -0
- package/dist/server/src/lib/cli-tools/submit-composer-read.js +65 -12
- package/dist/server/src/lib/cli-tools/submit-verified-sender-composer.js +78 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender-lock.js +116 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender-report.js +250 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender-shared.js +106 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender.js +94 -295
- package/dist/server/src/lib/cli-tools/vibe-local.js +111 -0
- package/dist/server/src/lib/db/agent-instances-db.js +53 -0
- package/dist/server/src/lib/db/agent-roles-db.js +409 -0
- package/dist/server/src/lib/db/agent-session-cost-sampler.js +3 -2
- package/dist/server/src/lib/db/chat-db.js +14 -1
- package/dist/server/src/lib/db/db-instance.js +84 -2
- package/dist/server/src/lib/db/migrations/index.js +6 -0
- package/dist/server/src/lib/db/migrations/runner.js +1 -1
- package/dist/server/src/lib/db/migrations/v63-session-relays-delivery-attempt.js +61 -0
- package/dist/server/src/lib/db/migrations/v64-agent-roles.js +123 -0
- package/dist/server/src/lib/db/migrations/v65-agent-instance-creation-keys.js +42 -0
- package/dist/server/src/lib/db/relay-bind-db-base.js +89 -0
- package/dist/server/src/lib/db/relay-bind-db-delivery.js +223 -0
- package/dist/server/src/lib/db/relay-bind-db-pending.js +183 -0
- package/dist/server/src/lib/db/relay-bind-db.js +88 -167
- package/dist/server/src/lib/db/relay-db-base.js +20 -0
- package/dist/server/src/lib/db/relay-db-count.js +49 -0
- package/dist/server/src/lib/db/relay-db-delivery.js +104 -0
- package/dist/server/src/lib/db/relay-db-hold.js +250 -0
- package/dist/server/src/lib/db/relay-db.js +68 -92
- package/dist/server/src/lib/detection/cli-patterns.js +13 -3
- package/dist/server/src/lib/detection/model-info-extractor.js +1 -1
- package/dist/server/src/lib/detection/tools/claude/patterns.js +76 -0
- package/dist/server/src/lib/detection/tools/codex/cli-patterns.js +5 -0
- package/dist/server/src/lib/detection/tools/codex/detect.js +5 -1
- package/dist/server/src/lib/detection/tools/codex/patterns.js +52 -2
- package/dist/server/src/lib/detection/tools/codex/prompt.js +23 -3
- package/dist/server/src/lib/detection/tools/opencode/composer-own-text.js +119 -0
- package/dist/server/src/lib/detection/tools/opencode/detect.js +30 -15
- package/dist/server/src/lib/detection/tools/opencode/patterns.js +268 -7
- package/dist/server/src/lib/detection/tools/opencode/readiness.js +71 -0
- package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +51 -15
- package/dist/server/src/lib/detection/tools/opencode-v2/patterns.js +195 -11
- package/dist/server/src/lib/detection/tools/run-detection.js +5 -2
- package/dist/server/src/lib/detection/tools/verified-against.js +16 -0
- package/dist/server/src/lib/detection/tools/vibe-local/readiness.js +92 -0
- package/dist/server/src/lib/git/git-common-dir.js +192 -0
- package/dist/server/src/lib/hooks/hook-settings-generator.js +8 -2
- package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +31 -1
- package/dist/server/src/lib/hooks/sources/launch-command.js +31 -8
- package/dist/server/src/lib/hooks/sources/opencode/client.js +20 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/client.js +24 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +208 -35
- package/dist/server/src/lib/hooks/sources/opencode-v2/secrets.js +7 -1
- package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +117 -2
- package/dist/server/src/lib/job-executor.js +18 -1
- package/dist/server/src/lib/polling/response-checker-extraction-steps.js +58 -4
- package/dist/server/src/lib/polling/response-checker.js +32 -7
- package/dist/server/src/lib/relay/relay-bound-reply.js +20 -9
- package/dist/server/src/lib/relay/relay-delivery-block.js +150 -0
- package/dist/server/src/lib/relay/relay-delivery.js +416 -79
- package/dist/server/src/lib/relay/relay-messages.js +13 -0
- package/dist/server/src/lib/relay/relay-system-line.js +28 -15
- package/dist/server/src/lib/relay/types.js +14 -2
- package/dist/server/src/lib/response-cleaner.js +13 -3
- package/dist/server/src/lib/response-extractor.js +38 -3
- package/dist/server/src/lib/session/agent-session-lifecycle.js +9 -1
- package/dist/server/src/lib/session/claude-executor.js +13 -1
- package/dist/server/src/lib/session/claude-session.js +113 -14
- package/dist/server/src/lib/session/current-output-builder.js +7 -5
- package/dist/server/src/lib/session/instance-input-lock.js +140 -6
- package/dist/server/src/lib/session/prompt-submit-receipt.js +87 -18
- package/dist/server/src/lib/session/prompt-waiting-guard.js +8 -2
- package/dist/server/src/lib/session/respond-target.js +82 -0
- package/dist/server/src/lib/session/role-launch.js +722 -0
- package/dist/server/src/lib/session/send-attempt-state.js +137 -3
- package/dist/server/src/lib/session/send-user-message.js +84 -7
- package/dist/server/src/lib/session/session-generation-archive.js +7 -8
- package/dist/server/src/lib/session/session-launch-flight.js +33 -1
- package/dist/server/src/lib/session/structured-prompt.js +12 -7
- package/dist/server/src/lib/session/worktree-session-reconcile.js +15 -0
- package/dist/server/src/lib/session-key-sender.js +6 -1
- package/dist/server/src/lib/test-run-detection.js +53 -0
- package/dist/server/src/lib/tmux/read-mode.js +4 -0
- package/dist/server/src/lib/tmux/session-hook-scripts.js +36 -4
- package/dist/server/src/lib/tui-accumulator.js +14 -5
- package/dist/server/src/lib/verification/env-clean-gate.js +117 -12
- package/dist/server/src/lib/verification/gate-runner.js +9 -8
- package/dist/server/src/lib/verification/verify-config.js +32 -2
- package/dist/server/src/types/agent-roles.js +56 -0
- package/dist/types/agent-roles.d.ts +351 -0
- package/dist/types/agent-roles.d.ts.map +1 -0
- package/dist/types/agent-roles.js +56 -0
- package/docs/en/user-guide/webapp-guide.md +16 -0
- package/package.json +2 -1
- package/release-notes/0.49.3.json +52 -0
- package/release-notes/0.50.0.json +113 -0
- package/.next/server/chunks/1062.js +0 -1
- package/.next/server/chunks/110.js +0 -1
- package/.next/server/chunks/2422.js +0 -1
- package/.next/server/chunks/3756.js +0 -1
- package/.next/server/chunks/4936.js +0 -1
- package/.next/server/chunks/5630.js +0 -1
- package/.next/server/chunks/610.js +0 -1
- package/.next/server/chunks/6119.js +0 -1
- package/.next/server/chunks/6808.js +0 -4
- package/.next/server/chunks/7491.js +0 -3
- package/.next/server/chunks/9198.js +0 -144
- package/.next/server/chunks/9360.js +0 -2
- package/.next/server/chunks/9584.js +0 -1
- package/.next/static/chunks/2407-07a237575e1ceb9e.js +0 -1
- package/.next/static/chunks/344-e1cefd00787060e4.js +0 -1
- package/.next/static/chunks/3931-61ad1a4fc0208d0e.js +0 -1
- package/.next/static/chunks/7229.7f0f5a7032b612b4.js +0 -1
- package/.next/static/chunks/8165-263172c17ae8e8c3.js +0 -1
- package/.next/static/chunks/app/api/agents/update/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/agents/versions/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/app/release-notes/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/capabilities/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/relays/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/remote/pair/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/settings/default-agents/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/templates/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/layout-4f64316957b0a8e5.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/repositories/page-71f5a5ac29b0370d.js +0 -1
- package/.next/static/chunks/app/review/page-ff3efb96fdf9bb4b.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-33afc6aa96289fb0.js +0 -1
- package/.next/static/css/c1e307d05daf93b6.css +0 -1
- package/.next/static/yGatWDsS532awSs51kXyd/_buildManifest.js +0 -1
- /package/.next/static/{yGatWDsS532awSs51kXyd → z4d8-5MaLkoD-4EhueZwk}/_ssgManifest.js +0 -0
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* commandmate instances <worktree-id> remove <instance-id> [--kill]
|
|
9
9
|
* commandmate instances <worktree-id> alias <instance-id> <new-alias>
|
|
10
10
|
* commandmate instances <worktree-id> kill <instance-id>
|
|
11
|
+
* commandmate instances <worktree-id> set-role <instance-id> (--role <role> | --none | --inherit)
|
|
11
12
|
*/
|
|
12
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
14
|
exports.INSTANCE_SELECTOR_ERROR = exports.INSTANCE_ALIAS_HELP_SUFFIX = void 0;
|
|
@@ -33,6 +34,7 @@ const session_kill_ledger_1 = require("../../lib/verification/session-kill-ledge
|
|
|
33
34
|
// attach` / `tmux attach` need no hand-assembly of `mcbd-<tool>-<wt>[-<suffix>]`.
|
|
34
35
|
const session_name_1 = require("../../lib/cli-tools/session-name");
|
|
35
36
|
const validation_1 = require("../../lib/cli-tools/validation");
|
|
37
|
+
const agent_roles_1 = require("../utils/agent-roles");
|
|
36
38
|
/**
|
|
37
39
|
* The tmux session name for one roster row, or null.
|
|
38
40
|
*
|
|
@@ -58,6 +60,18 @@ function deriveInstanceSession(worktreeId, inst) {
|
|
|
58
60
|
* sentence. `--json` carries the full string; the table is a table.
|
|
59
61
|
*/
|
|
60
62
|
const MAX_SESSION_TITLE_COLUMN = 40;
|
|
63
|
+
function describeNextRole(next) {
|
|
64
|
+
if (next.kind === 'role')
|
|
65
|
+
return `${next.role.name}(${next.source})`;
|
|
66
|
+
return next.kind === 'none' ? `none(${next.source})` : 'ambiguous';
|
|
67
|
+
}
|
|
68
|
+
/** The three role columns of one row. `unknown` for a startup role is what the server knows. */
|
|
69
|
+
function roleColumns(role) {
|
|
70
|
+
if (!role)
|
|
71
|
+
return ['', '', ''];
|
|
72
|
+
const atStart = role.launched === null ? 'unknown' : role.launched.roleName ?? 'none';
|
|
73
|
+
return [atStart, describeNextRole(role.effectiveNext), role.restartPending];
|
|
74
|
+
}
|
|
61
75
|
/**
|
|
62
76
|
* Format instance rows as a table for terminal display.
|
|
63
77
|
* [DR1-08 consistency] Mirrors ls.ts's formatTable().
|
|
@@ -68,11 +82,14 @@ const MAX_SESSION_TITLE_COLUMN = 40;
|
|
|
68
82
|
function formatInstancesTable(rows) {
|
|
69
83
|
if (rows.length === 0)
|
|
70
84
|
return 'No agent instances found.';
|
|
85
|
+
// Issue #4116: appended, as #1785 and #2038 did, and only by a server that knows.
|
|
86
|
+
const showRoles = rows.some((r) => r.role !== undefined);
|
|
71
87
|
const headers = [
|
|
72
88
|
'INSTANCE_ID', 'ALIAS', 'CLI_TOOL', 'RUNNING', 'AUTO_YES', 'MODEL', 'EFFORT',
|
|
73
89
|
// Issue #2038 appends, exactly as #1785 did, so anything reading this table
|
|
74
90
|
// by column position keeps working. Issue #2317 appends for the same reason.
|
|
75
91
|
'SESSION_ID', 'SESSION_TITLE', 'TMUX_SESSION',
|
|
92
|
+
...(showRoles ? ['ROLE_AT_START', 'ROLE_NEXT', 'RESTART_PENDING'] : []),
|
|
76
93
|
];
|
|
77
94
|
const dataRows = rows.map(r => [
|
|
78
95
|
r.instanceId,
|
|
@@ -90,6 +107,7 @@ function formatInstancesTable(rows) {
|
|
|
90
107
|
r.sessionId ?? '',
|
|
91
108
|
(r.sessionTitle ?? '').slice(0, MAX_SESSION_TITLE_COLUMN),
|
|
92
109
|
r.tmuxSession ?? '',
|
|
110
|
+
...(showRoles ? roleColumns(r.role) : []),
|
|
93
111
|
]);
|
|
94
112
|
const colWidths = headers.map((h, i) => Math.max(h.length, ...dataRows.map(r => r[i].length)));
|
|
95
113
|
const headerLine = headers.map((h, i) => h.padEnd(colWidths[i])).join(' ');
|
|
@@ -275,6 +293,34 @@ async function fetchArmedAutoYes(client, worktreeId) {
|
|
|
275
293
|
return null;
|
|
276
294
|
}
|
|
277
295
|
}
|
|
296
|
+
/**
|
|
297
|
+
* Each instance's role, keyed by instance id, or null when the server does not say.
|
|
298
|
+
* Like the two reads above: a listing is never failed by a column.
|
|
299
|
+
*/
|
|
300
|
+
async function fetchInstanceRoles(client, worktreeId) {
|
|
301
|
+
try {
|
|
302
|
+
const { instances } = await client.get(`/api/worktrees/${worktreeId}/instances/roles`);
|
|
303
|
+
if (!Array.isArray(instances))
|
|
304
|
+
return null;
|
|
305
|
+
return new Map(instances.map(({ instanceId, stored, application }) => [instanceId, { stored, ...application }]));
|
|
306
|
+
}
|
|
307
|
+
catch (error) {
|
|
308
|
+
(0, api_client_1.rethrowIfDeadlineExceeded)(error);
|
|
309
|
+
return null;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* `--require-roles`: for a caller that must not read "the roles could not be read" as
|
|
314
|
+
* "this server has none". Every failure is the command's; the route being missing is
|
|
315
|
+
* `role_api_unavailable`, through {@link reportRoleFailure}.
|
|
316
|
+
*/
|
|
317
|
+
async function readInstanceRolesStrict(client, worktreeId) {
|
|
318
|
+
const { instances } = await client.get(`/api/worktrees/${worktreeId}/instances/roles`);
|
|
319
|
+
if (!Array.isArray(instances)) {
|
|
320
|
+
throw new agent_roles_1.RoleCliError('role_read_failed', 'The server answered the role settings with no instances.', types_1.ExitCode.UNEXPECTED_ERROR);
|
|
321
|
+
}
|
|
322
|
+
return new Map(instances.map(({ instanceId, stored, application }) => [instanceId, { stored, ...application }]));
|
|
323
|
+
}
|
|
278
324
|
/**
|
|
279
325
|
* List action: roster + live running/auto-yes status per instance.
|
|
280
326
|
* Probes GET .../current-output?cliTool=&instance= per instance (same
|
|
@@ -326,7 +372,7 @@ async function listInstances(client, worktreeId, options) {
|
|
|
326
372
|
// size, and none for an empty one. Asked after the probes above, so the
|
|
327
373
|
// column is the latest of the readings this listing takes.
|
|
328
374
|
const armed = instances.length > 0 ? await fetchArmedAutoYes(client, worktreeId) : null;
|
|
329
|
-
const
|
|
375
|
+
const armedRows = armed === null
|
|
330
376
|
? sessionRows
|
|
331
377
|
: sessionRows.map(({ autoYesAnswerMode: _sessionMode, ...row }) => {
|
|
332
378
|
const entry = armed.get(row.instanceId);
|
|
@@ -341,52 +387,194 @@ async function listInstances(client, worktreeId, options) {
|
|
|
341
387
|
...(entry?.releasedByRestart ? { autoYesStopReason: 'server-restart' } : {}),
|
|
342
388
|
};
|
|
343
389
|
});
|
|
390
|
+
// Issue #4116: after the others, and additive.
|
|
391
|
+
const roles = options.requireRoles
|
|
392
|
+
? await readInstanceRolesStrict(client, worktreeId)
|
|
393
|
+
: instances.length > 0 ? await fetchInstanceRoles(client, worktreeId) : null;
|
|
394
|
+
const rows = armedRows.map((row) => {
|
|
395
|
+
const role = roles?.get(row.instanceId);
|
|
396
|
+
if (options.requireRoles && !role) {
|
|
397
|
+
throw new agent_roles_1.RoleCliError('role_read_failed', `The server said nothing about the role of ${row.instanceId}.`, types_1.ExitCode.UNEXPECTED_ERROR);
|
|
398
|
+
}
|
|
399
|
+
return role ? { ...row, role } : row;
|
|
400
|
+
});
|
|
344
401
|
if (options.json) {
|
|
345
402
|
console.log(JSON.stringify(rows, null, 2));
|
|
346
403
|
return;
|
|
347
404
|
}
|
|
348
405
|
console.log(formatInstancesTable(rows));
|
|
349
406
|
}
|
|
407
|
+
/** One instance's entry in a settings answer, or the failure for a server that left it out. */
|
|
408
|
+
function roleEntryOf(settings, instanceId) {
|
|
409
|
+
const entry = settings.instances.find((instance) => instance.instanceId === instanceId);
|
|
410
|
+
if (!entry)
|
|
411
|
+
throw new agent_roles_1.RoleCliError('roster_changed', `Instance '${instanceId}' is no longer in the roster.`, types_1.RoleExitCode.CONFLICT);
|
|
412
|
+
return entry;
|
|
413
|
+
}
|
|
414
|
+
/** The setting beside the process: what `set-role` and `add --role` answer with. */
|
|
415
|
+
function roleChangeResult(settings, entry) {
|
|
416
|
+
return {
|
|
417
|
+
success: true,
|
|
418
|
+
instanceId: entry.instanceId,
|
|
419
|
+
cliToolId: entry.cliToolId,
|
|
420
|
+
adapterEnabled: entry.adapterEnabled,
|
|
421
|
+
stored: entry.stored,
|
|
422
|
+
effectiveNext: entry.application.effectiveNext,
|
|
423
|
+
launched: entry.application.launched,
|
|
424
|
+
requested: entry.application.requested,
|
|
425
|
+
restartPending: entry.application.restartPending,
|
|
426
|
+
// Only a difference is pending: `unknown` is not known to be one.
|
|
427
|
+
applyPending: entry.application.restartPending === 'yes',
|
|
428
|
+
...(entry.application.replacesDefaultInstructions ? { replacesDefaultInstructions: true } : {}),
|
|
429
|
+
rosterRevision: settings.rosterRevision,
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
function printRoleChange(worktreeId, entry) {
|
|
433
|
+
const { effectiveNext, launched, restartPending } = entry.application;
|
|
434
|
+
console.error(`Next start: ${describeNextRole(effectiveNext)}`);
|
|
435
|
+
console.error(`Running process started with: ${launched === null ? 'not known' : launched.roleName ?? 'no role'}`);
|
|
436
|
+
if (restartPending === 'yes') {
|
|
437
|
+
console.error(`Pending: the running process keeps its role until it is stopped (commandmate instances ${worktreeId} kill ${entry.instanceId}).`);
|
|
438
|
+
}
|
|
439
|
+
else if (restartPending === 'unknown') {
|
|
440
|
+
console.error('Whether a restart is needed is not known: nothing is known about a running process, if there is one.');
|
|
441
|
+
}
|
|
442
|
+
if (!entry.adapterEnabled && effectiveNext.kind === 'role') {
|
|
443
|
+
console.error(`Warning: roles are not enabled for ${entry.cliToolId} yet: a start that resolves to one is refused.`);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
/**
|
|
447
|
+
* set-role action: save an instance's role for its next start. A running session is
|
|
448
|
+
* not touched, and the answer compares the two.
|
|
449
|
+
*/
|
|
450
|
+
async function setInstanceRole(client, worktreeId, instanceId, options) {
|
|
451
|
+
if (!(0, api_client_1.isValidInstanceId)(instanceId)) {
|
|
452
|
+
throw (0, agent_roles_1.usageError)('Invalid instance id. Must be an alphanumeric/underscore/hyphen identifier (max 64 chars).');
|
|
453
|
+
}
|
|
454
|
+
if (options.role === false)
|
|
455
|
+
throw (0, agent_roles_1.usageError)('set-role says "no role" with --none.');
|
|
456
|
+
const given = [options.role !== undefined, options.none === true, options.inherit === true].filter(Boolean).length;
|
|
457
|
+
if (given !== 1)
|
|
458
|
+
throw (0, agent_roles_1.usageError)('set-role needs one of --role <role>, --none or --inherit.');
|
|
459
|
+
const role = options.none
|
|
460
|
+
? { state: 'none' }
|
|
461
|
+
: options.inherit
|
|
462
|
+
? { state: 'inherit' }
|
|
463
|
+
: { state: 'role', roleId: (await (0, agent_roles_1.resolveRole)(client, options.role)).id };
|
|
464
|
+
const settings = await (0, agent_roles_1.roleWrite)(`commandmate instances ${worktreeId}`, () => client.put(`/api/worktrees/${worktreeId}/instances/roles`, { instanceId, role }));
|
|
465
|
+
const entry = roleEntryOf(settings, instanceId);
|
|
466
|
+
if (options.json) {
|
|
467
|
+
console.log(JSON.stringify(roleChangeResult(settings, entry), null, 2));
|
|
468
|
+
return;
|
|
469
|
+
}
|
|
470
|
+
const stored = entry.stored;
|
|
471
|
+
console.log(`Role saved for ${instanceId}: ${stored.state === 'role' ? stored.roleName : stored.state}`);
|
|
472
|
+
printRoleChange(worktreeId, entry);
|
|
473
|
+
}
|
|
474
|
+
/** The refusals a `--role` flag on another action gets. */
|
|
475
|
+
function assertNoRoleFlags(action, options) {
|
|
476
|
+
const allowed = {
|
|
477
|
+
add: ['role'],
|
|
478
|
+
'set-role': ['role', 'none', 'inherit'],
|
|
479
|
+
};
|
|
480
|
+
for (const flag of ['role', 'none', 'inherit']) {
|
|
481
|
+
if (options[flag] !== undefined && !(allowed[action] ?? []).includes(flag)) {
|
|
482
|
+
throw (0, agent_roles_1.usageError)(`--${flag} does not apply to '${action}'.`);
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
}
|
|
350
486
|
/**
|
|
351
487
|
* Add action: append a new instance to the roster (PATCH full replacement).
|
|
352
488
|
*/
|
|
353
489
|
async function addInstance(client, worktreeId, options) {
|
|
354
|
-
|
|
355
|
-
|
|
490
|
+
// Issue #4116: with a role flag this is a role form, whose `--json` answers every
|
|
491
|
+
// failure on stdout. The exit code is the same either way.
|
|
492
|
+
const refuse = (message) => {
|
|
493
|
+
if (options.role !== undefined)
|
|
494
|
+
throw (0, agent_roles_1.usageError)(message);
|
|
495
|
+
console.error(`Error: ${message}`);
|
|
356
496
|
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
497
|
+
};
|
|
498
|
+
if (!options.agent) {
|
|
499
|
+
refuse('add requires --agent <tool>.');
|
|
500
|
+
return;
|
|
357
501
|
}
|
|
358
502
|
if (!(0, cli_tool_ids_1.isCliToolId)(options.agent)) {
|
|
359
|
-
|
|
360
|
-
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
503
|
+
refuse(`Invalid --agent. Must be one of: ${cli_tool_ids_1.CLI_TOOL_IDS.join(', ')}`);
|
|
361
504
|
}
|
|
362
505
|
if (options.id && !(0, api_client_1.isValidInstanceId)(options.id)) {
|
|
363
|
-
|
|
364
|
-
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
506
|
+
refuse('Invalid --id. Must be an alphanumeric/underscore/hyphen identifier (max 64 chars).');
|
|
365
507
|
}
|
|
366
508
|
if (options.alias && options.alias.length > agent_instances_1.MAX_AGENT_ALIAS_LENGTH) {
|
|
367
|
-
|
|
368
|
-
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
509
|
+
refuse(`--alias exceeds ${agent_instances_1.MAX_AGENT_ALIAS_LENGTH} characters.`);
|
|
369
510
|
}
|
|
370
|
-
|
|
511
|
+
// Issue #4116: a role goes in with the instance, through the route that creates both
|
|
512
|
+
// in one transaction and refuses a roster changed since this read.
|
|
513
|
+
if (options.role !== undefined)
|
|
514
|
+
(0, agent_roles_1.assertRoleTool)(options.agent);
|
|
515
|
+
const roleAssignment = await (0, agent_roles_1.roleAssignmentFromFlag)(client, options.role);
|
|
516
|
+
const roleSettings = roleAssignment === undefined
|
|
517
|
+
? null
|
|
518
|
+
: await client.get(`/api/worktrees/${worktreeId}/instances/roles`);
|
|
519
|
+
const roster = roleSettings === null ? await (0, agent_instances_1.fetchAgentRoster)(client, worktreeId) : null;
|
|
520
|
+
const existing = roster !== null
|
|
521
|
+
? roster.instances
|
|
522
|
+
: roleSettings.instances.map((instance, order) => ({
|
|
523
|
+
id: instance.instanceId,
|
|
524
|
+
cliTool: instance.cliToolId,
|
|
525
|
+
alias: instance.alias,
|
|
526
|
+
order,
|
|
527
|
+
}));
|
|
371
528
|
if (existing.length >= agent_instances_1.MAX_AGENT_INSTANCES) {
|
|
372
|
-
|
|
373
|
-
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
529
|
+
refuse(`worktree already has the maximum of ${agent_instances_1.MAX_AGENT_INSTANCES} agent instances.`);
|
|
374
530
|
}
|
|
375
531
|
const id = options.id ?? (0, agent_instances_1.nextInstanceId)(options.agent, existing);
|
|
376
532
|
if (existing.some(inst => inst.id === id)) {
|
|
533
|
+
if (roleSettings !== null) {
|
|
534
|
+
throw new agent_roles_1.RoleCliError('instance_exists', `Instance '${id}' already exists. Set its role with: set-role ${id}`, types_1.RoleExitCode.CONFLICT);
|
|
535
|
+
}
|
|
377
536
|
console.error(`Error: instance '${id}' already exists.`);
|
|
378
537
|
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
379
538
|
}
|
|
380
539
|
// Primary-anchor consistency (mirrors validateAgentInstancesInput on the
|
|
381
540
|
// server): an id equal to a CLI tool id must back that exact tool.
|
|
382
541
|
if ((0, cli_tool_ids_1.isCliToolId)(id) && id !== options.agent) {
|
|
383
|
-
|
|
384
|
-
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
542
|
+
refuse(`instance id '${id}' conflicts with --agent '${options.agent}'.`);
|
|
385
543
|
}
|
|
386
544
|
const alias = options.alias ?? (0, agent_instances_1.defaultAlias)(options.agent, id);
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
545
|
+
if (roleAssignment !== undefined && roleSettings !== null) {
|
|
546
|
+
const agent = options.agent;
|
|
547
|
+
const created = await (0, agent_roles_1.roleWrite)(`commandmate instances ${worktreeId}`, () => client.post(`/api/worktrees/${worktreeId}/instances/roles`, {
|
|
548
|
+
instance: { id, cliTool: agent, alias },
|
|
549
|
+
role: roleAssignment,
|
|
550
|
+
expectedRosterRevision: roleSettings.rosterRevision,
|
|
551
|
+
}));
|
|
552
|
+
const entry = roleEntryOf(created, created.created.instanceId);
|
|
553
|
+
console.error(`Instance added: ${id} (${options.agent})`);
|
|
554
|
+
if (options.json) {
|
|
555
|
+
console.log(JSON.stringify({ ...roleChangeResult(created, entry), created: created.created }, null, 2));
|
|
556
|
+
}
|
|
557
|
+
else {
|
|
558
|
+
printRoleChange(worktreeId, entry);
|
|
559
|
+
}
|
|
560
|
+
return;
|
|
561
|
+
}
|
|
562
|
+
// Issue #4132: built again if the roster moved after the read, so the checks above and
|
|
563
|
+
// the free id are asked again of what is really there.
|
|
564
|
+
const agent = options.agent;
|
|
565
|
+
let addedId = id;
|
|
566
|
+
const next = await (0, agent_instances_1.saveRosterChange)(client, worktreeId, roster ?? { instances: existing }, (base) => {
|
|
567
|
+
if (base.length >= agent_instances_1.MAX_AGENT_INSTANCES) {
|
|
568
|
+
refuse(`worktree already has the maximum of ${agent_instances_1.MAX_AGENT_INSTANCES} agent instances.`);
|
|
569
|
+
}
|
|
570
|
+
addedId = options.id ?? (0, agent_instances_1.nextInstanceId)(agent, base);
|
|
571
|
+
if (base.some((inst) => inst.id === addedId)) {
|
|
572
|
+
refuse(`instance '${addedId}' already exists.`);
|
|
573
|
+
}
|
|
574
|
+
const added = { id: addedId, cliTool: agent, alias: options.alias ?? (0, agent_instances_1.defaultAlias)(agent, addedId), order: base.length };
|
|
575
|
+
return [...base, added];
|
|
576
|
+
});
|
|
577
|
+
console.error(`Instance added: ${addedId} (${options.agent})`);
|
|
390
578
|
if (options.json) {
|
|
391
579
|
console.log(JSON.stringify(next, null, 2));
|
|
392
580
|
}
|
|
@@ -431,7 +619,8 @@ async function removeInstance(client, worktreeId, instanceId, options) {
|
|
|
431
619
|
console.error('Error: Invalid instance id. Must be an alphanumeric/underscore/hyphen identifier (max 64 chars).');
|
|
432
620
|
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
433
621
|
}
|
|
434
|
-
const
|
|
622
|
+
const roster = await (0, agent_instances_1.fetchAgentRoster)(client, worktreeId);
|
|
623
|
+
const existing = roster.instances;
|
|
435
624
|
if (!existing.some(inst => inst.id === instanceId)) {
|
|
436
625
|
console.error(`Error: instance '${instanceId}' not found in roster.`);
|
|
437
626
|
process.exit(types_1.ExitCode.UNEXPECTED_ERROR);
|
|
@@ -450,8 +639,16 @@ async function removeInstance(client, worktreeId, instanceId, options) {
|
|
|
450
639
|
console.error(`Warning: could not kill session for ${instanceId}: ${(0, types_1.getErrorMessage)(killError)}`);
|
|
451
640
|
}
|
|
452
641
|
}
|
|
453
|
-
|
|
454
|
-
await (0, agent_instances_1.
|
|
642
|
+
// Issue #4132: what the kill above did is not repeated when the roster moved; only this is.
|
|
643
|
+
await (0, agent_instances_1.saveRosterChange)(client, worktreeId, roster, (base) => {
|
|
644
|
+
if (!base.some(inst => inst.id === instanceId))
|
|
645
|
+
return null;
|
|
646
|
+
if (base.length <= agent_instances_1.MIN_AGENT_INSTANCES) {
|
|
647
|
+
console.error('Error: cannot remove the last remaining agent instance.');
|
|
648
|
+
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
649
|
+
}
|
|
650
|
+
return base.filter(inst => inst.id !== instanceId);
|
|
651
|
+
});
|
|
455
652
|
console.error(`Instance removed from roster: ${instanceId}`);
|
|
456
653
|
}
|
|
457
654
|
/**
|
|
@@ -466,14 +663,14 @@ async function renameInstance(client, worktreeId, instanceId, alias) {
|
|
|
466
663
|
console.error(`Error: alias must be 1-${agent_instances_1.MAX_AGENT_ALIAS_LENGTH} characters.`);
|
|
467
664
|
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
468
665
|
}
|
|
469
|
-
const
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
666
|
+
const roster = await (0, agent_instances_1.fetchAgentRoster)(client, worktreeId);
|
|
667
|
+
await (0, agent_instances_1.saveRosterChange)(client, worktreeId, roster, (base) => {
|
|
668
|
+
if (!base.some(inst => inst.id === instanceId)) {
|
|
669
|
+
console.error(`Error: instance '${instanceId}' not found in roster.`);
|
|
670
|
+
process.exit(types_1.ExitCode.UNEXPECTED_ERROR);
|
|
671
|
+
}
|
|
672
|
+
return base.map(inst => (inst.id === instanceId ? { ...inst, alias } : inst));
|
|
673
|
+
});
|
|
477
674
|
console.error(`Instance alias updated: ${instanceId} -> "${alias}"`);
|
|
478
675
|
}
|
|
479
676
|
/**
|
|
@@ -511,27 +708,73 @@ async function warnIfDifferentServer(client, error) {
|
|
|
511
708
|
}
|
|
512
709
|
function createInstancesCommand() {
|
|
513
710
|
const cmd = new commander_1.Command('instances');
|
|
711
|
+
const bothRoleFlags = (0, agent_roles_1.watchRoleFlagConflict)(cmd);
|
|
514
712
|
cmd
|
|
515
713
|
.description('Discover and manage agent instances (roster) for a worktree')
|
|
516
714
|
.argument('<worktree-id>', 'Worktree ID')
|
|
517
|
-
.argument('[action]', 'list (default), add, remove, alias, or
|
|
715
|
+
.argument('[action]', 'list (default), add, remove, alias, kill, or set-role')
|
|
518
716
|
.argument('[rest...]', 'Action-specific arguments (instance-id, new alias)')
|
|
519
|
-
.option('--json', 'JSON output (list/add)')
|
|
717
|
+
.option('--json', 'JSON output (list/add/set-role)')
|
|
520
718
|
.option('--agent <tool>', 'CLI tool for the add action (claude, codex, gemini, vibe-local, opencode, copilot, antigravity)')
|
|
521
719
|
.option('--alias <name>', 'Display alias for the add action')
|
|
522
720
|
.option('--id <instance-id>', 'Explicit instance ID for the add action (format: <agent> or <agent>-<n>, e.g. claude-2)')
|
|
523
721
|
.option('--kill', 'Also kill the running session when removing an instance')
|
|
722
|
+
.option('--role <role>', 'add / set-role: role ID or name for this instance')
|
|
723
|
+
.option('--no-role', 'add: explicitly no role')
|
|
724
|
+
.option('--none', 'set-role: explicitly no role')
|
|
725
|
+
.option('--inherit', 'set-role: drop the setting, and follow the defaults')
|
|
726
|
+
.option('--require-roles', 'list --json: fail instead of leaving role out when it cannot be read; failures are JSON')
|
|
524
727
|
.option('--token <token>', command_helpers_1.TOKEN_WARNING)
|
|
728
|
+
.addHelpText('after', `
|
|
729
|
+
set-role saves what this instance's NEXT start uses, running or not. A role is fixed
|
|
730
|
+
when the process starts, so a running session is not touched. The answer compares the
|
|
731
|
+
two: applyPending (--json) / "Pending:" only when they differ. restartPending: yes, no,
|
|
732
|
+
or unknown (nothing known about the process: not started, or the server restarted).
|
|
733
|
+
To change what a whole repository or tool gets instead: commandmate roles default.
|
|
734
|
+
To change the role's text: commandmate roles edit. See: commandmate roles --help
|
|
735
|
+
|
|
736
|
+
add --role / --no-role creates the instance and its role together, refused (exit 31)
|
|
737
|
+
if the roster changed meanwhile. Without them the instance follows the defaults.
|
|
738
|
+
|
|
739
|
+
add, remove and alias without those flags build their change again on a fresh read when
|
|
740
|
+
the roster moved. If it kept changing through every attempt: exit 31 (roster_changed) and
|
|
741
|
+
nothing was saved to it. What came before the save stands (remove --kill stopped the session).
|
|
742
|
+
|
|
743
|
+
--json, list: every row carries role when the server has roles:
|
|
744
|
+
role: { stored, effectiveNext: { kind, source, role?, injectionFingerprint }, launched,
|
|
745
|
+
requested, restartPending }
|
|
746
|
+
launched / requested are launch records, with roleId, roleName, source and
|
|
747
|
+
injectionFingerprint. launched null means not known, which is not "no role".
|
|
748
|
+
--json, set-role and add --role: { success, instanceId, cliToolId, adapterEnabled, stored,
|
|
749
|
+
effectiveNext, launched, requested, restartPending, applyPending, rosterRevision }
|
|
750
|
+
--json failure of those two: { success: false, error, message } on stdout, whatever failed.
|
|
751
|
+
A 5xx or no answer may still have saved: it adds saved: "unknown" and check. A 4xx saved nothing.
|
|
752
|
+
--require-roles makes list --json fail rather than leave role out, so a script can tell
|
|
753
|
+
"could not be read" from a server older than roles (error: role_api_unavailable).
|
|
754
|
+
|
|
755
|
+
Exit codes for the role forms: 0 done; 2 usage, unknown or ambiguous role, instance not
|
|
756
|
+
on the roster, or a tool roles do not apply to; 31 instance_exists or roster_changed.
|
|
757
|
+
`)
|
|
525
758
|
.action(async (worktreeId, action, rest, options) => {
|
|
526
759
|
// One client for the whole invocation (Issue #2404): every action built
|
|
527
760
|
// its own identical one, and the failure path below has to report the URL
|
|
528
761
|
// the request actually went to — a second construction is a second answer.
|
|
529
|
-
|
|
762
|
+
let client;
|
|
763
|
+
// Issue #4116: the forms whose `--json` promises an answer for every failure.
|
|
764
|
+
const roleForm = action === 'set-role' || (action === 'add' && options.role !== undefined) || options.requireRoles === true;
|
|
530
765
|
try {
|
|
766
|
+
// Inside the try, as `roles` has it: the constructor can refuse (CM_UAT_ISOLATION
|
|
767
|
+
// with no CM_PORT), and that is a failure like any other.
|
|
768
|
+
client = new api_client_1.ApiClient({ token: options.token });
|
|
531
769
|
if (!(0, api_client_1.isValidWorktreeId)(worktreeId)) {
|
|
770
|
+
if (roleForm)
|
|
771
|
+
throw (0, agent_roles_1.usageError)('Invalid worktree ID format.');
|
|
532
772
|
console.error('Error: Invalid worktree ID format.');
|
|
533
773
|
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
534
774
|
}
|
|
775
|
+
if (bothRoleFlags())
|
|
776
|
+
throw (0, agent_roles_1.usageError)('Give --role or --no-role, not both.');
|
|
777
|
+
assertNoRoleFlags(action ?? 'list', options);
|
|
535
778
|
switch (action ?? 'list') {
|
|
536
779
|
case 'list':
|
|
537
780
|
await listInstances(client, worktreeId, options);
|
|
@@ -567,8 +810,15 @@ function createInstancesCommand() {
|
|
|
567
810
|
await killInstance(client, worktreeId, instanceId);
|
|
568
811
|
break;
|
|
569
812
|
}
|
|
813
|
+
case 'set-role': {
|
|
814
|
+
const [instanceId] = rest;
|
|
815
|
+
if (!instanceId)
|
|
816
|
+
throw (0, agent_roles_1.usageError)('set-role requires an <instance-id> argument.');
|
|
817
|
+
await setInstanceRole(client, worktreeId, instanceId, options);
|
|
818
|
+
break;
|
|
819
|
+
}
|
|
570
820
|
default:
|
|
571
|
-
console.error(`Error: unknown action '${action}'. Valid actions: list, add, remove, alias, kill.`);
|
|
821
|
+
console.error(`Error: unknown action '${action}'. Valid actions: list, add, remove, alias, kill, set-role.`);
|
|
572
822
|
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
573
823
|
}
|
|
574
824
|
}
|
|
@@ -579,7 +829,14 @@ function createInstancesCommand() {
|
|
|
579
829
|
// server does not list, the id was never the problem — say so before
|
|
580
830
|
// handleCommandError() exits, so nobody re-checks a correct id and then
|
|
581
831
|
// delegates to whatever this server does have.
|
|
582
|
-
|
|
832
|
+
if (client)
|
|
833
|
+
await warnIfDifferentServer(client, error);
|
|
834
|
+
// Issue #4116: a role refusal has its own sentence, code and `--json` answer,
|
|
835
|
+
// and so has any failure of a role form.
|
|
836
|
+
if (roleForm || error instanceof agent_roles_1.RoleCliError || (0, agent_roles_1.roleFailureFromApi)(error) !== null) {
|
|
837
|
+
(0, agent_roles_1.reportRoleFailure)(error, options.json);
|
|
838
|
+
return;
|
|
839
|
+
}
|
|
583
840
|
(0, command_helpers_1.handleCommandError)(error);
|
|
584
841
|
}
|
|
585
842
|
});
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
import type { ChatMessage } from '../types/api-responses';
|
|
10
10
|
import { ApiClient } from '../utils/api-client';
|
|
11
11
|
import type { CommandTarget } from './command-target';
|
|
12
|
-
import { type RegisteredRelay } from './relays';
|
|
12
|
+
import { type RegisteredRelay, type RelayEndpointArg } from './relays';
|
|
13
13
|
/**
|
|
14
14
|
* Code the send API returns when the session is blocked on a prompt (Issue
|
|
15
15
|
* #1708). Mirrors PROMPT_WAITING_CODE in src/lib/session/prompt-waiting-guard.ts;
|
|
@@ -31,7 +31,21 @@ export interface RegisterRelayForMessageInput {
|
|
|
31
31
|
* "was the relay opened?" unanswered — the same reason `/send` is not cut.
|
|
32
32
|
*/
|
|
33
33
|
resolveClient?: ApiClient;
|
|
34
|
+
/** Issue #4133: already resolved by {@link resolveRelayEndpoints}, so not resolved again. */
|
|
35
|
+
endpoints?: RelayEndpoints;
|
|
36
|
+
/** Issue #4133: runs when the relay could not be opened, before the command ends. */
|
|
37
|
+
onFailure?: () => Promise<void>;
|
|
38
|
+
}
|
|
39
|
+
/** The two ends of a relay, as the ledger stores them. */
|
|
40
|
+
export interface RelayEndpoints {
|
|
41
|
+
from: RelayEndpointArg;
|
|
42
|
+
to: RelayEndpointArg;
|
|
34
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Both ends of a `--reply-to`. Only reads. Exits 2 when either cannot be named, so a
|
|
46
|
+
* caller with something to clean up afterwards calls this before making it (Issue #4133).
|
|
47
|
+
*/
|
|
48
|
+
export declare function resolveRelayEndpoints(client: ApiClient, input: Pick<RegisterRelayForMessageInput, 'worktreeId' | 'replyTo' | 'instance' | 'agent'>): Promise<RelayEndpoints>;
|
|
35
49
|
/** Resolve both endpoints and open the relay; returns its id and whether it is bound. */
|
|
36
50
|
export declare function registerRelayForMessage(client: ApiClient, input: RegisterRelayForMessageInput): Promise<RegisteredRelay>;
|
|
37
51
|
export interface PostMessageOptions {
|
|
@@ -40,13 +54,20 @@ export interface PostMessageOptions {
|
|
|
40
54
|
* send (`relayId`) and it is withdrawn only on a confirmed `not_sent`.
|
|
41
55
|
*/
|
|
42
56
|
relay?: RegisteredRelay;
|
|
43
|
-
/**
|
|
44
|
-
|
|
57
|
+
/**
|
|
58
|
+
* Runs first when the post fails, before the relay is cancelled and before any
|
|
59
|
+
* exit. Issue #4116: told the failure, and a bound relay's outcome (null unbound).
|
|
60
|
+
*/
|
|
61
|
+
onFailure?: (error: unknown, outcome: FailedSendOutcome | null) => Promise<void>;
|
|
45
62
|
/** Printed (after `Error: `) when PROMPT_WAITING carried no message body. */
|
|
46
63
|
promptWaitingFallback: string;
|
|
47
64
|
/** The resolved target the send addressed; the hints name it (Issue #3982). */
|
|
48
65
|
target: CommandTarget;
|
|
49
66
|
}
|
|
67
|
+
/** What the send did, as far as a bound relay is concerned (Issue #3957). */
|
|
68
|
+
type BoundSendOutcome = 'sent' | 'not_sent' | 'unknown' | 'conflict';
|
|
69
|
+
/** A bound relay's outcome once the send is known to have failed. */
|
|
70
|
+
export type FailedSendOutcome = Exclude<BoundSendOutcome, 'sent'>;
|
|
50
71
|
/**
|
|
51
72
|
* What to tell the sender about resending a failed send, from the server's
|
|
52
73
|
* `sendOutcome` on the error (Issue #3992). Issue #4011: the route puts it on
|
|
@@ -67,4 +88,5 @@ export declare function describeFailedSendOutcome(error: unknown, worktreeId: st
|
|
|
67
88
|
* @returns The send API's body (Issue #3957: `ask` reads `turnOpenAtSend`)
|
|
68
89
|
*/
|
|
69
90
|
export declare function postMessage(client: ApiClient, worktreeId: string, sendBody: Record<string, unknown>, options: PostMessageOptions): Promise<ChatMessage>;
|
|
91
|
+
export {};
|
|
70
92
|
//# sourceMappingURL=message-dispatch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-dispatch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/message-dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAY,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"message-dispatch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/message-dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAY,MAAM,qBAAqB,CAAC;AAG1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAML,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,UAAU,CAAC;AAElB;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AAEpD,MAAM,WAAW,4BAA4B;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,6FAA6F;IAC7F,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,qFAAqF;IACrF,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AAED,0DAA0D;AAC1D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,gBAAgB,CAAC;IACvB,EAAE,EAAE,gBAAgB,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,IAAI,CAAC,4BAA4B,EAAE,YAAY,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC,GACzF,OAAO,CAAC,cAAc,CAAC,CAIzB;AAED,yFAAyF;AACzF,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,4BAA4B,GAClC,OAAO,CAAC,eAAe,CAAC,CAO1B;AAED,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjF,6EAA6E;IAC7E,qBAAqB,EAAE,MAAM,CAAC;IAC9B,+EAA+E;IAC/E,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,6EAA6E;AAC7E,KAAK,gBAAgB,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;AAErE,qEAAqE;AACrE,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;AAqClE;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAcnH;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,WAAW,CAAC,CAyDtB"}
|
|
@@ -9,12 +9,14 @@
|
|
|
9
9
|
*/
|
|
10
10
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
11
|
exports.PROMPT_WAITING_CODE = void 0;
|
|
12
|
+
exports.resolveRelayEndpoints = resolveRelayEndpoints;
|
|
12
13
|
exports.registerRelayForMessage = registerRelayForMessage;
|
|
13
14
|
exports.describeFailedSendOutcome = describeFailedSendOutcome;
|
|
14
15
|
exports.postMessage = postMessage;
|
|
15
16
|
const types_1 = require("../types");
|
|
16
17
|
const api_client_1 = require("../utils/api-client");
|
|
17
18
|
const follow_up_command_1 = require("../utils/follow-up-command");
|
|
19
|
+
const role_failure_1 = require("../utils/role-failure");
|
|
18
20
|
const relays_1 = require("./relays");
|
|
19
21
|
/**
|
|
20
22
|
* Code the send API returns when the session is blocked on a prompt (Issue
|
|
@@ -23,15 +25,22 @@ const relays_1 = require("./relays");
|
|
|
23
25
|
* tmux/detection graph in for one string.
|
|
24
26
|
*/
|
|
25
27
|
exports.PROMPT_WAITING_CODE = 'PROMPT_WAITING';
|
|
28
|
+
/**
|
|
29
|
+
* Both ends of a `--reply-to`. Only reads. Exits 2 when either cannot be named, so a
|
|
30
|
+
* caller with something to clean up afterwards calls this before making it (Issue #4133).
|
|
31
|
+
*/
|
|
32
|
+
async function resolveRelayEndpoints(client, input) {
|
|
33
|
+
const from = await (0, relays_1.resolveRelayEndpoint)(client, input.replyTo);
|
|
34
|
+
const to = await (0, relays_1.resolveEndpointForWorktree)(client, input.worktreeId, input.instance, input.agent);
|
|
35
|
+
return { from, to };
|
|
36
|
+
}
|
|
26
37
|
/** Resolve both endpoints and open the relay; returns its id and whether it is bound. */
|
|
27
38
|
async function registerRelayForMessage(client, input) {
|
|
28
|
-
const
|
|
29
|
-
const replyEndpoint = await (0, relays_1.resolveRelayEndpoint)(resolveClient, input.replyTo);
|
|
30
|
-
const workerEndpoint = await (0, relays_1.resolveEndpointForWorktree)(resolveClient, input.worktreeId, input.instance, input.agent);
|
|
39
|
+
const endpoints = input.endpoints ?? await resolveRelayEndpoints(input.resolveClient ?? client, input);
|
|
31
40
|
return (0, relays_1.registerRelay)(client, {
|
|
32
|
-
|
|
33
|
-
to: workerEndpoint,
|
|
41
|
+
...endpoints,
|
|
34
42
|
allowRelayChain: input.allowRelayChain,
|
|
43
|
+
onFailure: input.onFailure,
|
|
35
44
|
});
|
|
36
45
|
}
|
|
37
46
|
function isSendOutcome(value) {
|
|
@@ -118,7 +127,7 @@ async function postMessage(client, worktreeId, sendBody, options) {
|
|
|
118
127
|
return { worktreeId, role: 'user', content: '', sendOutcome: 'sent' };
|
|
119
128
|
}
|
|
120
129
|
if (options.onFailure) {
|
|
121
|
-
await options.onFailure();
|
|
130
|
+
await options.onFailure(error, outcome);
|
|
122
131
|
}
|
|
123
132
|
// A relay whose message never arrived can never be answered; leaving
|
|
124
133
|
// it open would have the requester waiting 24h for a turn that was
|
|
@@ -131,6 +140,11 @@ async function postMessage(client, worktreeId, sendBody, options) {
|
|
|
131
140
|
(0, relays_1.printRelayUnconfirmedNotice)(relayId, worktreeId, options.target);
|
|
132
141
|
}
|
|
133
142
|
const promptWaiting = error instanceof api_client_1.ApiError && error.apiCode === exports.PROMPT_WAITING_CODE;
|
|
143
|
+
// Issue #4116: a refusal with no role code of its own (a 400, a 503, a 500), after
|
|
144
|
+
// the role was saved. One with a role code says so in its own sentence.
|
|
145
|
+
if ((0, role_failure_1.roleSettingSavedBy)(error) && (0, role_failure_1.roleFailureFromApi)(error) === null) {
|
|
146
|
+
console.error(`Note: ${role_failure_1.ROLE_STAYED_SAVED}`);
|
|
147
|
+
}
|
|
134
148
|
// Issue #3992: whether it may be sent again, as the server said — not on
|
|
135
149
|
// PROMPT_WAITING, whose own line says to answer the prompt first, and not
|
|
136
150
|
// when the relay notice above already said it.
|
|
@@ -150,6 +164,12 @@ async function postMessage(client, worktreeId, sendBody, options) {
|
|
|
150
164
|
console.error(`Error: ${error.payload?.error ?? options.promptWaitingFallback}`);
|
|
151
165
|
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
152
166
|
}
|
|
167
|
+
// Issue #4116: a refusal because of the role, whether or not this send named
|
|
168
|
+
// one (a default can refuse a start), with the server's sentence and its own
|
|
169
|
+
// exit code rather than "Unexpected HTTP status: 409".
|
|
170
|
+
const roleFailure = (0, role_failure_1.roleFailureFromApi)(error);
|
|
171
|
+
if (roleFailure)
|
|
172
|
+
throw roleFailure;
|
|
153
173
|
throw error;
|
|
154
174
|
}
|
|
155
175
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAgB5E;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAIzF;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAW9E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,EAAE,GAAG,GAAE,MAAmB,GAAG,MAAM,GAAG,IAAI,CAU/G;AA0ED,kDAAkD;AAClD,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,iBAAiB,EAAE,GAAG,GAAE,MAAmB,GAAG,MAAM,CAkBxG;AAED,wBAAgB,mBAAmB,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAgB5E;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAIzF;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAW9E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,EAAE,GAAG,GAAE,MAAmB,GAAG,MAAM,GAAG,IAAI,CAU/G;AA0ED,kDAAkD;AAClD,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,iBAAiB,EAAE,GAAG,GAAE,MAAmB,GAAG,MAAM,CAkBxG;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CA+E7C"}
|
|
@@ -184,7 +184,8 @@ lastSend says how the last send to the instance ended: not-sent (no key of the
|
|
|
184
184
|
message was typed, e.g. prompt not ready), sent, or indeterminate (part of it
|
|
185
185
|
may have been typed). Nothing is resent automatically: resend a not-sent
|
|
186
186
|
message yourself, and do not resend an indeterminate one before checking
|
|
187
|
-
\`capture --pane\`.
|
|
187
|
+
\`capture --pane\`. With overlapping sends it follows the input lock's grant
|
|
188
|
+
order, so it may be another request's outcome, not yours (Issue #4065).
|
|
188
189
|
|
|
189
190
|
To answer the screen only if it is still this one (Issue #3756):
|
|
190
191
|
commandmate respond <worktree-id> --instance <id> --expect-screen <kind> \\
|