commandmate 0.46.1 → 0.47.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 +223 -216
- package/.next/app-path-routes-manifest.json +19 -18
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +9 -9
- 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.js +4 -2
- 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 -7
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route.js +1 -7
- 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 +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/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_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_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 +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.js +1 -1
- 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_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.js +1 -1
- 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_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 +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 +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.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 -0
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route_client-reference-manifest.js +1 -0
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 -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 +2 -2
- 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 +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_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.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_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/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.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_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 +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 +19 -18
- package/.next/server/chunks/1210.js +1 -1
- package/.next/server/chunks/1559.js +1 -1
- package/.next/server/chunks/1601.js +7 -0
- package/.next/server/chunks/1836.js +1 -0
- package/.next/server/chunks/1945.js +14 -0
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2404.js +1 -1
- package/.next/server/chunks/2422.js +1 -0
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2460.js +1 -1
- package/.next/server/chunks/2534.js +1 -1
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/{3077.js → 4194.js} +12 -12
- package/.next/server/chunks/4207.js +1 -1
- package/.next/server/chunks/4248.js +1 -1
- package/.next/server/chunks/5209.js +1 -1
- package/.next/server/chunks/5292.js +1 -1
- package/.next/server/chunks/5595.js +1 -1
- package/.next/server/chunks/5845.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/{2283.js → 6486.js} +7 -7
- package/.next/server/chunks/6722.js +1 -1
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/6793.js +2 -2
- package/.next/server/chunks/7166.js +19 -0
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/8581.js +10 -10
- package/.next/server/chunks/8728.js +2 -2
- package/.next/server/chunks/8791.js +1 -1
- package/.next/server/chunks/8918.js +4 -4
- package/.next/server/chunks/9199.js +1 -0
- package/.next/server/chunks/936.js +1 -0
- package/.next/server/chunks/9390.js +1 -1
- package/.next/server/chunks/9540.js +1 -0
- package/.next/server/chunks/9627.js +1 -1
- 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-9703c569370b8a9d.js → 2407-b2f524f99f7fc353.js} +1 -1
- package/.next/static/chunks/5371-a549a0d2c2044d41.js +1 -0
- package/.next/static/chunks/{5794-4eee51ff1e878aa6.js → 5794-80ac3f06f098ea29.js} +1 -1
- package/.next/static/chunks/602-1c1488959215e140.js +1 -0
- package/.next/static/chunks/9079-24f9fa549ed298f1.js +1 -0
- package/.next/static/chunks/app/api/agents/update/{route-0468c3c4baa46028.js → route-c81284a9d8b35304.js} +1 -1
- package/.next/static/chunks/app/api/agents/versions/{route-0468c3c4baa46028.js → route-c81284a9d8b35304.js} +1 -1
- package/.next/static/chunks/app/api/app/release-notes/{route-0468c3c4baa46028.js → route-c81284a9d8b35304.js} +1 -1
- package/.next/static/chunks/app/api/app/update/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/{route-0468c3c4baa46028.js → route-c81284a9d8b35304.js} +1 -1
- package/.next/static/chunks/app/api/auth/login/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/relays/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/remote/pair/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/settings/default-agents/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/skills/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/templates/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/layout-419eaf7de340f4ab.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/proxy/[...path]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/sessions/page-e02f1adb1d1c1ccc.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/layout-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-45294052ee3032f1.js +1 -0
- package/.next/trace +13 -13
- package/.next/types/app/api/worktrees/[id]/prompt-response/strict/route.ts +347 -0
- package/.next/types/routes.d.ts +2 -1
- package/.next/types/validator.ts +9 -0
- package/dist/cli/commands/auto-yes.d.ts +19 -0
- package/dist/cli/commands/auto-yes.d.ts.map +1 -1
- package/dist/cli/commands/auto-yes.js +45 -0
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +23 -18
- package/dist/cli/commands/ls.d.ts +15 -1
- package/dist/cli/commands/ls.d.ts.map +1 -1
- package/dist/cli/commands/ls.js +39 -3
- package/dist/cli/commands/prompt.d.ts +42 -0
- package/dist/cli/commands/prompt.d.ts.map +1 -0
- package/dist/cli/commands/prompt.js +211 -0
- package/dist/cli/commands/relays.d.ts.map +1 -1
- package/dist/cli/commands/relays.js +13 -1
- package/dist/cli/commands/respond-strict.d.ts +31 -0
- package/dist/cli/commands/respond-strict.d.ts.map +1 -0
- package/dist/cli/commands/respond-strict.js +214 -0
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +38 -0
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +41 -5
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +2 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +18 -0
- package/dist/cli/commands/wait.d.ts +21 -1
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +108 -12
- 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 +63 -1
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +6 -2
- package/dist/cli/types/api-responses.d.ts +54 -0
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/index.d.ts +30 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/types/index.js +12 -1
- package/dist/cli/utils/api-client.d.ts +13 -1
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +10 -2
- package/dist/cli/utils/daemon-factory.d.ts.map +1 -1
- package/dist/cli/utils/daemon-factory.js +3 -1
- package/dist/cli/utils/daemon.d.ts +38 -1
- package/dist/cli/utils/daemon.d.ts.map +1 -1
- package/dist/cli/utils/daemon.js +161 -8
- package/dist/cli/utils/paths.d.ts +12 -0
- package/dist/cli/utils/paths.d.ts.map +1 -1
- package/dist/cli/utils/paths.js +17 -0
- package/dist/lib/polling/auto-yes-suppression-reason.d.ts +43 -1
- package/dist/lib/polling/auto-yes-suppression-reason.d.ts.map +1 -1
- package/dist/lib/polling/auto-yes-suppression-reason.js +18 -1
- package/dist/lib/prompt-observation/kinds.d.ts +101 -0
- package/dist/lib/prompt-observation/kinds.d.ts.map +1 -0
- package/dist/lib/prompt-observation/kinds.js +123 -0
- package/dist/lib/prompt-observation/types.d.ts +271 -0
- package/dist/lib/prompt-observation/types.d.ts.map +1 -0
- package/dist/lib/prompt-observation/types.js +14 -0
- package/dist/lib/session/send-attempt-types.d.ts +66 -0
- package/dist/lib/session/send-attempt-types.d.ts.map +1 -0
- package/dist/lib/session/send-attempt-types.js +17 -0
- package/dist/server/locales/en/worktree.json +4 -0
- package/dist/server/locales/ja/worktree.json +4 -0
- package/dist/server/server.js +20 -1
- package/dist/server/src/config/auto-yes-config.js +11 -0
- package/dist/server/src/lib/auto-yes-lifecycle.js +28 -2
- package/dist/server/src/lib/auto-yes-poller.js +345 -28
- package/dist/server/src/lib/auto-yes-shutdown-record.js +257 -0
- package/dist/server/src/lib/auto-yes-state.js +197 -4
- package/dist/server/src/lib/cli-tools/antigravity-startup-trust.js +135 -0
- package/dist/server/src/lib/cli-tools/antigravity.js +162 -29
- package/dist/server/src/lib/cli-tools/command-code.js +10 -2
- package/dist/server/src/lib/cli-tools/copilot.js +21 -10
- package/dist/server/src/lib/cli-tools/gemini.js +60 -13
- package/dist/server/src/lib/cli-tools/launch-dialog.js +203 -0
- package/dist/server/src/lib/cli-tools/launch-window.js +96 -0
- package/dist/server/src/lib/detection/selection-shape.js +35 -1
- package/dist/server/src/lib/detection/tools/antigravity/detect.js +38 -9
- package/dist/server/src/lib/detection/tools/antigravity/dialog.js +88 -1
- package/dist/server/src/lib/detection/tools/antigravity/patterns.js +41 -1
- package/dist/server/src/lib/detection/tools/claude/detect.js +60 -0
- package/dist/server/src/lib/detection/tools/command-code/selection-shape.js +63 -13
- package/dist/server/src/lib/detection/tools/copilot/patterns.js +7 -1
- package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +11 -2
- package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +5 -3
- package/dist/server/src/lib/polling/antigravity-permission-receipts.js +15 -0
- package/dist/server/src/lib/polling/antigravity-receipt-episodes.js +281 -0
- package/dist/server/src/lib/polling/auto-yes-confirm-page.js +56 -0
- package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +8 -1
- package/dist/server/src/lib/polling/auto-yes-policy.js +61 -7
- package/dist/server/src/lib/polling/auto-yes-poller-stop-reason.js +50 -0
- package/dist/server/src/lib/polling/auto-yes-prompt-suppression.js +220 -5
- package/dist/server/src/lib/polling/auto-yes-suppression-reason.js +18 -1
- package/dist/server/src/lib/polling/auto-yes-suppression-state.js +10 -0
- package/dist/server/src/lib/polling/response-checker-dialog-gate.js +2 -2
- package/dist/server/src/lib/polling/response-checker.js +9 -0
- package/dist/server/src/lib/polling/response-poller-core.js +136 -104
- package/dist/server/src/lib/prompt-observation/kinds.js +123 -0
- package/dist/server/src/lib/prompt-observation/types.js +14 -0
- package/dist/server/src/lib/push/prompt-push-gate.js +195 -3
- package/dist/server/src/lib/push/waiting-push-notifier.js +74 -7
- package/dist/server/src/lib/relay/relay-delivery-claims.js +46 -0
- package/dist/server/src/lib/relay/relay-delivery.js +76 -30
- package/dist/server/src/lib/schedule-manager.js +28 -0
- package/dist/server/src/lib/session/cli-session.js +38 -3
- package/dist/server/src/lib/session/send-attempt-state.js +155 -0
- package/dist/server/src/lib/session/send-attempt-types.js +17 -0
- package/dist/server/src/lib/session/send-user-message.js +46 -0
- package/dist/server/src/lib/session/worktree-session-reconcile.js +2 -1
- package/dist/server/src/lib/tmux/session-created-signal.js +76 -0
- package/dist/server/src/lib/tmux/tmux-capture-cache.js +58 -6
- package/dist/server/src/lib/tmux/tmux.js +4 -0
- package/dist/server/src/lib/verification/scope-gate-format.js +100 -0
- package/dist/server/src/lib/verification/scope-gate-glob.js +185 -0
- package/dist/server/src/lib/verification/scope-gate.js +19 -271
- package/dist/server/src/lib/ws-server.js +48 -6
- package/docs/en/user-guide/cli-setup-guide.md +12 -1
- package/docs/en/user-guide/webapp-guide.md +2 -0
- package/package.json +1 -1
- package/release-notes/0.47.0.json +118 -0
- package/.next/server/chunks/1789.js +0 -1
- package/.next/server/chunks/2908.js +0 -1
- package/.next/server/chunks/2984.js +0 -25
- package/.next/server/chunks/3718.js +0 -1
- package/.next/server/chunks/4837.js +0 -14
- package/.next/server/chunks/611.js +0 -1
- package/.next/server/chunks/850.js +0 -1
- package/.next/static/chunks/3201-c01f1feed69020e6.js +0 -1
- package/.next/static/chunks/5371-0dc947683e46e78c.js +0 -1
- package/.next/static/chunks/602-25e45a2422d2a3ea.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/capabilities/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/relays/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/remote/pair/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/settings/default-agents/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/skills/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/templates/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/layout-3e357690446cd2da.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/sessions/page-9859ed61e93e6890.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-effbf0796881dd5a.js +0 -1
- /package/.next/static/{QxDf7lm-JJkWoj-TyWiSB → b5BiQC9F6r_XFPdA9cuSj}/_buildManifest.js +0 -0
- /package/.next/static/{QxDf7lm-JJkWoj-TyWiSB → b5BiQC9F6r_XFPdA9cuSj}/_ssgManifest.js +0 -0
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
* @module lib/verification/scope-gate
|
|
31
31
|
*/
|
|
32
32
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
33
|
-
exports.SCOPE_SKIP_NOT_REQUIRED = exports.SCOPE_SKIP_NO_CONTRACT = exports.
|
|
33
|
+
exports.SCOPE_SKIP_NOT_REQUIRED = exports.SCOPE_SKIP_NO_CONTRACT = exports.ORCHESTRATOR_FOLD_TRAILER_VALUE = exports.ORCHESTRATOR_FOLD_TRAILER_KEY = exports.ORCHESTRATOR_FILES = exports.CONTRACT_DIR_PREFIX = exports.SCOPE_ALLOW_GUIDANCE = exports.ScopeMatcher = exports.SCOPE_EXEMPT_CONTRACT_PATH = exports.SCOPE_EXEMPT_ALWAYS_ALLOWED = exports.ALWAYS_ALLOWED_PREFIX = exports.SCOPE_PATTERN_ARROW = exports.MAX_REPORTED_VIOLATIONS = void 0;
|
|
34
34
|
exports.isOrchestratorOnlyCommit = isOrchestratorOnlyCommit;
|
|
35
35
|
exports.parseBranchCommits = parseBranchCommits;
|
|
36
36
|
exports.isFoldCommit = isFoldCommit;
|
|
@@ -46,13 +46,16 @@ exports.evaluateScope = evaluateScope;
|
|
|
46
46
|
const child_process_1 = require("child_process");
|
|
47
47
|
const receipt_owned_paths_1 = require("../../lib/skills/receipt-owned-paths");
|
|
48
48
|
const agent_state_paths_1 = require("../../lib/skills/agent-state-paths");
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
exports.
|
|
49
|
+
const scope_gate_format_1 = require("./scope-gate-format");
|
|
50
|
+
const scope_gate_glob_1 = require("./scope-gate-glob");
|
|
51
|
+
var scope_gate_format_2 = require("./scope-gate-format");
|
|
52
|
+
Object.defineProperty(exports, "MAX_REPORTED_VIOLATIONS", { enumerable: true, get: function () { return scope_gate_format_2.MAX_REPORTED_VIOLATIONS; } });
|
|
53
|
+
Object.defineProperty(exports, "SCOPE_PATTERN_ARROW", { enumerable: true, get: function () { return scope_gate_format_2.SCOPE_PATTERN_ARROW; } });
|
|
54
|
+
var scope_gate_glob_2 = require("./scope-gate-glob");
|
|
55
|
+
Object.defineProperty(exports, "ALWAYS_ALLOWED_PREFIX", { enumerable: true, get: function () { return scope_gate_glob_2.ALWAYS_ALLOWED_PREFIX; } });
|
|
56
|
+
Object.defineProperty(exports, "SCOPE_EXEMPT_ALWAYS_ALLOWED", { enumerable: true, get: function () { return scope_gate_glob_2.SCOPE_EXEMPT_ALWAYS_ALLOWED; } });
|
|
57
|
+
Object.defineProperty(exports, "SCOPE_EXEMPT_CONTRACT_PATH", { enumerable: true, get: function () { return scope_gate_glob_2.SCOPE_EXEMPT_CONTRACT_PATH; } });
|
|
58
|
+
Object.defineProperty(exports, "ScopeMatcher", { enumerable: true, get: function () { return scope_gate_glob_2.ScopeMatcher; } });
|
|
56
59
|
/**
|
|
57
60
|
* Actionable coda appended to every scope failure report (#1683).
|
|
58
61
|
*
|
|
@@ -69,42 +72,6 @@ exports.SCOPE_ALLOW_GUIDANCE = "To allow this diff, add the paths above to the c
|
|
|
69
72
|
'is judged from the send-time snapshot, so editing the contract file alone ' +
|
|
70
73
|
'changes nothing. A path matching deny: is a deliberate prohibition; revert ' +
|
|
71
74
|
'it instead.';
|
|
72
|
-
/**
|
|
73
|
-
* Paths that are in scope no matter what the contract says.
|
|
74
|
-
*
|
|
75
|
-
* The contract file lives here, so a contract whose own `allow` list forgot to
|
|
76
|
-
* mention `.commandmate/` would fail the moment it was committed — the scope
|
|
77
|
-
* declaration would make its own storage a violation. The exemption covers the
|
|
78
|
-
* `allow` requirement only; an explicit `deny` still applies, because a deny is
|
|
79
|
-
* a deliberate prohibition and silently ignoring one is worse than the accident
|
|
80
|
-
* this exemption prevents.
|
|
81
|
-
*/
|
|
82
|
-
exports.ALWAYS_ALLOWED_PREFIX = '.commandmate/';
|
|
83
|
-
/**
|
|
84
|
-
* Separator between a reported path and the pattern that decided it (#1841).
|
|
85
|
-
*
|
|
86
|
-
* Mirrored by the CLI's scope-evidence parser (`src/cli/commands/verify.ts`,
|
|
87
|
-
* SCOPE_PATTERN_ARROW): the gate's report is the only carrier for this evidence
|
|
88
|
-
* — `verification_gate_results` has columns for a status, an exit code and a log
|
|
89
|
-
* body, and nothing else — so the two constants have to agree. A round-trip
|
|
90
|
-
* test feeds a real `evaluateScope` report through that parser rather than
|
|
91
|
-
* trusting the two copies to be edited together.
|
|
92
|
-
*
|
|
93
|
-
* A path containing this exact three-character sequence would split wrongly on
|
|
94
|
-
* the way back. Nothing prevents such a filename; it is accepted because the
|
|
95
|
-
* alternative — encoding paths in a log a human reads first — costs every
|
|
96
|
-
* reader something to protect against a file no repository has.
|
|
97
|
-
*/
|
|
98
|
-
exports.SCOPE_PATTERN_ARROW = ' \u2190 ';
|
|
99
|
-
/**
|
|
100
|
-
* Stand-ins for the two ways a path is admitted without matching `allow`.
|
|
101
|
-
*
|
|
102
|
-
* Parenthesised so they cannot be mistaken for a pattern the contract declared:
|
|
103
|
-
* a reader who greps the contract for `(exempt: .commandmate/)` should find
|
|
104
|
-
* nothing, because nothing there put it in scope.
|
|
105
|
-
*/
|
|
106
|
-
exports.SCOPE_EXEMPT_ALWAYS_ALLOWED = `(exempt: ${exports.ALWAYS_ALLOWED_PREFIX})`;
|
|
107
|
-
exports.SCOPE_EXEMPT_CONTRACT_PATH = '(exempt: contract path)';
|
|
108
75
|
/**
|
|
109
76
|
* Execution contracts, dropped from both gates' change sets entirely (#1580).
|
|
110
77
|
*
|
|
@@ -209,162 +176,6 @@ function isContractPath(path) {
|
|
|
209
176
|
return path.startsWith(exports.CONTRACT_DIR_PREFIX);
|
|
210
177
|
}
|
|
211
178
|
// =============================================================================
|
|
212
|
-
// Glob matching
|
|
213
|
-
// =============================================================================
|
|
214
|
-
/**
|
|
215
|
-
* Translate a scope glob into an anchored regular expression.
|
|
216
|
-
*
|
|
217
|
-
* Deliberately a small, documented subset rather than a glob library. The
|
|
218
|
-
* semantics are fixed in docs/design/task-contract.md §2.2:
|
|
219
|
-
*
|
|
220
|
-
* - `**` as a whole path segment crosses directory boundaries, including zero of
|
|
221
|
-
* them: `a/**` matches `a/b` and `a/b/c`, `**\/*.ts` matches `x.ts`.
|
|
222
|
-
* - `*` and `?` never cross `/`. Leading dots are ordinary characters, so
|
|
223
|
-
* `.github/**` and `*.md` behave the way they read.
|
|
224
|
-
* - `{a,b}` is alternation, nestable. Unbalanced braces are literal, as in a
|
|
225
|
-
* shell — `src/{a` is a path with a brace in it, not a syntax error.
|
|
226
|
-
* - `[` and `]` are **literal**. This repository routes through
|
|
227
|
-
* `src/app/proxy/[...path]/`, and treating those as character classes would
|
|
228
|
-
* make the pattern that names them match nothing at all — a silent no-match is
|
|
229
|
-
* the failure mode this gate exists to avoid.
|
|
230
|
-
* - A pattern that matches a directory also matches everything beneath it, so
|
|
231
|
-
* `src/lib`, `src/lib/` and `src/lib/**` all mean the same thing. Without this
|
|
232
|
-
* rule, `allow: ["src/lib/verification"]` — the way people write a directory —
|
|
233
|
-
* would put every file inside it out of scope.
|
|
234
|
-
*/
|
|
235
|
-
function globToRegExp(rawPattern) {
|
|
236
|
-
// A trailing slash carries no information once the rule above applies.
|
|
237
|
-
const pattern = rawPattern.replace(/\/+$/, '');
|
|
238
|
-
const bracesBalanced = hasBalancedBraces(pattern);
|
|
239
|
-
let source = '';
|
|
240
|
-
let depth = 0;
|
|
241
|
-
let i = 0;
|
|
242
|
-
while (i < pattern.length) {
|
|
243
|
-
const char = pattern[i];
|
|
244
|
-
if (char === '*') {
|
|
245
|
-
let end = i;
|
|
246
|
-
while (pattern[end] === '*')
|
|
247
|
-
end += 1;
|
|
248
|
-
const isGlobstar = end - i > 1;
|
|
249
|
-
const atSegmentStart = i === 0 || pattern[i - 1] === '/';
|
|
250
|
-
if (isGlobstar && atSegmentStart && pattern[end] === '/') {
|
|
251
|
-
// Consume the following slash too: `a/**/b` has to match `a/b`.
|
|
252
|
-
source += '(?:[^/]*/)*';
|
|
253
|
-
i = end + 1;
|
|
254
|
-
continue;
|
|
255
|
-
}
|
|
256
|
-
if (isGlobstar && atSegmentStart && end === pattern.length) {
|
|
257
|
-
source += '.*';
|
|
258
|
-
i = end;
|
|
259
|
-
continue;
|
|
260
|
-
}
|
|
261
|
-
// `**` that is not a whole segment (`a**b`) cannot mean "cross
|
|
262
|
-
// directories" without also matching `a/x/b`, which the pattern does not
|
|
263
|
-
// say. Collapse it to a single-segment wildcard.
|
|
264
|
-
source += '[^/]*';
|
|
265
|
-
i = end;
|
|
266
|
-
continue;
|
|
267
|
-
}
|
|
268
|
-
if (char === '?') {
|
|
269
|
-
source += '[^/]';
|
|
270
|
-
i += 1;
|
|
271
|
-
continue;
|
|
272
|
-
}
|
|
273
|
-
if (bracesBalanced && char === '{') {
|
|
274
|
-
depth += 1;
|
|
275
|
-
source += '(?:';
|
|
276
|
-
i += 1;
|
|
277
|
-
continue;
|
|
278
|
-
}
|
|
279
|
-
if (bracesBalanced && char === '}' && depth > 0) {
|
|
280
|
-
depth -= 1;
|
|
281
|
-
source += ')';
|
|
282
|
-
i += 1;
|
|
283
|
-
continue;
|
|
284
|
-
}
|
|
285
|
-
if (bracesBalanced && char === ',' && depth > 0) {
|
|
286
|
-
source += '|';
|
|
287
|
-
i += 1;
|
|
288
|
-
continue;
|
|
289
|
-
}
|
|
290
|
-
source += char.replace(/[.*+?^${}()|[\]\\]/, '\\$&');
|
|
291
|
-
i += 1;
|
|
292
|
-
}
|
|
293
|
-
return new RegExp(`^${source}(?:/.*)?$`);
|
|
294
|
-
}
|
|
295
|
-
function hasBalancedBraces(pattern) {
|
|
296
|
-
let depth = 0;
|
|
297
|
-
for (const char of pattern) {
|
|
298
|
-
if (char === '{')
|
|
299
|
-
depth += 1;
|
|
300
|
-
else if (char === '}') {
|
|
301
|
-
depth -= 1;
|
|
302
|
-
if (depth < 0)
|
|
303
|
-
return false;
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
return depth === 0;
|
|
307
|
-
}
|
|
308
|
-
function compilePattern(pattern) {
|
|
309
|
-
return { pattern, regexp: globToRegExp(pattern) };
|
|
310
|
-
}
|
|
311
|
-
/**
|
|
312
|
-
* A scope declaration compiled once per run.
|
|
313
|
-
*
|
|
314
|
-
* Compiling per pattern per file would rebuild the same regexes for every one of
|
|
315
|
-
* potentially thousands of changed paths.
|
|
316
|
-
*/
|
|
317
|
-
class ScopeMatcher {
|
|
318
|
-
contractPath;
|
|
319
|
-
allow;
|
|
320
|
-
deny;
|
|
321
|
-
/**
|
|
322
|
-
* @param contractPath the contract's own path, exempted alongside
|
|
323
|
-
* {@link ALWAYS_ALLOWED_PREFIX} for contracts kept outside `.commandmate/`
|
|
324
|
-
*/
|
|
325
|
-
constructor(scope, contractPath = null) {
|
|
326
|
-
this.contractPath = contractPath;
|
|
327
|
-
this.allow = scope.allow.map(compilePattern);
|
|
328
|
-
this.deny = scope.deny.map(compilePattern);
|
|
329
|
-
}
|
|
330
|
-
/**
|
|
331
|
-
* Which declared rule decided `path`, and which way (#1841).
|
|
332
|
-
*
|
|
333
|
-
* The **first** matching pattern is reported, in the contract's declaration
|
|
334
|
-
* order, on both sides. Reporting the last would name a rule the reader
|
|
335
|
-
* cannot use: `allow: ["src/**", "src/lib/**"]` admits `src/lib/a.ts` under
|
|
336
|
-
* the first entry, and deleting the second changes nothing about the verdict.
|
|
337
|
-
*
|
|
338
|
-
* `path` is a repository-root-relative POSIX path as git reports it.
|
|
339
|
-
*/
|
|
340
|
-
classify(path) {
|
|
341
|
-
const denied = this.deny.find((entry) => entry.regexp.test(path));
|
|
342
|
-
if (denied)
|
|
343
|
-
return { admitted: false, pattern: denied.pattern };
|
|
344
|
-
if (path.startsWith(exports.ALWAYS_ALLOWED_PREFIX)) {
|
|
345
|
-
return { admitted: true, pattern: exports.SCOPE_EXEMPT_ALWAYS_ALLOWED };
|
|
346
|
-
}
|
|
347
|
-
if (path === this.contractPath) {
|
|
348
|
-
return { admitted: true, pattern: exports.SCOPE_EXEMPT_CONTRACT_PATH };
|
|
349
|
-
}
|
|
350
|
-
const allowed = this.allow.find((entry) => entry.regexp.test(path));
|
|
351
|
-
return allowed
|
|
352
|
-
? { admitted: true, pattern: allowed.pattern }
|
|
353
|
-
: { admitted: false, pattern: null };
|
|
354
|
-
}
|
|
355
|
-
/**
|
|
356
|
-
* Whether `path` is a scope violation.
|
|
357
|
-
*
|
|
358
|
-
* Delegates to {@link classify} rather than repeating the rules: the verdict
|
|
359
|
-
* and the evidence for it must never be able to disagree, and two copies of
|
|
360
|
-
* "deny wins, then the exemptions, then allow" is exactly how they would.
|
|
361
|
-
*/
|
|
362
|
-
isViolation(path) {
|
|
363
|
-
return !this.classify(path).admitted;
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
exports.ScopeMatcher = ScopeMatcher;
|
|
367
|
-
// =============================================================================
|
|
368
179
|
// Changed-path collection
|
|
369
180
|
// =============================================================================
|
|
370
181
|
/** Run a git plumbing command. No shell: every argument here is code-supplied. */
|
|
@@ -572,69 +383,6 @@ async function collectChangedPaths(worktreePath, baseRef) {
|
|
|
572
383
|
// =============================================================================
|
|
573
384
|
// Gate evaluation
|
|
574
385
|
// =============================================================================
|
|
575
|
-
function formatPatterns(patterns) {
|
|
576
|
-
return patterns.length > 0 ? patterns.join(', ') : '(none)';
|
|
577
|
-
}
|
|
578
|
-
/**
|
|
579
|
-
* One reported path, optionally naming the rule that decided it (#1841).
|
|
580
|
-
*
|
|
581
|
-
* Admitted paths lead with `+` rather than `-` so the two sections cannot be
|
|
582
|
-
* confused by a reader — or by a grep — that has only one line in front of it.
|
|
583
|
-
*/
|
|
584
|
-
function formatDecidedPath(marker, path, pattern) {
|
|
585
|
-
if (pattern === null)
|
|
586
|
-
return ` ${marker} ${path}`;
|
|
587
|
-
return ` ${marker} ${path}${exports.SCOPE_PATTERN_ARROW}${pattern}`;
|
|
588
|
-
}
|
|
589
|
-
/**
|
|
590
|
-
* The `admitted:` section: what this run was allowed to change, and by which
|
|
591
|
-
* rule (#1841).
|
|
592
|
-
*
|
|
593
|
-
* With an `allow` of exact paths the pattern *is* the file and this adds
|
|
594
|
-
* nothing, but #1546 made globs legal, and `src/**` leaves no record of what it
|
|
595
|
-
* actually covered on the day it ran. The contract is the claim; this is the
|
|
596
|
-
* evidence for it, and it has to survive in `log_tail` because the run's own
|
|
597
|
-
* working tree will have moved on by the time anyone asks.
|
|
598
|
-
*
|
|
599
|
-
* Capped by the same rule as the violations, for the same reason (log_tail is
|
|
600
|
-
* stored per gate in SQLite), and the truncation is stated rather than silent —
|
|
601
|
-
* a list that stops at 100 with no marker reads as a complete one.
|
|
602
|
-
*/
|
|
603
|
-
function formatAdmitted(admitted) {
|
|
604
|
-
if (admitted.length === 0)
|
|
605
|
-
return [];
|
|
606
|
-
const listed = admitted.slice(0, exports.MAX_REPORTED_VIOLATIONS);
|
|
607
|
-
const remainder = admitted.length - listed.length;
|
|
608
|
-
return [
|
|
609
|
-
'admitted:',
|
|
610
|
-
...listed.map((entry) => formatDecidedPath('+', entry.path, entry.pattern)),
|
|
611
|
-
// Worded `(+N more)` rather than the violations' `... and N more`: the two
|
|
612
|
-
// sections are capped independently and a reader scanning a truncated
|
|
613
|
-
// report should not have to work out which count belongs to which list.
|
|
614
|
-
...(remainder > 0 ? [` ... (+${remainder} more)`] : []),
|
|
615
|
-
];
|
|
616
|
-
}
|
|
617
|
-
/** The `excluded:` section naming agent-managed state files left out (#3126). */
|
|
618
|
-
function formatAgentStateExcluded(excluded) {
|
|
619
|
-
if (excluded.length === 0)
|
|
620
|
-
return [];
|
|
621
|
-
const listed = excluded.slice(0, exports.MAX_REPORTED_VIOLATIONS);
|
|
622
|
-
const remainder = excluded.length - listed.length;
|
|
623
|
-
return [
|
|
624
|
-
'excluded (agent-managed state files, not counted as change):',
|
|
625
|
-
...listed.map((path) => ` ~ ${path}`),
|
|
626
|
-
...(remainder > 0 ? [` ... (+${remainder} more)`] : []),
|
|
627
|
-
];
|
|
628
|
-
}
|
|
629
|
-
/** The `excluded:` section naming orchestrator-only committed paths (#3588). */
|
|
630
|
-
function formatOrchestratorExcluded(excluded) {
|
|
631
|
-
if (excluded.length === 0)
|
|
632
|
-
return [];
|
|
633
|
-
return [
|
|
634
|
-
'excluded (changed only by orchestrator commits, not counted as change):',
|
|
635
|
-
...excluded.map((path) => ` ~ ${path}`),
|
|
636
|
-
];
|
|
637
|
-
}
|
|
638
386
|
/**
|
|
639
387
|
* Reasons the gate has nothing to judge, phrased for `log_tail`.
|
|
640
388
|
*
|
|
@@ -688,7 +436,7 @@ async function evaluateScope(worktreePath, scope, requireScopeClean, baseRef, co
|
|
|
688
436
|
const changed = await collectChangedPaths(worktreePath, baseRef);
|
|
689
437
|
if ('error' in changed)
|
|
690
438
|
return done('error', `scope: ${changed.error}`, null);
|
|
691
|
-
const matcher = new ScopeMatcher(scope, contractPath);
|
|
439
|
+
const matcher = new scope_gate_glob_1.ScopeMatcher(scope, contractPath);
|
|
692
440
|
// Every changed path is classified, whether or not it will fit in the report:
|
|
693
441
|
// the cap below is a display rule, and a violation withheld from the listing
|
|
694
442
|
// still counts toward the verdict.
|
|
@@ -707,18 +455,18 @@ async function evaluateScope(worktreePath, scope, requireScopeClean, baseRef, co
|
|
|
707
455
|
}
|
|
708
456
|
const summary = [
|
|
709
457
|
`scope: baseRef=${baseRef} changed=${changed.paths.length} violations=${violations.length}`,
|
|
710
|
-
`allow: ${formatPatterns(scope.allow)}`,
|
|
711
|
-
`deny: ${formatPatterns(scope.deny)}`,
|
|
712
|
-
...formatAdmitted(admitted),
|
|
713
|
-
...formatAgentStateExcluded(changed.agentStateExcluded),
|
|
714
|
-
...formatOrchestratorExcluded(changed.orchestratorExcluded),
|
|
458
|
+
`allow: ${(0, scope_gate_format_1.formatPatterns)(scope.allow)}`,
|
|
459
|
+
`deny: ${(0, scope_gate_format_1.formatPatterns)(scope.deny)}`,
|
|
460
|
+
...(0, scope_gate_format_1.formatAdmitted)(admitted),
|
|
461
|
+
...(0, scope_gate_format_1.formatAgentStateExcluded)(changed.agentStateExcluded),
|
|
462
|
+
...(0, scope_gate_format_1.formatOrchestratorExcluded)(changed.orchestratorExcluded),
|
|
715
463
|
].join('\n');
|
|
716
464
|
if (violations.length === 0) {
|
|
717
465
|
// An empty change set passes: work-evidence is the gate that judges "nothing
|
|
718
466
|
// happened", and failing here too would report one problem as two.
|
|
719
467
|
return done('passed', summary, 0);
|
|
720
468
|
}
|
|
721
|
-
const listed = violations.slice(0,
|
|
469
|
+
const listed = violations.slice(0, scope_gate_format_1.MAX_REPORTED_VIOLATIONS);
|
|
722
470
|
const remainder = violations.length - listed.length;
|
|
723
471
|
const report = [
|
|
724
472
|
summary,
|
|
@@ -727,7 +475,7 @@ async function evaluateScope(worktreePath, scope, requireScopeClean, baseRef, co
|
|
|
727
475
|
// contract declared, not which of those entries this path tripped, and a
|
|
728
476
|
// violation the reader must revert reads differently from one they could
|
|
729
477
|
// fix by widening `allow`.
|
|
730
|
-
...listed.map((path) => formatDecidedPath('-', path, rejectedBy.get(path) ?? null)),
|
|
478
|
+
...listed.map((path) => (0, scope_gate_format_1.formatDecidedPath)('-', path, rejectedBy.get(path) ?? null)),
|
|
731
479
|
...(remainder > 0 ? [` ... and ${remainder} more`] : []),
|
|
732
480
|
exports.SCOPE_ALLOW_GUIDANCE,
|
|
733
481
|
].join('\n');
|
|
@@ -502,6 +502,7 @@ function setupWebSocket(server, options) {
|
|
|
502
502
|
ws,
|
|
503
503
|
worktreeIds: new Set(),
|
|
504
504
|
terminalSubscription: null,
|
|
505
|
+
terminalSubscriptionSeq: 0,
|
|
505
506
|
isAlive: true,
|
|
506
507
|
};
|
|
507
508
|
clients.set(ws, clientInfo);
|
|
@@ -733,6 +734,9 @@ function handleDisconnect(ws) {
|
|
|
733
734
|
}
|
|
734
735
|
}
|
|
735
736
|
});
|
|
737
|
+
// Issue #3733: a subscribe still in flight finds this moved and releases
|
|
738
|
+
// what it obtains instead of registering it on a socket that is gone.
|
|
739
|
+
clientInfo.terminalSubscriptionSeq += 1;
|
|
736
740
|
if (clientInfo.terminalSubscription) {
|
|
737
741
|
void clientInfo.terminalSubscription.unsubscribe();
|
|
738
742
|
clientInfo.terminalSubscription = null;
|
|
@@ -779,14 +783,25 @@ async function handleTerminalSubscribe(ws, message) {
|
|
|
779
783
|
});
|
|
780
784
|
return;
|
|
781
785
|
}
|
|
782
|
-
|
|
783
|
-
|
|
786
|
+
// Issue #3733: from here on this request is the one the socket wants; every
|
|
787
|
+
// await below is followed by a look at whether it still is.
|
|
788
|
+
const seq = ++clientInfo.terminalSubscriptionSeq;
|
|
789
|
+
const isCurrent = () => clients.get(ws) === clientInfo && clientInfo.terminalSubscriptionSeq === seq;
|
|
790
|
+
const previous = clientInfo.terminalSubscription;
|
|
791
|
+
if (previous) {
|
|
792
|
+
// Detached before the await, so a request arriving meanwhile neither
|
|
793
|
+
// releases it a second time nor has its own registration cleared by ours.
|
|
784
794
|
clientInfo.terminalSubscription = null;
|
|
795
|
+
await previous.unsubscribe();
|
|
785
796
|
}
|
|
797
|
+
if (!isCurrent())
|
|
798
|
+
return;
|
|
786
799
|
const sessionName = (0, session_name_1.resolveSessionName)(cliToolId, worktreeId);
|
|
787
800
|
// Issue #2865: never stream a same-named session another CommandMate server
|
|
788
801
|
// created (its `#{session_path}` is not this worktree's directory).
|
|
789
802
|
const ownership = await (0, session_ownership_1.checkSessionOwnership)(sessionName, worktree.path);
|
|
803
|
+
if (!isCurrent())
|
|
804
|
+
return;
|
|
790
805
|
if (ownership.verdict === 'foreign') {
|
|
791
806
|
sendTerminalEvent(ws, {
|
|
792
807
|
type: 'terminal_error',
|
|
@@ -806,6 +821,8 @@ async function handleTerminalSubscribe(ws, message) {
|
|
|
806
821
|
const startedAt = Date.now();
|
|
807
822
|
const subscription = await transport.subscribe(sessionName, {
|
|
808
823
|
onOutput: (data) => {
|
|
824
|
+
if (!isCurrent())
|
|
825
|
+
return;
|
|
809
826
|
if (!firstOutputObserved) {
|
|
810
827
|
firstOutputObserved = true;
|
|
811
828
|
(0, tmux_control_mode_metrics_1.observeTmuxControlFirstOutputLatency)(Date.now() - startedAt);
|
|
@@ -813,6 +830,8 @@ async function handleTerminalSubscribe(ws, message) {
|
|
|
813
830
|
sendTerminalEvent(ws, { type: 'terminal_output', data });
|
|
814
831
|
},
|
|
815
832
|
onExit: ({ exitCode }) => {
|
|
833
|
+
if (!isCurrent())
|
|
834
|
+
return;
|
|
816
835
|
sendTerminalEvent(ws, { type: 'terminal_exit', exitCode });
|
|
817
836
|
},
|
|
818
837
|
onError: (error) => {
|
|
@@ -825,7 +844,9 @@ async function handleTerminalSubscribe(ws, message) {
|
|
|
825
844
|
const snapshot = await transport.captureSnapshot(sessionName, {
|
|
826
845
|
startLine: TERMINAL_FALLBACK_CAPTURE_LINES,
|
|
827
846
|
});
|
|
828
|
-
|
|
847
|
+
// Issue #3733: the reads above awaited; a subscription released
|
|
848
|
+
// or replaced meanwhile has nothing left to say to this socket.
|
|
849
|
+
if (snapshot.length > 0 && isCurrent()) {
|
|
829
850
|
sendTerminalEvent(ws, {
|
|
830
851
|
type: 'terminal_output',
|
|
831
852
|
data: snapshot,
|
|
@@ -837,6 +858,8 @@ async function handleTerminalSubscribe(ws, message) {
|
|
|
837
858
|
catch {
|
|
838
859
|
// Best-effort snapshot fallback. The original control-mode error is still reported.
|
|
839
860
|
}
|
|
861
|
+
if (!isCurrent())
|
|
862
|
+
return;
|
|
840
863
|
sendTerminalEvent(ws, {
|
|
841
864
|
type: 'terminal_error',
|
|
842
865
|
error: error.message,
|
|
@@ -845,6 +868,17 @@ async function handleTerminalSubscribe(ws, message) {
|
|
|
845
868
|
})();
|
|
846
869
|
},
|
|
847
870
|
});
|
|
871
|
+
if (!isCurrent()) {
|
|
872
|
+
// Disconnected, unsubscribed or superseded while subscribing: nobody else
|
|
873
|
+
// holds this handle, so release it now or the registry keeps it forever.
|
|
874
|
+
try {
|
|
875
|
+
await subscription.unsubscribe();
|
|
876
|
+
}
|
|
877
|
+
catch {
|
|
878
|
+
// Best-effort cleanup of a subscription nobody wants.
|
|
879
|
+
}
|
|
880
|
+
return;
|
|
881
|
+
}
|
|
848
882
|
clientInfo.terminalSubscription = {
|
|
849
883
|
worktreeId,
|
|
850
884
|
cliToolId,
|
|
@@ -934,16 +968,23 @@ async function runTerminalResize(ws, message) {
|
|
|
934
968
|
}
|
|
935
969
|
async function handleTerminalUnsubscribe(ws) {
|
|
936
970
|
const clientInfo = clients.get(ws);
|
|
937
|
-
if (!clientInfo
|
|
971
|
+
if (!clientInfo)
|
|
972
|
+
return;
|
|
973
|
+
// Issue #3733: also withdraws a subscribe still in flight, which would
|
|
974
|
+
// otherwise register after this and keep streaming.
|
|
975
|
+
clientInfo.terminalSubscriptionSeq += 1;
|
|
976
|
+
const subscription = clientInfo.terminalSubscription;
|
|
977
|
+
if (!subscription) {
|
|
938
978
|
return;
|
|
939
979
|
}
|
|
980
|
+
// Detached before the await so a subscribe arriving meanwhile is not cleared.
|
|
981
|
+
clientInfo.terminalSubscription = null;
|
|
940
982
|
try {
|
|
941
|
-
await
|
|
983
|
+
await subscription.unsubscribe();
|
|
942
984
|
}
|
|
943
985
|
catch {
|
|
944
986
|
// Best-effort cleanup during terminal unsubscribe.
|
|
945
987
|
}
|
|
946
|
-
clientInfo.terminalSubscription = null;
|
|
947
988
|
sendTerminalEvent(ws, { type: 'terminal_status', connected: false });
|
|
948
989
|
}
|
|
949
990
|
// ---------------------------------------------------------------------------
|
|
@@ -1281,6 +1322,7 @@ exports.__internal = {
|
|
|
1281
1322
|
ws,
|
|
1282
1323
|
worktreeIds: new Set(),
|
|
1283
1324
|
terminalSubscription: null,
|
|
1325
|
+
terminalSubscriptionSeq: 0,
|
|
1284
1326
|
isAlive,
|
|
1285
1327
|
});
|
|
1286
1328
|
},
|
|
@@ -404,6 +404,8 @@ commandmate status [options]
|
|
|
404
404
|
| `-i, --issue <number>` | Show status for a specific issue worktree (Issue #136) |
|
|
405
405
|
| `-a, --all` | Show status for all servers (main + worktrees) |
|
|
406
406
|
|
|
407
|
+
For a running server (or one with a stale PID file) it also prints a `Log:` line with the file `start --daemon` writes the server's output to.
|
|
408
|
+
|
|
407
409
|
### commandmate update
|
|
408
410
|
|
|
409
411
|
Update CommandMate to the latest version (stop -> `npm install -g commandmate@latest` -> restart).
|
|
@@ -532,10 +534,19 @@ commandmate status
|
|
|
532
534
|
commandmate stop --force
|
|
533
535
|
commandmate start --daemon
|
|
534
536
|
|
|
535
|
-
# Check logs (in config directory)
|
|
537
|
+
# Check logs (in config directory; commandmate status also prints the path on its Log: line)
|
|
536
538
|
tail -f ~/.commandmate/logs/server.log
|
|
539
|
+
# a parallel server started with --issue 135 has its own file
|
|
540
|
+
tail -f ~/.commandmate/logs/server-135.log
|
|
537
541
|
```
|
|
538
542
|
|
|
543
|
+
`commandmate start --daemon` (and `commandmate update`, which restarts through it) appends the server's stdout and stderr to `logs/server.log` in the config directory (`logs/server-<N>.log` for an `--issue <N>` server). The file is owner-only (0600), and so are the rotated `server.log.1` and later generations (an existing 0640 file written by `scripts/start.sh` is tightened to 0600 when the CLI daemon opens or rotates it). Each start writes a separator line (`=== <timestamp> commandmate start --daemon ... ===`).
|
|
544
|
+
|
|
545
|
+
- **Rotation**: at start, a log of 10MB or more is moved to `server.log.1`, shifting older generations to `.2` and `.3` (three generations kept, the same approach as `scripts/build-and-start.sh`). It is not rotated while the server runs, so a long-running server's log can grow past 10MB.
|
|
546
|
+
- If the log file cannot be opened (the directory cannot be created, a symbolic link is in the way, etc.), a warning is printed and the server starts with its output discarded.
|
|
547
|
+
- `CM_LOG_DIR` does not move this file (`CM_LOG_DIR` is a separate setting, used by the server for conversation logs and by the CLI for its security log).
|
|
548
|
+
- A foreground start (`commandmate start`) prints to the terminal only and does not write this file.
|
|
549
|
+
|
|
539
550
|
### Dependency Errors
|
|
540
551
|
|
|
541
552
|
```bash
|
|
@@ -268,6 +268,7 @@ See [Agent event hooks](./agent-event-hooks.md) for the per-route technical deta
|
|
|
268
268
|
- Important changes (file deletions, etc.) are also auto-approved, so use with caution
|
|
269
269
|
- You can disable it by turning off the toggle
|
|
270
270
|
- Auto Yes automatically turns OFF after the selected duration
|
|
271
|
+
- **When the server restarts (`/rebuild`, `commandmate stop`, etc.), an active Auto Yes is turned OFF and does not come back.** The affected instance shows **"Released by restart"** (「再起動で解除」 in the Japanese UI). The label stays until the original grant's deadline, and disappears when you turn the toggle on again or turn it off manually (it is not shown after SIGKILL or a crash). A manual OFF or an expiry does not show it
|
|
271
272
|
- **Security best practices**:
|
|
272
273
|
- Select the **minimum time** needed for your work (1 hour recommended when in doubt)
|
|
273
274
|
- Limit `CM_ROOT_DIR` to the target worktree directory
|
|
@@ -499,6 +500,7 @@ that kind of screen directly under it. You answer it without leaving chat.
|
|
|
499
500
|
| A selection list is open | Arrow keys plus Enter / Esc. Depending on the screen, number keys or "This session only" / "Set as default" are added (see "The buttons a selection list gets" below) |
|
|
500
501
|
| A screen nothing could classify | Arrows and Esc (Navigate) plus the digits 1-9, y / n and Enter |
|
|
501
502
|
| Waiting, with options nobody could read | The digits 1-9, y / n and Enter |
|
|
503
|
+
| Trust confirmation (agy) | The banner reads "Terminal action needed (trust confirmation). The agent will not continue until you answer whether to trust this folder, and Auto-Yes does not answer this screen. Pick with the arrows and press Enter, or answer it in the terminal." You can send the arrows and Enter from here |
|
|
502
504
|
|
|
503
505
|
**Press the number or y/n while reading the card.** Enter confirms whatever the CLI has
|
|
504
506
|
currently highlighted, so on a numbered dialog an Enter meant as "no" can land as an
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "commandmate",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.47.0",
|
|
4
4
|
"description": "No long blocks of time? Run an AI team from your phone. Git worktree sessions, task contracts and verification gates for Claude Code, Codex, Gemini CLI, Copilot, OpenCode, Antigravity and Command Code.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai-agents",
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.47.0",
|
|
3
|
+
"date": "2026-10-21",
|
|
4
|
+
"highlight": {
|
|
5
|
+
"ja": "Auto-Yes が答えずに止まった確認を、CLI から画面を確かめたうえで直接答えられるようになりました。あわせて、Auto-Yes が答えてはいけない画面に答えたり、答えずに止まったりする問題を多数直しました。",
|
|
6
|
+
"en": "You can now answer a prompt that Auto-Yes left waiting directly from the CLI, after checking the screen. Many issues where Auto-Yes answered the wrong screen or stopped without answering are also fixed."
|
|
7
|
+
},
|
|
8
|
+
"added": [
|
|
9
|
+
{
|
|
10
|
+
"ja": "止まっている画面を CLI から 1 回観測して、種類・質問・選択肢を確かめられる commandmate prompt を追加しました。",
|
|
11
|
+
"en": "Added commandmate prompt, which observes a waiting screen once so you can check its kind, question and choices from the CLI."
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"ja": "観測した画面にだけ答える厳格な respond を追加しました。画面が変わっていれば何も送りません。",
|
|
15
|
+
"en": "Added a strict respond mode that answers only the screen you observed, and sends nothing if the screen has changed."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"ja": "直前の送信が「未送信・送信済み・不確定」のどれかを、prompt の出力と送信の失敗メッセージで確かめられるようになりました。",
|
|
19
|
+
"en": "The prompt output and send error messages now tell you whether the last message was not sent, sent, or indeterminate."
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"ja": "Codex の /config をスラッシュコマンドの一覧に追加しました。",
|
|
23
|
+
"en": "Added Codex's /config to the slash command list."
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
"improved": [
|
|
27
|
+
{
|
|
28
|
+
"ja": "サーバーの再起動で外れた Auto-Yes を「再起動で解除」と表示するようになりました。",
|
|
29
|
+
"en": "Auto-Yes that was turned off by a server restart is now shown as Released by restart."
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"ja": "契約で Auto-Yes が止められているとき、有効化の時点と一覧・画面でそのことが分かるようになりました。",
|
|
33
|
+
"en": "When a contract stops Auto-Yes, this is now shown when you enable it and in the lists and screens."
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"ja": "Antigravity の信頼の確認で止まっているとき、画面に「端末で操作が必要」と表示するようになりました。",
|
|
37
|
+
"en": "When Antigravity is waiting on its folder trust prompt, the screen now says the terminal needs your input."
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"ja": "start --daemon で起動したサーバーの出力を logs/server.log に残すようになりました。",
|
|
41
|
+
"en": "A server started with start --daemon now keeps its output in logs/server.log."
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
"fixed": [
|
|
45
|
+
{
|
|
46
|
+
"ja": "Antigravity のログイン方法の画面や、表示が切れた許可の画面に、Auto-Yes が番号で答えうる問題を直しました。",
|
|
47
|
+
"en": "Fixed Auto-Yes possibly answering Antigravity's login method screen, or a cut-off permission screen, with a number."
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"ja": "Antigravity の確認に Auto-Yes が答えないまま長時間止まることがある問題を直しました。",
|
|
51
|
+
"en": "Fixed Auto-Yes sometimes leaving an Antigravity prompt unanswered for a long time."
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"ja": "Antigravity で答えた確認が画面に残り続けたとき、Auto-Yes が理由を残さずに黙る問題を直しました。",
|
|
55
|
+
"en": "Fixed Auto-Yes going silent without a reason when an answered Antigravity prompt stayed on screen."
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"ja": "厳格な respond で、Antigravity の許可の確認のカーソル以外の選択肢を選べるようになりました。",
|
|
59
|
+
"en": "Strict respond can now choose options other than the highlighted one on Antigravity's permission prompt."
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"ja": "厳格な respond で信頼の確認に No, exit と答えたとき、終了を正しく読み取るようになりました。",
|
|
63
|
+
"en": "Strict respond now correctly reports the session ending after answering No, exit on the trust prompt."
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"ja": "Antigravity のターミナル画面が黒く見える問題を直しました。",
|
|
67
|
+
"en": "Fixed the Antigravity terminal view appearing blank."
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"ja": "Submit と Cancel の確認画面に、Auto-Yes が答えないようにしました。",
|
|
71
|
+
"en": "Auto-Yes no longer answers Submit and Cancel confirmation pages."
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"ja": "Gemini と Antigravity の起動時の信頼の確認を、安全な選択肢のときだけ通し、Auto-Yes と二重に答えないようにしました。",
|
|
75
|
+
"en": "Gemini and Antigravity startup trust prompts are now confirmed only on the safe option, and never answered twice with Auto-Yes."
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"ja": "Copilot の信頼の確認に、Auto-Yes の入力がメッセージとして送られることがある問題を直しました。",
|
|
79
|
+
"en": "Fixed Auto-Yes input sometimes being sent as a message on Copilot's folder trust prompt."
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"ja": "Antigravity の起動の後に出た信頼の確認が処理されず、通知も出ない問題を直しました。",
|
|
83
|
+
"en": "Fixed an Antigravity trust prompt shown after startup going unhandled without a notification."
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"ja": "Auto-Yes が答える前に、答えていないという通知が誤って出ることがある問題を直しました。",
|
|
87
|
+
"en": "Fixed a not-answered notification sometimes being shown before Auto-Yes had a chance to answer."
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"ja": "契約が止めた確認について、hooks の設定が原因であるかのような案内が出る問題を直しました。",
|
|
91
|
+
"en": "Fixed a hint that blamed the hooks setup for a prompt that a contract had stopped."
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"ja": "再起動で解除された Auto-Yes の表示が、消えるべきときに消えないなどの問題を直しました。",
|
|
95
|
+
"en": "Fixed the released-by-restart Auto-Yes label not clearing when it should, among other display issues."
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"ja": "Command Code の plan review で送信が断られたとき、未送信と表示するようにしました。",
|
|
99
|
+
"en": "A message refused by Command Code's plan review is now shown as not sent."
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"ja": "送信の直後に、送信前の古い画面が表示されることがある問題を直しました。",
|
|
103
|
+
"en": "Fixed the screen sometimes showing the old content from before a message was sent."
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"ja": "取り消した返答の受け渡しが、依頼元に届いてしまうことがある問題を直しました。",
|
|
107
|
+
"en": "Fixed a cancelled reply relay sometimes still being delivered."
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"ja": "削除した worktree やサーバー停止の後に、スケジュールが作り直されることがある問題を直しました。",
|
|
111
|
+
"en": "Fixed schedules sometimes being recreated after a worktree was removed or the server was stopped."
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"ja": "ターミナルの購読が残り続け、上限に達することがある問題を直しました。",
|
|
115
|
+
"en": "Fixed terminal subscriptions sometimes piling up until the limit was reached."
|
|
116
|
+
}
|
|
117
|
+
]
|
|
118
|
+
}
|