commandmate 0.49.1 → 0.49.3
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 +246 -243
- package/.next/app-path-routes-manifest.json +18 -17
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +12 -12
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +8 -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 +2 -2
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/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_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 +2 -2
- 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]/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 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js.nft.json +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 -3
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.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 +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 +2 -2
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route.js.nft.json +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_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +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 +18 -17
- package/.next/server/chunks/1308.js +1 -0
- package/.next/server/chunks/1501.js +5 -4
- package/.next/server/chunks/1656.js +2 -2
- package/.next/server/chunks/1957.js +2 -0
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2897.js +1 -0
- package/.next/server/chunks/3417.js +1 -0
- package/.next/server/chunks/3505.js +1 -1
- package/.next/server/chunks/3801.js +8 -8
- package/.next/server/chunks/4207.js +1 -1
- package/.next/server/chunks/4490.js +1 -0
- package/.next/server/chunks/4911.js +1 -0
- package/.next/server/chunks/4936.js +1 -0
- package/.next/server/chunks/5209.js +2 -1
- package/.next/server/chunks/5350.js +212 -0
- package/.next/server/chunks/5354.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/7023.js +3 -3
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/7926.js +1 -0
- package/.next/server/chunks/8581.js +15 -15
- package/.next/server/chunks/8728.js +2 -2
- package/.next/server/chunks/8782.js +1 -1
- package/.next/server/chunks/8807.js +89 -88
- package/.next/server/chunks/8918.js +3 -3
- package/.next/server/chunks/9169.js +1 -0
- package/.next/server/chunks/9390.js +1 -1
- package/.next/server/chunks/9584.js +1 -1
- package/.next/server/chunks/9627.js +5 -5
- package/.next/server/chunks/9702.js +1 -0
- package/.next/server/chunks/9731.js +3 -3
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{2407-675ba6b21844dc3b.js → 2407-87ec01332344ec2b.js} +1 -1
- package/.next/static/chunks/3931-3ef48b8d97357282.js +1 -0
- package/.next/static/chunks/5794-7975b8e51e731b19.js +1 -0
- package/.next/static/chunks/6966-d8dc6032410ffaba.js +1 -0
- package/.next/static/chunks/7197-ed3b3d99ac3bd450.js +1 -0
- package/.next/static/chunks/7636-a48cf0f7110250c5.js +1 -0
- package/.next/static/chunks/app/api/agents/update/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/agents/versions/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/app/release-notes/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/app/update/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/resolve/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/relays/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/remote/pair/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/settings/default-agents/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/skills/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/templates/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/layout-b9d8aef70e4f17b2.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/more/page-ff5af5ca48774c89.js +1 -0
- package/.next/static/chunks/app/page-b4863bfe0452e09d.js +1 -0
- package/.next/static/chunks/app/proxy/[...path]/route-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/review/page-ff3efb96fdf9bb4b.js +1 -0
- package/.next/static/chunks/app/sessions/{page-890fd50ec9739973.js → page-c6eb7c02db2f4c80.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-96fc12d400b49b13.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-f6a151304860b549.js +1 -0
- package/.next/trace +13 -13
- package/.next/types/app/api/relays/[relayId]/resolve/route.ts +347 -0
- package/.next/types/routes.d.ts +2 -1
- package/.next/types/validator.ts +9 -0
- package/dist/cli/commands/ask.d.ts.map +1 -1
- package/dist/cli/commands/ask.js +56 -5
- package/dist/cli/commands/attach.d.ts +4 -1
- package/dist/cli/commands/attach.d.ts.map +1 -1
- package/dist/cli/commands/attach.js +19 -7
- package/dist/cli/commands/command-target.d.ts +7 -0
- package/dist/cli/commands/command-target.d.ts.map +1 -1
- package/dist/cli/commands/command-target.js +10 -0
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +38 -2
- package/dist/cli/commands/message-dispatch.d.ts +17 -3
- package/dist/cli/commands/message-dispatch.d.ts.map +1 -1
- package/dist/cli/commands/message-dispatch.js +14 -8
- 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 +4 -1
- package/dist/cli/commands/relays.d.ts.map +1 -1
- package/dist/cli/commands/relays.js +146 -8
- 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 +29 -5
- package/dist/cli/commands/respond.d.ts +2 -2
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +40 -37
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +8 -4
- 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/commands/wait-instance.d.ts +9 -1
- package/dist/cli/commands/wait-instance.d.ts.map +1 -1
- package/dist/cli/commands/wait-instance.js +15 -0
- package/dist/cli/commands/wait-poll-state.d.ts +18 -0
- package/dist/cli/commands/wait-poll-state.d.ts.map +1 -1
- package/dist/cli/commands/wait-verify.d.ts +2 -1
- package/dist/cli/commands/wait-verify.d.ts.map +1 -1
- package/dist/cli/commands/wait-verify.js +5 -1
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +37 -13
- package/dist/cli/commands/whoami.d.ts.map +1 -1
- package/dist/cli/commands/whoami.js +3 -1
- 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 +1 -0
- package/dist/cli/types/api-responses.d.ts +55 -1
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- 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 +118 -0
- package/dist/cli/utils/api-client-errors.d.ts.map +1 -0
- package/dist/cli/utils/api-client-errors.js +210 -0
- package/dist/cli/utils/api-client.d.ts +33 -109
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +202 -227
- package/dist/cli/utils/follow-up-command.d.ts +38 -0
- package/dist/cli/utils/follow-up-command.d.ts.map +1 -0
- package/dist/cli/utils/follow-up-command.js +57 -0
- package/dist/cli/utils/reply-ledger.d.ts +1 -1
- package/dist/cli/utils/reply-ledger.d.ts.map +1 -1
- package/dist/cli/utils/reply-ledger.js +7 -2
- package/dist/cli/utils/server-capabilities.d.ts +18 -0
- package/dist/cli/utils/server-capabilities.d.ts.map +1 -1
- package/dist/cli/utils/server-capabilities.js +36 -3
- package/dist/cli/utils/session-target.d.ts +1 -1
- package/dist/cli/utils/session-target.d.ts.map +1 -1
- package/dist/cli/utils/session-target.js +3 -0
- package/dist/cli/utils/verify-runner.d.ts +7 -0
- package/dist/cli/utils/verify-runner.d.ts.map +1 -1
- package/dist/cli/utils/verify-runner.js +51 -15
- package/dist/lib/cli-tools/session-name.d.ts.map +1 -1
- package/dist/lib/cli-tools/session-name.js +11 -3
- package/dist/lib/cli-tools/types.d.ts +6 -0
- package/dist/lib/cli-tools/types.d.ts.map +1 -1
- package/dist/lib/session/send-attempt-types.d.ts +25 -0
- package/dist/lib/session/send-attempt-types.d.ts.map +1 -1
- package/dist/lib/session/send-attempt-types.js +10 -1
- package/dist/lib/verification/session-kill-ledger.d.ts +110 -0
- package/dist/lib/verification/session-kill-ledger.d.ts.map +1 -0
- package/dist/lib/verification/session-kill-ledger.js +174 -0
- package/dist/server/locales/en/worktree.json +9 -0
- package/dist/server/locales/ja/worktree.json +9 -0
- package/dist/server/src/config/cli-tool-timing-config.js +1 -7
- package/dist/server/src/lib/auto-yes-poller.js +5 -1
- package/dist/server/src/lib/cli-tools/antigravity.js +5 -2
- package/dist/server/src/lib/cli-tools/base.js +39 -0
- package/dist/server/src/lib/cli-tools/claude.js +8 -2
- package/dist/server/src/lib/cli-tools/codex.js +7 -4
- package/dist/server/src/lib/cli-tools/command-code.js +14 -18
- package/dist/server/src/lib/cli-tools/copilot.js +159 -28
- package/dist/server/src/lib/cli-tools/gemini.js +10 -2
- package/dist/server/src/lib/cli-tools/launch-keys.js +39 -0
- package/dist/server/src/lib/cli-tools/opencode-v2.js +6 -2
- package/dist/server/src/lib/cli-tools/opencode.js +162 -8
- package/dist/server/src/lib/cli-tools/prompt-wait-dialog.js +115 -0
- package/dist/server/src/lib/cli-tools/session-name.js +11 -3
- package/dist/server/src/lib/cli-tools/submit-composer-read.js +57 -14
- 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 +143 -187
- package/dist/server/src/lib/cli-tools/vibe-local.js +91 -2
- package/dist/server/src/lib/db/chat-db.js +14 -1
- package/dist/server/src/lib/db/db-instance.js +114 -2
- package/dist/server/src/lib/db/db-migration-path.js +63 -2
- package/dist/server/src/lib/db/migrations/index.js +2 -0
- package/dist/server/src/lib/db/migrations/runner.js +1 -1
- package/dist/server/src/lib/db/migrations/v63-session-relays-delivery-attempt.js +61 -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 +33 -92
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +5 -4
- package/dist/server/src/lib/detection/tools/opencode/composer-own-text.js +119 -0
- package/dist/server/src/lib/detection/tools/opencode/readiness.js +62 -0
- package/dist/server/src/lib/detection/tools/vibe-local/readiness.js +70 -0
- package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +2 -3
- package/dist/server/src/lib/prompt-answer-errors.js +76 -2
- package/dist/server/src/lib/relay/relay-bound-reply.js +20 -9
- package/dist/server/src/lib/relay/relay-delivery.js +359 -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/session/agent-event-state.js +4 -0
- package/dist/server/src/lib/session/agent-session-lifecycle.js +6 -1
- package/dist/server/src/lib/session/claude-session.js +26 -7
- package/dist/server/src/lib/session/current-output-builder.js +7 -3
- package/dist/server/src/lib/session/current-output-history-writers.js +1 -1
- package/dist/server/src/lib/session/instance-input-lock.js +47 -2
- package/dist/server/src/lib/session/prompt-submit-receipt.js +224 -0
- package/dist/server/src/lib/session/prompt-waiting-guard.js +16 -3
- package/dist/server/src/lib/session/respond-target.js +82 -0
- package/dist/server/src/lib/session/send-attempt-state.js +177 -2
- package/dist/server/src/lib/session/send-attempt-types.js +10 -1
- package/dist/server/src/lib/session/send-user-message.js +80 -8
- package/dist/server/src/lib/session/session-launch-flight.js +243 -0
- package/dist/server/src/lib/session/session-starting-state.js +40 -4
- package/dist/server/src/lib/session/structured-prompt.js +17 -9
- package/dist/server/src/lib/session/waiting-episode-binding.js +4 -2
- package/dist/server/src/lib/session/worktree-session-reconcile.js +10 -0
- package/dist/server/src/lib/session-cleanup.js +32 -0
- package/dist/server/src/lib/session-key-sender.js +6 -28
- package/dist/server/src/lib/verification/env-clean-gate.js +129 -0
- package/dist/server/src/lib/verification/env-snapshot.js +11 -2
- package/dist/server/src/lib/verification/session-kill-ledger.js +174 -0
- package/package.json +5 -1
- package/release-notes/0.49.2.json +49 -0
- package/release-notes/0.49.3.json +52 -0
- package/.next/server/chunks/2422.js +0 -1
- package/.next/server/chunks/3773.js +0 -1
- package/.next/server/chunks/5630.js +0 -1
- package/.next/server/chunks/5775.js +0 -1
- package/.next/server/chunks/6808.js +0 -4
- package/.next/server/chunks/7604.js +0 -2
- package/.next/server/chunks/9198.js +0 -144
- package/.next/static/chunks/3931-1a1abab16248f14d.js +0 -1
- package/.next/static/chunks/4768-ad6f82f034f21eae.js +0 -1
- package/.next/static/chunks/5794-80ac3f06f098ea29.js +0 -1
- package/.next/static/chunks/6654-f3534f35f16644bc.js +0 -1
- package/.next/static/chunks/7665-e9ef6e0a85b9fa49.js +0 -1
- package/.next/static/chunks/8606-ce17ffa77f39608e.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-8bfac4724277b47f.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/more/page-87c84987b2765213.js +0 -1
- package/.next/static/chunks/app/page-1b820c421db48c2c.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/review/page-e2fd4a590646a2d8.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-f6d3ab8185d93aae.js +0 -1
- /package/.next/static/{fqfSDqQMweROeHUzOt_m1 → LNfVZiq6FZwKsV7L9Mi6M}/_buildManifest.js +0 -0
- /package/.next/static/{fqfSDqQMweROeHUzOt_m1 → LNfVZiq6FZwKsV7L9Mi6M}/_ssgManifest.js +0 -0
|
@@ -44,6 +44,8 @@ const cli_tool_ids_1 = require("../config/cli-tool-ids");
|
|
|
44
44
|
const agent_target_options_1 = require("../config/agent-target-options");
|
|
45
45
|
const session_target_1 = require("../utils/session-target");
|
|
46
46
|
const agent_instances_1 = require("../utils/agent-instances");
|
|
47
|
+
const follow_up_command_1 = require("../utils/follow-up-command");
|
|
48
|
+
const command_target_1 = require("./command-target");
|
|
47
49
|
const session_name_1 = require("../../lib/cli-tools/session-name");
|
|
48
50
|
const validation_1 = require("../../lib/cli-tools/validation");
|
|
49
51
|
const tmux_session_surface_1 = require("../../lib/session/tmux-session-surface");
|
|
@@ -71,9 +73,14 @@ async function resolveTarget(client, worktreeId, options) {
|
|
|
71
73
|
console.error(`Error: ${(0, session_target_1.describeSessionTargetConflict)(target.conflict)}`);
|
|
72
74
|
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
73
75
|
}
|
|
76
|
+
const cliToolId = target.cliToolId ?? options.agent ?? cli_tool_ids_1.DEFAULT_CLI_TOOL_ID;
|
|
77
|
+
const instanceId = target.instanceId ?? options.instance;
|
|
74
78
|
return {
|
|
75
|
-
cliToolId
|
|
76
|
-
instanceId
|
|
79
|
+
cliToolId,
|
|
80
|
+
instanceId,
|
|
81
|
+
// Issue #3982: what the hints name — the instance only when one was asked
|
|
82
|
+
// for (the server echoes the default instance otherwise), as `resolveCommandTarget`.
|
|
83
|
+
commandTarget: (0, command_target_1.commandTargetOf)(options.instance ? { cliToolId, instanceId } : null, options.agent),
|
|
77
84
|
};
|
|
78
85
|
}
|
|
79
86
|
/**
|
|
@@ -233,18 +240,22 @@ function planGuardedAttach(ownership, sessionName, options) {
|
|
|
233
240
|
* @param cliToolId - Resolved CLI tool
|
|
234
241
|
* @param worktreeId - Worktree id, so the hint's commands are copy-pasteable
|
|
235
242
|
* @param sessionName - Resolved tmux session name
|
|
236
|
-
* @param options - The flags as given
|
|
243
|
+
* @param options - The flags as given; `target` is the resolved target the
|
|
244
|
+
* `capture` hints name (Issue #3982), none when absent
|
|
237
245
|
*/
|
|
238
246
|
function buildAttachHints(cliToolId, worktreeId, sessionName, options) {
|
|
247
|
+
const capture = (flags) => options.target
|
|
248
|
+
? (0, follow_up_command_1.followUpCommand)('capture', worktreeId, options.target, undefined, flags)
|
|
249
|
+
: `commandmate capture ${worktreeId} ${flags}`;
|
|
239
250
|
const hints = [`Attaching to ${sessionName} (${cliToolId}). Detach with Ctrl+b then d.`];
|
|
240
251
|
if ((0, tmux_session_surface_1.usesAltScreen)(cliToolId) && !options.live) {
|
|
241
|
-
hints.push(`${cliToolId} draws its transcript at the top of a 200x1000 canvas and its composer at the`, 'bottom, and tmux follows the cursor — so this attach shows the composer and blank rows,', 'not the conversation. To read it:', ` prefix + g popup, in this terminal`, `
|
|
252
|
+
hints.push(`${cliToolId} draws its transcript at the top of a 200x1000 canvas and its composer at the`, 'bottom, and tmux follows the cursor — so this attach shows the composer and blank rows,', 'not the conversation. To read it:', ` prefix + g popup, in this terminal`, ` ${capture('--pane --tail 60')} without attaching`, ` ${capture('--pane --follow')} live, without attaching`);
|
|
242
253
|
if ((0, tmux_session_surface_1.isLiveAttachSupported)(cliToolId)) {
|
|
243
254
|
hints.push(` commandmate attach ${worktreeId} --live re-lay-out to this terminal`);
|
|
244
255
|
}
|
|
245
256
|
}
|
|
246
257
|
if (options.readOnly) {
|
|
247
|
-
hints.push('Read-only attach: tmux delivers no keys but the detach one, so prefix + g does NOT open',
|
|
258
|
+
hints.push('Read-only attach: tmux delivers no keys but the detach one, so prefix + g does NOT open', `the popup here. Read with \`${capture('--pane --follow')}\` in another terminal.`);
|
|
248
259
|
}
|
|
249
260
|
if (options.live) {
|
|
250
261
|
hints.push('Live attach: this session follows THIS terminal until you detach, then goes back to', '200x1000. The web terminal shows the smaller frame while you are attached.');
|
|
@@ -322,11 +333,11 @@ function createAttachCommand() {
|
|
|
322
333
|
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
323
334
|
}
|
|
324
335
|
const client = new api_client_1.ApiClient({ token: options.token });
|
|
325
|
-
const { cliToolId, instanceId } = await resolveTarget(client, worktreeId, options);
|
|
336
|
+
const { cliToolId, instanceId, commandTarget } = await resolveTarget(client, worktreeId, options);
|
|
326
337
|
if (options.live && !(0, tmux_session_surface_1.isLiveAttachSupported)(cliToolId)) {
|
|
327
338
|
console.error(`Error: --live is not supported for ${cliToolId}. It is claude-only until each other `
|
|
328
339
|
+ "agent's detection rules are re-measured at a terminal-sized pane (Issue #2317). "
|
|
329
|
-
+ `Attach without it, or read with:
|
|
340
|
+
+ `Attach without it, or read with: ${(0, follow_up_command_1.followUpCommand)('capture', worktreeId, commandTarget, undefined, '--pane --follow')}`);
|
|
330
341
|
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
331
342
|
}
|
|
332
343
|
const target = await resolveAttachSessionName(client, worktreeId, cliToolId, instanceId);
|
|
@@ -357,6 +368,7 @@ function createAttachCommand() {
|
|
|
357
368
|
for (const line of buildAttachHints(cliToolId, worktreeId, sessionName, {
|
|
358
369
|
readOnly,
|
|
359
370
|
live: options.live,
|
|
371
|
+
target: commandTarget,
|
|
360
372
|
})) {
|
|
361
373
|
console.error(line);
|
|
362
374
|
}
|
|
@@ -20,4 +20,11 @@ export interface CommandTarget {
|
|
|
20
20
|
* @param mode - Passed on only when given, so the call shape stays as it was
|
|
21
21
|
*/
|
|
22
22
|
export declare function resolveCommandTarget(client: ApiClient, worktreeId: string, selector: string | undefined, requestedAgent: string | undefined, mode?: InstanceConflictMode): Promise<CommandTarget>;
|
|
23
|
+
/**
|
|
24
|
+
* The {@link CommandTarget} for a target resolved some other way (Issue #3982:
|
|
25
|
+
* `attach` and `wait` resolve their own), by the same rule as above.
|
|
26
|
+
*
|
|
27
|
+
* @param target - The resolved instance, or null when no selector was given
|
|
28
|
+
*/
|
|
29
|
+
export declare function commandTargetOf(target: ResolvedInstanceTarget | null, requestedAgent: string | undefined): CommandTarget;
|
|
23
30
|
//# sourceMappingURL=command-target.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-target.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/command-target.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAEhF,MAAM,WAAW,aAAa;IAC5B,4DAA4D;IAC5D,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACtC,0EAA0E;IAC1E,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,gEAAgE;IAChE,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,IAAI,CAAC,EAAE,oBAAoB,GAC1B,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"command-target.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/command-target.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAEhF,MAAM,WAAW,aAAa;IAC5B,4DAA4D;IAC5D,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACtC,0EAA0E;IAC1E,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,gEAAgE;IAChE,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,IAAI,CAAC,EAAE,oBAAoB,GAC1B,OAAO,CAAC,aAAa,CAAC,CAOxB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,sBAAsB,GAAG,IAAI,EACrC,cAAc,EAAE,MAAM,GAAG,SAAS,GACjC,aAAa,CAIf"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.resolveCommandTarget = resolveCommandTarget;
|
|
11
|
+
exports.commandTargetOf = commandTargetOf;
|
|
11
12
|
const instances_1 = require("./instances");
|
|
12
13
|
/**
|
|
13
14
|
* @param selector - Falsy means "no instance": nothing is requested of the server
|
|
@@ -19,6 +20,15 @@ async function resolveCommandTarget(client, worktreeId, selector, requestedAgent
|
|
|
19
20
|
? await (0, instances_1.resolveInstanceTarget)(client, worktreeId, selector, requestedAgent)
|
|
20
21
|
: await (0, instances_1.resolveInstanceTarget)(client, worktreeId, selector, requestedAgent, mode)
|
|
21
22
|
: null;
|
|
23
|
+
return commandTargetOf(target, requestedAgent);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* The {@link CommandTarget} for a target resolved some other way (Issue #3982:
|
|
27
|
+
* `attach` and `wait` resolve their own), by the same rule as above.
|
|
28
|
+
*
|
|
29
|
+
* @param target - The resolved instance, or null when no selector was given
|
|
30
|
+
*/
|
|
31
|
+
function commandTargetOf(target, requestedAgent) {
|
|
22
32
|
const agent = target ? target.cliToolId : requestedAgent;
|
|
23
33
|
const instanceId = target?.instanceId;
|
|
24
34
|
return { target, agent, instanceId };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instances.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/instances.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,SAAS,EAAkD,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"instances.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/instances.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,SAAS,EAAkD,MAAM,qBAAqB,CAAC;AA4KhG;;;;;;;;;;GAUG;AACH,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,IAAI,GAAE,oBAA+B,GACpC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAG7B;AAiBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAKzD;AAED;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,QAE6D,CAAC;AAErG,4EAA4E;AAC5E,eAAO,MAAM,uBAAuB,QAE0B,CAAC;AAE/D,8EAA8E;AAC9E,MAAM,WAAW,sBAAsB;IACrC,wEAAwE;IACxE,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B;;;;;;;;;;;;OAYG;IACH,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,IAAI,GAAE,oBAA+B,GACpC,OAAO,CAAC,sBAAsB,CAAC,CAmCjC;AAsWD,wBAAgB,sBAAsB,IAAI,OAAO,CAgFhD"}
|
|
@@ -26,6 +26,9 @@ const session_target_1 = require("../utils/session-target");
|
|
|
26
26
|
// "the worktree id is wrong", and only the session's own identity can tell them
|
|
27
27
|
// apart.
|
|
28
28
|
const whoami_1 = require("./whoami");
|
|
29
|
+
// Issue #3993: each kill is recorded so the env-clean gate can tell a sibling
|
|
30
|
+
// session the orchestrator stopped from one a worker killed.
|
|
31
|
+
const session_kill_ledger_1 = require("../../lib/verification/session-kill-ledger");
|
|
29
32
|
// Issue #2317: the tmux session name each instance runs in, so `commandmate
|
|
30
33
|
// attach` / `tmux attach` need no hand-assembly of `mcbd-<tool>-<wt>[-<suffix>]`.
|
|
31
34
|
const session_name_1 = require("../../lib/cli-tools/session-name");
|
|
@@ -388,6 +391,37 @@ async function addInstance(client, worktreeId, options) {
|
|
|
388
391
|
console.log(JSON.stringify(next, null, 2));
|
|
389
392
|
}
|
|
390
393
|
}
|
|
394
|
+
/**
|
|
395
|
+
* Record a successful kill in the session-kill ledger (Issue #3993): which
|
|
396
|
+
* worktree and instance, the tmux sessions the server says it stopped
|
|
397
|
+
* (`killedSessions` of the kill-session response), and who asked — this
|
|
398
|
+
* process's cwd and tmux session. A response without `killedSessions` (an
|
|
399
|
+
* older server) records no session, which excuses nothing.
|
|
400
|
+
* Best effort: the ledger never fails the command, the kill already happened.
|
|
401
|
+
*/
|
|
402
|
+
function recordSessionKill(worktreeId, instanceId, response) {
|
|
403
|
+
let callerCwd;
|
|
404
|
+
try {
|
|
405
|
+
callerCwd = process.cwd();
|
|
406
|
+
}
|
|
407
|
+
catch {
|
|
408
|
+
callerCwd = null;
|
|
409
|
+
}
|
|
410
|
+
const killed = response?.killedSessions;
|
|
411
|
+
(0, session_kill_ledger_1.appendSessionKillRecord)({
|
|
412
|
+
version: session_kill_ledger_1.SESSION_KILL_LEDGER_VERSION,
|
|
413
|
+
at: Date.now(),
|
|
414
|
+
api: 'kill-session',
|
|
415
|
+
origin: 'cli',
|
|
416
|
+
worktreeId,
|
|
417
|
+
instanceId,
|
|
418
|
+
sessionNames: Array.isArray(killed)
|
|
419
|
+
? killed.filter((name) => typeof name === 'string')
|
|
420
|
+
: [],
|
|
421
|
+
callerCwd,
|
|
422
|
+
callerSession: (0, whoami_1.readTmuxSessionName)(),
|
|
423
|
+
});
|
|
424
|
+
}
|
|
391
425
|
/**
|
|
392
426
|
* Remove action: drop an instance from the roster. Kills the session first
|
|
393
427
|
* (when --kill) so the server can still resolve its CLI tool from the roster.
|
|
@@ -408,7 +442,8 @@ async function removeInstance(client, worktreeId, instanceId, options) {
|
|
|
408
442
|
}
|
|
409
443
|
if (options.kill) {
|
|
410
444
|
try {
|
|
411
|
-
await client.post(`/api/worktrees/${worktreeId}/kill-session?instance=${encodeURIComponent(instanceId)}`);
|
|
445
|
+
const killResponse = await client.post(`/api/worktrees/${worktreeId}/kill-session?instance=${encodeURIComponent(instanceId)}`);
|
|
446
|
+
recordSessionKill(worktreeId, instanceId, killResponse);
|
|
412
447
|
console.error(`Session killed: ${instanceId}`);
|
|
413
448
|
}
|
|
414
449
|
catch (killError) {
|
|
@@ -451,7 +486,8 @@ async function killInstance(client, worktreeId, instanceId) {
|
|
|
451
486
|
console.error('Error: Invalid instance id. Must be an alphanumeric/underscore/hyphen identifier (max 64 chars).');
|
|
452
487
|
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
453
488
|
}
|
|
454
|
-
await client.post(`/api/worktrees/${worktreeId}/kill-session?instance=${encodeURIComponent(instanceId)}`);
|
|
489
|
+
const killResponse = await client.post(`/api/worktrees/${worktreeId}/kill-session?instance=${encodeURIComponent(instanceId)}`);
|
|
490
|
+
recordSessionKill(worktreeId, instanceId, killResponse);
|
|
455
491
|
console.error(`Session killed: ${instanceId}`);
|
|
456
492
|
}
|
|
457
493
|
/**
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import type { ChatMessage } from '../types/api-responses';
|
|
10
10
|
import { ApiClient } from '../utils/api-client';
|
|
11
|
+
import type { CommandTarget } from './command-target';
|
|
11
12
|
import { type RegisteredRelay } from './relays';
|
|
12
13
|
/**
|
|
13
14
|
* Code the send API returns when the session is blocked on a prompt (Issue
|
|
@@ -23,6 +24,13 @@ export interface RegisterRelayForMessageInput {
|
|
|
23
24
|
instance?: string;
|
|
24
25
|
agent?: string;
|
|
25
26
|
allowRelayChain?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Issue #3983: the client the two endpoints are resolved with (`ask` passes
|
|
29
|
+
* its `--timeout`-bounded one). Defaults to `client`. The relay POST itself
|
|
30
|
+
* always goes through `client`: it creates state, and cutting it would leave
|
|
31
|
+
* "was the relay opened?" unanswered — the same reason `/send` is not cut.
|
|
32
|
+
*/
|
|
33
|
+
resolveClient?: ApiClient;
|
|
26
34
|
}
|
|
27
35
|
/** Resolve both endpoints and open the relay; returns its id and whether it is bound. */
|
|
28
36
|
export declare function registerRelayForMessage(client: ApiClient, input: RegisterRelayForMessageInput): Promise<RegisteredRelay>;
|
|
@@ -36,13 +44,19 @@ export interface PostMessageOptions {
|
|
|
36
44
|
onFailure?: () => Promise<void>;
|
|
37
45
|
/** Printed (after `Error: `) when PROMPT_WAITING carried no message body. */
|
|
38
46
|
promptWaitingFallback: string;
|
|
47
|
+
/** The resolved target the send addressed; the hints name it (Issue #3982). */
|
|
48
|
+
target: CommandTarget;
|
|
39
49
|
}
|
|
40
50
|
/**
|
|
41
51
|
* What to tell the sender about resending a failed send, from the server's
|
|
42
|
-
* `sendOutcome` on the error (Issue #3992).
|
|
43
|
-
*
|
|
52
|
+
* `sendOutcome` on the error (Issue #3992). Issue #4011: the route puts it on
|
|
53
|
+
* every failure recorded as the send's attempt, bound relay or not. Null when
|
|
54
|
+
* the error carries none (a 400, an older server) or says `sent`.
|
|
55
|
+
*
|
|
56
|
+
* @param target - The resolved target, so the `capture` reads the pane the
|
|
57
|
+
* message went to (Issue #3982); omitted, the hint names no target
|
|
44
58
|
*/
|
|
45
|
-
export declare function describeFailedSendOutcome(error: unknown, worktreeId: string): string | null;
|
|
59
|
+
export declare function describeFailedSendOutcome(error: unknown, worktreeId: string, target?: CommandTarget): string | null;
|
|
46
60
|
/**
|
|
47
61
|
* Post the message; on failure cancel the relay and report PROMPT_WAITING.
|
|
48
62
|
*
|
|
@@ -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;AAE1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAML,KAAK,eAAe,EACrB,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;CAC3B;AAED,yFAAyF;AACzF,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,4BAA4B,GAClC,OAAO,CAAC,eAAe,CAAC,CAc1B;AAED,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,6EAA6E;IAC7E,qBAAqB,EAAE,MAAM,CAAC;IAC9B,+EAA+E;IAC/E,MAAM,EAAE,aAAa,CAAC;CACvB;AAwCD;;;;;;;;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,CA+CtB"}
|
|
@@ -14,6 +14,7 @@ exports.describeFailedSendOutcome = describeFailedSendOutcome;
|
|
|
14
14
|
exports.postMessage = postMessage;
|
|
15
15
|
const types_1 = require("../types");
|
|
16
16
|
const api_client_1 = require("../utils/api-client");
|
|
17
|
+
const follow_up_command_1 = require("../utils/follow-up-command");
|
|
17
18
|
const relays_1 = require("./relays");
|
|
18
19
|
/**
|
|
19
20
|
* Code the send API returns when the session is blocked on a prompt (Issue
|
|
@@ -24,8 +25,9 @@ const relays_1 = require("./relays");
|
|
|
24
25
|
exports.PROMPT_WAITING_CODE = 'PROMPT_WAITING';
|
|
25
26
|
/** Resolve both endpoints and open the relay; returns its id and whether it is bound. */
|
|
26
27
|
async function registerRelayForMessage(client, input) {
|
|
27
|
-
const
|
|
28
|
-
const
|
|
28
|
+
const resolveClient = input.resolveClient ?? client;
|
|
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);
|
|
29
31
|
return (0, relays_1.registerRelay)(client, {
|
|
30
32
|
from: replyEndpoint,
|
|
31
33
|
to: workerEndpoint,
|
|
@@ -69,10 +71,14 @@ async function resolveBoundSendOutcome(client, relayId, error) {
|
|
|
69
71
|
}
|
|
70
72
|
/**
|
|
71
73
|
* What to tell the sender about resending a failed send, from the server's
|
|
72
|
-
* `sendOutcome` on the error (Issue #3992).
|
|
73
|
-
*
|
|
74
|
+
* `sendOutcome` on the error (Issue #3992). Issue #4011: the route puts it on
|
|
75
|
+
* every failure recorded as the send's attempt, bound relay or not. Null when
|
|
76
|
+
* the error carries none (a 400, an older server) or says `sent`.
|
|
77
|
+
*
|
|
78
|
+
* @param target - The resolved target, so the `capture` reads the pane the
|
|
79
|
+
* message went to (Issue #3982); omitted, the hint names no target
|
|
74
80
|
*/
|
|
75
|
-
function describeFailedSendOutcome(error, worktreeId) {
|
|
81
|
+
function describeFailedSendOutcome(error, worktreeId, target) {
|
|
76
82
|
if (!(error instanceof api_client_1.ApiError))
|
|
77
83
|
return null;
|
|
78
84
|
const outcome = error.payload?.sendOutcome;
|
|
@@ -81,7 +87,7 @@ function describeFailedSendOutcome(error, worktreeId) {
|
|
|
81
87
|
}
|
|
82
88
|
if (outcome === 'unknown') {
|
|
83
89
|
return ('Note: whether the message was sent is not known (sendOutcome=unknown); '
|
|
84
|
-
+ `check the pane first (
|
|
90
|
+
+ `check the pane first (\`${(0, follow_up_command_1.paneCaptureCommand)(worktreeId, target)}\`) and do not resend before that, `
|
|
85
91
|
+ 'or it may arrive twice.');
|
|
86
92
|
}
|
|
87
93
|
return null;
|
|
@@ -122,14 +128,14 @@ async function postMessage(client, worktreeId, sendBody, options) {
|
|
|
122
128
|
}
|
|
123
129
|
else if (relayId && outcome === 'unknown') {
|
|
124
130
|
// Issue #3992: the relay notice carries the "look before resending" hint.
|
|
125
|
-
(0, relays_1.printRelayUnconfirmedNotice)(relayId, worktreeId);
|
|
131
|
+
(0, relays_1.printRelayUnconfirmedNotice)(relayId, worktreeId, options.target);
|
|
126
132
|
}
|
|
127
133
|
const promptWaiting = error instanceof api_client_1.ApiError && error.apiCode === exports.PROMPT_WAITING_CODE;
|
|
128
134
|
// Issue #3992: whether it may be sent again, as the server said — not on
|
|
129
135
|
// PROMPT_WAITING, whose own line says to answer the prompt first, and not
|
|
130
136
|
// when the relay notice above already said it.
|
|
131
137
|
if (!promptWaiting && !(relayId && outcome === 'unknown')) {
|
|
132
|
-
const resendNote = describeFailedSendOutcome(error, worktreeId);
|
|
138
|
+
const resendNote = describeFailedSendOutcome(error, worktreeId, options.target);
|
|
133
139
|
if (resendNote !== null)
|
|
134
140
|
console.error(resendNote);
|
|
135
141
|
}
|
|
@@ -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> \\
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
* commandmate relays [--worktree <id>] [--instance <id|alias>] [--json]
|
|
5
5
|
* commandmate relays --id <relay-id> [--json] (Issue #3957: one relay, open or closed)
|
|
6
6
|
* commandmate relays cancel <relay-id>
|
|
7
|
+
* commandmate relays resolve <relay-id> --payload <id> --attempt <id> --confirm|--retry|--discard
|
|
8
|
+
* (Issue #4082: settle a delivery held as uncertain)
|
|
7
9
|
*
|
|
8
10
|
* ## Why a command and not a flag on `ls`
|
|
9
11
|
*
|
|
@@ -27,6 +29,7 @@
|
|
|
27
29
|
*/
|
|
28
30
|
import { Command } from 'commander';
|
|
29
31
|
import { ApiClient } from '../utils/api-client';
|
|
32
|
+
import type { CommandTarget } from './command-target';
|
|
30
33
|
/**
|
|
31
34
|
* The codes `POST /api/relays` refuses with.
|
|
32
35
|
*
|
|
@@ -110,6 +113,6 @@ export declare function cancelRelayQuietly(client: ApiClient, relayId: string):
|
|
|
110
113
|
* The relay is left open — withdrawing it would drop a reply that may well be
|
|
111
114
|
* on its way — and the message is not resent, which could make it arrive twice.
|
|
112
115
|
*/
|
|
113
|
-
export declare function printRelayUnconfirmedNotice(relayId: string, worktreeId?: string): void;
|
|
116
|
+
export declare function printRelayUnconfirmedNotice(relayId: string, worktreeId?: string, target?: CommandTarget): void;
|
|
114
117
|
export declare function createRelaysCommand(): Command;
|
|
115
118
|
//# sourceMappingURL=relays.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relays.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/relays.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"relays.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/relays.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,OAAO,EAAE,SAAS,EAA+B,MAAM,qBAAqB,CAAC;AAI7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AActD;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,aAM9B,CAAC;AAEH,+CAA+C;AAC/C,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,4EAA4E;AAC5E,eAAO,MAAM,2BAA2B,QAEiD,CAAC;AAE1F,yDAAyD;AACzD,eAAO,MAAM,6BAA6B,QAER,CAAC;AAEnC;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,gBAAgB,CAAC,CAyB3B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,gBAAgB,CAAC,CA0B3B;AAED,wCAAwC;AACxC,MAAM,WAAW,kBAAkB;IACjC,+CAA+C;IAC/C,IAAI,EAAE,gBAAgB,CAAC;IACvB,+BAA+B;IAC/B,EAAE,EAAE,gBAAgB,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,0DAA0D;AAC1D,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX;;;OAGG;IACH,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,yEAAyE;AACzE,eAAO,MAAM,mBAAmB,QAEkD,CAAC;AAEnF;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,eAAe,CAAC,CAkB1B;AAED,+EAA+E;AAC/E,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAY1F;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,IAAI,CAW9G;AA0GD,wBAAgB,mBAAmB,IAAI,OAAO,CAoP7C"}
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
* commandmate relays [--worktree <id>] [--instance <id|alias>] [--json]
|
|
6
6
|
* commandmate relays --id <relay-id> [--json] (Issue #3957: one relay, open or closed)
|
|
7
7
|
* commandmate relays cancel <relay-id>
|
|
8
|
+
* commandmate relays resolve <relay-id> --payload <id> --attempt <id> --confirm|--retry|--discard
|
|
9
|
+
* (Issue #4082: settle a delivery held as uncertain)
|
|
8
10
|
*
|
|
9
11
|
* ## Why a command and not a flag on `ls`
|
|
10
12
|
*
|
|
@@ -39,6 +41,7 @@ const types_1 = require("../types");
|
|
|
39
41
|
const api_client_1 = require("../utils/api-client");
|
|
40
42
|
const command_helpers_1 = require("../utils/command-helpers");
|
|
41
43
|
const session_target_1 = require("../utils/session-target");
|
|
44
|
+
const follow_up_command_1 = require("../utils/follow-up-command");
|
|
42
45
|
const instances_1 = require("./instances");
|
|
43
46
|
const whoami_1 = require("./whoami");
|
|
44
47
|
/** crypto.randomUUID() output; mirrors RELAY_ID_PATTERN in the API route. */
|
|
@@ -193,12 +196,12 @@ async function cancelRelayQuietly(client, relayId) {
|
|
|
193
196
|
* The relay is left open — withdrawing it would drop a reply that may well be
|
|
194
197
|
* on its way — and the message is not resent, which could make it arrive twice.
|
|
195
198
|
*/
|
|
196
|
-
function printRelayUnconfirmedNotice(relayId, worktreeId) {
|
|
199
|
+
function printRelayUnconfirmedNotice(relayId, worktreeId, target) {
|
|
197
200
|
// Issue #3992: a failed send names the pane to look at before any resend, in
|
|
198
|
-
// the same line rather than a second notice.
|
|
201
|
+
// the same line rather than a second notice. Issue #3982: the target's pane.
|
|
199
202
|
const resend = worktreeId === undefined
|
|
200
203
|
? ''
|
|
201
|
-
: ` Do not resend before checking the pane (
|
|
204
|
+
: ` Do not resend before checking the pane (\`${(0, follow_up_command_1.paneCaptureCommand)(worktreeId, target)}\`), or it may arrive twice.`;
|
|
202
205
|
console.error(`Warning: whether the message reached the session is not known; relay ${relayId} was left open `
|
|
203
206
|
+ 'and the message was not resent. '
|
|
204
207
|
+ `Check it with \`commandmate relays --id ${relayId}\`.${resend}`);
|
|
@@ -222,9 +225,36 @@ function printRelayLine(relay) {
|
|
|
222
225
|
fields.push(`overlap=${relay.overlap}`);
|
|
223
226
|
if (relay.holdReason)
|
|
224
227
|
fields.push(`hold=${relay.holdReason}`);
|
|
228
|
+
// Issue #4064: a payload whose delivery may have reached the requester. It
|
|
229
|
+
// is never resent automatically; the pane named is where to look.
|
|
230
|
+
const delivery = relay.deliveryHold;
|
|
231
|
+
if (delivery) {
|
|
232
|
+
fields.push(`delivery=${delivery.state}`);
|
|
233
|
+
if (delivery.kind)
|
|
234
|
+
fields.push(`payload=${delivery.kind}:${delivery.payloadId ?? '-'}`);
|
|
235
|
+
// Issue #4082: what `relays resolve --attempt` names. Absent on an older server.
|
|
236
|
+
if (delivery.attemptId)
|
|
237
|
+
fields.push(`attempt=${delivery.attemptId}`);
|
|
238
|
+
if (delivery.reason)
|
|
239
|
+
fields.push(`reason=${delivery.reason}`);
|
|
240
|
+
fields.push(`check=${delivery.checkCommand}`);
|
|
241
|
+
}
|
|
225
242
|
console.log(fields.join('\t'));
|
|
226
243
|
}
|
|
227
244
|
/** `relays --id <id>`: one relay, whatever its state (Issue #3957). */
|
|
245
|
+
/**
|
|
246
|
+
* `--json` / `--token` of a `relays` subcommand, the parent's included.
|
|
247
|
+
*
|
|
248
|
+
* The parent `relays` declares both options too, and commander gives an
|
|
249
|
+
* option the parent knows to the parent — `relays --token T resolve …`, and
|
|
250
|
+
* `relays resolve … --json` likewise — so the subcommand's own `options` never
|
|
251
|
+
* see it and a token would fall back to `CM_AUTH_TOKEN`. The subcommand's own
|
|
252
|
+
* value wins when both are given.
|
|
253
|
+
*/
|
|
254
|
+
function subcommandGlobals(options, command) {
|
|
255
|
+
const all = command.optsWithGlobals();
|
|
256
|
+
return { json: options.json === true || all.json === true, token: options.token ?? all.token };
|
|
257
|
+
}
|
|
228
258
|
async function showOneRelay(client, relayId, json) {
|
|
229
259
|
const response = await client.get(`/api/relays/${relayId}`);
|
|
230
260
|
if (json) {
|
|
@@ -233,6 +263,25 @@ async function showOneRelay(client, relayId, json) {
|
|
|
233
263
|
}
|
|
234
264
|
printRelayLine(response.relay);
|
|
235
265
|
}
|
|
266
|
+
/** The codes `POST /api/relays/:id/resolve` refuses with (409). Mirrors the route. */
|
|
267
|
+
const RELAY_HOLD_REFUSAL_CODES = new Set([
|
|
268
|
+
'RELAY_HOLD_NOT_FOUND',
|
|
269
|
+
'RELAY_HOLD_ATTEMPTING',
|
|
270
|
+
'RELAY_HOLD_STALE',
|
|
271
|
+
'RELAY_HOLD_NOT_ALLOWED',
|
|
272
|
+
]);
|
|
273
|
+
/** The one action given, or null when none or more than one was. */
|
|
274
|
+
function resolveAction(options) {
|
|
275
|
+
const given = ['confirm', 'retry', 'discard'].filter((action) => options[action] === true);
|
|
276
|
+
return given.length === 1 ? given[0] : null;
|
|
277
|
+
}
|
|
278
|
+
/** What each action prints. `retry` says queued, never delivered. */
|
|
279
|
+
const RESOLVED_MESSAGES = {
|
|
280
|
+
confirm: (relayId, response) => `Relay ${relayId}: the held payload is recorded as delivered (relay is ${response.relay.state}).`,
|
|
281
|
+
retry: (relayId) => `Relay ${relayId}: the held payload is queued for delivery again (not delivered yet). `
|
|
282
|
+
+ `Follow it with \`commandmate relays --id ${relayId}\`.`,
|
|
283
|
+
discard: (relayId, response) => `Relay ${relayId}: the held payload was discarded without sending (relay is ${response.relay.state}).`,
|
|
284
|
+
};
|
|
236
285
|
function createRelaysCommand() {
|
|
237
286
|
const cmd = new commander_1.Command('relays');
|
|
238
287
|
cmd
|
|
@@ -245,6 +294,7 @@ function createRelaysCommand() {
|
|
|
245
294
|
.addHelpText('after', `
|
|
246
295
|
Columns: <relay-id> <state> <requester> <- <worker> hops=<n> expires=<iso>
|
|
247
296
|
[send=<state>] [overlap=<none|later|earlier|both|unknown>] [hold=<reason>]
|
|
297
|
+
[delivery=<attempting|uncertain> payload=<kind>:<id> attempt=<id> reason=<r> check=<cmd>]
|
|
248
298
|
|
|
249
299
|
States: pending (the worker has not finished), prompt (it stopped on a
|
|
250
300
|
confirmation and the requester was told), delivered / expired / cancelled.
|
|
@@ -256,6 +306,18 @@ server_restarted, ...); overlap= says the reply may share a turn with another
|
|
|
256
306
|
request (unknown is not "none"). \`--id <relay-id>\` shows one relay even after
|
|
257
307
|
it closed.
|
|
258
308
|
|
|
309
|
+
delivery= (Issue #4064) marks a payload whose delivery to the requester may
|
|
310
|
+
have happened (uncertain: indeterminate, failed after it was sent, or the
|
|
311
|
+
server restarted mid-send). It is NOT resent automatically and the relay's
|
|
312
|
+
later payloads wait behind it. Look at the pane check= names first. Cancelling
|
|
313
|
+
the relay stops later deliveries; it cannot take back what may already be in
|
|
314
|
+
the requester's composer.
|
|
315
|
+
|
|
316
|
+
Settle an uncertain hold (Issue #4082) after looking at that pane:
|
|
317
|
+
commandmate relays resolve <relay-id> --payload <id> --attempt <id> --confirm
|
|
318
|
+
(it arrived), --retry (it did not: queue it again, sent once when the
|
|
319
|
+
requester can take it), or --discard (drop it, send nothing).
|
|
320
|
+
|
|
259
321
|
Withdraw one with \`commandmate relays cancel <relay-id>\`.
|
|
260
322
|
`)
|
|
261
323
|
.action(async (options) => {
|
|
@@ -303,8 +365,28 @@ Withdraw one with \`commandmate relays cancel <relay-id>\`.
|
|
|
303
365
|
+ 'printing counts only.');
|
|
304
366
|
}
|
|
305
367
|
const { counts } = response;
|
|
368
|
+
// Issue #4082: `held=` is its own axis (uncertain now, open or closed),
|
|
369
|
+
// not one of the states. Left out — never printed as 0 — when an older
|
|
370
|
+
// server did not answer it.
|
|
371
|
+
const held = typeof response.heldCount === 'number' ? ` held=${response.heldCount}` : '';
|
|
306
372
|
console.error(`relays: pending=${counts.pending} prompt=${counts.prompt} `
|
|
307
|
-
+ `delivered=${counts.delivered} expired=${counts.expired} cancelled=${counts.cancelled}`);
|
|
373
|
+
+ `delivered=${counts.delivered} expired=${counts.expired} cancelled=${counts.cancelled}${held}`);
|
|
374
|
+
// Issue #4064: listed even when no relay is open — a held payload's
|
|
375
|
+
// relay may have expired or been cancelled since.
|
|
376
|
+
// Issue #4082: the API's `held` also carries deliveries being typed
|
|
377
|
+
// right now (`attempting`). Only `uncertain` ones are the holds to
|
|
378
|
+
// settle — the same set `held=` counts — so the two are listed apart.
|
|
379
|
+
const heldRelays = response.held ?? [];
|
|
380
|
+
const uncertain = heldRelays.filter((relay) => relay.deliveryHold?.state === 'uncertain');
|
|
381
|
+
const inProgress = heldRelays.filter((relay) => relay.deliveryHold?.state !== 'uncertain');
|
|
382
|
+
if (uncertain.length > 0) {
|
|
383
|
+
console.error(`# delivery not confirmed, not resent (${uncertain.length})`);
|
|
384
|
+
uncertain.forEach(printRelayLine);
|
|
385
|
+
}
|
|
386
|
+
if (inProgress.length > 0) {
|
|
387
|
+
console.error(`# delivery in progress (${inProgress.length})`);
|
|
388
|
+
inProgress.forEach(printRelayLine);
|
|
389
|
+
}
|
|
308
390
|
if (response.awaiting.length === 0 && response.owed.length === 0) {
|
|
309
391
|
console.error('No open relays.');
|
|
310
392
|
return;
|
|
@@ -324,20 +406,21 @@ Withdraw one with \`commandmate relays cancel <relay-id>\`.
|
|
|
324
406
|
});
|
|
325
407
|
cmd
|
|
326
408
|
.command('cancel')
|
|
327
|
-
.description('Withdraw an open relay
|
|
409
|
+
.description('Withdraw an open relay and stop its later deliveries (a delivery already held as uncertain may have reached you)')
|
|
328
410
|
.argument('<relay-id>', 'Relay ID')
|
|
329
411
|
.option('--json', 'JSON output')
|
|
330
412
|
.option('--token <token>', command_helpers_1.TOKEN_WARNING)
|
|
331
|
-
.action(async (relayId, options) => {
|
|
413
|
+
.action(async (relayId, options, command) => {
|
|
332
414
|
try {
|
|
415
|
+
const { json, token } = subcommandGlobals(options, command);
|
|
333
416
|
if (!RELAY_ID_PATTERN.test(relayId)) {
|
|
334
417
|
console.error('Error: Invalid relay ID format.');
|
|
335
418
|
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
336
419
|
}
|
|
337
|
-
const client = new api_client_1.ApiClient({ token
|
|
420
|
+
const client = new api_client_1.ApiClient({ token });
|
|
338
421
|
try {
|
|
339
422
|
const response = await client.post(`/api/relays/${relayId}/cancel`);
|
|
340
|
-
if (
|
|
423
|
+
if (json) {
|
|
341
424
|
console.log(JSON.stringify(response, null, 2));
|
|
342
425
|
}
|
|
343
426
|
else {
|
|
@@ -365,5 +448,60 @@ Withdraw one with \`commandmate relays cancel <relay-id>\`.
|
|
|
365
448
|
(0, command_helpers_1.handleCommandError)(error);
|
|
366
449
|
}
|
|
367
450
|
});
|
|
451
|
+
cmd
|
|
452
|
+
.command('resolve')
|
|
453
|
+
.description('Settle a delivery held as uncertain (look at the requester\'s pane first): confirm, retry or discard it')
|
|
454
|
+
.argument('<relay-id>', 'Relay ID')
|
|
455
|
+
.requiredOption('--payload <id>', 'The held payload id (payload=<kind>:<id> in `relays --id`)')
|
|
456
|
+
.requiredOption('--attempt <id>', 'The held attempt id (attempt=<id> in `relays --id`)')
|
|
457
|
+
.option('--confirm', 'It reached the requester: record it as delivered (types nothing)')
|
|
458
|
+
.option('--retry', 'It did not: queue it again; sent once when the requester can take it')
|
|
459
|
+
.option('--discard', 'Drop it without sending (types nothing)')
|
|
460
|
+
.option('--json', 'JSON output')
|
|
461
|
+
.option('--token <token>', command_helpers_1.TOKEN_WARNING)
|
|
462
|
+
.action(async (relayId, options, command) => {
|
|
463
|
+
try {
|
|
464
|
+
const { json, token } = subcommandGlobals(options, command);
|
|
465
|
+
if (!RELAY_ID_PATTERN.test(relayId)) {
|
|
466
|
+
console.error('Error: Invalid relay ID format.');
|
|
467
|
+
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
468
|
+
}
|
|
469
|
+
const action = resolveAction(options);
|
|
470
|
+
if (action === null) {
|
|
471
|
+
console.error('Error: give exactly one of --confirm, --retry or --discard.');
|
|
472
|
+
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
473
|
+
}
|
|
474
|
+
const client = new api_client_1.ApiClient({ token });
|
|
475
|
+
try {
|
|
476
|
+
const response = await client.post(`/api/relays/${relayId}/resolve`, { payloadId: options.payload, attemptId: options.attempt, action });
|
|
477
|
+
if (json) {
|
|
478
|
+
console.log(JSON.stringify(response, null, 2));
|
|
479
|
+
}
|
|
480
|
+
else {
|
|
481
|
+
console.error(RESOLVED_MESSAGES[action](relayId, response));
|
|
482
|
+
if (response.promoted) {
|
|
483
|
+
console.error(' The reply that waited behind it is queued for delivery.');
|
|
484
|
+
}
|
|
485
|
+
// Issue #4082: a closed relay delivers nothing more.
|
|
486
|
+
if (response.replyDiscarded) {
|
|
487
|
+
console.error(' The reply that waited behind it was discarded: the relay is closed, so it is not delivered.');
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
catch (error) {
|
|
492
|
+
// A stale, in-progress or not-allowed hold: nothing was changed, and
|
|
493
|
+
// re-reading the relay is what the operator does next.
|
|
494
|
+
if (error instanceof api_client_1.ApiError && error.apiCode && RELAY_HOLD_REFUSAL_CODES.has(error.apiCode)) {
|
|
495
|
+
console.error(`Error: ${error.payload?.error ?? error.apiCode}`);
|
|
496
|
+
console.error(` Nothing was changed. Read it again with \`commandmate relays --id ${relayId}\`.`);
|
|
497
|
+
process.exit(types_1.ExitCode.CONFIG_ERROR);
|
|
498
|
+
}
|
|
499
|
+
throw error;
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
catch (error) {
|
|
503
|
+
(0, command_helpers_1.handleCommandError)(error);
|
|
504
|
+
}
|
|
505
|
+
});
|
|
368
506
|
return cmd;
|
|
369
507
|
}
|
|
@@ -5,7 +5,12 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { Command } from 'commander';
|
|
7
7
|
import type { RelayCountsResponse } from '../types/api-responses';
|
|
8
|
-
/**
|
|
9
|
-
|
|
8
|
+
/**
|
|
9
|
+
* The relay line, in the same shape as the four above it.
|
|
10
|
+
*
|
|
11
|
+
* @param held - Issue #4082: payloads held as `uncertain` NOW (not narrowed by
|
|
12
|
+
* the window, not one of the states); omitted from the line when null/absent
|
|
13
|
+
*/
|
|
14
|
+
export declare function formatRelayCounts(counts: RelayCountsResponse, held?: number | null): string;
|
|
10
15
|
export declare function createReportCommand(): Command;
|
|
11
16
|
//# sourceMappingURL=report.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/report.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,OAAO,KAAK,EAGV,mBAAmB,EAKpB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/report.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,OAAO,KAAK,EAGV,mBAAmB,EAKpB,MAAM,wBAAwB,CAAC;AAqFhC;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,GAAE,MAAM,GAAG,IAAW,GAAG,MAAM,CAMjG;AAmBD,wBAAgB,mBAAmB,IAAI,OAAO,CAuL7C"}
|