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
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
11
|
exports.claudeStatusDetector = void 0;
|
|
12
12
|
exports.findClaudeTranscriptTail = findClaudeTranscriptTail;
|
|
13
|
+
exports.isClaudeAskUserQuestionConfirmPage = isClaudeAskUserQuestionConfirmPage;
|
|
13
14
|
exports.readIdleEvidence = readIdleEvidence;
|
|
14
15
|
const cli_patterns_1 = require("../../cli-patterns");
|
|
15
16
|
const composer_text_1 = require("../../composer-text");
|
|
@@ -17,6 +18,7 @@ const prompt_detect_multiple_choice_1 = require("../../prompt-detect-multiple-ch
|
|
|
17
18
|
const verdicts_1 = require("../verdicts");
|
|
18
19
|
const status_reason_1 = require("../../status-reason");
|
|
19
20
|
const prompt_1 = require("./prompt");
|
|
21
|
+
const picker_chrome_1 = require("./picker-chrome");
|
|
20
22
|
const frame_1 = require("../frame");
|
|
21
23
|
const live_region_1 = require("./live-region");
|
|
22
24
|
const run_detection_1 = require("../run-detection");
|
|
@@ -59,6 +61,64 @@ function findClaudeTranscriptTail(contentLines) {
|
|
|
59
61
|
}
|
|
60
62
|
return index;
|
|
61
63
|
}
|
|
64
|
+
/** The confirmation page's question, as the whole row (Issue #3748). */
|
|
65
|
+
const CLAUDE_SUBMIT_CONFIRM_QUESTION_ROW = /^\s*Ready to submit your answers\?\s*$/;
|
|
66
|
+
/** Its option 1, as the whole row, cursor or not. */
|
|
67
|
+
const CLAUDE_SUBMIT_ANSWERS_OPTION_ROW = /^\s*(?:❯\s*)?1\.\s+Submit answers\s*$/;
|
|
68
|
+
/** Its option 2, as the whole row, cursor or not. */
|
|
69
|
+
const CLAUDE_SUBMIT_CANCEL_OPTION_ROW = /^\s*(?:❯\s*)?2\.\s+Cancel\s*$/;
|
|
70
|
+
/** The multi-question tab bar's `✔ Submit` tab — only that bar leads to this page. */
|
|
71
|
+
const CLAUDE_SUBMIT_TAB_PATTERN = /✔\s*Submit/;
|
|
72
|
+
/**
|
|
73
|
+
* How far above the question the tab bar may sit: the page lists every
|
|
74
|
+
* question and answer (`● …` / `→ …`) between them, wrapped at the pane width.
|
|
75
|
+
*/
|
|
76
|
+
const CLAUDE_SUBMIT_CONFIRM_TAB_LOOKBACK = 200;
|
|
77
|
+
/** The nearest non-blank row above `row`, or -1. */
|
|
78
|
+
function previousNonBlankRow(lines, row) {
|
|
79
|
+
for (let i = row - 1; i >= 0; i--) {
|
|
80
|
+
if (lines[i].trim() !== '')
|
|
81
|
+
return i;
|
|
82
|
+
}
|
|
83
|
+
return -1;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Is this frame Claude's `AskUserQuestion` confirmation page? (Issue #3748)
|
|
87
|
+
*
|
|
88
|
+
* Read strictly, row by row, from the end of the transcript up — all of:
|
|
89
|
+
*
|
|
90
|
+
* 1. the transcript's last row ({@link findClaudeTranscriptTail}, which steps
|
|
91
|
+
* over Claude's chrome) is `2. Cancel`, the row above it `1. Submit
|
|
92
|
+
* answers`, and the cursor `❯` is on one of the two;
|
|
93
|
+
* 2. the nearest non-blank row above the options IS `Ready to submit your
|
|
94
|
+
* answers?` — the whole row, not a row that contains it;
|
|
95
|
+
* 3. the multi-question tab bar (`← ☒ … ✔ Submit →`) sits above that.
|
|
96
|
+
*
|
|
97
|
+
* Deliberately NOT `detectClaudeDialog`'s `ask_user` kind: that classifies by a
|
|
98
|
+
* substring of the four rows above the options, so a Bash approval whose command
|
|
99
|
+
* is `grep -rn "review your answers" src`, an Edit approval whose diff holds
|
|
100
|
+
* the phrase, or a question that asks it read as this page — and Auto-Yes then
|
|
101
|
+
* left an ordinary `1. Yes` to a human. The dialog gate's reading is unchanged.
|
|
102
|
+
*
|
|
103
|
+
* `Submit answers` picks nothing — it commits whatever stands as the answers —
|
|
104
|
+
* so Auto-Yes leaves this page to a human, as it does Command Code's (#3497).
|
|
105
|
+
*/
|
|
106
|
+
function isClaudeAskUserQuestionConfirmPage(frame) {
|
|
107
|
+
const lines = frame.contentLines;
|
|
108
|
+
const cancelRow = findClaudeTranscriptTail(lines);
|
|
109
|
+
if (cancelRow < 0 || !CLAUDE_SUBMIT_CANCEL_OPTION_ROW.test(lines[cancelRow]))
|
|
110
|
+
return false;
|
|
111
|
+
const submitRow = cancelRow - 1;
|
|
112
|
+
if (submitRow < 0 || !CLAUDE_SUBMIT_ANSWERS_OPTION_ROW.test(lines[submitRow]))
|
|
113
|
+
return false;
|
|
114
|
+
if (!lines[submitRow].includes('❯') && !lines[cancelRow].includes('❯'))
|
|
115
|
+
return false;
|
|
116
|
+
const questionRow = previousNonBlankRow(lines, submitRow);
|
|
117
|
+
if (questionRow < 0 || !CLAUDE_SUBMIT_CONFIRM_QUESTION_ROW.test(lines[questionRow]))
|
|
118
|
+
return false;
|
|
119
|
+
const tabRow = (0, picker_chrome_1.findAskUserQuestionTabRow)(lines, questionRow, CLAUDE_SUBMIT_CONFIRM_TAB_LOOKBACK);
|
|
120
|
+
return tabRow >= 0 && CLAUDE_SUBMIT_TAB_PATTERN.test(lines[tabRow]);
|
|
121
|
+
}
|
|
62
122
|
/**
|
|
63
123
|
* §4 D1 決定 1: does this frame positively show that Claude's turn is over?
|
|
64
124
|
*
|
|
@@ -17,6 +17,7 @@ exports.hasCommandCodePlanReviewFooterAtBottom = hasCommandCodePlanReviewFooterA
|
|
|
17
17
|
exports.hasDismissablePanelFooter = hasDismissablePanelFooter;
|
|
18
18
|
exports.isCommandCodeQuestionTabRow = isCommandCodeQuestionTabRow;
|
|
19
19
|
exports.readCommandCodeReviewPage = readCommandCodeReviewPage;
|
|
20
|
+
exports.isCommandCodeQuestionConfirmPage = isCommandCodeQuestionConfirmPage;
|
|
20
21
|
const ansi_1 = require("../../ansi");
|
|
21
22
|
const selection_shape_patterns_1 = require("../../selection-shape-patterns");
|
|
22
23
|
/**
|
|
@@ -404,22 +405,13 @@ const COMMAND_CODE_REVIEW_BACK_HINT_PATTERN = /^[^\S\n]*\u2190[^\S\n]+to[^\S\n]+
|
|
|
404
405
|
*/
|
|
405
406
|
const COMMAND_CODE_REVIEW_UNANSWERED_PATTERN = /have\s+not\s+answered\s+all\s+questions/i;
|
|
406
407
|
/**
|
|
407
|
-
*
|
|
408
|
-
* (Issue #2755 §7
|
|
409
|
-
*
|
|
410
|
-
* The same region {@link readCommandCodeQuestionRegion} works on — last rule
|
|
411
|
-
* row, tab strip as the first row under it — plus the three rows above. The
|
|
412
|
-
* question-shaped conditions are deliberately NOT applied: this page has no
|
|
413
|
-
* question body of its own on the `Submit`/`Cancel` spelling (the answers sit
|
|
414
|
-
* where the question would), and it draws `1.` twice, so the strict reading
|
|
415
|
-
* declines it for a numbering reason that says nothing about what it is.
|
|
416
|
-
*
|
|
417
|
-
* `null` for everything else, so no existing verdict moves except the two
|
|
418
|
-
* captures this is about.
|
|
408
|
+
* The rows under the frame's LAST rule row, when the first of them that carries
|
|
409
|
+
* content is a question-screen tab strip (Issue #2755 §7, split out by Issue
|
|
410
|
+
* #3497 so the Review page reading and the confirm-page guard share one anchor).
|
|
419
411
|
*
|
|
420
412
|
* @param frame - a raw `capture-pane -p -e` frame, ANSI intact (CRLF tolerated)
|
|
421
413
|
*/
|
|
422
|
-
function
|
|
414
|
+
function readQuestionTabRegion(frame) {
|
|
423
415
|
if (!frame)
|
|
424
416
|
return null;
|
|
425
417
|
const lines = frame.replace(/\r\n/g, '\n').split('\n').map(ansi_1.stripAnsi);
|
|
@@ -446,6 +438,28 @@ function readCommandCodeReviewPage(frame) {
|
|
|
446
438
|
return null;
|
|
447
439
|
if (!isCommandCodeQuestionTabRow(region[tabOffset]))
|
|
448
440
|
return null;
|
|
441
|
+
return region;
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Read Command Code's `AskUserQuestion` Review page, if this frame is one
|
|
445
|
+
* (Issue #2755 §7).
|
|
446
|
+
*
|
|
447
|
+
* The same region {@link readCommandCodeQuestionRegion} works on — last rule
|
|
448
|
+
* row, tab strip as the first row under it — plus the three rows above. The
|
|
449
|
+
* question-shaped conditions are deliberately NOT applied: this page has no
|
|
450
|
+
* question body of its own on the `Submit`/`Cancel` spelling (the answers sit
|
|
451
|
+
* where the question would), and it draws `1.` twice, so the strict reading
|
|
452
|
+
* declines it for a numbering reason that says nothing about what it is.
|
|
453
|
+
*
|
|
454
|
+
* `null` for everything else, so no existing verdict moves except the two
|
|
455
|
+
* captures this is about.
|
|
456
|
+
*
|
|
457
|
+
* @param frame - a raw `capture-pane -p -e` frame, ANSI intact (CRLF tolerated)
|
|
458
|
+
*/
|
|
459
|
+
function readCommandCodeReviewPage(frame) {
|
|
460
|
+
const region = readQuestionTabRegion(frame);
|
|
461
|
+
if (region === null)
|
|
462
|
+
return null;
|
|
449
463
|
const body = region.join('\n');
|
|
450
464
|
if (!COMMAND_CODE_REVIEW_SUBMIT_ROW_PATTERN.test(body))
|
|
451
465
|
return null;
|
|
@@ -459,3 +473,39 @@ function readCommandCodeReviewPage(frame) {
|
|
|
459
473
|
cursorOnSubmit: submitRow !== undefined && submitRow.includes(exports.COMMAND_CODE_CURSOR_GLYPH),
|
|
460
474
|
};
|
|
461
475
|
}
|
|
476
|
+
/**
|
|
477
|
+
* Is this frame an `AskUserQuestion` CONFIRM page — `❯ 1. Submit` / `2. Cancel`
|
|
478
|
+
* under the question screen's tab strip — whatever else it draws? (Issue #3497)
|
|
479
|
+
*
|
|
480
|
+
* {@link readCommandCodeReviewPage} needs all three of its rows, the back hint
|
|
481
|
+
* included, and on a frame without `← to go back and edit` it answers `null`.
|
|
482
|
+
* The question region declines that page too (it draws `1.` twice), so the
|
|
483
|
+
* GENERIC parser reads it; and a free-text question drawn with the pair as its
|
|
484
|
+
* only options is read by the question reader itself. Either way the payload is
|
|
485
|
+
* a two-option `multiple_choice` whose default is `Submit`, which Auto-Yes
|
|
486
|
+
* answered `1` — committing the worker's own proposal as the human's answer
|
|
487
|
+
* (Kewton/Musunest#283).
|
|
488
|
+
*
|
|
489
|
+
* This is the wider reading Auto-Yes declines on, and deliberately NOT a change
|
|
490
|
+
* to the Review page reading: the status path and the answer panels keep what
|
|
491
|
+
* they publish for these frames, so a human is still shown the question. True
|
|
492
|
+
* when the tab strip sits directly under the last rule row and the region
|
|
493
|
+
* carries the confirm pair — `1. Submit` and `2. Cancel`, the `❯` on either —
|
|
494
|
+
* with or without the back hint, and whichever tab is current (the incident's
|
|
495
|
+
* page was a free-text question drawn with the same pair).
|
|
496
|
+
*
|
|
497
|
+
* The question screens themselves (#2521 / #2522 / #2753 / #2754) never carry
|
|
498
|
+
* the pair: their `Submit` / `Next` confirm row has no number, and the Review
|
|
499
|
+
* TAB showing a diff (`◯ Dispatch | ● Review` over `1 +` gutter rows) has no
|
|
500
|
+
* `Submit` row at all.
|
|
501
|
+
*
|
|
502
|
+
* @param frame - a raw capture with its box drawing intact (ANSI optional)
|
|
503
|
+
*/
|
|
504
|
+
function isCommandCodeQuestionConfirmPage(frame) {
|
|
505
|
+
const region = readQuestionTabRegion(frame);
|
|
506
|
+
if (region === null)
|
|
507
|
+
return false;
|
|
508
|
+
const body = region.join('\n');
|
|
509
|
+
return (COMMAND_CODE_REVIEW_SUBMIT_ROW_PATTERN.test(body) &&
|
|
510
|
+
COMMAND_CODE_REVIEW_CANCEL_ROW_PATTERN.test(body));
|
|
511
|
+
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* (Issue #3217). `cli-patterns.ts` re-exports every public name.
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.COPILOT_SKIP_PATTERNS = exports.COPILOT_FOLDER_TRUST_ANSWER_KEY = exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN = exports.COPILOT_FOLDER_TRUST_ANCHORS = exports.COPILOT_SELECTION_FOOTER_PATTERN = exports.COPILOT_BOOT_BANNER_ANCHORS = exports.COPILOT_TRANSCRIPT_CONTINUATION_PATTERN = exports.COPILOT_TOOL_ROW_PATTERN = exports.COPILOT_TOOL_VERBS = exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN = exports.COPILOT_USER_ECHO_PATTERN = exports.COPILOT_REASONING_HEADER_PATTERN = exports.COPILOT_BOX_ROW_PATTERN = exports.COPILOT_SEPARATOR_PATTERN = exports.COPILOT_IDLE_STATUS_PATTERN = exports.COPILOT_WORKING_STATUS_PATTERN = exports.COPILOT_THINKING_PATTERN = exports.COPILOT_PROMPT_PATTERN = void 0;
|
|
7
|
+
exports.COPILOT_SKIP_PATTERNS = exports.COPILOT_FOLDER_TRUST_ANSWER_KEY = exports.COPILOT_FOLDER_TRUST_OPTION_LABEL_PATTERN = exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN = exports.COPILOT_FOLDER_TRUST_ANCHORS = exports.COPILOT_SELECTION_FOOTER_PATTERN = exports.COPILOT_BOOT_BANNER_ANCHORS = exports.COPILOT_TRANSCRIPT_CONTINUATION_PATTERN = exports.COPILOT_TOOL_ROW_PATTERN = exports.COPILOT_TOOL_VERBS = exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN = exports.COPILOT_USER_ECHO_PATTERN = exports.COPILOT_REASONING_HEADER_PATTERN = exports.COPILOT_BOX_ROW_PATTERN = exports.COPILOT_SEPARATOR_PATTERN = exports.COPILOT_IDLE_STATUS_PATTERN = exports.COPILOT_WORKING_STATUS_PATTERN = exports.COPILOT_THINKING_PATTERN = exports.COPILOT_PROMPT_PATTERN = void 0;
|
|
8
8
|
exports.readCopilotStatusBar = readCopilotStatusBar;
|
|
9
9
|
exports.findCopilotChromeStart = findCopilotChromeStart;
|
|
10
10
|
exports.isCopilotSelectionFrame = isCopilotSelectionFrame;
|
|
@@ -559,6 +559,12 @@ exports.COPILOT_FOLDER_TRUST_ANCHORS = [
|
|
|
559
559
|
* line and accept `1. Yes, and remember ...`.
|
|
560
560
|
*/
|
|
561
561
|
exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN = /^[ \t]*(?:[>❯][ \t]*)?1\.[ \t]+Yes[ \t]*$/m;
|
|
562
|
+
/**
|
|
563
|
+
* The folder-trust dialog's option labels as the prompt parser reads them
|
|
564
|
+
* (`1. Yes` -> `Yes`), for the Auto-Yes poller to tell the dialog itself from
|
|
565
|
+
* another prompt under a reply that quotes its question (Issue #3790).
|
|
566
|
+
*/
|
|
567
|
+
exports.COPILOT_FOLDER_TRUST_OPTION_LABEL_PATTERN = /^(?:Yes|Yes, and remember this folder for future sessions|No \(Esc\))$/;
|
|
562
568
|
/**
|
|
563
569
|
* Key that selects {@link COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN}.
|
|
564
570
|
* Measured on 1.0.80: the digit confirms on its own — sending a trailing Enter
|
|
@@ -367,9 +367,13 @@ async function writeOpencodeV2Turn(target, rendered, timestampMs) {
|
|
|
367
367
|
* @param target - The instance the stream belongs to
|
|
368
368
|
* @param port - Its server
|
|
369
369
|
* @param sessionId - `ses_…` from the end-of-turn frame
|
|
370
|
+
* @param isCurrent - Whether the subscription that asked is still the
|
|
371
|
+
* instance's (Issue #3733); checked after the read, right before the model
|
|
372
|
+
* is latched. False skips only the latch: the rows are still written (the
|
|
373
|
+
* turn did happen, and `requestId` keeps a later sync from doubling them)
|
|
370
374
|
* @returns How many rows were written
|
|
371
375
|
*/
|
|
372
|
-
function syncOpencodeV2History(target, port, sessionId) {
|
|
376
|
+
function syncOpencodeV2History(target, port, sessionId, isCurrent = () => true) {
|
|
373
377
|
return serialize((0, secrets_1.opencodeV2KeyOf)(target), async () => {
|
|
374
378
|
const instanceId = target.instanceId ?? target.cliToolId;
|
|
375
379
|
try {
|
|
@@ -395,7 +399,12 @@ function syncOpencodeV2History(target, port, sessionId) {
|
|
|
395
399
|
}
|
|
396
400
|
// Issue #2964: the model that answered, onto the hook latch the UI and
|
|
397
401
|
// `capture --json` read. Before the rows, so a failed write cannot cost it.
|
|
398
|
-
|
|
402
|
+
// Issue #3733: not for a subscription closed or replaced during the read —
|
|
403
|
+
// a restarted or stopped session would show the old model, and its change
|
|
404
|
+
// broadcast and Push (#2357) would fire for a session that is not there.
|
|
405
|
+
if (isCurrent()) {
|
|
406
|
+
(0, agent_event_state_1.recordAgentReportedModel)(target.worktreeId, tool_id_1.OPENCODE_V2_CLI_TOOL_ID, target.instanceId ?? tool_id_1.OPENCODE_V2_CLI_TOOL_ID, readLatestOpencodeV2AssistantModel(entries));
|
|
407
|
+
}
|
|
399
408
|
const closed = buildOpencodeV2TurnsFromMessages(entries, sessionId).filter((turn) => turn.closed);
|
|
400
409
|
const kept = closed.slice(-exports.MAX_OPENCODE_V2_SYNCED_TURNS);
|
|
401
410
|
let written = 0;
|
|
@@ -386,7 +386,7 @@ function deliver(state, frame) {
|
|
|
386
386
|
error: error instanceof Error ? error.message : String(error),
|
|
387
387
|
});
|
|
388
388
|
}
|
|
389
|
-
void recordOpencodeV2TurnEnd(state.target, state.port, frame);
|
|
389
|
+
void recordOpencodeV2TurnEnd(state.target, state.port, frame, () => isCurrentSubscription(state));
|
|
390
390
|
void refreshOpencodeV2UsageOnFrame(state.target, state.port, frame, () => isCurrentSubscription(state));
|
|
391
391
|
}
|
|
392
392
|
function isCurrentSubscription(state) {
|
|
@@ -429,16 +429,18 @@ function refreshOpencodeV2UsageOnFrame(target, port, frame, isCurrent = () => tr
|
|
|
429
429
|
*
|
|
430
430
|
* Exported for the tests, which drive frames through the path the stream does.
|
|
431
431
|
*
|
|
432
|
+
* @param isCurrent - Handed to `syncOpencodeV2History`, which skips the model
|
|
433
|
+
* latch when it is false after the read (Issue #3733)
|
|
432
434
|
* @returns The sync, or null when the frame ends no turn
|
|
433
435
|
*/
|
|
434
|
-
function recordOpencodeV2TurnEnd(target, port, frame) {
|
|
436
|
+
function recordOpencodeV2TurnEnd(target, port, frame, isCurrent = () => true) {
|
|
435
437
|
try {
|
|
436
438
|
if (!(0, history_1.isOpencodeV2TurnEndEventType)((0, mappers_1.frameType)(frame)))
|
|
437
439
|
return null;
|
|
438
440
|
const sessionId = (0, mappers_1.frameSessionId)(frame);
|
|
439
441
|
if (sessionId === null)
|
|
440
442
|
return null;
|
|
441
|
-
return (0, history_1.syncOpencodeV2History)(target, port, sessionId);
|
|
443
|
+
return (0, history_1.syncOpencodeV2History)(target, port, sessionId, isCurrent);
|
|
442
444
|
}
|
|
443
445
|
catch (error) {
|
|
444
446
|
logger.warn('opencode-v2-history-trigger-failed', {
|
|
@@ -41,6 +41,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
41
41
|
exports.ANTIGRAVITY_PERMISSION_RECEIPT_WINDOW_MS = void 0;
|
|
42
42
|
exports.recordAntigravityPermissionReceipt = recordAntigravityPermissionReceipt;
|
|
43
43
|
exports.hasRecentAntigravityPermissionReceipt = hasRecentAntigravityPermissionReceipt;
|
|
44
|
+
exports.getAntigravityPermissionReceiptAt = getAntigravityPermissionReceiptAt;
|
|
44
45
|
exports.resetAntigravityPermissionReceiptsForTests = resetAntigravityPermissionReceiptsForTests;
|
|
45
46
|
const auto_yes_state_1 = require("../../lib/auto-yes-state");
|
|
46
47
|
const global_state_1 = require("../global-state");
|
|
@@ -69,6 +70,12 @@ function pruneExpiredReceipts(now) {
|
|
|
69
70
|
receipts.delete(key);
|
|
70
71
|
}
|
|
71
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Per-instance episode state of the poller's reads (Issue #3767); the logic is in
|
|
75
|
+
* `antigravity-receipt-episodes.ts`. The Map lives here only so that
|
|
76
|
+
* {@link resetAntigravityPermissionReceiptsForTests} empties both records.
|
|
77
|
+
*/
|
|
78
|
+
const observations = (0, global_state_1.getOrInitGlobal)('__antigravityReceiptObservations', () => new Map());
|
|
72
79
|
/**
|
|
73
80
|
* Record that agy asked CommandMate about a tool call.
|
|
74
81
|
*
|
|
@@ -107,7 +114,15 @@ function hasRecentAntigravityPermissionReceipt(worktreeId, cliToolId, instanceId
|
|
|
107
114
|
return false;
|
|
108
115
|
return now - receipt.at <= exports.ANTIGRAVITY_PERMISSION_RECEIPT_WINDOW_MS;
|
|
109
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* The latest question's arrival time for this instance, kept past the window
|
|
119
|
+
* (Issue #3767), or null when none was ever received.
|
|
120
|
+
*/
|
|
121
|
+
function getAntigravityPermissionReceiptAt(worktreeId, cliToolId, instanceId) {
|
|
122
|
+
return receipts.get((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId))?.at ?? null;
|
|
123
|
+
}
|
|
110
124
|
/** Empty the record. Tests only: production entries age out on their own. */
|
|
111
125
|
function resetAntigravityPermissionReceiptsForTests() {
|
|
112
126
|
receipts.clear();
|
|
127
|
+
observations.clear();
|
|
113
128
|
}
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* When did an agy approval dialog first appear, and was it asked about in time?
|
|
4
|
+
* (Issue #3767)
|
|
5
|
+
*
|
|
6
|
+
* `hasRecentAntigravityPermissionReceipt` measures the window to the CLOCK OF THE
|
|
7
|
+
* TICK. agy draws a dialog some seconds after the hook reply, and the poller ticks
|
|
8
|
+
* every 5s after a response, so a dialog drawn 5.9s after the receipt was first
|
|
9
|
+
* read 8.7s after it, outside the 8s window, and no later receipt came to open
|
|
10
|
+
* it. The gate here judges the window to the dialog's first appearance instead
|
|
11
|
+
* (bounded by the last read that saw no dialog), which the poller makes possible
|
|
12
|
+
* by bracketing its reads with {@link beginAntigravityFrameRead} /
|
|
13
|
+
* {@link endAntigravityFrameRead}. See `antigravity-permission-receipts` for the
|
|
14
|
+
* receipt record itself.
|
|
15
|
+
*
|
|
16
|
+
* @module lib/polling/antigravity-receipt-episodes
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.ANTIGRAVITY_ANSWERED_DIALOG_GRACE_MS = exports.ANTIGRAVITY_PERMISSION_RECEIPT_OBSERVATION_SLACK_MS = void 0;
|
|
20
|
+
exports.beginAntigravityFrameRead = beginAntigravityFrameRead;
|
|
21
|
+
exports.endAntigravityFrameRead = endAntigravityFrameRead;
|
|
22
|
+
exports.markAntigravityAnswerSent = markAntigravityAnswerSent;
|
|
23
|
+
exports.getAntigravityAcceptedReceiptAt = getAntigravityAcceptedReceiptAt;
|
|
24
|
+
exports.getAntigravityReceiptVerdict = getAntigravityReceiptVerdict;
|
|
25
|
+
exports.judgeAntigravityPermissionReceipt = judgeAntigravityPermissionReceipt;
|
|
26
|
+
const auto_yes_state_1 = require("../../lib/auto-yes-state");
|
|
27
|
+
const global_state_1 = require("../global-state");
|
|
28
|
+
const antigravity_permission_receipts_1 = require("./antigravity-permission-receipts");
|
|
29
|
+
/**
|
|
30
|
+
* Extra time past the window that the FIRST tick to see a dialog may be after
|
|
31
|
+
* the receipt (Issue #3767). The dialog's real appearance is only known to lie
|
|
32
|
+
* between the last tick that saw none and the first that saw it; that gap is a
|
|
33
|
+
* poll interval (5s after a response), so the window is judged on the lower
|
|
34
|
+
* bound and the first sighting is capped at window + this slack.
|
|
35
|
+
*/
|
|
36
|
+
exports.ANTIGRAVITY_PERMISSION_RECEIPT_OBSERVATION_SLACK_MS = 5_000;
|
|
37
|
+
/**
|
|
38
|
+
* Longest gap between two poller reads over which an episode is carried
|
|
39
|
+
* (Issue #3767): the slowest tick (5s after a response) plus room for the
|
|
40
|
+
* capture. A longer gap (capture backoff, no session, Auto-Yes off and on) means
|
|
41
|
+
* nothing is known of the screen in between, so the episode is dropped and the
|
|
42
|
+
* next candidate is judged from its own first sighting.
|
|
43
|
+
*/
|
|
44
|
+
const MAX_READ_GAP_MS = exports.ANTIGRAVITY_PERMISSION_RECEIPT_OBSERVATION_SLACK_MS + 2_000;
|
|
45
|
+
/**
|
|
46
|
+
* How long after the poller SENT its answer to an accepted dialog (Issue #3789,
|
|
47
|
+
* {@link markAntigravityAnswerSent}) a dialog may still be on screen before it
|
|
48
|
+
* is reported: the window, the slack, and the cooldown the poller waits after
|
|
49
|
+
* an answer. Until then it is agy taking its time to take the dialog down, and
|
|
50
|
+
* stays `answered` (silent). Past it the keys did not clear the dialog, or a
|
|
51
|
+
* dialog with no question of its own replaced it between two reads (the screen
|
|
52
|
+
* cannot tell which), and it is `outlived` — withheld, and recorded.
|
|
53
|
+
*
|
|
54
|
+
* Written as the sum's value (8s + 5s + 5s, `COOLDOWN_INTERVAL_MS`), not the
|
|
55
|
+
* sum: tests that mock the receipts module without the window constant would
|
|
56
|
+
* fail at load. A unit test pins it to the sum.
|
|
57
|
+
*/
|
|
58
|
+
exports.ANTIGRAVITY_ANSWERED_DIALOG_GRACE_MS = 18_000;
|
|
59
|
+
/** Beyond this, a late dialog is read as "the hook stopped arriving" (#3767). */
|
|
60
|
+
const RECEIPT_LAPSED_AFTER_MS = 60_000;
|
|
61
|
+
const observations = (0, global_state_1.getOrInitGlobal)('__antigravityReceiptObservations', () => new Map());
|
|
62
|
+
const isTimeOrNull = (x) => x === null || (typeof x === 'number' && Number.isFinite(x));
|
|
63
|
+
/**
|
|
64
|
+
* The Map lives on globalThis and outlives a module reload, so an entry may have
|
|
65
|
+
* another shape. Such an entry is dropped (no episode: the plain tick test),
|
|
66
|
+
* never read as times — `undefined` would turn every comparison into NaN.
|
|
67
|
+
*/
|
|
68
|
+
function isObservation(v) {
|
|
69
|
+
if (typeof v !== 'object' || v === null)
|
|
70
|
+
return false;
|
|
71
|
+
const o = v;
|
|
72
|
+
return (typeof o.tracking === 'boolean' &&
|
|
73
|
+
typeof o.candidateSeen === 'boolean' &&
|
|
74
|
+
['firstSeenAt', 'clearAt', 'prevReadAt', 'lastReadAt', 'acceptedReceiptAt', 'answerSentAt', 'usedReceiptAt'].every(k => isTimeOrNull(o[k])) &&
|
|
75
|
+
(o.verdict === null || typeof o.verdict === 'object') &&
|
|
76
|
+
(o.answerInterrupted === undefined || typeof o.answerInterrupted === 'boolean'));
|
|
77
|
+
}
|
|
78
|
+
function existingObservation(key) {
|
|
79
|
+
const o = observations.get(key);
|
|
80
|
+
if (o === undefined)
|
|
81
|
+
return undefined;
|
|
82
|
+
if (isObservation(o))
|
|
83
|
+
return o;
|
|
84
|
+
observations.delete(key);
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
function observationOf(key) {
|
|
88
|
+
let o = existingObservation(key);
|
|
89
|
+
if (!o) {
|
|
90
|
+
o = {
|
|
91
|
+
tracking: false,
|
|
92
|
+
candidateSeen: false,
|
|
93
|
+
firstSeenAt: null,
|
|
94
|
+
clearAt: null,
|
|
95
|
+
prevReadAt: null,
|
|
96
|
+
lastReadAt: null,
|
|
97
|
+
acceptedReceiptAt: null,
|
|
98
|
+
answerSentAt: null,
|
|
99
|
+
answerInterrupted: false,
|
|
100
|
+
usedReceiptAt: null,
|
|
101
|
+
verdict: null,
|
|
102
|
+
};
|
|
103
|
+
observations.set(key, o);
|
|
104
|
+
}
|
|
105
|
+
return o;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Start one poller read of an agy frame (Issue #3767). Pair with
|
|
109
|
+
* {@link endAntigravityFrameRead}; the pair is what lets the gate judge the
|
|
110
|
+
* window by when the dialog first appeared rather than by the tick's clock.
|
|
111
|
+
*/
|
|
112
|
+
function beginAntigravityFrameRead(worktreeId, instanceId, now = Date.now()) {
|
|
113
|
+
const o = observationOf((0, auto_yes_state_1.buildCompositeKey)(worktreeId, 'antigravity', instanceId));
|
|
114
|
+
if (o.lastReadAt !== null && !(now - o.lastReadAt <= MAX_READ_GAP_MS)) {
|
|
115
|
+
// Reads stopped for a while: the dialog now on screen may not be the one
|
|
116
|
+
// the episode saw, nor did it appear right after the last clear read.
|
|
117
|
+
o.firstSeenAt = null;
|
|
118
|
+
o.clearAt = null;
|
|
119
|
+
o.acceptedReceiptAt = null;
|
|
120
|
+
o.answerSentAt = null;
|
|
121
|
+
o.answerInterrupted = false;
|
|
122
|
+
o.verdict = null;
|
|
123
|
+
}
|
|
124
|
+
o.tracking = true;
|
|
125
|
+
o.candidateSeen = false;
|
|
126
|
+
o.prevReadAt = o.lastReadAt;
|
|
127
|
+
o.lastReadAt = now;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* End the read. A read in which the gate never saw a prompt candidate closes the
|
|
131
|
+
* episode: the next candidate is a new dialog with its own first sighting.
|
|
132
|
+
*/
|
|
133
|
+
function endAntigravityFrameRead(worktreeId, instanceId, now = Date.now()) {
|
|
134
|
+
const o = existingObservation((0, auto_yes_state_1.buildCompositeKey)(worktreeId, 'antigravity', instanceId));
|
|
135
|
+
if (!o || !o.tracking || o.candidateSeen)
|
|
136
|
+
return;
|
|
137
|
+
o.firstSeenAt = null;
|
|
138
|
+
o.acceptedReceiptAt = null;
|
|
139
|
+
o.answerSentAt = null;
|
|
140
|
+
o.answerInterrupted = false;
|
|
141
|
+
o.verdict = null;
|
|
142
|
+
o.clearAt = now;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* The poller sent keys to the dialog the current episode accepted (Issue #3789):
|
|
146
|
+
* starts {@link ANTIGRAVITY_ANSWERED_DIALOG_GRACE_MS}. Called only after the send
|
|
147
|
+
* reached tmux; a tick that accepted but sent nothing never calls it, so its
|
|
148
|
+
* dialog is never reported as one that outlived an answer. No-op without an
|
|
149
|
+
* accepted episode.
|
|
150
|
+
*
|
|
151
|
+
* Issue #3796: also called, with `interrupted`, when the send was cut short
|
|
152
|
+
* after it began (stopped part-way, or failed) — some of its keys may be on the
|
|
153
|
+
* pane, and the receipt is spent either way. Without it such a dialog stayed
|
|
154
|
+
* `answered` (silent) for as long as it stayed up. Starting the grace only
|
|
155
|
+
* leads to `outlived`, which withholds: nothing is answered because of it.
|
|
156
|
+
*
|
|
157
|
+
* @param options.forReceiptAt - The episode the send was for
|
|
158
|
+
* ({@link getAntigravityAcceptedReceiptAt} read when it began). Given, only
|
|
159
|
+
* that episode is marked: a send that comes back — whole or cut short —
|
|
160
|
+
* after a stop → enable, when the successor already accepted a dialog on a
|
|
161
|
+
* newer receipt, must not start that dialog's grace or give it its own
|
|
162
|
+
* "cut short" (Issue #3796 review, review E for the whole send).
|
|
163
|
+
*/
|
|
164
|
+
function markAntigravityAnswerSent(worktreeId, instanceId, now = Date.now(), options = {}) {
|
|
165
|
+
const o = existingObservation((0, auto_yes_state_1.buildCompositeKey)(worktreeId, 'antigravity', instanceId));
|
|
166
|
+
if (!o || o.acceptedReceiptAt === null)
|
|
167
|
+
return;
|
|
168
|
+
if (options.forReceiptAt !== undefined && options.forReceiptAt !== o.acceptedReceiptAt)
|
|
169
|
+
return;
|
|
170
|
+
o.answerSentAt = now;
|
|
171
|
+
o.answerInterrupted = options.interrupted === true;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* The receipt (`at`) the current episode was accepted on, or null when none
|
|
175
|
+
* (Issue #3796): what identifies the episode a send is for.
|
|
176
|
+
*/
|
|
177
|
+
function getAntigravityAcceptedReceiptAt(worktreeId, instanceId) {
|
|
178
|
+
return existingObservation((0, auto_yes_state_1.buildCompositeKey)(worktreeId, 'antigravity', instanceId))?.acceptedReceiptAt ?? null;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* The verdict of the current episode's latest consultation, or null when no
|
|
182
|
+
* candidate dialog was read in the last tick (Issue #3767).
|
|
183
|
+
*/
|
|
184
|
+
function getAntigravityReceiptVerdict(worktreeId, instanceId) {
|
|
185
|
+
return existingObservation((0, auto_yes_state_1.buildCompositeKey)(worktreeId, 'antigravity', instanceId))?.verdict ?? null;
|
|
186
|
+
}
|
|
187
|
+
function causeFor(ageMs) {
|
|
188
|
+
if (ageMs === null)
|
|
189
|
+
return 'never';
|
|
190
|
+
return ageMs > RECEIPT_LAPSED_AFTER_MS ? 'lapsed' : 'late';
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* May the prompt candidate on this instance's frame be answered, judged by when
|
|
194
|
+
* the dialog first appeared (Issue #3767)?
|
|
195
|
+
*
|
|
196
|
+
* Replaces the tick-clock test of {@link hasRecentAntigravityPermissionReceipt}
|
|
197
|
+
* for the caller that answers: agy draws the dialog some seconds after the hook
|
|
198
|
+
* reply, and a 5s poll can first read it past the 8s window. The dialog is taken
|
|
199
|
+
* as appearing at the later of the last tick that saw none and the question's
|
|
200
|
+
* arrival. Still refused: a question that arrived after the dialog was already
|
|
201
|
+
* up, one older than the window by then, one already spent on another dialog,
|
|
202
|
+
* and none at all (a quotation follows no question).
|
|
203
|
+
*
|
|
204
|
+
* Without {@link beginAntigravityFrameRead} brackets there is no episode to
|
|
205
|
+
* remember, and this is exactly the old tick test.
|
|
206
|
+
*/
|
|
207
|
+
function judgeAntigravityPermissionReceipt(worktreeId, instanceId, nowOverride) {
|
|
208
|
+
const now = nowOverride ?? Date.now();
|
|
209
|
+
const key = (0, auto_yes_state_1.buildCompositeKey)(worktreeId, 'antigravity', instanceId);
|
|
210
|
+
const o = observationOf(key);
|
|
211
|
+
if (!o.tracking) {
|
|
212
|
+
// No bracketed reads: no episode to remember, the plain tick test.
|
|
213
|
+
const ok = nowOverride === undefined
|
|
214
|
+
? (0, antigravity_permission_receipts_1.hasRecentAntigravityPermissionReceipt)(worktreeId, 'antigravity', instanceId)
|
|
215
|
+
: (0, antigravity_permission_receipts_1.hasRecentAntigravityPermissionReceipt)(worktreeId, 'antigravity', instanceId, undefined, nowOverride);
|
|
216
|
+
return { ok, cause: ok ? null : 'never', lastReceiptAt: null, firstSeenAt: now, ageMs: null };
|
|
217
|
+
}
|
|
218
|
+
const lastReceiptAt = (0, antigravity_permission_receipts_1.getAntigravityPermissionReceiptAt)(worktreeId, 'antigravity', instanceId);
|
|
219
|
+
const sameRead = o.candidateSeen;
|
|
220
|
+
o.candidateSeen = true;
|
|
221
|
+
if (o.firstSeenAt === null)
|
|
222
|
+
o.firstSeenAt = now;
|
|
223
|
+
const firstSeenAt = o.firstSeenAt;
|
|
224
|
+
const ageMs = lastReceiptAt === null ? null : firstSeenAt - lastReceiptAt;
|
|
225
|
+
const verdict = (cause, age = ageMs) => {
|
|
226
|
+
const v = { ok: cause === null, cause, lastReceiptAt, firstSeenAt, ageMs: age };
|
|
227
|
+
o.verdict = v;
|
|
228
|
+
return v;
|
|
229
|
+
};
|
|
230
|
+
if (lastReceiptAt === null)
|
|
231
|
+
return verdict('never');
|
|
232
|
+
if (o.acceptedReceiptAt !== null && lastReceiptAt > o.acceptedReceiptAt) {
|
|
233
|
+
// A newer question while the answered dialog stayed up on every tick: the
|
|
234
|
+
// dialog it asked about replaced the old one between two reads. A new
|
|
235
|
+
// episode, which cannot have appeared before the previous read.
|
|
236
|
+
o.firstSeenAt = now;
|
|
237
|
+
o.clearAt = o.prevReadAt;
|
|
238
|
+
o.acceptedReceiptAt = null;
|
|
239
|
+
o.answerSentAt = null;
|
|
240
|
+
o.answerInterrupted = false;
|
|
241
|
+
return judgeAntigravityPermissionReceipt(worktreeId, instanceId, now);
|
|
242
|
+
}
|
|
243
|
+
if (o.acceptedReceiptAt === lastReceiptAt) {
|
|
244
|
+
// The read that accepted may consult the gate twice (the tool's reader, then
|
|
245
|
+
// the generic pass). A LATER tick over the same dialog is the old tick test:
|
|
246
|
+
// a dialog that outlives the answer is not answered again past the window.
|
|
247
|
+
// Withheld, but as `answered`: the caller records no no-hook-receipt for it.
|
|
248
|
+
if (sameRead || now - lastReceiptAt <= antigravity_permission_receipts_1.ANTIGRAVITY_PERMISSION_RECEIPT_WINDOW_MS)
|
|
249
|
+
return verdict(null);
|
|
250
|
+
// Issue #3789: not forever, though, once keys were sent. Past the grace they
|
|
251
|
+
// did not clear the dialog (or one with no question of its own replaced it),
|
|
252
|
+
// and staying silent would leave the session stopped with no record of why.
|
|
253
|
+
// Accepted but never sent stays `answered`: the poller's own reason for not
|
|
254
|
+
// sending (partial-answer, …) is the one to keep, not overwrite. Written as
|
|
255
|
+
// `!(… <= …)` so that a NaN time reports.
|
|
256
|
+
if (o.answerSentAt !== null && !(now - o.answerSentAt <= exports.ANTIGRAVITY_ANSWERED_DIALOG_GRACE_MS)) {
|
|
257
|
+
const v = verdict('outlived');
|
|
258
|
+
if (o.answerInterrupted === true)
|
|
259
|
+
v.answerInterrupted = true;
|
|
260
|
+
return v;
|
|
261
|
+
}
|
|
262
|
+
return verdict('answered');
|
|
263
|
+
}
|
|
264
|
+
if (o.usedReceiptAt === lastReceiptAt)
|
|
265
|
+
return verdict('used');
|
|
266
|
+
if (lastReceiptAt > firstSeenAt)
|
|
267
|
+
return verdict('predates');
|
|
268
|
+
// The clear read bounds the appearance only when it is the read right before
|
|
269
|
+
// the first sighting; otherwise the dialog may have been up since long before.
|
|
270
|
+
const clearBound = o.clearAt !== null && firstSeenAt - o.clearAt <= MAX_READ_GAP_MS ? o.clearAt : firstSeenAt;
|
|
271
|
+
const appearedAfter = Math.max(clearBound, lastReceiptAt);
|
|
272
|
+
// Written as `!(… <= …)` so that a NaN withholds.
|
|
273
|
+
if (!(appearedAfter - lastReceiptAt <= antigravity_permission_receipts_1.ANTIGRAVITY_PERMISSION_RECEIPT_WINDOW_MS) ||
|
|
274
|
+
!(firstSeenAt - lastReceiptAt <=
|
|
275
|
+
antigravity_permission_receipts_1.ANTIGRAVITY_PERMISSION_RECEIPT_WINDOW_MS + exports.ANTIGRAVITY_PERMISSION_RECEIPT_OBSERVATION_SLACK_MS)) {
|
|
276
|
+
return verdict(causeFor(ageMs));
|
|
277
|
+
}
|
|
278
|
+
o.acceptedReceiptAt = lastReceiptAt;
|
|
279
|
+
o.usedReceiptAt = lastReceiptAt;
|
|
280
|
+
return verdict(null);
|
|
281
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The `AskUserQuestion` confirm pages Auto-Yes leaves to a human (Issue #3497,
|
|
4
|
+
* Issue #3748).
|
|
5
|
+
*
|
|
6
|
+
* `Submit` on these pages picks nothing: it commits whatever stands as the
|
|
7
|
+
* answers. On Kewton/Musunest#283 that was the worker's own proposal, which the
|
|
8
|
+
* worker then implemented as though a human had approved it. So neither the
|
|
9
|
+
* server's poller (`suppressIfNotOursToAnswer`, step 3.3) nor the browser's
|
|
10
|
+
* fallback (`useAutoYes`, which answers only while no server poller runs) sends
|
|
11
|
+
* a key to them.
|
|
12
|
+
*
|
|
13
|
+
* Server-only: `normalizeFrame` and the tools' detectors reach `logger` → `env`
|
|
14
|
+
* → `fs`. The browser judges by the prompt's options instead
|
|
15
|
+
* (`polling/auto-yes-confirm-shape`).
|
|
16
|
+
*
|
|
17
|
+
* @module lib/polling/auto-yes-confirm-page
|
|
18
|
+
*/
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.isAutoYesDeclinedConfirmPage = isAutoYesDeclinedConfirmPage;
|
|
21
|
+
exports.isAutoYesDeclinedConfirmFrame = isAutoYesDeclinedConfirmFrame;
|
|
22
|
+
const frame_1 = require("../detection/tools/frame");
|
|
23
|
+
const selection_shape_1 = require("../detection/tools/command-code/selection-shape");
|
|
24
|
+
const detect_1 = require("../detection/tools/claude/detect");
|
|
25
|
+
/**
|
|
26
|
+
* Is this frame one of the confirm pages Auto-Yes does not answer?
|
|
27
|
+
*
|
|
28
|
+
* - `command-code`: `❯ 1. Submit` / `2. Cancel` under the question's tab strip,
|
|
29
|
+
* with or without the back hint (#3497, `isCommandCodeQuestionConfirmPage`).
|
|
30
|
+
* - `claude`: `Ready to submit your answers?` / `❯ 1. Submit answers` /
|
|
31
|
+
* `2. Cancel` (#3748, `isClaudeAskUserQuestionConfirmPage`).
|
|
32
|
+
*
|
|
33
|
+
* Every other tool: false — none has a measured confirm page.
|
|
34
|
+
*
|
|
35
|
+
* @param frame - The tick's one normalised frame (Issue #3183)
|
|
36
|
+
*/
|
|
37
|
+
function isAutoYesDeclinedConfirmPage(cliToolId, frame) {
|
|
38
|
+
// An empty capture draws no page (and Claude's reading walks the rows).
|
|
39
|
+
if (!frame.raw)
|
|
40
|
+
return false;
|
|
41
|
+
if (cliToolId === 'command-code')
|
|
42
|
+
return (0, selection_shape_1.isCommandCodeQuestionConfirmPage)(frame.raw);
|
|
43
|
+
if (cliToolId === 'claude')
|
|
44
|
+
return (0, detect_1.isClaudeAskUserQuestionConfirmPage)(frame);
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* {@link isAutoYesDeclinedConfirmPage} on a capture as text. False for no frame.
|
|
49
|
+
*/
|
|
50
|
+
function isAutoYesDeclinedConfirmFrame(cliToolId, output) {
|
|
51
|
+
if (!output)
|
|
52
|
+
return false;
|
|
53
|
+
if (cliToolId !== 'command-code' && cliToolId !== 'claude')
|
|
54
|
+
return false;
|
|
55
|
+
return isAutoYesDeclinedConfirmPage(cliToolId, (0, frame_1.normalizeFrame)(output, cliToolId));
|
|
56
|
+
}
|
|
@@ -392,10 +392,17 @@ function assessPromptAnswerability(cliToolId, frame) {
|
|
|
392
392
|
},
|
|
393
393
|
};
|
|
394
394
|
}
|
|
395
|
+
// Issue #3808: a numbered agy screen agy's reader declines (the login-method
|
|
396
|
+
// screen, a permission dialog whose `tab Amend` footer is cut or off the
|
|
397
|
+
// pane) is no prompt — not the generic parser's reading of its `1. / 2.` rows.
|
|
398
|
+
const declinedAgyScreen = cliToolId === 'antigravity' && toolDialog === null
|
|
399
|
+
&& (0, dialog_1.isAntigravityUnvouchedNumberedScreen)(cleanOutput);
|
|
395
400
|
const isCommandCodeQuestion = commandCodeQuestion.kind === 'prompt';
|
|
396
401
|
const candidate = (commandCodeQuestion.kind === 'prompt' ? commandCodeQuestion.prompt : null)
|
|
397
402
|
?? toolDialog
|
|
398
|
-
?? (
|
|
403
|
+
?? (declinedAgyScreen
|
|
404
|
+
? { isPrompt: false, cleanContent: cleanOutput }
|
|
405
|
+
: (0, prompt_detector_1.detectPrompt)(cleanOutput, (0, cli_patterns_1.buildDetectPromptOptions)(cliToolId)));
|
|
399
406
|
// Issue #3183: one frame, normalised once from the capture, for the
|
|
400
407
|
// quotation veto and the presence gate alike — the reading the status chain
|
|
401
408
|
// and the Auto-Yes poller apply, so Send is offered exactly when they agree.
|