commandmate 0.34.0 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +178 -165
- package/.next/app-path-routes-manifest.json +29 -29
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +9 -9
- package/.next/required-server-files.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/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/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route.js +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/session/route.js +1 -1
- package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/start/route.js +1 -1
- package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/terminal/route.js +1 -1
- package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.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 +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -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/route.js +1 -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/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.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.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.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.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.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]/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.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.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +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_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]/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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/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/chat/page.js +2 -2
- package/.next/server/app/chat/page.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page.js +2 -2
- package/.next/server/app/more/page.js.nft.json +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page.js +1 -1
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page.js +2 -2
- package/.next/server/app/repositories/page.js.nft.json +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page.js +1 -1
- package/.next/server/app/review/page.js.nft.json +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.js +1 -1
- package/.next/server/app/sessions/page.js.nft.json +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page.js +2 -2
- package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page.js +2 -2
- package/.next/server/app/skills/installed/page.js.nft.json +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page.js +1 -1
- package/.next/server/app/skills/page.js.nft.json +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +11 -11
- package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +29 -29
- package/.next/server/chunks/1210.js +1 -1
- package/.next/server/chunks/{6286.js → 1467.js} +6 -6
- package/.next/server/chunks/1886.js +1 -1
- package/.next/server/chunks/2980.js +1 -1
- package/.next/server/chunks/3077.js +1 -1
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3323.js +1 -1
- package/.next/server/chunks/434.js +1 -0
- package/.next/server/chunks/4443.js +1 -1
- package/.next/server/chunks/450.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/650.js +1 -1
- package/.next/server/chunks/6677.js +3 -3
- package/.next/server/chunks/7075.js +1 -1
- package/.next/server/chunks/7506.js +1 -1
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/8728.js +8 -0
- package/.next/server/chunks/8807.js +10 -10
- package/.next/server/chunks/8918.js +5 -5
- package/.next/server/chunks/9123.js +2 -2
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/server/src/middleware.js +1 -1
- package/.next/server/src/middleware.js.map +1 -1
- package/.next/static/chunks/2407-b9001cc6041876e1.js +1 -0
- package/.next/static/chunks/{4322-dfd5a7119b5ba4fc.js → 4322-59a7dbd77a7763cc.js} +1 -1
- package/.next/static/chunks/4388-410b1d8ed0d8d98b.js +1 -0
- package/.next/static/chunks/4718-56ebb6e55073ed5e.js +1 -0
- package/.next/static/chunks/{2652-18b8fea64413467e.js → 4809-145884b958e7d9a6.js} +1 -1
- package/.next/static/chunks/app/chat/{page-e60d07c4c79602f0.js → page-609c9a0f5ce44799.js} +1 -1
- package/.next/static/chunks/app/error-c1dc1038d0a84a33.js +1 -0
- package/.next/static/chunks/app/global-error-49f765ecb7fd6527.js +1 -0
- package/.next/static/chunks/app/{layout-4c2f21e3f653ee4c.js → layout-114dc6e93e332392.js} +1 -1
- package/.next/static/chunks/app/more/{page-fc94f86aa881489e.js → page-7c5380e4a7561935.js} +1 -1
- package/.next/static/chunks/app/{page-26a42881c8648cd3.js → page-a4f03c188610c6c8.js} +1 -1
- package/.next/static/chunks/app/repositories/{page-2576158c8420fda0.js → page-a15efb4ce1d1721e.js} +1 -1
- package/.next/static/chunks/app/review/{page-35b99baaf3c93b38.js → page-90ac618489676cbc.js} +1 -1
- package/.next/static/chunks/app/sessions/{page-a3ab6f122ec60d5a.js → page-6486d9a643c1dc6f.js} +1 -1
- package/.next/static/chunks/app/skills/[skillId]/{page-06799157652e8fa9.js → page-844872df04f52943.js} +1 -1
- package/.next/static/chunks/app/skills/installed/{page-2f3987e3a131c8d0.js → page-566dfde26d7e63ba.js} +1 -1
- package/.next/static/chunks/app/skills/{page-e70bfcf5ed4e4865.js → page-7859540e8092aace.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/page-3a58ae66e203f935.js +1 -0
- package/.next/trace +14 -13
- package/README.md +141 -24
- package/dist/cli/commands/remote.d.ts +93 -3
- package/dist/cli/commands/remote.d.ts.map +1 -1
- package/dist/cli/commands/remote.js +232 -9
- package/dist/cli/types/index.d.ts +9 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +11 -1
- package/dist/cli/utils/remote-state.d.ts +32 -0
- package/dist/cli/utils/remote-state.d.ts.map +1 -1
- package/dist/cli/utils/remote-state.js +12 -0
- package/dist/lib/detection/tools/verified-against.d.ts +20 -0
- package/dist/lib/detection/tools/verified-against.d.ts.map +1 -1
- package/dist/lib/detection/tools/verified-against.js +20 -0
- package/dist/server/server.js +204 -16
- package/dist/server/src/config/websocket-config.js +67 -0
- package/dist/server/src/lib/auto-yes-poller.js +40 -7
- package/dist/server/src/lib/db/agent-instances-db.js +11 -0
- package/dist/server/src/lib/detection/selection-shape.js +361 -3
- package/dist/server/src/lib/detection/tools/command-code/detect.js +96 -0
- package/dist/server/src/lib/detection/tools/command-code/dialog.js +314 -0
- package/dist/server/src/lib/detection/tools/verified-against.js +20 -0
- package/dist/server/src/lib/hooks/sources/opencode/ports.js +6 -0
- package/dist/server/src/lib/polling/response-checker.js +48 -2
- package/dist/server/src/lib/relay/relay-session-ref.js +15 -8
- package/dist/server/src/lib/ws-server.js +185 -6
- package/package.json +1 -1
- package/public/sw.js +12 -0
- package/.next/server/chunks/1049.js +0 -1
- package/.next/server/chunks/595.js +0 -8
- package/.next/static/chunks/4718-2d9f0397a8f931c4.js +0 -1
- package/.next/static/chunks/8361-0142beb59be2abf3.js +0 -1
- package/.next/static/chunks/app/error-27ab04bce6545dae.js +0 -1
- package/.next/static/chunks/app/global-error-7b761b8e181ffc1f.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-a39ec2a0732d11a6.js +0 -1
- /package/.next/static/{gniPBCKoXtbIOQey8kNcx → 0vChXhzA5YWj3f0D6A-Cn}/_buildManifest.js +0 -0
- /package/.next/static/{gniPBCKoXtbIOQey8kNcx → 0vChXhzA5YWj3f0D6A-Cn}/_ssgManifest.js +0 -0
package/README.md
CHANGED
|
@@ -12,12 +12,14 @@
|
|
|
12
12
|
**[commandmate website →](https://kewton.github.io/CommandMate/)**
|
|
13
13
|
|
|
14
14
|
<p align="center">
|
|
15
|
-
<img src="./docs/images/demo-hero.en.gif" width="
|
|
15
|
+
<img src="./docs/images/demo-hero.en.gif" width="560" alt="A list of four open issues, one message typed into the lead session, four worktree sessions in the sidebar, a worker writing a test file, and a final report with a phase-by-phase table" />
|
|
16
16
|
</p>
|
|
17
17
|
|
|
18
|
-
> **
|
|
18
|
+
> **One agent leads. Gates decide what's done.**
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
CommandMate gives your lead agent the machinery to run the others: one Git worktree and one contract per task, gates that decide what is done, and a record of every run. Claude Code, Codex, Antigravity, Command Code, OpenCode, Gemini CLI, Copilot and local models. You approve; you don't relay.
|
|
21
|
+
|
|
22
|
+
Open source (MIT) · runs on your machine · macOS / Linux / Windows (WSL2) · no app to install
|
|
21
23
|
|
|
22
24
|
```bash
|
|
23
25
|
npx commandmate@latest
|
|
@@ -27,68 +29,183 @@ npx commandmate@latest
|
|
|
27
29
|
|
|
28
30
|
---
|
|
29
31
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
+
## More agents, same you
|
|
33
|
+
|
|
34
|
+
- The agents are parallel. You are still single-threaded.
|
|
35
|
+
- From the outside, an idle agent and one waiting on you look the same.
|
|
36
|
+
- The agent's summary of what it did is not evidence of what it did.
|
|
37
|
+
- Nobody can safely merge a PR that nobody understands.
|
|
38
|
+
|
|
39
|
+
CommandMate puts the machinery around the CLIs you already run: a lead that hands out contracts, session state read from the agents' own hooks, gates after the work, and the record in between.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## One agent leads
|
|
44
|
+
|
|
45
|
+
One message to your lead session. It plans the issues — dependencies, file conflicts, waves — and hands each one to a worker in its own worktree under a contract. Gates decide which work comes back. Only what passed becomes a PR, gets merged, and goes through acceptance. Nothing mutates without an explicit approve, and a failed gate stops the run.
|
|
46
|
+
|
|
47
|
+
```yaml
|
|
48
|
+
# .commandmate/tasks/issue-21.yaml
|
|
49
|
+
version: 1
|
|
50
|
+
title: "Issue #21: pick(obj, keys)"
|
|
51
|
+
goal: |
|
|
52
|
+
Implement pick(obj, keys) in src/util/pick.js with node:test cases in tests/pick.test.mjs.
|
|
53
|
+
Run npm test, then commit.
|
|
54
|
+
scope:
|
|
55
|
+
allow:
|
|
56
|
+
- "src/util/pick.js"
|
|
57
|
+
- "tests/pick.test.mjs"
|
|
58
|
+
verify:
|
|
59
|
+
gates: [unit]
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
> The scope gate and the work-evidence gate are built in and run on every contract; you declare only the gates that need your project's commands.
|
|
63
|
+
|
|
64
|
+
### Measured
|
|
65
|
+
|
|
66
|
+
| Run | Lead | Workers | Result |
|
|
67
|
+
|---|---|---|---|
|
|
68
|
+
| 4 issues, one message | Claude Code | 4 × Claude Code | 4/4 gates passed, 2 waves, PRs merged, UAT go, 8 min 39 s |
|
|
69
|
+
| 4 issues, one message | Command Code | 4 × Command Code | 4/4 gates passed, 7 min 46 s; then a human pulled develop: 47/47 tests |
|
|
70
|
+
| 1 issue, with a review step | Command Code | Codex builds, Claude Code tests, Antigravity reviews | Review REJECT → fix → APPROVE, RESULT passed |
|
|
71
|
+
|
|
72
|
+
as observed
|
|
73
|
+
|
|
74
|
+
The lead is a session like any other: today it has been measured with Claude Code and Command Code. Any of the eight agents can take the work. It is a run, not a resident agent: it starts on your message and ends with a report.
|
|
75
|
+
|
|
76
|
+
---
|
|
32
77
|
|
|
33
78
|
## Verified, not vibe-checked
|
|
34
79
|
|
|
35
|
-
Gates you declared decide whether the work is done, and the exit code is the verdict.
|
|
80
|
+
Gates you declared decide whether the work is done, and the exit code is the verdict: `0` passed, `20` failed, `21` no evidence of work. The agent's summary of what it did is not the evidence. The run is, and `verify history` keeps it.
|
|
36
81
|
|
|
37
82
|
<p align="center">
|
|
38
83
|
<img src="./docs/images/demo-contract-verify.gif" width="600" alt="A task contract is sent, the verification gates run, and the exit code returns RESULT passed" />
|
|
39
84
|
</p>
|
|
40
85
|
|
|
86
|
+
If this is the kind of AI development workflow you want, [give the repo a star](https://github.com/Kewton/CommandMate).
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Review by another agent
|
|
91
|
+
|
|
92
|
+
A session can hand its work to another session for review — `commandmate ask`, or the `cmate-delegate` Skill — and the answer comes back to the lead. In the measured run, Command Code led, Codex built, Claude Code wrote the tests, and Antigravity rejected the first version before approving the fix. This is a step you add; the orchestrate runner does not run a cross-model review for you.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Know which one needs you
|
|
97
|
+
|
|
98
|
+
Waiting is a state read from the agent's hooks, not a guess from the screen. The waiting session shows up as a badge, a toast, the tab title, a PWA badge and a push notification, and you answer from your phone — no app to install.
|
|
99
|
+
|
|
100
|
+
<p align="center">
|
|
101
|
+
<img src="./docs/images/demo-sessions.gif" width="560" alt="A sidebar of four sessions with one amber row marked Approve / Reject and a RESULT Passed chip in the header; the waiting session's Create File confirmation is answered with 1. Yes and the list comes back all green" />
|
|
102
|
+
</p>
|
|
103
|
+
|
|
41
104
|
Works on desktop and mobile — monitor and steer sessions from any browser, including your phone.
|
|
42
105
|
|
|
43
|
-
|
|
106
|
+
<p align="center">
|
|
107
|
+
<img src="./docs/images/demo-ux.en.gif" width="600" alt="Switch repos from the tab bar, delegate to another agent from the chat, open the file it names, and do the same from a phone" />
|
|
108
|
+
</p>
|
|
44
109
|
|
|
45
110
|
---
|
|
46
111
|
|
|
47
|
-
##
|
|
112
|
+
## What it gives you
|
|
113
|
+
|
|
114
|
+
### One agent leads
|
|
115
|
+
|
|
116
|
+
| Feature | What it does | Why it matters |
|
|
117
|
+
|---------|-------------|----------------|
|
|
118
|
+
| **cmate-orchestrate Skill** | Plans several issues at once and hands each one out with its own contract: `plan` → `dispatch` → `merge` → `uat` | Nothing mutates without `--approve`, and a failed gate stops the run |
|
|
119
|
+
| **Delegation between sessions** | `commandmate ask` puts a question to another session and brings the answer back; `ask --async` with `commandmate relays` when you would rather not wait, `commandmate peers` to see who is reachable, and the `cmate-delegate` Skill for the pattern | One session can hand work to another, and it works across agent CLIs |
|
|
120
|
+
| **Git Worktree Sessions** | One session per worktree, parallel execution | Multiple issues progress simultaneously without interference |
|
|
121
|
+
| **Multi-Agent Support** | Choose Claude Code, Codex, Gemini CLI, Copilot, OpenCode, Antigravity, Command Code or local models per worktree | Pick the right agent for each task |
|
|
122
|
+
| **Auto Yes Mode** | Agent runs without stopping for confirmations | Optional unattended mode for trusted workflows — review the Security section before enabling |
|
|
123
|
+
|
|
124
|
+
### Verified, not vibe-checked
|
|
48
125
|
|
|
49
126
|
| Feature | What it does | Why it matters |
|
|
50
127
|
|---------|-------------|----------------|
|
|
51
128
|
| **Task Contract** | Declare the goal, the changeable scope and the gates before the work starts, then `send --contract` hands them to the agent | The agent works to a written definition of done instead of guessing at one |
|
|
52
129
|
| **Verification Gates** | Gates declared in `.commandmate/verify.yaml` run through `verify` / `wait --verify` and return exit `0` / `20` / `21` | "Done" is what a verification run returned, not what the agent said |
|
|
53
130
|
| **Evidence & Metrics** | The built-in work-evidence and scope gates, plus `verify history`, `task show` and `report metrics` | Commits, gate logs and numbers are left behind for the next decision |
|
|
54
|
-
|
|
131
|
+
|
|
132
|
+
### Know which one needs you
|
|
133
|
+
|
|
134
|
+
| Feature | What it does | Why it matters |
|
|
135
|
+
|---------|-------------|----------------|
|
|
55
136
|
| **Never miss a waiting agent** | A waiting agent shows up as a badge, a toast, the tab title, the PWA app badge and a push notification | You find out the moment an agent needs you, even away from the desk |
|
|
56
|
-
| **Git Worktree Sessions** | One session per worktree, parallel execution | Multiple issues progress simultaneously without interference |
|
|
57
|
-
| **Multi-Agent Support** | Choose Claude Code, Codex, Gemini CLI, Copilot, OpenCode, Antigravity, Command Code or local models per worktree | Pick the right agent for each task |
|
|
58
|
-
| **Auto Yes Mode** | Agent runs without stopping for confirmations | Optional unattended mode for trusted workflows — review the Security section before enabling |
|
|
59
137
|
| **Web UI (Desktop & Mobile)** | Full session control from any browser | Monitor and steer from your desk or your phone |
|
|
60
138
|
| **Conversation view** | Switch a session's output between the raw terminal and a chat transcript — replies render in full, tool runs and approvals fold into chips, and a TUI dialog is answerable from the chat surface | Follow the run and answer it — from your desk or your phone — without reading the TUI |
|
|
139
|
+
|
|
140
|
+
### Method as a system
|
|
141
|
+
|
|
142
|
+
| Feature | What it does | Why it matters |
|
|
143
|
+
|---------|-------------|----------------|
|
|
144
|
+
| **Skills Catalog** | Install and update official Skills per worktree, from the web UI or `commandmate skill` | The method is installed for the agent to read, not kept in someone's head |
|
|
145
|
+
| **Scheduled Execution** | Cron-based auto-run via CMATE.md | Daily reviews, nightly tests — agents work on a schedule |
|
|
146
|
+
|
|
147
|
+
### Also
|
|
148
|
+
|
|
149
|
+
| Feature | What it does | Why it matters |
|
|
150
|
+
|---------|-------------|----------------|
|
|
61
151
|
| **File Viewer & Markdown Editor** | Browse and edit worktree files in the browser | Review changes and update AI instructions without opening an IDE |
|
|
62
152
|
| **Screenshot Instructions** | Attach images to your prompts | Snap a bug → "Fix this" — the agent sees the screenshot |
|
|
63
|
-
| **Scheduled Execution** | Cron-based auto-run via CMATE.md | Daily reviews, nightly tests — agents work on a schedule |
|
|
64
153
|
| **Token Authentication** | SHA-256 hashed token + HTTPS + rate limiting | Secure remote access — no credentials leaked, brute-force protected |
|
|
65
154
|
|
|
66
|
-
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Supported agents
|
|
67
158
|
|
|
68
159
|
All eight are first-class. Each one gets the same treatment inside CommandMate — its own launch path, its own hook source and its own status detection — so the worktree session, the task contract, the verification gates and the evidence trail behave the same way whichever agent you pick.
|
|
69
160
|
|
|
70
161
|
- **Claude Code**, **Codex**, **Gemini CLI**, **Copilot**, **Antigravity** — choose per worktree, per task.
|
|
71
162
|
- **OpenCode** — the open-source terminal agent, driven through the same contract-and-gate path as the rest.
|
|
72
163
|
- **Command Code** — driven the same way, its hooks and its transcript included.
|
|
73
|
-
- **Local models** (`vibe-local`) —
|
|
164
|
+
- **Local models** (`vibe-local`) — the same worktree session, contract and gates, against a model you host yourself.
|
|
74
165
|
|
|
75
166
|
---
|
|
76
167
|
|
|
77
|
-
##
|
|
168
|
+
## What it does not do
|
|
169
|
+
|
|
170
|
+
- It is a run, not a resident agent. Nothing loops forever, and nothing mutates without an explicit approve.
|
|
171
|
+
- It does not read the code for you. Gates catch what your tests and checks catch.
|
|
172
|
+
- Review by another agent is a step you add, not something the runner does for you.
|
|
173
|
+
- Approvals still come to a person. Auto Yes is opt-in, time-boxed, and stops on the patterns you set.
|
|
174
|
+
- It does not replace tmux, Git worktrees, your terminal, or your agent CLI. An OS reboot ends the processes; what survives is the record.
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Use cases
|
|
78
179
|
|
|
79
180
|
| Scenario | How CommandMate helps |
|
|
80
181
|
|----------|----------------------|
|
|
81
|
-
| **
|
|
82
|
-
| **
|
|
83
|
-
| **
|
|
84
|
-
| **
|
|
85
|
-
| **
|
|
182
|
+
| **Several issues, one message** | The lead plans waves, hands out contracts, and merges only what the gates passed. You read one report. |
|
|
183
|
+
| **Too many sessions to watch** | One list, one state per session, read from hooks. The waiting one floats up. |
|
|
184
|
+
| **Away from the desk** | The waiting agent reaches your phone. Approve or reject there. |
|
|
185
|
+
| **Review by a different agent** | Hand the diff to another session and get the verdict back in the lead's chat. |
|
|
186
|
+
| **Overnight execution** | Scheduled runs with contracts and gates; read the record in the morning. |
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## From vibe coding to Vibe Engineering.
|
|
191
|
+
|
|
192
|
+
Vibe Engineering — the AI does the building; the system, not your expertise, guarantees the engineering.
|
|
193
|
+
|
|
194
|
+
We do not make the AI smarter. We make the software-engineering ability its user needed into a system.
|
|
195
|
+
The contract says what done means before the work starts, the gates decide it afterwards, and the
|
|
196
|
+
method that produced both is installed as Skills rather than remembered by whoever happened to run it.
|
|
197
|
+
|
|
198
|
+
[Concept](./docs/en/concept.md) is the canonical text: the Vision, the Mission, and how each
|
|
199
|
+
implementation item maps to a feature.
|
|
200
|
+
|
|
201
|
+
> The term "vibe engineering" was coined by Simon Willison (2025) —
|
|
202
|
+
> <https://simonwillison.net/2025/Oct/7/vibe-engineering/>.
|
|
86
203
|
|
|
87
204
|
---
|
|
88
205
|
|
|
89
206
|
## Security
|
|
90
207
|
|
|
91
|
-
Runs **100% locally**. No external server, no cloud relay, no account required. The only network traffic is
|
|
208
|
+
Runs **100% locally**. No external server, no cloud relay, no account required. The only network traffic is the agent CLI's own API calls.
|
|
92
209
|
|
|
93
210
|
- Fully open-source ([MIT License](./LICENSE))
|
|
94
211
|
- Local database, local sessions
|
|
@@ -135,6 +252,7 @@ development machine or phone will already have.
|
|
|
135
252
|
```mermaid
|
|
136
253
|
flowchart LR
|
|
137
254
|
A["Browser / Phone"] -->|HTTP| B["CommandMate Server"]
|
|
255
|
+
L["Lead session\n(any agent)"] -->|"send --contract / ask / wait --verify"| B
|
|
138
256
|
B --> C["Session Manager"]
|
|
139
257
|
G["Task Contract\n.commandmate/tasks/*.yaml"] --> C
|
|
140
258
|
C -->|"spawn / attach"| D["tmux sessions\n(per worktree)"]
|
|
@@ -486,8 +604,7 @@ The comparison that matters is not against other products; it is against the way
|
|
|
486
604
|
|
|
487
605
|
<a id="issue-driven-development"></a>
|
|
488
606
|
|
|
489
|
-
|
|
490
|
-
That system is three things you can hand to any agent: the method, as installed Skills; the contract,
|
|
607
|
+
The system is three things you can hand to any agent: the method, as installed Skills; the contract,
|
|
491
608
|
declared before the work; the gates, which decide afterwards whether the work is done.
|
|
492
609
|
|
|
493
610
|
```
|
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
* commandmate remote status # Provider / URL / expiry / pairing state
|
|
7
7
|
* commandmate remote stop # close the door, keeping the server running
|
|
8
8
|
*
|
|
9
|
+
* commandmate remote --auth remote-only # only the phone's route authenticates
|
|
10
|
+
*
|
|
9
11
|
* ## What lives here rather than in a Provider (§6.2)
|
|
10
12
|
*
|
|
11
13
|
* Two things, and both for the same reason — they are decisions about an
|
|
@@ -20,6 +22,17 @@
|
|
|
20
22
|
* Provider would have to re-derive interactive-vs-not per Provider, and its
|
|
21
23
|
* answer would be invisible to the caller that has to honour `--yes`.
|
|
22
24
|
*
|
|
25
|
+
* ## How far the token reaches (Issue #2489)
|
|
26
|
+
*
|
|
27
|
+
* `--auth all` (the default) authenticates every listener, which is what #1937
|
|
28
|
+
* shipped. `--auth remote-only` runs a SECOND loopback listener, points the
|
|
29
|
+
* Provider at that one alone, and exempts the original from authentication — so
|
|
30
|
+
* the phone still pairs and the PC in front of the machine keeps working. The
|
|
31
|
+
* exemption is decided by which listener a request arrived on, never by its
|
|
32
|
+
* source address: a Provider's upstream IS 127.0.0.1, so every IP- and
|
|
33
|
+
* header-based answer here fails open. See `src/lib/ws-server.ts`'s ingress
|
|
34
|
+
* section for the full argument.
|
|
35
|
+
*
|
|
23
36
|
* ## What this command deliberately does not have
|
|
24
37
|
*
|
|
25
38
|
* - **`--token`.** `remote` is the side that MINTS a token; one supplied from
|
|
@@ -35,6 +48,7 @@
|
|
|
35
48
|
import { Command } from 'commander';
|
|
36
49
|
import { ExitCode } from '../types';
|
|
37
50
|
import type { RemoteOptions } from '../types';
|
|
51
|
+
import { type RemoteAuthScope } from '../utils/remote-state';
|
|
38
52
|
import { type ProviderCandidate, type RemoteProviderId } from '../../lib/remote';
|
|
39
53
|
/** Default remote-session TTL. Follows `parseDuration`'s 1h-30d range (§5.1). */
|
|
40
54
|
export declare const DEFAULT_REMOTE_EXPIRES = "8h";
|
|
@@ -73,12 +87,27 @@ export declare const PUBLIC_TUNNEL_PROVIDERS: readonly RemoteProviderId[];
|
|
|
73
87
|
* put here would be readable by the very agents CommandMate is driving
|
|
74
88
|
* (§7.2).
|
|
75
89
|
*
|
|
90
|
+
* - `CM_AUTH_SCOPE` — the `--auth` value (#2489). Not a secret and not a path:
|
|
91
|
+
* the string `all` or `remote-only`, which is what `middleware.ts` and
|
|
92
|
+
* `ws-server.ts` read to decide whether the local listener may skip the
|
|
93
|
+
* token. Always exported, including for `all`, so the server is told what
|
|
94
|
+
* was chosen rather than inferring it from a missing variable.
|
|
95
|
+
*
|
|
76
96
|
* `tests/unit/cli/commands/remote-launch-env-1937.test.ts` holds the measured
|
|
77
97
|
* set to this declaration in BOTH directions, the way
|
|
78
98
|
* `agent-launch-plan-secrets-1933.test.ts` does for `prepareLaunch`. Adding a
|
|
79
99
|
* key without adding it here goes red; so does removing one.
|
|
80
100
|
*/
|
|
81
|
-
export declare const REMOTE_LAUNCH_ENV_KEYS: readonly ["CM_AUTH_TOKEN_HASH", "CM_AUTH_EXPIRE", "CM_REMOTE_PAIRING_FILE"];
|
|
101
|
+
export declare const REMOTE_LAUNCH_ENV_KEYS: readonly ["CM_AUTH_TOKEN_HASH", "CM_AUTH_EXPIRE", "CM_REMOTE_PAIRING_FILE", "CM_AUTH_SCOPE"];
|
|
102
|
+
/**
|
|
103
|
+
* The measured set for `--auth remote-only` (Issue #2489).
|
|
104
|
+
*
|
|
105
|
+
* One key more than {@link REMOTE_LAUNCH_ENV_KEYS}, and declared separately
|
|
106
|
+
* rather than as an "optional extra" so the exact-set measurement keeps working
|
|
107
|
+
* in BOTH directions for BOTH modes. A conditional key checked against a single
|
|
108
|
+
* list would be a list that describes neither mode.
|
|
109
|
+
*/
|
|
110
|
+
export declare const REMOTE_ONLY_LAUNCH_ENV_KEYS: readonly ["CM_AUTH_TOKEN_HASH", "CM_AUTH_EXPIRE", "CM_REMOTE_PAIRING_FILE", "CM_AUTH_SCOPE", "CM_REMOTE_INGRESS_PORT"];
|
|
82
111
|
/** Inputs of {@link buildRemoteLaunchEnv}. */
|
|
83
112
|
export interface RemoteLaunchEnvInput {
|
|
84
113
|
/** SHA-256 of the session token. The token itself never reaches the env. */
|
|
@@ -87,6 +116,17 @@ export interface RemoteLaunchEnvInput {
|
|
|
87
116
|
authExpire: string;
|
|
88
117
|
/** Absolute path of the 0600 pairing handoff file. */
|
|
89
118
|
pairingFilePath: string;
|
|
119
|
+
/** Issue #2489: how far authentication reaches. */
|
|
120
|
+
authScope: RemoteAuthScope;
|
|
121
|
+
/**
|
|
122
|
+
* Issue #2489: the loopback port the server opens for the Provider.
|
|
123
|
+
*
|
|
124
|
+
* Required when `authScope` is `remote-only` and meaningless otherwise — the
|
|
125
|
+
* server refuses `remote-only` without it and falls back to authenticating
|
|
126
|
+
* every listener, so passing one mode's value with the other mode's scope
|
|
127
|
+
* cannot silently produce a half-open server.
|
|
128
|
+
*/
|
|
129
|
+
remoteIngressPort?: number;
|
|
90
130
|
}
|
|
91
131
|
/** Pairing state as reported by `remote status` (§5.4). */
|
|
92
132
|
export type PairingState = 'unused' | 'consumed' | 'expired';
|
|
@@ -98,8 +138,8 @@ export type PairingState = 'unused' | 'consumed' | 'expired';
|
|
|
98
138
|
* {@link REMOTE_LAUNCH_ENV_KEYS} — "what did remote add" is otherwise only
|
|
99
139
|
* observable by diffing a global.
|
|
100
140
|
*
|
|
101
|
-
* @param input - Hash, expiry and
|
|
102
|
-
* @returns
|
|
141
|
+
* @param input - Hash, expiry, handoff path and auth scope
|
|
142
|
+
* @returns Those variables, and nothing else
|
|
103
143
|
*/
|
|
104
144
|
export declare function buildRemoteLaunchEnv(input: RemoteLaunchEnvInput): Record<string, string>;
|
|
105
145
|
/**
|
|
@@ -128,6 +168,56 @@ export declare function applyRemoteLaunchEnv(env: Record<string, string>): () =>
|
|
|
128
168
|
* @throws Error when the format is wrong or the value is out of range
|
|
129
169
|
*/
|
|
130
170
|
export declare function parsePairingDuration(value: string): number;
|
|
171
|
+
/**
|
|
172
|
+
* What the user may type after `--auth`, and the default when they type nothing.
|
|
173
|
+
*
|
|
174
|
+
* Issue #2489. `all` is the default deliberately: `remote-only` leaves every
|
|
175
|
+
* process on this machine — including the agents CommandMate itself runs in tmux
|
|
176
|
+
* — able to reach the API without a token, which is the same exposure as a
|
|
177
|
+
* CommandMate started without `--auth` at all, and weaker than `all`. Opting
|
|
178
|
+
* into that is the user's call to make, not a default to inherit.
|
|
179
|
+
*/
|
|
180
|
+
export declare const REMOTE_AUTH_SCOPES: readonly RemoteAuthScope[];
|
|
181
|
+
/** Auth scope applied when `--auth` is not given (Issue #2489). */
|
|
182
|
+
export declare const DEFAULT_REMOTE_AUTH_SCOPE: RemoteAuthScope;
|
|
183
|
+
/**
|
|
184
|
+
* Where the `remote-only` ingress listener lives (Issue #2489).
|
|
185
|
+
*
|
|
186
|
+
* The literal loopback address, matching `REMOTE_INGRESS_BIND` in `server.ts`:
|
|
187
|
+
* both Providers dial `http://127.0.0.1:<port>`, and the listener must not be
|
|
188
|
+
* reachable from anywhere else.
|
|
189
|
+
*/
|
|
190
|
+
export declare const REMOTE_INGRESS_HOST = "127.0.0.1";
|
|
191
|
+
/**
|
|
192
|
+
* Parse an `--auth` value.
|
|
193
|
+
*
|
|
194
|
+
* @param value - Raw flag value; undefined means the flag was not given
|
|
195
|
+
* @returns The scope to use
|
|
196
|
+
* @throws Error naming the valid values, for CONFIG_ERROR
|
|
197
|
+
*/
|
|
198
|
+
export declare function parseAuthScope(value: string | undefined): RemoteAuthScope;
|
|
199
|
+
/**
|
|
200
|
+
* The bind address the server this session starts will actually listen on.
|
|
201
|
+
*
|
|
202
|
+
* Read through `loadEffectiveEnv()` rather than `process.env` because that is
|
|
203
|
+
* what `daemon.start()` hands the child: it layers `.env` OVER the exported
|
|
204
|
+
* environment, so a `CM_BIND=0.0.0.0` written in `~/.commandmate/.env` is
|
|
205
|
+
* invisible to `process.env` here and decisive for the server. Checking the
|
|
206
|
+
* wrong one is how this guard would pass while the thing it guards against
|
|
207
|
+
* happened anyway.
|
|
208
|
+
*
|
|
209
|
+
* This is the one place `remote` reads `CM_BIND`, and only in `remote-only`
|
|
210
|
+
* mode — §9.1's "remote neither reads nor writes CM_BIND" still holds for every
|
|
211
|
+
* other path, and `remote` never writes it.
|
|
212
|
+
*
|
|
213
|
+
* @returns The effective `CM_BIND`, defaulted the way `server.ts` defaults it
|
|
214
|
+
*/
|
|
215
|
+
export declare function resolveEffectiveBind(): string;
|
|
216
|
+
/**
|
|
217
|
+
* @param bind - An effective `CM_BIND` value
|
|
218
|
+
* @returns true when nothing outside this machine can reach that address
|
|
219
|
+
*/
|
|
220
|
+
export declare function isLoopbackBind(bind: string): boolean;
|
|
131
221
|
/** Outcome of applying the selection rule to a probe result. */
|
|
132
222
|
export interface ProviderSelection {
|
|
133
223
|
/** The Provider to use, when there is one. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/remote.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/remote.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAmB,MAAM,UAAU,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAW9C,OAAO,EAKL,KAAK,eAAe,EAErB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EAIL,KAAK,iBAAiB,EAEtB,KAAK,gBAAgB,EAEtB,MAAM,kBAAkB,CAAC;AAQ1B,iFAAiF;AACjF,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C,yEAAyE;AACzE,eAAO,MAAM,uBAAuB,QAAQ,CAAC;AAE7C,gFAAgF;AAChF,eAAO,MAAM,kBAAkB,QAAY,CAAC;AAE5C;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,QAAsB,CAAC;AAEtD,0EAA0E;AAC1E,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAK9E,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,gBAAgB,EAAyB,CAAC;AAEzF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,sBAAsB,8FAKzB,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,wHAG9B,CAAC;AAEX,8CAA8C;AAC9C,MAAM,WAAW,oBAAoB;IACnC,4EAA4E;IAC5E,aAAa,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,UAAU,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,eAAe,EAAE,MAAM,CAAC;IACxB,mDAAmD;IACnD,SAAS,EAAE,eAAe,CAAC;IAC3B;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,2DAA2D;AAC3D,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAE7D;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAWxF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,IAAI,CAY5E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAgB1D;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,eAAe,EAA2B,CAAC;AAErF,mEAAmE;AACnE,eAAO,MAAM,yBAAyB,EAAE,eAAuB,CAAC;AAEhE;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAa/C;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,eAAe,CAUzE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,gEAAgE;AAChE,MAAM,WAAW,iBAAiB;IAChC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,8DAA8D;IAC9D,KAAK,CAAC,EAAE;QACN,QAAQ,EAAE,QAAQ,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,gFAAgF;QAChF,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;CACH;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,SAAS,iBAAiB,EAAE,EACxC,SAAS,CAAC,EAAE,MAAM,GACjB,iBAAiB,CA6CnB;AAoID;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,CA2Q3E;AA0BD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjE;AA8BD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAChC,cAAc,EAAE,OAAO,EACvB,gBAAgB,EAAE,MAAM,EACxB,GAAG,GAAE,MAAmB,GACvB,YAAY,CAGd;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAMlD;AAkDD;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,CAmF/E;AAkCD;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,CAkD7E;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CA8Bf;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAwB7C"}
|