commandmate 0.46.0 → 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 +417 -410
- package/.next/app-path-routes-manifest.json +22 -21
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +12 -12
- package/.next/react-loadable-manifest.json +2 -2
- 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 +9 -9
- 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.js +9 -9
- 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 +22 -21
- package/.next/server/chunks/1210.js +1 -1
- package/.next/server/chunks/1501.js +2 -2
- 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 +3 -3
- 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 +12 -12
- package/.next/server/chunks/8728.js +2 -2
- package/.next/server/chunks/8791.js +1 -1
- package/.next/server/chunks/8918.js +6 -6
- 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 +3 -2
- package/.next/server/chunks/9731.js +3 -3
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{2407-acb644c5487e1720.js → 2407-b2f524f99f7fc353.js} +1 -1
- package/.next/static/chunks/{2717.21abf5b6bbd45520.js → 2717.1583400c272dc1d9.js} +1 -1
- package/.next/static/chunks/5371-a549a0d2c2044d41.js +1 -0
- package/.next/static/chunks/5794-80ac3f06f098ea29.js +1 -0
- package/.next/static/chunks/602-1c1488959215e140.js +1 -0
- package/.next/static/chunks/{8407-9a72e6f07c5d5458.js → 8407-155f84e5ba05f1d5.js} +1 -1
- 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/static/chunks/{webpack-c0b821f340afdebf.js → webpack-468b7b33030234b3.js} +1 -1
- 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 +113 -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 +62 -6
- 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 +55 -1
- package/dist/lib/polling/auto-yes-suppression-reason.d.ts.map +1 -1
- package/dist/lib/polling/auto-yes-suppression-reason.js +20 -0
- 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/assistant-response-saver.js +13 -0
- package/dist/server/src/lib/auto-yes-lifecycle.js +28 -2
- package/dist/server/src/lib/auto-yes-poller.js +593 -78
- 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/conversation-logger.js +14 -2
- package/dist/server/src/lib/db/chat-db.js +2 -1
- 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/history/user-turn-recorder.js +14 -0
- package/dist/server/src/lib/hooks/sources/antigravity/history.js +28 -0
- package/dist/server/src/lib/hooks/sources/claude/history.js +7 -0
- package/dist/server/src/lib/hooks/sources/codex/history.js +7 -0
- package/dist/server/src/lib/hooks/sources/command-code/history.js +7 -0
- 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/hooks/sources/transcript-history.js +34 -0
- package/dist/server/src/lib/log-manager.js +7 -2
- 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-enter-fallback-state.js +22 -3
- package/dist/server/src/lib/polling/auto-yes-policy.js +61 -7
- package/dist/server/src/lib/polling/auto-yes-poller-state.js +234 -0
- 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 +20 -0
- package/dist/server/src/lib/polling/auto-yes-suppression-state.js +10 -0
- package/dist/server/src/lib/polling/pending-scraped-response.js +119 -3
- package/dist/server/src/lib/polling/poller-owner.js +110 -0
- package/dist/server/src/lib/polling/response-checker-dialog-gate.js +2 -2
- package/dist/server/src/lib/polling/response-checker.js +211 -39
- package/dist/server/src/lib/polling/response-dedup.js +8 -0
- package/dist/server/src/lib/polling/response-poller-core.js +226 -75
- package/dist/server/src/lib/polling/structured-history-gate.js +20 -1
- package/dist/server/src/lib/prompt-answer-sender.js +59 -12
- 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/realtime/terminal-broadcast.js +14 -0
- 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/chat-turn-progress.js +57 -6
- package/dist/server/src/lib/session/cli-session.js +38 -3
- package/dist/server/src/lib/session/current-output-builder.js +19 -0
- 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 +85 -11
- package/dist/server/src/lib/timer-manager.js +7 -0
- 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 +28 -2
- package/dist/server/src/lib/verification/env-clean-gate.js +30 -2
- 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.46.1.json +40 -0
- 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/3718.js +0 -1
- package/.next/server/chunks/4837.js +0 -14
- package/.next/server/chunks/5625.js +0 -25
- 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-a94ed618148287a0.js +0 -1
- package/.next/static/chunks/5794-947fb4934d8be193.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-ae30ce63569c22be.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-2eb1d0fd0a077b7e.js +0 -1
- /package/.next/static/{zI2nQ6WKboSbFbMF4EtrJ → b5BiQC9F6r_XFPdA9cuSj}/_buildManifest.js +0 -0
- /package/.next/static/{zI2nQ6WKboSbFbMF4EtrJ → b5BiQC9F6r_XFPdA9cuSj}/_ssgManifest.js +0 -0
|
@@ -8,8 +8,20 @@
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.promptFrameKey = promptFrameKey;
|
|
10
10
|
exports.warnOncePerFrame = warnOncePerFrame;
|
|
11
|
+
exports.partialAnswerScreenKey = partialAnswerScreenKey;
|
|
12
|
+
exports.getPartialAnswer = getPartialAnswer;
|
|
13
|
+
exports.forgetPartialAnswer = forgetPartialAnswer;
|
|
14
|
+
exports.forgetPartialAnswersByWorktree = forgetPartialAnswersByWorktree;
|
|
15
|
+
exports.clearPartialAnswers = clearPartialAnswers;
|
|
16
|
+
exports.beginSendAttempt = beginSendAttempt;
|
|
17
|
+
exports.settleSendAttempt = settleSendAttempt;
|
|
18
|
+
exports.hasMovedSendInFlight = hasMovedSendInFlight;
|
|
19
|
+
exports.movePartialAnswers = movePartialAnswers;
|
|
11
20
|
const prompt_key_1 = require("../detection/prompt-key");
|
|
12
21
|
const logger_1 = require("../../lib/logger");
|
|
22
|
+
const auto_yes_state_1 = require("../auto-yes-state");
|
|
23
|
+
const global_state_1 = require("../global-state");
|
|
24
|
+
const auto_yes_enter_fallback_state_1 = require("./auto-yes-enter-fallback-state");
|
|
13
25
|
const logger = (0, logger_1.createLogger)('auto-yes-poller');
|
|
14
26
|
/**
|
|
15
27
|
* Issue #2995: what makes two ticks "the same prompt" for `warnOncePerFrame`.
|
|
@@ -50,3 +62,225 @@ function warnOncePerFrame(pollerState, frameKey, event, fields) {
|
|
|
50
62
|
pollerState.lastSkipWarnKey = key;
|
|
51
63
|
logger.warn(event, fields);
|
|
52
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* Which prompt a stopped answer is about (Issue #3706): the type, the question,
|
|
67
|
+
* the option labels and `approvalTarget` — what {@link promptFrameKey} tells
|
|
68
|
+
* apart — but NOT where the cursor is. The keys that were sent may have moved
|
|
69
|
+
* the cursor themselves (a `Down` whose Enter was withheld), and that must not
|
|
70
|
+
* make the same list read as a new one; a different list or a different command
|
|
71
|
+
* under the same question is a new prompt and is answered.
|
|
72
|
+
*/
|
|
73
|
+
function partialAnswerScreenKey(promptData) {
|
|
74
|
+
const options = promptData.type === 'multiple_choice'
|
|
75
|
+
? promptData.options.map((o) => `${o.number}.${o.label}`).join('\n')
|
|
76
|
+
: promptData.options.join('\n');
|
|
77
|
+
return [(0, prompt_key_1.generatePromptKey)(promptData), options, withoutCursorMarks(promptData.approvalTarget ?? '')].join('\u0000');
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* `approvalTarget` with the cursor taken out: the generic parser copies the
|
|
81
|
+
* option panel into it, `❯` row included, so a moved cursor would otherwise
|
|
82
|
+
* read as another prompt. Leading indentation goes too — the cursor row is the
|
|
83
|
+
* one indented differently.
|
|
84
|
+
*/
|
|
85
|
+
function withoutCursorMarks(text) {
|
|
86
|
+
return text
|
|
87
|
+
.split('\n')
|
|
88
|
+
.map((line) => line.replace(/^[\s\u276F\u203A>\u25B6\u25BA\u25CF\u25CB\u25C9\u2192]+/u, ''))
|
|
89
|
+
.join('\n');
|
|
90
|
+
}
|
|
91
|
+
/** compositeKey -> the answer stopped part-way. globalThis for hot reload (#153). */
|
|
92
|
+
const partialAnswers = (0, global_state_1.getOrInitGlobal)('__autoYesPartialAnswers', () => new Map());
|
|
93
|
+
/**
|
|
94
|
+
* The answer stopped part-way that still applies: same session epoch, and the
|
|
95
|
+
* caller checks the prompt. Null when none, or when it was about another session.
|
|
96
|
+
*/
|
|
97
|
+
function getPartialAnswer(compositeKey, epoch) {
|
|
98
|
+
const partial = partialAnswers.get(compositeKey);
|
|
99
|
+
if (!partial)
|
|
100
|
+
return null;
|
|
101
|
+
if (partial.epoch !== epoch) {
|
|
102
|
+
partialAnswers.delete(compositeKey);
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
return partial;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Forget it: the prompt left the screen, another prompt came up, or the session ended.
|
|
109
|
+
*
|
|
110
|
+
* The sends still in flight that record under this key — moved here or not —
|
|
111
|
+
* are expired too (Issue #3713, re-instruction 2): they were registered before
|
|
112
|
+
* the screen they were typing at was seen gone, so their stop, coming back
|
|
113
|
+
* later, must not bring the memory back and leave the next confirmation of the
|
|
114
|
+
* same command unanswered. A send registered after this call is a new attempt
|
|
115
|
+
* and records as before. Expiring is the mark: it drops the attempt from the
|
|
116
|
+
* registry, so no per-key "forgotten up to seq" state has to outlive it.
|
|
117
|
+
*
|
|
118
|
+
* @param screenKey - Given when the memory is dropped because ANOTHER prompt is
|
|
119
|
+
* on screen (re-instruction 3): only the sends at the forgotten memory's
|
|
120
|
+
* screen are expired. A send at the screen now shown (Y, carried here by a
|
|
121
|
+
* move while still in flight) stays — it keeps the successor off Y, and its
|
|
122
|
+
* stop is still remembered when it comes back. Omitted (the prompt left the
|
|
123
|
+
* screen), every send under the key is expired.
|
|
124
|
+
*/
|
|
125
|
+
function forgetPartialAnswer(compositeKey, screenKey) {
|
|
126
|
+
partialAnswers.delete(compositeKey);
|
|
127
|
+
for (const attempt of [...sendAttempts]) {
|
|
128
|
+
if (attempt.recordKey !== compositeKey)
|
|
129
|
+
continue;
|
|
130
|
+
if (screenKey !== undefined && attempt.screenKey !== screenKey)
|
|
131
|
+
continue;
|
|
132
|
+
expireSendAttempt(attempt);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* {@link forgetPartialAnswer} for every instance of a worktree, and the sends
|
|
137
|
+
* still in flight there are expired (Issue #3713): a slow tick that comes back
|
|
138
|
+
* after the worktree's sessions went away records nothing. For the worktree
|
|
139
|
+
* being deleted only; disabling every agent keeps both (`stopAutoYesPollingByWorktree`'s
|
|
140
|
+
* `keepPartialAnswers`).
|
|
141
|
+
*/
|
|
142
|
+
function forgetPartialAnswersByWorktree(worktreeId) {
|
|
143
|
+
for (const key of (0, auto_yes_state_1.filterCompositeKeysByWorktree)([...partialAnswers.keys()], worktreeId)) {
|
|
144
|
+
partialAnswers.delete(key);
|
|
145
|
+
}
|
|
146
|
+
const inWorktree = new Set((0, auto_yes_state_1.filterCompositeKeysByWorktree)([...sendAttempts].map((attempt) => attempt.recordKey), worktreeId));
|
|
147
|
+
for (const attempt of [...sendAttempts]) {
|
|
148
|
+
if (inWorktree.has(attempt.recordKey))
|
|
149
|
+
expireSendAttempt(attempt);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/** Forget every one, and expire every send in flight: server shutdown, and a test seam. */
|
|
153
|
+
function clearPartialAnswers() {
|
|
154
|
+
partialAnswers.clear();
|
|
155
|
+
for (const attempt of [...sendAttempts])
|
|
156
|
+
expireSendAttempt(attempt);
|
|
157
|
+
}
|
|
158
|
+
/** The sends in flight. globalThis for hot reload (#153), like the Map above. */
|
|
159
|
+
const sendAttempts = (0, global_state_1.getOrInitGlobal)('__autoYesSendAttempts', () => new Set());
|
|
160
|
+
const sendAttemptSeq = (0, global_state_1.getOrInitGlobal)('__autoYesSendAttemptSeq', () => ({ last: 0 }));
|
|
161
|
+
/** Register a send about to start (the poller, before `sendPromptAnswer`). */
|
|
162
|
+
function beginSendAttempt(compositeKey, screenKey, epoch) {
|
|
163
|
+
const attempt = {
|
|
164
|
+
seq: ++sendAttemptSeq.last,
|
|
165
|
+
screenKey,
|
|
166
|
+
recordKey: compositeKey,
|
|
167
|
+
recordEpoch: epoch,
|
|
168
|
+
moved: false,
|
|
169
|
+
state: 'pending',
|
|
170
|
+
};
|
|
171
|
+
sendAttempts.add(attempt);
|
|
172
|
+
return attempt;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* The send came back. `keysSent` — it was stopped with keys already on the
|
|
176
|
+
* pane — records the partial answer under the attempt's key as it is now, when
|
|
177
|
+
* that key's session is still the one the keys went to; otherwise (sent in
|
|
178
|
+
* full, stopped before any key, or failed) only the attempt itself is removed.
|
|
179
|
+
* A second call, or a call on an expired attempt, does nothing.
|
|
180
|
+
*/
|
|
181
|
+
function settleSendAttempt(attempt, keysSent, at = Date.now()) {
|
|
182
|
+
if (attempt.state !== 'pending')
|
|
183
|
+
return;
|
|
184
|
+
attempt.state = 'settled';
|
|
185
|
+
sendAttempts.delete(attempt);
|
|
186
|
+
if (!keysSent)
|
|
187
|
+
return;
|
|
188
|
+
// A relaunch since (`beginAgentSession`): the process the keys went to is gone.
|
|
189
|
+
if ((0, auto_yes_enter_fallback_state_1.getEnterFallbackSessionEpoch)(attempt.recordKey) !== attempt.recordEpoch)
|
|
190
|
+
return;
|
|
191
|
+
// A send registered later (the successor's, after a move) already recorded
|
|
192
|
+
// the same session's newer screen: that is what is in the input now.
|
|
193
|
+
const recorded = partialAnswers.get(attempt.recordKey);
|
|
194
|
+
if (recorded !== undefined && recorded.epoch === attempt.recordEpoch && recorded.seq > attempt.seq)
|
|
195
|
+
return;
|
|
196
|
+
partialAnswers.set(attempt.recordKey, {
|
|
197
|
+
screenKey: attempt.screenKey,
|
|
198
|
+
epoch: attempt.recordEpoch,
|
|
199
|
+
at,
|
|
200
|
+
seq: attempt.seq,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
function expireSendAttempt(attempt) {
|
|
204
|
+
if (attempt.state === 'pending')
|
|
205
|
+
attempt.state = 'expired';
|
|
206
|
+
sendAttempts.delete(attempt);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Is a send that a worktree ID move carried to `compositeKey` still in flight
|
|
210
|
+
* at this screen of this session (Issue #3713)? Its keys may already be on the
|
|
211
|
+
* pane, so the poller under the new key does not type at the same prompt until
|
|
212
|
+
* it comes back. Sends that were not moved are not counted: the paths without a
|
|
213
|
+
* move stay as they were.
|
|
214
|
+
*/
|
|
215
|
+
function hasMovedSendInFlight(compositeKey, epoch, screenKey) {
|
|
216
|
+
for (const attempt of sendAttempts) {
|
|
217
|
+
if (attempt.moved &&
|
|
218
|
+
attempt.recordKey === compositeKey &&
|
|
219
|
+
attempt.recordEpoch === epoch &&
|
|
220
|
+
attempt.screenKey === screenKey) {
|
|
221
|
+
return true;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return false;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Carry the partial answers and the sends in flight of the sessions a worktree
|
|
228
|
+
* ID move renamed to their new keys (Issue #3713). Synchronous: the caller runs
|
|
229
|
+
* it right after the renames, before any poller restarts.
|
|
230
|
+
*
|
|
231
|
+
* Only what belongs to the session that moved goes: the source's epoch must
|
|
232
|
+
* still be `sourceEpoch`, and so must the record's. Every source is read before
|
|
233
|
+
* any destination is written, so a swap (A↔B) or a chain (A→B, B→C) moves each
|
|
234
|
+
* record once, with its own session. At a destination, what was recorded for
|
|
235
|
+
* the session that used to have that name is dropped — its process is not the
|
|
236
|
+
* one now there. The epochs themselves (and the Enter fallback's record) are not
|
|
237
|
+
* moved: a record takes the destination key's current epoch.
|
|
238
|
+
*
|
|
239
|
+
* @param moves - Only the renames that succeeded in both stages
|
|
240
|
+
* @returns The new keys that received a partial answer or a send in flight
|
|
241
|
+
*/
|
|
242
|
+
function movePartialAnswers(moves) {
|
|
243
|
+
const carried = moves
|
|
244
|
+
.filter((move) => move.oldKey !== move.newKey)
|
|
245
|
+
.map((move) => {
|
|
246
|
+
const current = (0, auto_yes_enter_fallback_state_1.getEnterFallbackSessionEpoch)(move.oldKey) === move.sourceEpoch;
|
|
247
|
+
const partial = partialAnswers.get(move.oldKey);
|
|
248
|
+
return {
|
|
249
|
+
move,
|
|
250
|
+
partial: current && partial !== undefined && partial.epoch === move.sourceEpoch ? partial : null,
|
|
251
|
+
attempts: current
|
|
252
|
+
? [...sendAttempts].filter((attempt) => attempt.recordKey === move.oldKey && attempt.recordEpoch === move.sourceEpoch)
|
|
253
|
+
: [],
|
|
254
|
+
};
|
|
255
|
+
});
|
|
256
|
+
const carriedAttempts = new Set(carried.flatMap((entry) => entry.attempts));
|
|
257
|
+
// Detach every source first — only what is carried: a record the epochs
|
|
258
|
+
// left out (a session begun under the old key while the renames ran) stays.
|
|
259
|
+
for (const { move, partial } of carried) {
|
|
260
|
+
if (partial !== null && partialAnswers.get(move.oldKey) === partial)
|
|
261
|
+
partialAnswers.delete(move.oldKey);
|
|
262
|
+
}
|
|
263
|
+
// The destinations' previous sessions' records.
|
|
264
|
+
for (const { move } of carried) {
|
|
265
|
+
partialAnswers.delete(move.newKey);
|
|
266
|
+
for (const attempt of [...sendAttempts]) {
|
|
267
|
+
if (attempt.recordKey === move.newKey && !carriedAttempts.has(attempt))
|
|
268
|
+
expireSendAttempt(attempt);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
// Then arrive.
|
|
272
|
+
const received = [];
|
|
273
|
+
for (const { move, partial, attempts } of carried) {
|
|
274
|
+
const epoch = (0, auto_yes_enter_fallback_state_1.getEnterFallbackSessionEpoch)(move.newKey);
|
|
275
|
+
if (partial !== null)
|
|
276
|
+
partialAnswers.set(move.newKey, { ...partial, epoch });
|
|
277
|
+
for (const attempt of attempts) {
|
|
278
|
+
attempt.recordKey = move.newKey;
|
|
279
|
+
attempt.recordEpoch = epoch;
|
|
280
|
+
attempt.moved = true;
|
|
281
|
+
}
|
|
282
|
+
if (partial !== null || attempts.length > 0)
|
|
283
|
+
received.push(move.newKey);
|
|
284
|
+
}
|
|
285
|
+
return received;
|
|
286
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The reason a poller stop is made for, when the stop function is called
|
|
4
|
+
* without one (Issue #3730).
|
|
5
|
+
*
|
|
6
|
+
* `stopAutoYesPolling(compositeKey, reason)` takes the reason as an argument,
|
|
7
|
+
* and every direct caller passes it. The lifecycle table
|
|
8
|
+
* (`lib/auto-yes-lifecycle`) cannot: it reaches the poller through the
|
|
9
|
+
* `auto-yes-manager` barrel, whose callers' tests mock it and pin the exact
|
|
10
|
+
* arguments (`stopAutoYesPolling(key)`, `stopAutoYesPollingByWorktree(id)`).
|
|
11
|
+
* So the table names its event here, around the call, and the poller reads it
|
|
12
|
+
* when no argument came. Synchronous only: the scope ends when `fn` returns.
|
|
13
|
+
*
|
|
14
|
+
* A module of its own, not part of the barrel, so mocking the barrel never
|
|
15
|
+
* mocks this away.
|
|
16
|
+
*
|
|
17
|
+
* @module lib/polling/auto-yes-poller-stop-reason
|
|
18
|
+
*/
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.withPollerStopReason = withPollerStopReason;
|
|
21
|
+
exports.resolvePollerStopReason = resolvePollerStopReason;
|
|
22
|
+
let scopedReason = null;
|
|
23
|
+
/**
|
|
24
|
+
* Run `fn` with `reason` as the reason of every poller stop it makes that
|
|
25
|
+
* names none itself.
|
|
26
|
+
*
|
|
27
|
+
* @param reason - Why the pollers are being stopped
|
|
28
|
+
* @param fn - The synchronous stop call(s)
|
|
29
|
+
* @returns What `fn` returns
|
|
30
|
+
*/
|
|
31
|
+
function withPollerStopReason(reason, fn) {
|
|
32
|
+
const previous = scopedReason;
|
|
33
|
+
scopedReason = reason;
|
|
34
|
+
try {
|
|
35
|
+
return fn();
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
scopedReason = previous;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The reason to log for a stop: the explicit one, else the scope's, else
|
|
43
|
+
* `fallback`.
|
|
44
|
+
*
|
|
45
|
+
* @param explicit - The reason the caller passed, if any
|
|
46
|
+
* @param fallback - What to answer when neither says
|
|
47
|
+
*/
|
|
48
|
+
function resolvePollerStopReason(explicit, fallback) {
|
|
49
|
+
return explicit ?? scopedReason ?? fallback;
|
|
50
|
+
}
|
|
@@ -5,11 +5,22 @@
|
|
|
5
5
|
* auto-yes-poller.ts (cycle) or `../tmux/tmux` (tmux import allowlist).
|
|
6
6
|
*/
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.MAX_LOGGED_QUESTION_LENGTH = exports.COPILOT_FOLDER_TRUST_LAUNCH_DIALOG_ID = void 0;
|
|
8
9
|
exports.suppressAndWarnOnce = suppressAndWarnOnce;
|
|
10
|
+
exports.truncateForLog = truncateForLog;
|
|
9
11
|
exports.suppressIfNotOursToAnswer = suppressIfNotOursToAnswer;
|
|
10
12
|
exports.suppressUnclassifiedFrame = suppressUnclassifiedFrame;
|
|
13
|
+
exports.suppressAntigravityTrustScreen = suppressAntigravityTrustScreen;
|
|
11
14
|
const detect_1 = require("../detection/tools/codex/detect");
|
|
12
15
|
const cli_patterns_1 = require("../detection/cli-patterns");
|
|
16
|
+
const patterns_1 = require("../detection/tools/antigravity/patterns");
|
|
17
|
+
const patterns_2 = require("../detection/tools/copilot/patterns");
|
|
18
|
+
const antigravity_startup_trust_1 = require("../cli-tools/antigravity-startup-trust");
|
|
19
|
+
const launch_dialog_1 = require("../cli-tools/launch-dialog");
|
|
20
|
+
const launch_window_1 = require("../cli-tools/launch-window");
|
|
21
|
+
const session_name_1 = require("../cli-tools/session-name");
|
|
22
|
+
const auto_yes_suppression_reason_1 = require("./auto-yes-suppression-reason");
|
|
23
|
+
const auto_yes_confirm_page_1 = require("./auto-yes-confirm-page");
|
|
13
24
|
const auto_yes_suppression_state_1 = require("./auto-yes-suppression-state");
|
|
14
25
|
const auto_yes_dialog_gate_1 = require("./auto-yes-dialog-gate");
|
|
15
26
|
const auto_yes_poller_state_1 = require("./auto-yes-poller-state");
|
|
@@ -34,11 +45,128 @@ function suppressAndWarnOnce(prompt, suppression, warnFrameKey, event, detail) {
|
|
|
34
45
|
...detail,
|
|
35
46
|
});
|
|
36
47
|
}
|
|
48
|
+
/** The `dialog` that copilot's folder-trust suppression records (Issue #3790). */
|
|
49
|
+
exports.COPILOT_FOLDER_TRUST_LAUNCH_DIALOG_ID = 'copilot-folder-trust';
|
|
50
|
+
/** How much of a prompt's question a log line carries (Issue #3497). */
|
|
51
|
+
exports.MAX_LOGGED_QUESTION_LENGTH = 500;
|
|
37
52
|
/**
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
|
|
41
|
-
|
|
53
|
+
* `question` cut to {@link MAX_LOGGED_QUESTION_LENGTH}, for a log line.
|
|
54
|
+
* Exported for `poller:response-sent` (Issue #3748).
|
|
55
|
+
*/
|
|
56
|
+
function truncateForLog(question) {
|
|
57
|
+
return question.length > exports.MAX_LOGGED_QUESTION_LENGTH
|
|
58
|
+
? `${question.slice(0, exports.MAX_LOGGED_QUESTION_LENGTH)}…`
|
|
59
|
+
: question;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Whether the launch still owns its startup confirmation for this instance:
|
|
63
|
+
* its window is open (Issue #3776), or it pressed the confirming key less than
|
|
64
|
+
* `LAUNCH_DIALOG_PRESS_SETTLE_MS` ago and the agent may not have redrawn yet —
|
|
65
|
+
* the window can close in between (Issue #3790).
|
|
66
|
+
*/
|
|
67
|
+
function isLaunchStillAnswering(cliToolId, prompt) {
|
|
68
|
+
let sessionName;
|
|
69
|
+
try {
|
|
70
|
+
sessionName = (0, session_name_1.resolveSessionName)(cliToolId, prompt.worktreeId, prompt.instanceId);
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// An id that would not make a session name was never launched here.
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
return (0, launch_window_1.isLaunchWindowOpen)(sessionName) || (0, launch_window_1.isLaunchDialogPressSettling)(sessionName);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Issue #3776: whether the prompt the poller is about to answer is gemini's
|
|
80
|
+
* folder-trust dialog itself — its parsed options are the declared option
|
|
81
|
+
* rows — rather than another prompt sharing the screen with it (the
|
|
82
|
+
* authentication picker under a dismissed dialog, a permission prompt under a
|
|
83
|
+
* reply that quotes the question).
|
|
84
|
+
*/
|
|
85
|
+
function isGeminiTrustPrompt(promptData) {
|
|
86
|
+
if (promptData.type !== 'multiple_choice')
|
|
87
|
+
return false;
|
|
88
|
+
const { optionRow, minOptionRows } = launch_dialog_1.GEMINI_TRUST_LAUNCH_DIALOG;
|
|
89
|
+
return promptData.options.filter((o) => optionRow.test(`${o.number}. ${o.label}`)).length >= minOptionRows;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Issue #3776: whether gemini's folder-trust dialog on this frame is left to
|
|
93
|
+
* the launch (step 3). Judged only for a prompt whose options are the dialog's
|
|
94
|
+
* declared rows ({@link isGeminiTrustPrompt}): a reply quoting the question
|
|
95
|
+
* over another prompt, or the authentication picker under a dismissed dialog,
|
|
96
|
+
* is answered as any prompt is.
|
|
97
|
+
*
|
|
98
|
+
* Left alone by default — the poller answers only when nothing else will and
|
|
99
|
+
* the answer is the safe one:
|
|
100
|
+
* - While the launch window is open (`cli-tools/launch-window`), never: the
|
|
101
|
+
* launch answers it, and an answered dialog stays drawn above gemini's
|
|
102
|
+
* restart line, where a `1` lands on whatever the restart draws next. Nor
|
|
103
|
+
* for a while after the launch's Enter, window or not (Issue #3790,
|
|
104
|
+
* {@link isLaunchStillAnswering}).
|
|
105
|
+
* - After it — the launch's Enter did not land, or gemini drew the dialog late
|
|
106
|
+
* (an auto-update, a slow start) — only when the prompt's default (the
|
|
107
|
+
* cursor row, which is what the poller sends) is `1. Trust folder`, and,
|
|
108
|
+
* when the screen reads as the declared dialog, the launch's own reading is
|
|
109
|
+
* `press` (not a dismissed dialog).
|
|
110
|
+
*
|
|
111
|
+
* A screen that does not read as the dialog (the wording changed, the options
|
|
112
|
+
* sit further below the question than declared) is not a reason to answer
|
|
113
|
+
* (review of #3776): with the cursor on `3. Don't trust` the poller's default
|
|
114
|
+
* would write that answer for good.
|
|
115
|
+
*/
|
|
116
|
+
function isGeminiTrustDialogLeftToLaunch(prompt, frame) {
|
|
117
|
+
const { promptData } = prompt;
|
|
118
|
+
if (promptData.type !== 'multiple_choice' || !isGeminiTrustPrompt(promptData))
|
|
119
|
+
return false;
|
|
120
|
+
if (isLaunchStillAnswering('gemini', prompt))
|
|
121
|
+
return true;
|
|
122
|
+
const defaultOption = promptData.options.find((o) => o.isDefault);
|
|
123
|
+
const defaultIsSafe = defaultOption !== undefined &&
|
|
124
|
+
launch_dialog_1.GEMINI_TRUST_LAUNCH_DIALOG.safeRow.test(`${defaultOption.number}. ${defaultOption.label}`);
|
|
125
|
+
if (!defaultIsSafe)
|
|
126
|
+
return true;
|
|
127
|
+
if (!(0, launch_dialog_1.isLaunchDialogDrawn)(launch_dialog_1.GEMINI_TRUST_LAUNCH_DIALOG, frame.clean))
|
|
128
|
+
return false;
|
|
129
|
+
if (!(0, launch_dialog_1.isLaunchDialogOpen)(launch_dialog_1.GEMINI_TRUST_LAUNCH_DIALOG, frame.clean))
|
|
130
|
+
return true;
|
|
131
|
+
return (0, launch_dialog_1.decideLaunchDialog)(launch_dialog_1.GEMINI_TRUST_LAUNCH_DIALOG, frame.clean).action !== 'press';
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Issue #3790: whether copilot's folder-trust dialog on this frame is left to
|
|
135
|
+
* the launch (step 3), as gemini's is. The launch confirms it with a bare `1`
|
|
136
|
+
* (`CopilotTool.answerFolderTrustDialog`); the poller answered `1` + Enter
|
|
137
|
+
* beside it, and when the launch's `1` landed first, the poller's was typed
|
|
138
|
+
* into the composer the dismissal revealed and submitted as a user message
|
|
139
|
+
* (measured on 1.0.91, private tmux socket and HOME).
|
|
140
|
+
*
|
|
141
|
+
* Judged only when the frame carries both of the dialog's anchors and the
|
|
142
|
+
* prompt's options are its rows: a reply quoting the question over another
|
|
143
|
+
* prompt is answered as any prompt is. Left alone while the launch is still
|
|
144
|
+
* answering ({@link isLaunchStillAnswering}); after it — the launch's `1` did
|
|
145
|
+
* not land, or copilot drew the dialog late — the poller's default goes through
|
|
146
|
+
* only when it is the session-only `1. Yes` in the declared order
|
|
147
|
+
* (`isCopilotFolderTrustDialog`). `2.` writes `trustedFolders` into the
|
|
148
|
+
* machine-wide `~/.copilot/config.json`.
|
|
149
|
+
*/
|
|
150
|
+
function isCopilotTrustDialogLeftToLaunch(prompt, frame) {
|
|
151
|
+
const { promptData } = prompt;
|
|
152
|
+
if (promptData.type !== 'multiple_choice')
|
|
153
|
+
return false;
|
|
154
|
+
if (!patterns_2.COPILOT_FOLDER_TRUST_ANCHORS.every((anchor) => frame.clean.includes(anchor)))
|
|
155
|
+
return false;
|
|
156
|
+
const trustRows = promptData.options.filter((o) => patterns_2.COPILOT_FOLDER_TRUST_OPTION_LABEL_PATTERN.test(o.label));
|
|
157
|
+
if (trustRows.length < 2)
|
|
158
|
+
return false;
|
|
159
|
+
if (isLaunchStillAnswering('copilot', prompt))
|
|
160
|
+
return true;
|
|
161
|
+
const defaultOption = promptData.options.find((o) => o.isDefault);
|
|
162
|
+
const defaultIsSessionOnly = defaultOption?.number === 1 && defaultOption.label === 'Yes';
|
|
163
|
+
return !(defaultIsSessionOnly && (0, patterns_2.isCopilotFolderTrustDialog)(frame.clean));
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Issue #3214: steps 3, 3.2, 3.3 (Issue #3497) and 3.5 of
|
|
167
|
+
* `detectAndRespondToPrompt` -- the frames that read as a prompt and are still
|
|
168
|
+
* not Auto-Yes's to answer, judged in the order they always were. "The
|
|
169
|
+
* detection above" in the comments below is that function's step 1.
|
|
42
170
|
*
|
|
43
171
|
* Issue #3397: step 3.5 no longer records its refusal here. It hands the gate's
|
|
44
172
|
* verdict back so `tryEnterFallback` can look at the frame first, and records
|
|
@@ -68,7 +196,24 @@ function suppressIfNotOursToAnswer(prompt, frame) {
|
|
|
68
196
|
// to the tool. Auto-answer layer only: the detection above still reports the
|
|
69
197
|
// prompt, so the human keeps seeing the screen and the response poller
|
|
70
198
|
// still notifies them about it.
|
|
71
|
-
|
|
199
|
+
//
|
|
200
|
+
// Issue #3776: gemini's folder-trust question too. The generic parser reads
|
|
201
|
+
// it as a multiple choice whose default is the cursor row, so the poller
|
|
202
|
+
// answered `1` beside the launch's own Enter (the second keypress then fell
|
|
203
|
+
// on the restarted gemini's authentication picker), and answered `3` —
|
|
204
|
+
// `Don't trust`, written for good — when the cursor sat there. The launch
|
|
205
|
+
// confirms only `1. Trust folder` (`cli-tools/launch-dialog`). See
|
|
206
|
+
// {@link isGeminiTrustDialogLeftToLaunch} for when the poller may answer.
|
|
207
|
+
//
|
|
208
|
+
// Issue #3790: copilot's folder-trust question too, whose launch answers a
|
|
209
|
+
// bare `1` (see {@link isCopilotTrustDialogLeftToLaunch}).
|
|
210
|
+
const launchDialog = cliToolId === 'codex'
|
|
211
|
+
? (0, cli_patterns_1.getCodexLifecycleDialog)(frame)
|
|
212
|
+
: cliToolId === 'gemini' && isGeminiTrustDialogLeftToLaunch(prompt, frame)
|
|
213
|
+
? launch_dialog_1.GEMINI_TRUST_LAUNCH_DIALOG.id
|
|
214
|
+
: cliToolId === 'copilot' && isCopilotTrustDialogLeftToLaunch(prompt, frame)
|
|
215
|
+
? exports.COPILOT_FOLDER_TRUST_LAUNCH_DIALOG_ID
|
|
216
|
+
: null;
|
|
72
217
|
if (launchDialog) {
|
|
73
218
|
// Recorded through the #1684 channel so `capture --json` and `cmate wait`
|
|
74
219
|
// can name the reason instead of showing a worker that went quiet.
|
|
@@ -86,6 +231,34 @@ function suppressIfNotOursToAnswer(prompt, frame) {
|
|
|
86
231
|
suppressAndWarnOnce(prompt, { reason: 'unclassified-frame', mode: null, promptType: promptData.type }, `${frameKey}\u0000codex-model-picker`, 'poller:auto-yes-skipped-model-picker', { promptType: promptData.type });
|
|
87
232
|
return { kind: 'left-alone' };
|
|
88
233
|
}
|
|
234
|
+
// 3.3. Issue #3497: Command Code's `AskUserQuestion` confirm page
|
|
235
|
+
// (`❯ 1. Submit` / `2. Cancel` under the question's tab strip) is not ours
|
|
236
|
+
// to answer. `Submit` picks nothing — it commits whatever stands as the
|
|
237
|
+
// answers, and on Kewton/Musunest#283 that was the worker's own proposal,
|
|
238
|
+
// which the worker then implemented as though a human had approved it. The
|
|
239
|
+
// full Review page is already declined by the reader (#2755 §7); a frame
|
|
240
|
+
// without its `← to go back and edit` row reaches the generic parser, and a
|
|
241
|
+
// question whose only choices are the pair is read by the question reader —
|
|
242
|
+
// both as `multiple_choice` with `Submit` as the default, answered `1`. Default, no setting: free-text questions go back to a human.
|
|
243
|
+
// The status path still publishes the prompt, so the human sees it.
|
|
244
|
+
//
|
|
245
|
+
// Issue #3748: Claude's confirmation page (`Ready to submit your answers?` /
|
|
246
|
+
// `❯ 1. Submit answers` / `2. Cancel`) is the same page and is declined the
|
|
247
|
+
// same way. Judged by `isAutoYesDeclinedConfirmPage`, which the browser's
|
|
248
|
+
// fallback (`useAutoYes`) asks too, and recorded with a reason of its own,
|
|
249
|
+
// `question-confirm-page`, which `cmate wait` names as such (it reused
|
|
250
|
+
// `unclassified-frame`, whose wording says no detector recognised the frame).
|
|
251
|
+
if ((0, auto_yes_confirm_page_1.isAutoYesDeclinedConfirmPage)(cliToolId, frame)) {
|
|
252
|
+
suppressAndWarnOnce(prompt, { reason: auto_yes_suppression_reason_1.QUESTION_CONFIRM_PAGE_SUPPRESSION_REASON, mode: null, promptType: promptData.type }, `${frameKey}\u0000question-confirm-page`, 'poller:auto-yes-skipped-question-confirm', {
|
|
253
|
+
reason: auto_yes_suppression_reason_1.QUESTION_CONFIRM_PAGE_SUPPRESSION_REASON,
|
|
254
|
+
promptType: promptData.type,
|
|
255
|
+
question: truncateForLog(promptData.question),
|
|
256
|
+
options: promptData.type === 'multiple_choice'
|
|
257
|
+
? promptData.options.map((option) => `${option.number}. ${option.label}`)
|
|
258
|
+
: [...promptData.options],
|
|
259
|
+
});
|
|
260
|
+
return { kind: 'left-alone' };
|
|
261
|
+
}
|
|
89
262
|
// 3.5. Issue #1928 (§4 D1 decision 4): the generic numbered-list inference is
|
|
90
263
|
// not enough to send an answer. The detection above judges the ROWS, and the
|
|
91
264
|
// rows of an agent's own reply can be indistinguishable from a dialog's --
|
|
@@ -123,3 +296,45 @@ function suppressUnclassifiedFrame(prompt, dialogGate) {
|
|
|
123
296
|
gateMode: dialogGate.mode,
|
|
124
297
|
});
|
|
125
298
|
}
|
|
299
|
+
/**
|
|
300
|
+
* Issue #3757: agy's startup folder-trust screen, which the tick read as no
|
|
301
|
+
* prompt at all — it is unnumbered, so neither agy's dialog reader nor the
|
|
302
|
+
* generic parser reads it, and the tick never got as far as the dialog gate or
|
|
303
|
+
* the Enter fallback. The status path still calls the pane `waiting`, so the
|
|
304
|
+
* prompt Push opened a wait that, with nothing recorded, it held as "Auto-Yes
|
|
305
|
+
* is answering" until the ten-minute reminder.
|
|
306
|
+
*
|
|
307
|
+
* Not answered here: the screen belongs to the launch, which confirms it with
|
|
308
|
+
* one Enter — in its own window, or through the next send when agy drew it
|
|
309
|
+
* later (`cli-tools/antigravity-startup-trust`). A second sender of that Enter
|
|
310
|
+
* here could press it twice. What this does is record the reason, so the gate
|
|
311
|
+
* notifies and `cmate wait` names the screen.
|
|
312
|
+
*
|
|
313
|
+
* Inside the launch window (`isStartupWindowOpen`) nothing is recorded: the
|
|
314
|
+
* window confirms the screen within a second or two, and a record would make
|
|
315
|
+
* the prompt Push ring for a screen that was never a human's. Outside it — the
|
|
316
|
+
* window ended (with the Enter owed, or not) or this process never launched the
|
|
317
|
+
* session — it is recorded.
|
|
318
|
+
*
|
|
319
|
+
* @param frame - The tick's one normalised frame (Issue #3183)
|
|
320
|
+
* @param sessionName - The instance's tmux session, for the launch window
|
|
321
|
+
* @returns true when the frame is the trust screen (recorded or not)
|
|
322
|
+
*/
|
|
323
|
+
function suppressAntigravityTrustScreen(worktreeId, instanceId, pollerState, frame, sessionName) {
|
|
324
|
+
if (!(0, patterns_1.isAntigravityTrustScreen)(frame.lastLines))
|
|
325
|
+
return false;
|
|
326
|
+
if ((0, antigravity_startup_trust_1.isStartupWindowOpen)(sessionName) && !(0, antigravity_startup_trust_1.isStartupTrustPending)(sessionName))
|
|
327
|
+
return true;
|
|
328
|
+
(0, auto_yes_suppression_state_1.recordPolicySuppression)(worktreeId, 'antigravity', instanceId, {
|
|
329
|
+
reason: auto_yes_suppression_reason_1.STARTUP_TRUST_UNHANDLED_SUPPRESSION_REASON,
|
|
330
|
+
mode: null,
|
|
331
|
+
promptType: 'multiple_choice',
|
|
332
|
+
});
|
|
333
|
+
(0, auto_yes_poller_state_1.warnOncePerFrame)(pollerState, 'antigravity-startup-trust', 'poller:auto-yes-skipped-startup-trust', {
|
|
334
|
+
worktreeId,
|
|
335
|
+
cliToolId: 'antigravity',
|
|
336
|
+
instanceId,
|
|
337
|
+
reason: auto_yes_suppression_reason_1.STARTUP_TRUST_UNHANDLED_SUPPRESSION_REASON,
|
|
338
|
+
});
|
|
339
|
+
return true;
|
|
340
|
+
}
|
|
@@ -1,2 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NO_HOOK_RECEIPT_SUPPRESSION_REASON = exports.QUESTION_CONFIRM_PAGE_SUPPRESSION_REASON = exports.STARTUP_TRUST_UNHANDLED_SUPPRESSION_REASON = exports.PARTIAL_ANSWER_SUPPRESSION_REASON = exports.CONTRACT_SUPPRESSION_REASONS = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Issue #3796: the reasons `resolveAutoAnswerWithPolicy` returns — the contract's
|
|
6
|
+
* verdict on the prompt as it is NOW, which a later tick re-evaluates, as
|
|
7
|
+
* opposed to a reason that remembers an event (`partial-answer`).
|
|
8
|
+
*/
|
|
9
|
+
exports.CONTRACT_SUPPRESSION_REASONS = new Set([
|
|
10
|
+
'mode-off',
|
|
11
|
+
'deny-pattern',
|
|
12
|
+
'deny-pattern-unusable',
|
|
13
|
+
'type-not-allowed',
|
|
14
|
+
]);
|
|
15
|
+
/** Issue #3706: the reason the poller records for an answer stopped part-way. */
|
|
16
|
+
exports.PARTIAL_ANSWER_SUPPRESSION_REASON = 'partial-answer';
|
|
17
|
+
/** Issue #3757: the reason the poller records over agy's unanswered trust screen. */
|
|
18
|
+
exports.STARTUP_TRUST_UNHANDLED_SUPPRESSION_REASON = 'startup-trust-unhandled';
|
|
19
|
+
/** Issue #3748: the reason the poller records over an `AskUserQuestion` confirm page. */
|
|
20
|
+
exports.QUESTION_CONFIRM_PAGE_SUPPRESSION_REASON = 'question-confirm-page';
|
|
21
|
+
/** Issue #3767: the reason the poller records over an agy dialog with no matching hook receipt. */
|
|
22
|
+
exports.NO_HOOK_RECEIPT_SUPPRESSION_REASON = 'no-hook-receipt';
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.recordPolicySuppression = recordPolicySuppression;
|
|
27
27
|
exports.getLastPolicySuppression = getLastPolicySuppression;
|
|
28
|
+
exports.forgetPolicySuppression = forgetPolicySuppression;
|
|
28
29
|
exports.clearPolicySuppressions = clearPolicySuppressions;
|
|
29
30
|
const auto_yes_state_1 = require("../../lib/auto-yes-state");
|
|
30
31
|
const global_state_1 = require("../global-state");
|
|
@@ -49,6 +50,15 @@ function recordPolicySuppression(worktreeId, cliToolId, instanceId, suppression,
|
|
|
49
50
|
function getLastPolicySuppression(worktreeId, cliToolId, instanceId) {
|
|
50
51
|
return lastPolicySuppressions.get((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId)) ?? null;
|
|
51
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Drop the record of one session (Issue #3796): the reason it gives no longer
|
|
55
|
+
* holds for the prompt still on screen (the contract that withheld it changed),
|
|
56
|
+
* so leaving it to age out would have `cmate wait` report a stale reason for up
|
|
57
|
+
* to a minute.
|
|
58
|
+
*/
|
|
59
|
+
function forgetPolicySuppression(worktreeId, cliToolId, instanceId) {
|
|
60
|
+
lastPolicySuppressions.delete((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId));
|
|
61
|
+
}
|
|
52
62
|
/** Drop every recorded suppression. Test seam. */
|
|
53
63
|
function clearPolicySuppressions() {
|
|
54
64
|
lastPolicySuppressions.clear();
|