commandmate 0.34.1 → 0.36.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 +365 -343
- package/.next/app-path-routes-manifest.json +29 -29
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +12 -12
- package/.next/required-server-files.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route.js +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/session/route.js +1 -1
- package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/start/route.js +1 -1
- package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/terminal/route.js +1 -1
- package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/capabilities/route.js +1 -1
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/route.js +1 -1
- package/.next/server/app/api/relays/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/chat/page.js +2 -2
- package/.next/server/app/chat/page.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page.js +2 -2
- package/.next/server/app/more/page.js.nft.json +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page.js +1 -1
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page.js +2 -2
- package/.next/server/app/repositories/page.js.nft.json +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page.js +1 -1
- package/.next/server/app/review/page.js.nft.json +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.js +2 -2
- package/.next/server/app/sessions/page.js.nft.json +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page.js +2 -2
- package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page.js +2 -2
- package/.next/server/app/skills/installed/page.js.nft.json +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page.js +1 -1
- package/.next/server/app/skills/page.js.nft.json +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +9 -22
- package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +29 -29
- package/.next/server/chunks/1210.js +1 -1
- package/.next/server/chunks/{6286.js → 1467.js} +6 -6
- package/.next/server/chunks/1707.js +14 -0
- package/.next/server/chunks/1886.js +1 -1
- package/.next/server/chunks/2980.js +1 -1
- package/.next/server/chunks/3077.js +1 -1
- package/.next/server/chunks/3123.js +1 -1
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3323.js +1 -1
- package/.next/server/chunks/3543.js +1 -1
- package/.next/server/chunks/364.js +1 -0
- package/.next/server/chunks/3945.js +1 -1
- package/.next/server/chunks/434.js +1 -1
- package/.next/server/chunks/4443.js +1 -1
- package/.next/server/chunks/450.js +1 -1
- package/.next/server/chunks/4802.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/650.js +1 -1
- package/.next/server/chunks/6677.js +3 -3
- package/.next/server/chunks/7004.js +1 -0
- package/.next/server/chunks/7075.js +1 -1
- package/.next/server/chunks/7506.js +1 -1
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/8142.js +1 -0
- package/.next/server/chunks/8728.js +8 -0
- package/.next/server/chunks/8918.js +5 -5
- package/.next/server/chunks/9123.js +2 -2
- package/.next/server/chunks/9627.js +1 -1
- package/.next/server/chunks/9701.js +1 -0
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/2039-117a361f795ddc4b.js +1 -0
- package/.next/static/chunks/2053-ce3fe896ad45e50f.js +1 -0
- package/.next/static/chunks/2407-6b8ca567e18ad583.js +1 -0
- package/.next/static/chunks/3160-79d24ca264a528b9.js +1 -0
- package/.next/static/chunks/{4322-dfd5a7119b5ba4fc.js → 4322-59a7dbd77a7763cc.js} +1 -1
- package/.next/static/chunks/4388-410b1d8ed0d8d98b.js +1 -0
- package/.next/static/chunks/4718-56ebb6e55073ed5e.js +1 -0
- package/.next/static/chunks/4949-d804db873cfd9310.js +1 -0
- package/.next/static/chunks/{6022-7a7d1760fc9814c7.js → 6022-d2d7bd9373ff3ae9.js} +1 -1
- package/.next/static/chunks/6983-3ed2099251793bdf.js +1 -0
- package/.next/static/chunks/934-a37509667baa86ee.js +1 -0
- package/.next/static/chunks/9526-4fe2fc64be44e5c1.js +1 -0
- package/.next/static/chunks/app/chat/page-bfc1f5bb17bd771d.js +1 -0
- package/.next/static/chunks/app/error-c1dc1038d0a84a33.js +1 -0
- package/.next/static/chunks/app/global-error-49f765ecb7fd6527.js +1 -0
- package/.next/static/chunks/app/{layout-4c2f21e3f653ee4c.js → layout-114dc6e93e332392.js} +1 -1
- package/.next/static/chunks/app/more/page-400ffa825f8f150e.js +1 -0
- package/.next/static/chunks/app/{page-26a42881c8648cd3.js → page-a4f03c188610c6c8.js} +1 -1
- package/.next/static/chunks/app/repositories/{page-2576158c8420fda0.js → page-a15efb4ce1d1721e.js} +1 -1
- package/.next/static/chunks/app/review/{page-35b99baaf3c93b38.js → page-90ac618489676cbc.js} +1 -1
- package/.next/static/chunks/app/sessions/page-366edfaa0b1faad2.js +1 -0
- package/.next/static/chunks/app/skills/[skillId]/{page-06799157652e8fa9.js → page-ce8f6fd9e4356580.js} +1 -1
- package/.next/static/chunks/app/skills/installed/{page-2f3987e3a131c8d0.js → page-566dfde26d7e63ba.js} +1 -1
- package/.next/static/chunks/app/skills/{page-e70bfcf5ed4e4865.js → page-7859540e8092aace.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/page-df482ec0c378c77b.js +1 -0
- package/.next/static/chunks/{webpack-1dc9eb5ebb4fa5ff.js → webpack-0281b30457d46ebc.js} +1 -1
- package/.next/static/css/c511ecdf1e7f18a0.css +1 -0
- package/.next/trace +14 -13
- package/dist/lib/detection/tools/verified-against.d.ts +20 -0
- package/dist/lib/detection/tools/verified-against.d.ts.map +1 -1
- package/dist/lib/detection/tools/verified-against.js +20 -0
- package/dist/server/src/config/websocket-config.js +67 -0
- package/dist/server/src/lib/auto-yes-poller.js +40 -7
- package/dist/server/src/lib/auto-yes-state.js +36 -0
- package/dist/server/src/lib/detection/selection-shape.js +361 -3
- package/dist/server/src/lib/detection/tools/command-code/detect.js +96 -0
- package/dist/server/src/lib/detection/tools/command-code/dialog.js +314 -0
- package/dist/server/src/lib/detection/tools/verified-against.js +20 -0
- package/dist/server/src/lib/polling/response-checker.js +48 -2
- package/dist/server/src/lib/ws-server.js +111 -1
- package/package.json +1 -1
- package/public/sw.js +12 -0
- package/.next/server/chunks/120.js +0 -1
- package/.next/server/chunks/595.js +0 -8
- package/.next/server/chunks/7593.js +0 -1
- package/.next/static/chunks/1191-b7dfdfe86b1d31d1.js +0 -1
- package/.next/static/chunks/2053-9ac860ab4e92ac89.js +0 -1
- package/.next/static/chunks/2652-18b8fea64413467e.js +0 -1
- package/.next/static/chunks/4718-29cfcfb806724d9a.js +0 -1
- package/.next/static/chunks/5542-b6457f305d724a6b.js +0 -1
- package/.next/static/chunks/8361-0142beb59be2abf3.js +0 -1
- package/.next/static/chunks/app/chat/page-e60d07c4c79602f0.js +0 -1
- package/.next/static/chunks/app/error-27ab04bce6545dae.js +0 -1
- package/.next/static/chunks/app/global-error-7b761b8e181ffc1f.js +0 -1
- package/.next/static/chunks/app/more/page-fc94f86aa881489e.js +0 -1
- package/.next/static/chunks/app/sessions/page-a3ab6f122ec60d5a.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-60eab4e24c37cb77.js +0 -1
- package/.next/static/css/b09bede85744e1cf.css +0 -1
- /package/.next/static/{oDWX0JcwfhUYrMnnqDWVC → zNNp00FuBenN_iZtIvIBP}/_buildManifest.js +0 -0
- /package/.next/static/{oDWX0JcwfhUYrMnnqDWVC → zNNp00FuBenN_iZtIvIBP}/_ssgManifest.js +0 -0
|
@@ -109,6 +109,26 @@ export declare const ANTIGRAVITY_VERIFIED_AGAINST: {
|
|
|
109
109
|
* tmux socket at the production geometry — the default pane size does not
|
|
110
110
|
* reproduce the 200-column rules that fence the composer, and the status row
|
|
111
111
|
* drops its `esc to interrupt` tail below 72 columns.
|
|
112
|
+
*
|
|
113
|
+
* ## Deliberately NOT advanced by Issues #2521 / #2522
|
|
114
|
+
*
|
|
115
|
+
* Both read the `AskUserQuestion` screen, and both did it from the anonymised
|
|
116
|
+
* capture in `tests/fixtures/command-code-askuserquestion-2521/` — whose rows
|
|
117
|
+
* 410-423 are verbatim from a live pane, but whose version is what the reporting
|
|
118
|
+
* session SAID it was (1.53.0) rather than something re-probed. #2522's own
|
|
119
|
+
* fixture directory is synthetic throughout, and the send mode
|
|
120
|
+
* (`submitMode: 'answer_only'`) was chosen from a STATIC reading of a locally
|
|
121
|
+
* installed 1.53.1 `QuestionPrompt` plus the safe-direction argument in
|
|
122
|
+
* `tools/command-code/dialog.ts` — not from a keystroke sent at a live pane.
|
|
123
|
+
*
|
|
124
|
+
* None of that is the measurement this stamp records. #2304 set the precedent in
|
|
125
|
+
* the other direction: seven frames re-captured live on 1.49.0 changed no rule,
|
|
126
|
+
* and the stamp still says 1.40.1 because that is the build the rules were READ
|
|
127
|
+
* OFF. Advancing it here on a reported version, a synthetic fixture and a
|
|
128
|
+
* package read off disk would make `getDetectorFreshness` claim a measurement
|
|
129
|
+
* nobody took. When a live 1.53.x session is probed — the question screen, the
|
|
130
|
+
* keys it accepts and what one of them advances — bump this to that exact
|
|
131
|
+
* version with its own `capturedAt`.
|
|
112
132
|
*/
|
|
113
133
|
export declare const COMMAND_CODE_VERIFIED_AGAINST: {
|
|
114
134
|
readonly version: "1.40.1";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verified-against.d.ts","sourceRoot":"","sources":["../../../../src/lib/detection/tools/verified-against.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,iEAAiE;AACjE,eAAO,MAAM,uBAAuB;;;;CAI1B,CAAC;AAEX,4EAA4E;AAC5E,eAAO,MAAM,sBAAsB;;;;CAIzB,CAAC;AAEX;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wBAAwB;;;;CAI3B,CAAC;AAEX;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,yBAAyB;;;;CAI5B,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,4BAA4B;;;;CAI/B,CAAC;AAEX
|
|
1
|
+
{"version":3,"file":"verified-against.d.ts","sourceRoot":"","sources":["../../../../src/lib/detection/tools/verified-against.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,iEAAiE;AACjE,eAAO,MAAM,uBAAuB;;;;CAI1B,CAAC;AAEX,4EAA4E;AAC5E,eAAO,MAAM,sBAAsB;;;;CAIzB,CAAC;AAEX;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wBAAwB;;;;CAI3B,CAAC;AAEX;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,yBAAyB;;;;CAI5B,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,4BAA4B;;;;CAI/B,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,6BAA6B;;;;CAIhC,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B;;;;CAI9B,CAAC;AAEX,iFAAiF;AACjF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CASpF,CAAC"}
|
|
@@ -112,6 +112,26 @@ exports.ANTIGRAVITY_VERIFIED_AGAINST = {
|
|
|
112
112
|
* tmux socket at the production geometry — the default pane size does not
|
|
113
113
|
* reproduce the 200-column rules that fence the composer, and the status row
|
|
114
114
|
* drops its `esc to interrupt` tail below 72 columns.
|
|
115
|
+
*
|
|
116
|
+
* ## Deliberately NOT advanced by Issues #2521 / #2522
|
|
117
|
+
*
|
|
118
|
+
* Both read the `AskUserQuestion` screen, and both did it from the anonymised
|
|
119
|
+
* capture in `tests/fixtures/command-code-askuserquestion-2521/` — whose rows
|
|
120
|
+
* 410-423 are verbatim from a live pane, but whose version is what the reporting
|
|
121
|
+
* session SAID it was (1.53.0) rather than something re-probed. #2522's own
|
|
122
|
+
* fixture directory is synthetic throughout, and the send mode
|
|
123
|
+
* (`submitMode: 'answer_only'`) was chosen from a STATIC reading of a locally
|
|
124
|
+
* installed 1.53.1 `QuestionPrompt` plus the safe-direction argument in
|
|
125
|
+
* `tools/command-code/dialog.ts` — not from a keystroke sent at a live pane.
|
|
126
|
+
*
|
|
127
|
+
* None of that is the measurement this stamp records. #2304 set the precedent in
|
|
128
|
+
* the other direction: seven frames re-captured live on 1.49.0 changed no rule,
|
|
129
|
+
* and the stamp still says 1.40.1 because that is the build the rules were READ
|
|
130
|
+
* OFF. Advancing it here on a reported version, a synthetic fixture and a
|
|
131
|
+
* package read off disk would make `getDetectorFreshness` claim a measurement
|
|
132
|
+
* nobody took. When a live 1.53.x session is probed — the question screen, the
|
|
133
|
+
* keys it accepts and what one of them advances — bump this to that exact
|
|
134
|
+
* version with its own `capturedAt`.
|
|
115
135
|
*/
|
|
116
136
|
exports.COMMAND_CODE_VERIFIED_AGAINST = {
|
|
117
137
|
version: '1.40.1',
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* WebSocket heartbeat / reconnect constants shared by the server and the browser.
|
|
4
|
+
*
|
|
5
|
+
* Issue #2502: the socket had no liveness probe at all, so a half-open path — a
|
|
6
|
+
* phone that walked out of range, a laptop resuming from sleep, a Wi-Fi/LTE
|
|
7
|
+
* handover — stayed `connected` on both ends while every frame fell on the
|
|
8
|
+
* floor. TCP alone does not notice: without traffic neither side gets a RST,
|
|
9
|
+
* and `readyState` keeps answering OPEN. The only way out is to put bytes on
|
|
10
|
+
* the wire on a schedule and treat silence as a disconnect.
|
|
11
|
+
*
|
|
12
|
+
* Server and client read the same numbers from here because the two halves are
|
|
13
|
+
* a single protocol: the client's patience has to be a multiple of the server's
|
|
14
|
+
* beat, or a healthy connection gets killed between beats.
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.WS_HALF_OPEN_CLOSE_CODE = exports.WS_RECONNECT_JITTER_RATIO = exports.WS_RECONNECT_MAX_DELAY_MS = exports.WS_RECONNECT_BASE_DELAY_MS = exports.WS_CLIENT_LIVENESS_TIMEOUT_MS = exports.WS_CLIENT_LIVENESS_CHECK_INTERVAL_MS = exports.WS_HEARTBEAT_MESSAGE_TYPE = exports.WS_SERVER_HEARTBEAT_INTERVAL_MS = void 0;
|
|
18
|
+
/**
|
|
19
|
+
* How often the server pings every client and emits an application-level beat.
|
|
20
|
+
*
|
|
21
|
+
* 30s is the `ws` library's own recipe cadence and stays well inside the idle
|
|
22
|
+
* timeouts of the proxies CommandMate is tunnelled through (Cloudflare Quick
|
|
23
|
+
* Tunnel, Tailscale Serve), which is a second reason to send it at all.
|
|
24
|
+
*/
|
|
25
|
+
exports.WS_SERVER_HEARTBEAT_INTERVAL_MS = 30_000;
|
|
26
|
+
/**
|
|
27
|
+
* Server → client application-level beat (Issue #2502).
|
|
28
|
+
*
|
|
29
|
+
* A protocol-level ping is invisible to a browser: the WebSocket API answers
|
|
30
|
+
* pings automatically and gives page JavaScript no way to observe either the
|
|
31
|
+
* ping or its own pong. So the server sends this frame alongside the protocol
|
|
32
|
+
* ping — same cadence, same sweep — purely so the tab has something it CAN see.
|
|
33
|
+
* The client consumes it for liveness and does not forward it to listeners.
|
|
34
|
+
*/
|
|
35
|
+
exports.WS_HEARTBEAT_MESSAGE_TYPE = 'heartbeat';
|
|
36
|
+
/** How often the client checks how long it has been since anything arrived. */
|
|
37
|
+
exports.WS_CLIENT_LIVENESS_CHECK_INTERVAL_MS = 5_000;
|
|
38
|
+
/**
|
|
39
|
+
* Silence, in ms, after which the client declares the socket half-open.
|
|
40
|
+
*
|
|
41
|
+
* 2.5x the server beat: one lost or late heartbeat must not tear down a healthy
|
|
42
|
+
* connection, but two in a row is not something a live path does. Anything
|
|
43
|
+
* inbound refreshes the clock — a broadcast, a terminal chunk, the beat — so a
|
|
44
|
+
* busy socket never gets near this.
|
|
45
|
+
*/
|
|
46
|
+
exports.WS_CLIENT_LIVENESS_TIMEOUT_MS = 75_000;
|
|
47
|
+
/** Default base delay for the client's reconnect backoff. */
|
|
48
|
+
exports.WS_RECONNECT_BASE_DELAY_MS = 1_000;
|
|
49
|
+
/** Default ceiling for the client's reconnect backoff. */
|
|
50
|
+
exports.WS_RECONNECT_MAX_DELAY_MS = 30_000;
|
|
51
|
+
/**
|
|
52
|
+
* Fraction of the computed backoff the client randomises by, +/- (Issue #2502).
|
|
53
|
+
*
|
|
54
|
+
* Without it every tab that was connected to a restarting server retries on the
|
|
55
|
+
* identical 1s/2s/4s grid and the thundering herd lands on the first socket the
|
|
56
|
+
* new process opens. +/-20% is enough to smear the herd across the window while
|
|
57
|
+
* keeping the backoff's shape recognisable.
|
|
58
|
+
*/
|
|
59
|
+
exports.WS_RECONNECT_JITTER_RATIO = 0.2;
|
|
60
|
+
/**
|
|
61
|
+
* Close code the client uses when it gives up on a silent socket.
|
|
62
|
+
*
|
|
63
|
+
* In the application-private 4000-4999 range (1000-2999 are reserved by the
|
|
64
|
+
* protocol and browsers throw on most of them), so a server-side close log can
|
|
65
|
+
* tell "the tab decided this path was dead" apart from an ordinary goodbye.
|
|
66
|
+
*/
|
|
67
|
+
exports.WS_HALF_OPEN_CLOSE_CODE = 4001;
|
|
@@ -49,6 +49,7 @@ exports.clearAllPollerStates = clearAllPollerStates;
|
|
|
49
49
|
exports.getLastServerResponseTimestamp = getLastServerResponseTimestamp;
|
|
50
50
|
exports.isPollerActive = isPollerActive;
|
|
51
51
|
exports.validatePollingContext = validatePollingContext;
|
|
52
|
+
exports.capturePollerFrame = capturePollerFrame;
|
|
52
53
|
exports.captureAndCleanOutput = captureAndCleanOutput;
|
|
53
54
|
exports.processStopConditionDelta = processStopConditionDelta;
|
|
54
55
|
exports.detectAndRespondToPrompt = detectAndRespondToPrompt;
|
|
@@ -224,9 +225,28 @@ function validatePollingContext(compositeKey, pollerState) {
|
|
|
224
225
|
}
|
|
225
226
|
return 'valid';
|
|
226
227
|
}
|
|
228
|
+
/**
|
|
229
|
+
* Capture tmux session output once, keeping both spellings (Issue #2522).
|
|
230
|
+
*
|
|
231
|
+
* @internal Exported for testing purposes only.
|
|
232
|
+
* @param worktreeId - Worktree identifier
|
|
233
|
+
* @param cliToolId - CLI tool type being polled
|
|
234
|
+
* @param captureLines - Optional number of lines to capture
|
|
235
|
+
* @param instanceId - Optional agent instance ID (Issue #896; defaults to primary session)
|
|
236
|
+
* @returns The tick's raw capture and its cleaned form
|
|
237
|
+
*/
|
|
238
|
+
async function capturePollerFrame(worktreeId, cliToolId, captureLines, instanceId) {
|
|
239
|
+
const lines = captureLines ?? auto_yes_config_1.FULL_CAPTURE_LINES;
|
|
240
|
+
const output = await (0, cli_session_1.captureSessionOutput)(worktreeId, cliToolId, lines, instanceId);
|
|
241
|
+
return { raw: output, clean: (0, cli_patterns_1.stripBoxDrawing)((0, cli_patterns_1.stripAnsi)(output)) };
|
|
242
|
+
}
|
|
227
243
|
/**
|
|
228
244
|
* Capture tmux session output and strip ANSI escape codes.
|
|
229
245
|
*
|
|
246
|
+
* Kept as the cleaned half of {@link capturePollerFrame} so the many callers and
|
|
247
|
+
* tests that only ever wanted that string are untouched; `pollAutoYes` takes the
|
|
248
|
+
* pair. `stripBoxDrawing` still runs exactly once per capture either way.
|
|
249
|
+
*
|
|
230
250
|
* @internal Exported for testing purposes only.
|
|
231
251
|
* @param worktreeId - Worktree identifier
|
|
232
252
|
* @param cliToolId - CLI tool type being polled
|
|
@@ -235,9 +255,7 @@ function validatePollingContext(compositeKey, pollerState) {
|
|
|
235
255
|
* @returns Cleaned output string (ANSI stripped)
|
|
236
256
|
*/
|
|
237
257
|
async function captureAndCleanOutput(worktreeId, cliToolId, captureLines, instanceId) {
|
|
238
|
-
|
|
239
|
-
const output = await (0, cli_session_1.captureSessionOutput)(worktreeId, cliToolId, lines, instanceId);
|
|
240
|
-
return (0, cli_patterns_1.stripBoxDrawing)((0, cli_patterns_1.stripAnsi)(output));
|
|
258
|
+
return (await capturePollerFrame(worktreeId, cliToolId, captureLines, instanceId)).clean;
|
|
241
259
|
}
|
|
242
260
|
/**
|
|
243
261
|
* Process stop condition check using delta-based approach.
|
|
@@ -276,9 +294,12 @@ function processStopConditionDelta(compositeKey, pollerState, cleanOutput) {
|
|
|
276
294
|
* @param cleanOutput - ANSI-stripped terminal output
|
|
277
295
|
* @param precomputedLines - Optional pre-split lines to reuse
|
|
278
296
|
* @param instanceId - Optional agent instance ID (Issue #896; defaults to primary session)
|
|
297
|
+
* @param rawOutput - The SAME tick's capture with its box drawing intact
|
|
298
|
+
* (Issue #2522). Omitting it costs Command Code's `AskUserQuestion` and
|
|
299
|
+
* nothing else; see {@link capturePollerFrame}.
|
|
279
300
|
* @returns 'responded' | 'no_prompt' | 'duplicate' | 'no_answer' | 'error'
|
|
280
301
|
*/
|
|
281
|
-
async function detectAndRespondToPrompt(worktreeId, pollerState, cliToolId, cleanOutput, precomputedLines, instanceId) {
|
|
302
|
+
async function detectAndRespondToPrompt(worktreeId, pollerState, cliToolId, cleanOutput, precomputedLines, instanceId, rawOutput) {
|
|
282
303
|
const compositeKey = (0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId);
|
|
283
304
|
try {
|
|
284
305
|
// 1. Detect prompt.
|
|
@@ -301,7 +322,15 @@ async function detectAndRespondToPrompt(worktreeId, pollerState, cliToolId, clea
|
|
|
301
322
|
// `cleanOutput` is handed over already stripped, and the clean-frame entry
|
|
302
323
|
// is the one that does not strip again (`stripBoxDrawing` is not
|
|
303
324
|
// idempotent), so this poller and the response poller judge identical text.
|
|
304
|
-
|
|
325
|
+
//
|
|
326
|
+
// Issue #2522 adds the fourth argument, and it is a WIRING change rather
|
|
327
|
+
// than a reader one: Command Code's `AskUserQuestion` is anchored on the
|
|
328
|
+
// rule row `captureAndCleanOutput` blanks, so teaching
|
|
329
|
+
// `detectPromptOnCleanFrame` to read it changed nothing on this path until
|
|
330
|
+
// the same tick's raw capture reached it. `precomputedLines` stays the split
|
|
331
|
+
// of `cleanOutput` — the stop-condition delta and every other tool's reading
|
|
332
|
+
// are measured on that string and must not move.
|
|
333
|
+
const promptDetection = (0, response_checker_1.detectPromptOnCleanFrame)(cleanOutput, cliToolId, precomputedLines, rawOutput);
|
|
305
334
|
if (!promptDetection.isPrompt || !promptDetection.promptData) {
|
|
306
335
|
pollerState.lastAnsweredPromptKey = null;
|
|
307
336
|
pollerState.lastAnsweredAt = null;
|
|
@@ -519,14 +548,18 @@ async function pollAutoYes(worktreeId, cliToolId, instanceId) {
|
|
|
519
548
|
const captureLines = autoYesState?.stopPattern
|
|
520
549
|
? auto_yes_config_1.FULL_CAPTURE_LINES
|
|
521
550
|
: auto_yes_config_1.REDUCED_CAPTURE_LINES;
|
|
522
|
-
|
|
551
|
+
// Issue #2522: one capture, both spellings. The cleaned string drives every
|
|
552
|
+
// step below exactly as it did; the raw one is carried to the prompt reading
|
|
553
|
+
// so a dialog anchored on box drawing is not invisible to the one path that
|
|
554
|
+
// can answer it without a human.
|
|
555
|
+
const { raw: rawOutput, clean: cleanOutput } = await capturePollerFrame(worktreeId, cliToolId, captureLines, instanceId);
|
|
523
556
|
const lines = cleanOutput.split('\n');
|
|
524
557
|
// 3. Stop condition delta check (Issue #314)
|
|
525
558
|
if (processStopConditionDelta(compositeKey, pollerState, cleanOutput)) {
|
|
526
559
|
return;
|
|
527
560
|
}
|
|
528
561
|
// 4. Detect and respond to prompt
|
|
529
|
-
const result = await detectAndRespondToPrompt(worktreeId, pollerState, cliToolId, cleanOutput, lines, instanceId);
|
|
562
|
+
const result = await detectAndRespondToPrompt(worktreeId, pollerState, cliToolId, cleanOutput, lines, instanceId, rawOutput);
|
|
530
563
|
if (result === 'responded') {
|
|
531
564
|
scheduleNextPoll(worktreeId, cliToolId, instanceId, auto_yes_state_1.COOLDOWN_INTERVAL_MS);
|
|
532
565
|
return;
|
|
@@ -28,6 +28,7 @@ exports.getAutoYesStateCompositeKeys = getAutoYesStateCompositeKeys;
|
|
|
28
28
|
exports.filterCompositeKeysByWorktree = filterCompositeKeysByWorktree;
|
|
29
29
|
exports.getCompositeKeysByWorktree = getCompositeKeysByWorktree;
|
|
30
30
|
exports.deleteAutoYesStateByWorktree = deleteAutoYesStateByWorktree;
|
|
31
|
+
exports.getEnabledAutoYesByWorktree = getEnabledAutoYesByWorktree;
|
|
31
32
|
exports.migrateAutoYesStateWorktreeIds = migrateAutoYesStateWorktreeIds;
|
|
32
33
|
exports.calculateBackoffInterval = calculateBackoffInterval;
|
|
33
34
|
const auto_yes_config_1 = require("../config/auto-yes-config");
|
|
@@ -464,6 +465,41 @@ function deleteAutoYesStateByWorktree(worktreeId) {
|
|
|
464
465
|
keys.forEach(key => autoYesStates.delete(key));
|
|
465
466
|
return keys.length;
|
|
466
467
|
}
|
|
468
|
+
/**
|
|
469
|
+
* Every enabled Auto-Yes state, grouped by worktree and keyed by instance, for
|
|
470
|
+
* the worktree list payload (Issue #2512).
|
|
471
|
+
*
|
|
472
|
+
* One pass over the map for the whole server rather than a
|
|
473
|
+
* {@link getCompositeKeysByWorktree} scan per row, so the list route stays
|
|
474
|
+
* O(states) however many worktrees it returns. Reads go through
|
|
475
|
+
* {@link getAutoYesState}, which resolves an expired state to disabled — the
|
|
476
|
+
* same read-time expiry `GET /api/worktrees/:id/auto-yes` applies — so the list
|
|
477
|
+
* never reports a countdown that has already run out on the server.
|
|
478
|
+
*
|
|
479
|
+
* Disabled states are left out: a reader renders "never enabled", "turned off"
|
|
480
|
+
* and "expired" identically, and the map keeps disabled entries around for
|
|
481
|
+
* inspection long after anyone needs them on the wire.
|
|
482
|
+
*
|
|
483
|
+
* @returns worktreeId -> instanceId -> summary; worktrees with nothing armed are absent
|
|
484
|
+
*/
|
|
485
|
+
function getEnabledAutoYesByWorktree() {
|
|
486
|
+
const byWorktree = new Map();
|
|
487
|
+
// A snapshot of the keys: an expired read below rewrites its own entry.
|
|
488
|
+
for (const key of Array.from(autoYesStates.keys())) {
|
|
489
|
+
const cliToolId = extractCliToolId(key);
|
|
490
|
+
if (!cliToolId)
|
|
491
|
+
continue;
|
|
492
|
+
const worktreeId = extractWorktreeId(key);
|
|
493
|
+
const instanceId = extractInstanceId(key) ?? cliToolId;
|
|
494
|
+
const state = getAutoYesState(worktreeId, cliToolId, instanceId);
|
|
495
|
+
if (!state?.enabled)
|
|
496
|
+
continue;
|
|
497
|
+
const entries = byWorktree.get(worktreeId) ?? {};
|
|
498
|
+
entries[instanceId] = { enabled: true, expiresAt: state.expiresAt };
|
|
499
|
+
byWorktree.set(worktreeId, entries);
|
|
500
|
+
}
|
|
501
|
+
return byWorktree;
|
|
502
|
+
}
|
|
467
503
|
/**
|
|
468
504
|
* Re-key every auto-yes state whose worktree ID is being renamed
|
|
469
505
|
* (Issue #1621 Phase 3).
|