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
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Startup confirmations a launch answers by itself (Issue #3776).
|
|
4
|
+
*
|
|
5
|
+
* gemini and agy each ask a folder-trust question before their prompt comes
|
|
6
|
+
* up, and their launch used to answer it with a blind Enter as soon as the
|
|
7
|
+
* question's wording was anywhere on the screen. An Enter confirms whichever
|
|
8
|
+
* row the cursor is on, so a cursor on `Don't trust` / `No, exit` wrote that
|
|
9
|
+
* answer for good (gemini's `trustedFolders.json`), and a question whose
|
|
10
|
+
* wording had changed (gemini v0.62.0) was never answered at all, silently.
|
|
11
|
+
*
|
|
12
|
+
* Each confirmation is declared once here — its question, the row that is safe
|
|
13
|
+
* to confirm, how its cursor row looks and the key that confirms it — and
|
|
14
|
+
* {@link decideLaunchDialog} reads one screen against that declaration: press,
|
|
15
|
+
* leave it (the cursor is somewhere else), or "this looks like the dialog but
|
|
16
|
+
* does not read as it" (the wording or the drawing changed). Pure: the caller
|
|
17
|
+
* sends the key and writes the log.
|
|
18
|
+
*
|
|
19
|
+
* A screen counts as the dialog only when the question is followed, a few rows
|
|
20
|
+
* down, by a block of the declared option rows (review of #3776): a reply that
|
|
21
|
+
* quotes the question, a diff of this file, or another tool's permission
|
|
22
|
+
* screen under a quoted question is not the dialog.
|
|
23
|
+
*
|
|
24
|
+
* Must not import `../tmux/tmux`: the Auto-Yes poller's suppression step reads
|
|
25
|
+
* {@link isLaunchDialogOpen} / {@link decideLaunchDialog} to leave these
|
|
26
|
+
* screens to the launch.
|
|
27
|
+
*
|
|
28
|
+
* @module lib/cli-tools/launch-dialog
|
|
29
|
+
*/
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
exports.ANTIGRAVITY_TRUST_LAUNCH_DIALOG = exports.GEMINI_TRUST_LAUNCH_DIALOG = void 0;
|
|
32
|
+
exports.decideLaunchDialog = decideLaunchDialog;
|
|
33
|
+
exports.isLaunchDialogOpen = isLaunchDialogOpen;
|
|
34
|
+
exports.isLaunchDialogDrawn = isLaunchDialogDrawn;
|
|
35
|
+
exports.launchDialogWarning = launchDialogWarning;
|
|
36
|
+
const cli_patterns_1 = require("../detection/cli-patterns");
|
|
37
|
+
const patterns_1 = require("../detection/tools/antigravity/patterns");
|
|
38
|
+
/** Longest cursor label a decision carries (it goes into logs). */
|
|
39
|
+
const MAX_CURSOR_LABEL_LENGTH = 80;
|
|
40
|
+
/**
|
|
41
|
+
* gemini's folder-trust question (measured on v0.62.0, 2026-10-17, private
|
|
42
|
+
* HOME, empty folder; `tests/fixtures/gemini-live-3776/`):
|
|
43
|
+
*
|
|
44
|
+
* │ Do you trust the files in this folder?
|
|
45
|
+
* │ ● 1. Trust folder (<folder>) <- cursor here by default
|
|
46
|
+
* │ 2. Trust parent folder (<parent>)
|
|
47
|
+
* │ 3. Don't trust
|
|
48
|
+
*
|
|
49
|
+
* Earlier builds asked `Do you trust this folder?` over the same three rows.
|
|
50
|
+
* Only `1. Trust folder` is safe: `2.` trusts every sibling of the worktree.
|
|
51
|
+
* One Enter on it makes gemini restart itself ("Gemini CLI is restarting to
|
|
52
|
+
* apply the trust changes...") and, on a HOME that never signed in, draw the
|
|
53
|
+
* authentication picker — whose default an extra Enter would confirm.
|
|
54
|
+
*/
|
|
55
|
+
exports.GEMINI_TRUST_LAUNCH_DIALOG = {
|
|
56
|
+
id: 'gemini-folder-trust',
|
|
57
|
+
question: /Do you trust (?:the files in )?this folder\?/,
|
|
58
|
+
signature: /\bTrust folder\b|\bDon't trust\b/,
|
|
59
|
+
cursorRow: /^[\s│]*●\s*(\S.*?)[\s│]*$/,
|
|
60
|
+
optionRow: /^[\s│]*(?:\S\s+)?\d\.\s+(?:Trust folder|Trust parent folder|Don't trust)\b/,
|
|
61
|
+
minOptionRows: 2,
|
|
62
|
+
optionsWithin: 8,
|
|
63
|
+
dismissedRow: /restarting to apply the trust changes/,
|
|
64
|
+
safeRow: /^1\.\s+Trust folder\b/,
|
|
65
|
+
key: 'Enter',
|
|
66
|
+
// The dialog is 11 rows from its question to its lower border; the rest is
|
|
67
|
+
// room for a notice or footer drawn under it.
|
|
68
|
+
liveRows: 30,
|
|
69
|
+
declaredIn: 'src/lib/cli-tools/launch-dialog.ts (GEMINI_TRUST_LAUNCH_DIALOG)',
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* agy's folder-trust question (Issue #988;
|
|
73
|
+
* `tests/fixtures/antigravity-live-2364/trust-dialog.txt`):
|
|
74
|
+
*
|
|
75
|
+
* Do you trust the contents of this project?
|
|
76
|
+
* > Yes, I trust this folder <- cursor here by default
|
|
77
|
+
* No, exit
|
|
78
|
+
* ↑/↓ Navigate · enter Confirm
|
|
79
|
+
*/
|
|
80
|
+
exports.ANTIGRAVITY_TRUST_LAUNCH_DIALOG = {
|
|
81
|
+
id: 'antigravity-folder-trust',
|
|
82
|
+
question: patterns_1.ANTIGRAVITY_TRUST_DIALOG_PATTERN,
|
|
83
|
+
signature: /\bYes, I trust this folder\b/,
|
|
84
|
+
optionRow: /^\s*(?:\S\s+)?(?:Yes, I trust this folder|No, exit)\s*$/,
|
|
85
|
+
minOptionRows: 2,
|
|
86
|
+
optionsWithin: 4,
|
|
87
|
+
cursorRow: /^\s*>\s+(\S.*?)\s*$/,
|
|
88
|
+
safeRow: /^Yes, I trust this folder$/,
|
|
89
|
+
key: 'Enter',
|
|
90
|
+
liveRows: 12,
|
|
91
|
+
declaredIn: 'src/lib/cli-tools/launch-dialog.ts (ANTIGRAVITY_TRUST_LAUNCH_DIALOG)',
|
|
92
|
+
};
|
|
93
|
+
/** The last `count` non-blank rows of a screen, ANSI stripped and right-trimmed. */
|
|
94
|
+
function liveRowsOf(screen, count) {
|
|
95
|
+
const rows = (0, cli_patterns_1.stripAnsi)(screen)
|
|
96
|
+
.split('\n')
|
|
97
|
+
.map((row) => row.trimEnd())
|
|
98
|
+
.filter((row) => row.trim() !== '');
|
|
99
|
+
return rows.slice(-count);
|
|
100
|
+
}
|
|
101
|
+
/** The rows below the last dismissal row (all of them when there is none). */
|
|
102
|
+
function rowsAfterDismissal(spec, rows) {
|
|
103
|
+
if (!spec.dismissedRow)
|
|
104
|
+
return rows;
|
|
105
|
+
for (let i = rows.length - 1; i >= 0; i--) {
|
|
106
|
+
if (spec.dismissedRow.test(rows[i]))
|
|
107
|
+
return rows.slice(i + 1);
|
|
108
|
+
}
|
|
109
|
+
return rows;
|
|
110
|
+
}
|
|
111
|
+
/** The option rows of the dialog asked at `questionAt`, or null if it has none. */
|
|
112
|
+
function optionBlockAfter(spec, rows, questionAt) {
|
|
113
|
+
const last = Math.min(rows.length - 1, questionAt + spec.optionsWithin);
|
|
114
|
+
for (let start = questionAt + 1; start <= last; start++) {
|
|
115
|
+
if (!spec.optionRow.test(rows[start]))
|
|
116
|
+
continue;
|
|
117
|
+
const block = [];
|
|
118
|
+
for (let i = start; i < rows.length && spec.optionRow.test(rows[i]); i++)
|
|
119
|
+
block.push(rows[i]);
|
|
120
|
+
return block.length >= spec.minOptionRows ? block : null;
|
|
121
|
+
}
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
/** The option rows under the last live question that has them, or null. */
|
|
125
|
+
function findDialog(spec, rows) {
|
|
126
|
+
for (let i = rows.length - 1; i >= 0; i--) {
|
|
127
|
+
if (!spec.question.test(rows[i]))
|
|
128
|
+
continue;
|
|
129
|
+
const block = optionBlockAfter(spec, rows, i);
|
|
130
|
+
if (block)
|
|
131
|
+
return block;
|
|
132
|
+
}
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Read one screen against a launch dialog's declaration (Issue #3776).
|
|
137
|
+
*
|
|
138
|
+
* The question must be among the last {@link LaunchDialogSpec.liveRows}
|
|
139
|
+
* non-blank rows, below any dismissal row, with its option block under it; the
|
|
140
|
+
* key is pressed only when exactly one option row carries the cursor and its
|
|
141
|
+
* label is the safe one.
|
|
142
|
+
*
|
|
143
|
+
* @param spec - The confirmation being looked for
|
|
144
|
+
* @param screen - One capture of the pane (ANSI allowed)
|
|
145
|
+
*/
|
|
146
|
+
function decideLaunchDialog(spec, screen) {
|
|
147
|
+
const rows = rowsAfterDismissal(spec, liveRowsOf(screen, spec.liveRows));
|
|
148
|
+
const options = findDialog(spec, rows);
|
|
149
|
+
if (!options) {
|
|
150
|
+
return rows.some((row) => spec.signature.test(row))
|
|
151
|
+
? { action: 'unrecognized', reason: 'question-not-found' }
|
|
152
|
+
: { action: 'absent' };
|
|
153
|
+
}
|
|
154
|
+
const cursorLabels = [];
|
|
155
|
+
for (const row of options) {
|
|
156
|
+
const match = spec.cursorRow.exec(row);
|
|
157
|
+
if (match)
|
|
158
|
+
cursorLabels.push(match[1]);
|
|
159
|
+
}
|
|
160
|
+
if (cursorLabels.length === 0)
|
|
161
|
+
return { action: 'unrecognized', reason: 'cursor-not-found' };
|
|
162
|
+
if (cursorLabels.length > 1)
|
|
163
|
+
return { action: 'unrecognized', reason: 'multiple-cursors' };
|
|
164
|
+
const label = cursorLabels[0];
|
|
165
|
+
return spec.safeRow.test(label)
|
|
166
|
+
? { action: 'press', key: spec.key }
|
|
167
|
+
: { action: 'hold', reason: 'cursor-off-safe-row', cursorLabel: label.slice(0, MAX_CURSOR_LABEL_LENGTH) };
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Whether the dialog — its question over its option block, not dismissed — is
|
|
171
|
+
* live on the screen, wherever its cursor is (Issue #3776).
|
|
172
|
+
*/
|
|
173
|
+
function isLaunchDialogOpen(spec, screen) {
|
|
174
|
+
return findDialog(spec, rowsAfterDismissal(spec, liveRowsOf(screen, spec.liveRows))) !== null;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Whether the dialog is drawn in the live rows, dismissed or not: a dialog
|
|
178
|
+
* gemini answered stays on the screen, cursor and all, above its restart line
|
|
179
|
+
* while the restart runs.
|
|
180
|
+
*/
|
|
181
|
+
function isLaunchDialogDrawn(spec, screen) {
|
|
182
|
+
return findDialog(spec, liveRowsOf(screen, spec.liveRows)) !== null;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* The warn a launch writes when it leaves the dialog alone, or null when the
|
|
186
|
+
* decision sends or there is nothing to say. Never carries the screen.
|
|
187
|
+
*/
|
|
188
|
+
function launchDialogWarning(spec, decision) {
|
|
189
|
+
if (decision.action === 'absent' || decision.action === 'press')
|
|
190
|
+
return null;
|
|
191
|
+
if (decision.action === 'hold') {
|
|
192
|
+
return { event: 'launch-dialog-held', fields: { dialog: spec.id, ...decision } };
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
event: 'launch-dialog-unrecognized',
|
|
196
|
+
fields: {
|
|
197
|
+
dialog: spec.id,
|
|
198
|
+
...decision,
|
|
199
|
+
// Fail-closed by design; this warn is written once, so say what to look at.
|
|
200
|
+
hint: `the dialog's wording or cursor drawing may have changed; compare the screen with ${spec.declaredIn}`,
|
|
201
|
+
},
|
|
202
|
+
};
|
|
203
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Whether a launch is still answering its own startup confirmation
|
|
4
|
+
* (review of Issue #3776).
|
|
5
|
+
*
|
|
6
|
+
* gemini's launch confirms its folder-trust dialog itself, once, inside its
|
|
7
|
+
* ~30 s readiness wait (`GeminiTool.waitForReady`); while that wait runs the
|
|
8
|
+
* Auto-Yes poller must leave the dialog to it, or the two answer it twice. A
|
|
9
|
+
* dialog still on the screen after the wait — the Enter did not land, or
|
|
10
|
+
* gemini drew the dialog late (an auto-update, a slow start) — has nobody else
|
|
11
|
+
* to answer it, so the poller may again, when the cursor is on the safe row.
|
|
12
|
+
*
|
|
13
|
+
* The window closing is not the end of the launch's answer (Issue #3790): an
|
|
14
|
+
* answered dialog stays drawn, cursor on the safe row, until the agent redraws
|
|
15
|
+
* (gemini's restart line takes about 2 s), and a window that closed in between —
|
|
16
|
+
* the wait ran out on its last attempts — would hand it to the poller as an
|
|
17
|
+
* unanswered one. So the launch also records the key it pressed
|
|
18
|
+
* ({@link recordLaunchDialogPress}), and the poller leaves the dialog alone for
|
|
19
|
+
* {@link LAUNCH_DIALOG_PRESS_SETTLE_MS} after it, window or not. Past that, a
|
|
20
|
+
* dialog still on screen is one the key did not reach, and the poller may answer
|
|
21
|
+
* it as before.
|
|
22
|
+
*
|
|
23
|
+
* Copilot's folder-trust dialog has the same window since Issue #3790: its launch
|
|
24
|
+
* confirms with a `1` and the poller answered `1` + Enter beside it (measured on
|
|
25
|
+
* 1.0.91: the second `1` + Enter is submitted as a user message).
|
|
26
|
+
*
|
|
27
|
+
* Counted, as agy's window is (`antigravity-startup-trust`, Issue #3770): a
|
|
28
|
+
* relaunch racing another must not have the earlier one's end close the later
|
|
29
|
+
* one's window. Keyed by tmux session name; reached through `globalThis`
|
|
30
|
+
* because the launch and the poller may be bundled separately under
|
|
31
|
+
* `next dev` (Issue #1736).
|
|
32
|
+
*
|
|
33
|
+
* @module lib/cli-tools/launch-window
|
|
34
|
+
*/
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.LAUNCH_DIALOG_PRESS_SETTLE_MS = void 0;
|
|
37
|
+
exports.beginLaunchWindow = beginLaunchWindow;
|
|
38
|
+
exports.endLaunchWindow = endLaunchWindow;
|
|
39
|
+
exports.isLaunchWindowOpen = isLaunchWindowOpen;
|
|
40
|
+
exports.recordLaunchDialogPress = recordLaunchDialogPress;
|
|
41
|
+
exports.isLaunchDialogPressSettling = isLaunchDialogPressSettling;
|
|
42
|
+
exports.clearLaunchWindows = clearLaunchWindows;
|
|
43
|
+
const global_state_1 = require("../global-state");
|
|
44
|
+
/**
|
|
45
|
+
* How long after the launch pressed its key the dialog stays the launch's
|
|
46
|
+
* (Issue #3790). Measured on gemini 0.64.0: the restart line is drawn within
|
|
47
|
+
* 100 ms of the key and the dialog is gone within about 2 s; a dialog still
|
|
48
|
+
* drawn 30 s later is one the key did not reach.
|
|
49
|
+
*/
|
|
50
|
+
exports.LAUNCH_DIALOG_PRESS_SETTLE_MS = 30_000;
|
|
51
|
+
/** sessionName -> how many launch windows are open. */
|
|
52
|
+
const openLaunchWindows = (0, global_state_1.getOrInitGlobal)('__launchWindows', () => new Map());
|
|
53
|
+
/** sessionName -> when the launch last pressed the key of its startup confirmation. */
|
|
54
|
+
const launchDialogPresses = (0, global_state_1.getOrInitGlobal)('__launchDialogPresses', () => new Map());
|
|
55
|
+
/**
|
|
56
|
+
* The launch window opened: the launch answers its startup confirmation in it.
|
|
57
|
+
* A key an earlier launch of the session pressed is forgotten: the dialog this
|
|
58
|
+
* launch draws is a new one.
|
|
59
|
+
*/
|
|
60
|
+
function beginLaunchWindow(sessionName) {
|
|
61
|
+
openLaunchWindows.set(sessionName, (openLaunchWindows.get(sessionName) ?? 0) + 1);
|
|
62
|
+
launchDialogPresses.delete(sessionName);
|
|
63
|
+
}
|
|
64
|
+
/** The launch window closed, however it ended. */
|
|
65
|
+
function endLaunchWindow(sessionName) {
|
|
66
|
+
const open = openLaunchWindows.get(sessionName) ?? 0;
|
|
67
|
+
if (open <= 1)
|
|
68
|
+
openLaunchWindows.delete(sessionName);
|
|
69
|
+
else
|
|
70
|
+
openLaunchWindows.set(sessionName, open - 1);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* @returns True while a launch window is open. A session this process never
|
|
74
|
+
* launched (a server restart, another launcher) has none open.
|
|
75
|
+
*/
|
|
76
|
+
function isLaunchWindowOpen(sessionName) {
|
|
77
|
+
return openLaunchWindows.has(sessionName);
|
|
78
|
+
}
|
|
79
|
+
/** The launch pressed the key that confirms its startup confirmation (Issue #3790). */
|
|
80
|
+
function recordLaunchDialogPress(sessionName, at = Date.now()) {
|
|
81
|
+
launchDialogPresses.set(sessionName, at);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* @returns True within {@link LAUNCH_DIALOG_PRESS_SETTLE_MS} of the launch's
|
|
85
|
+
* key (Issue #3790): the dialog on screen may be the one it answered, not yet
|
|
86
|
+
* redrawn, whether or not the window is still open.
|
|
87
|
+
*/
|
|
88
|
+
function isLaunchDialogPressSettling(sessionName, now = Date.now()) {
|
|
89
|
+
const at = launchDialogPresses.get(sessionName);
|
|
90
|
+
return at !== undefined && now - at < exports.LAUNCH_DIALOG_PRESS_SETTLE_MS;
|
|
91
|
+
}
|
|
92
|
+
/** Close every window and forget every press. Test seam. */
|
|
93
|
+
function clearLaunchWindows() {
|
|
94
|
+
openLaunchWindows.clear();
|
|
95
|
+
launchDialogPresses.clear();
|
|
96
|
+
}
|
|
@@ -8,18 +8,30 @@ exports.recordClaudeConversation = recordClaudeConversation;
|
|
|
8
8
|
const db_1 = require("./db");
|
|
9
9
|
const log_manager_1 = require("./log-manager");
|
|
10
10
|
const logger_1 = require("./logger");
|
|
11
|
+
const poller_owner_1 = require("./polling/poller-owner");
|
|
11
12
|
const logger = (0, logger_1.createLogger)('conversation-logger');
|
|
12
13
|
/**
|
|
13
14
|
* Persist the latest Claude response alongside the most recent user prompt.
|
|
14
15
|
* Errors are swallowed so the calling API route can continue responding.
|
|
15
16
|
*/
|
|
16
|
-
async function recordClaudeConversation(db, worktreeId, claudeResponse, cliToolId = 'claude') {
|
|
17
|
+
async function recordClaudeConversation(db, worktreeId, claudeResponse, cliToolId = 'claude', options = {}) {
|
|
18
|
+
const { pollerKey } = options;
|
|
19
|
+
const mayWrite = pollerKey === undefined ? undefined : () => (0, poller_owner_1.mayActForPollerKey)(pollerKey);
|
|
20
|
+
if (mayWrite && !mayWrite()) {
|
|
21
|
+
logger.info('conversation:log-refused', { worktreeId, cliToolId });
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
17
24
|
const lastUserMessage = (0, db_1.getLastUserMessage)(db, worktreeId);
|
|
18
25
|
if (!lastUserMessage) {
|
|
19
26
|
return;
|
|
20
27
|
}
|
|
21
28
|
try {
|
|
22
|
-
await (0, log_manager_1.createLog)(worktreeId, lastUserMessage.content, claudeResponse, cliToolId
|
|
29
|
+
const logPath = await (0, log_manager_1.createLog)(worktreeId, lastUserMessage.content, claudeResponse, cliToolId, {
|
|
30
|
+
mayWrite,
|
|
31
|
+
});
|
|
32
|
+
if (logPath === null) {
|
|
33
|
+
logger.info('conversation:log-refused', { worktreeId, cliToolId });
|
|
34
|
+
}
|
|
23
35
|
}
|
|
24
36
|
catch (error) {
|
|
25
37
|
logger.error('conversation:log-failed', { error: error instanceof Error ? error.message : String(error) });
|
|
@@ -693,9 +693,10 @@ function recordAnsweredPrompt(db, params) {
|
|
|
693
693
|
AND message_type = 'prompt'
|
|
694
694
|
AND json_extract(prompt_data, '$.status') = 'pending'
|
|
695
695
|
${exports.ACTIVE_FILTER}
|
|
696
|
+
${params.pendingSavedAtOrBefore !== undefined ? 'AND timestamp <= ?' : ''}
|
|
696
697
|
ORDER BY timestamp DESC
|
|
697
698
|
`)
|
|
698
|
-
.all(worktreeId, resolvedInstanceId);
|
|
699
|
+
.all(worktreeId, resolvedInstanceId, ...(params.pendingSavedAtOrBefore !== undefined ? [params.pendingSavedAtOrBefore] : []));
|
|
699
700
|
let target = null;
|
|
700
701
|
for (const row of rows) {
|
|
701
702
|
try {
|
|
@@ -64,15 +64,17 @@
|
|
|
64
64
|
* written once.
|
|
65
65
|
*/
|
|
66
66
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
67
|
-
exports.readCommandCodeReviewPage = exports.isCommandCodePlanApproveChoice = exports.hasDismissablePanelFooter = exports.hasCommandCodeSelectionListFooterAtBottom = exports.hasCommandCodePlanReviewFooterAtBottom = exports.hasCommandCodeDismissablePanelFooterAtBottom = exports.DISMISSABLE_PANEL_FOOTER_PATTERN = exports.COMMAND_CODE_SELECTION_LIST_FOOTER = exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_ROW = exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_FOOTER = exports.SET_AS_DEFAULT_FOOTER_PATTERN = exports.SESSION_SCOPE_FOOTER_PATTERN = exports.MAX_OPTION_NUMBER = exports.SELECTION_SHAPE_TAIL_LINE_COUNT = exports.COMMAND_CODE_PLAN_REVIEW_FOOTER = void 0;
|
|
67
|
+
exports.TRUST_CONFIRMATION_TAIL_LINE_COUNT = exports.readCommandCodeReviewPage = exports.isCommandCodePlanApproveChoice = exports.hasDismissablePanelFooter = exports.hasCommandCodeSelectionListFooterAtBottom = exports.hasCommandCodePlanReviewFooterAtBottom = exports.hasCommandCodeDismissablePanelFooterAtBottom = exports.DISMISSABLE_PANEL_FOOTER_PATTERN = exports.COMMAND_CODE_SELECTION_LIST_FOOTER = exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_ROW = exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_FOOTER = exports.SET_AS_DEFAULT_FOOTER_PATTERN = exports.SESSION_SCOPE_FOOTER_PATTERN = exports.MAX_OPTION_NUMBER = exports.SELECTION_SHAPE_TAIL_LINE_COUNT = exports.COMMAND_CODE_PLAN_REVIEW_FOOTER = void 0;
|
|
68
68
|
exports.readCommandCodeQuestionRegion = readCommandCodeQuestionRegion;
|
|
69
69
|
exports.hasCommandCodeQuestionChrome = hasCommandCodeQuestionChrome;
|
|
70
70
|
exports.extractCommandCodeSelectionListFrame = extractCommandCodeSelectionListFrame;
|
|
71
71
|
exports.readSelectionListShape = readSelectionListShape;
|
|
72
72
|
exports.shouldOfferOptionNumbers = shouldOfferOptionNumbers;
|
|
73
|
+
exports.isTrustConfirmationFrame = isTrustConfirmationFrame;
|
|
73
74
|
const ansi_1 = require("./ansi");
|
|
74
75
|
const selection_shape_patterns_1 = require("./selection-shape-patterns");
|
|
75
76
|
Object.defineProperty(exports, "COMMAND_CODE_PLAN_REVIEW_FOOTER", { enumerable: true, get: function () { return selection_shape_patterns_1.COMMAND_CODE_PLAN_REVIEW_FOOTER; } });
|
|
77
|
+
const patterns_1 = require("./tools/antigravity/patterns");
|
|
76
78
|
/**
|
|
77
79
|
* How many rows up from the last content row the shape is read.
|
|
78
80
|
*
|
|
@@ -611,3 +613,35 @@ function shouldOfferOptionNumbers(shape) {
|
|
|
611
613
|
!shape.hasFilterInput &&
|
|
612
614
|
!shape.offersPlanApprove);
|
|
613
615
|
}
|
|
616
|
+
/**
|
|
617
|
+
* How many content rows from the bottom {@link isTrustConfirmationFrame} hands
|
|
618
|
+
* the detector's predicate: the detector's own `STATUS_CHECK_LINE_COUNT`
|
|
619
|
+
* (`tools/frame.ts`, the `lastLines` window), restated because that module
|
|
620
|
+
* pulls `cli-patterns` and its logger into the browser bundle. Pinned equal by
|
|
621
|
+
* `tests/unit/lib/detection/trust-confirmation-frame-3758.test.ts`.
|
|
622
|
+
*/
|
|
623
|
+
exports.TRUST_CONFIRMATION_TAIL_LINE_COUNT = 15;
|
|
624
|
+
/**
|
|
625
|
+
* Is this selection list a folder-trust confirmation (Issue #3758)?
|
|
626
|
+
*
|
|
627
|
+
* agy's `Do you trust the contents of this project?` screen is unnumbered, so it
|
|
628
|
+
* is published as an `antigravity_selection_list` (`isSelectionListActive`) and
|
|
629
|
+
* never as a prompt — no prompt panel, no sheet — and Auto-Yes does not answer
|
|
630
|
+
* it (#3757). The surfaces drew the bare arrow pad and the generic "a selection
|
|
631
|
+
* list is open" sentence, which did not say the agent is stopped until somebody
|
|
632
|
+
* answers on the terminal. This tells them which screen it is, so they can say
|
|
633
|
+
* so.
|
|
634
|
+
*
|
|
635
|
+
* The test is the detector's own (`isAntigravityTrustScreen`) over the same
|
|
636
|
+
* window of rows, not a copy of it. Callers ask only while the server says a
|
|
637
|
+
* selection list is up; this does not decide THAT.
|
|
638
|
+
*
|
|
639
|
+
* @param frame - the raw pane (`PaneTerminalState.output` / the poll's `fullOutput`)
|
|
640
|
+
* @param cliToolId - the tool the pane belongs to; only agy draws this screen
|
|
641
|
+
*/
|
|
642
|
+
function isTrustConfirmationFrame(frame, cliToolId) {
|
|
643
|
+
if (!frame || cliToolId !== 'antigravity')
|
|
644
|
+
return false;
|
|
645
|
+
const lines = tailLines(frame);
|
|
646
|
+
return (0, patterns_1.isAntigravityTrustScreen)(lines.slice(-exports.TRUST_CONFIRMATION_TAIL_LINE_COUNT).join('\n'));
|
|
647
|
+
}
|
|
@@ -35,6 +35,24 @@ exports.VERIFIED_AGAINST = verified_against_1.ANTIGRAVITY_VERIFIED_AGAINST;
|
|
|
35
35
|
* card) on screen, and what makes `wait` stop with exit 10 instead of hanging.
|
|
36
36
|
*/
|
|
37
37
|
const SELECTION_LIST_VERDICT = (0, verdicts_1.positiveVerdict)('waiting', status_reason_1.STATUS_REASON.ANTIGRAVITY_SELECTION_LIST);
|
|
38
|
+
/**
|
|
39
|
+
* agy generating: the braille spinner or the `Generating...` word — the parts of
|
|
40
|
+
* `ANTIGRAVITY_THINKING_PATTERN` a permission dialog does not draw (its
|
|
41
|
+
* `esc to cancel` row it does).
|
|
42
|
+
*/
|
|
43
|
+
const ANTIGRAVITY_GENERATING_PATTERN = /[\u2800-\u28FF]|Generating/;
|
|
44
|
+
/**
|
|
45
|
+
* An agy numbered screen no reader vouches for (Issue #2364, #3808): published
|
|
46
|
+
* as unclassified — the hatch opens and `wait` stops — never as a picker (the
|
|
47
|
+
* arrow pad would Enter the highlighted row) and never as "generating".
|
|
48
|
+
*/
|
|
49
|
+
const UNKNOWN_FRAME_VERDICT = {
|
|
50
|
+
status: 'running',
|
|
51
|
+
confidence: 'low',
|
|
52
|
+
reason: status_reason_1.STATUS_REASON.UNKNOWN_FRAME,
|
|
53
|
+
hasActivePrompt: false,
|
|
54
|
+
evidence: 'none',
|
|
55
|
+
};
|
|
38
56
|
/**
|
|
39
57
|
* How close to the bottom of the content the survey row must be to count as
|
|
40
58
|
* open: itself, a blank row and the `? for shortcuts` status row.
|
|
@@ -121,8 +139,20 @@ exports.antigravityStatusDetector = (0, run_detection_1.createToolStatusDetector
|
|
|
121
139
|
// Issue #2845: only while the screen is the live one. The words alone are
|
|
122
140
|
// not enough — a reply that quotes the `↑/↓ Navigate` footer leaves them in
|
|
123
141
|
// the last rows of a pane whose composer is drawn below them.
|
|
124
|
-
if (!cli_patterns_1.ANTIGRAVITY_SELECTION_LIST_PATTERN.test(frame.lastLines))
|
|
125
|
-
|
|
142
|
+
if (!cli_patterns_1.ANTIGRAVITY_SELECTION_LIST_PATTERN.test(frame.lastLines)) {
|
|
143
|
+
// Issue #3808: numbered options with no `↑/↓ Navigate` footer on screen
|
|
144
|
+
// (cut at `↑/↓ Nav`, or below the pane) are not handed to the generic
|
|
145
|
+
// parser's `prompt_detected` either — the same frames the Auto-Yes
|
|
146
|
+
// poller and `/prompt-response` decline. `/feedback` keeps its reading.
|
|
147
|
+
//
|
|
148
|
+
// Not ahead of generation: a spinner or `Generating…` in the last rows
|
|
149
|
+
// leaves the frame to the thinking check (a sent message numbered
|
|
150
|
+
// `1. / 2.` echoes above the spinner). The bare `esc to cancel` row does
|
|
151
|
+
// not count — agy draws it under its permission dialogs too.
|
|
152
|
+
if (ANTIGRAVITY_GENERATING_PATTERN.test(frame.thinkingLines))
|
|
153
|
+
return null;
|
|
154
|
+
return (0, dialog_1.isAntigravityUnvouchedNumberedScreen)((0, cli_patterns_1.stripBoxDrawing)(frame.clean)) ? UNKNOWN_FRAME_VERDICT : null;
|
|
155
|
+
}
|
|
126
156
|
if (!isAntigravitySelectionScreenOpen(frame.lastLines))
|
|
127
157
|
return null;
|
|
128
158
|
// Issue #2270 / #2364: except when the frame is a NUMBERED dialog.
|
|
@@ -155,6 +185,11 @@ exports.antigravityStatusDetector = (0, run_detection_1.createToolStatusDetector
|
|
|
155
185
|
// which reads the same helper over the same spelling) carry one question,
|
|
156
186
|
// one option list and one `instructionText` for one screen.
|
|
157
187
|
//
|
|
188
|
+
// Issue #3808: the reader also declines a numbered screen whose footer is
|
|
189
|
+
// not a permission dialog's (`… · tab Amend`) — agy 1.4's login-method
|
|
190
|
+
// screen, a footer a narrow pane cut — so those land on the unclassified
|
|
191
|
+
// verdict below: a human answers them, Auto-Yes never does.
|
|
192
|
+
//
|
|
158
193
|
// #995's own case is untouched: the Switch Model picker carries no numbered
|
|
159
194
|
// rows, so it still resolves below and still keeps NavigationButtons.
|
|
160
195
|
const text = (0, cli_patterns_1.stripBoxDrawing)(frame.clean);
|
|
@@ -163,13 +198,7 @@ exports.antigravityStatusDetector = (0, run_detection_1.createToolStatusDetector
|
|
|
163
198
|
if (promptDetection !== null) {
|
|
164
199
|
return (0, verdicts_1.activePromptVerdict)(status_reason_1.STATUS_REASON.PROMPT_DETECTED, promptDetection);
|
|
165
200
|
}
|
|
166
|
-
return
|
|
167
|
-
status: 'running',
|
|
168
|
-
confidence: 'low',
|
|
169
|
-
reason: status_reason_1.STATUS_REASON.UNKNOWN_FRAME,
|
|
170
|
-
hasActivePrompt: false,
|
|
171
|
-
evidence: 'none',
|
|
172
|
-
};
|
|
201
|
+
return UNKNOWN_FRAME_VERDICT;
|
|
173
202
|
}
|
|
174
203
|
return SELECTION_LIST_VERDICT;
|
|
175
204
|
},
|
|
@@ -65,10 +65,12 @@
|
|
|
65
65
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
66
66
|
exports.readAntigravityNumberedDialog = readAntigravityNumberedDialog;
|
|
67
67
|
exports.detectAntigravityNumberedDialogPrompt = detectAntigravityNumberedDialogPrompt;
|
|
68
|
+
exports.isAntigravityUnvouchedNumberedScreen = isAntigravityUnvouchedNumberedScreen;
|
|
68
69
|
const cli_patterns_1 = require("../../cli-patterns");
|
|
69
70
|
const prompt_detect_multiple_choice_1 = require("../../prompt-detect-multiple-choice");
|
|
70
71
|
const tui_detection_frame_1 = require("../../tui-detection-frame");
|
|
71
72
|
const dialog_block_1 = require("../dialog-block");
|
|
73
|
+
const patterns_1 = require("./patterns");
|
|
72
74
|
const truncate_raw_content_1 = require("../../truncate-raw-content");
|
|
73
75
|
/**
|
|
74
76
|
* How many non-blank rows above option 1 may be searched for the question.
|
|
@@ -104,7 +106,9 @@ const QUESTION_ROW_PATTERN = /[??]\s*$/;
|
|
|
104
106
|
/**
|
|
105
107
|
* Read agy's numbered dialog off ANSI-stripped rows.
|
|
106
108
|
*
|
|
107
|
-
* Null when the frame has no `↑/↓ Navigate` footer, when
|
|
109
|
+
* Null when the frame has no `↑/↓ Navigate` footer, when that footer is not a
|
|
110
|
+
* permission dialog's `… · tab Amend` one (the login-method screen, a footer a
|
|
111
|
+
* narrow pane cut — Issue #3808), when the rows above it do
|
|
108
112
|
* not form a numbered run reaching `1.` (the Switch Model picker, the trust
|
|
109
113
|
* screen, the slash popup), or when the block sits under a `Switch Model`
|
|
110
114
|
* header. A caller that has already passed `isAntigravityNumberedDialog` and
|
|
@@ -115,6 +119,10 @@ function readAntigravityNumberedDialog(lines) {
|
|
|
115
119
|
const region = (0, cli_patterns_1.locateAntigravityDialogRegion)(lines);
|
|
116
120
|
if (region === null)
|
|
117
121
|
return null;
|
|
122
|
+
// Issue #3808: only a permission dialog's footer vouches for the block —
|
|
123
|
+
// see ANTIGRAVITY_PERMISSION_FOOTER_PATTERN.
|
|
124
|
+
if (!patterns_1.ANTIGRAVITY_PERMISSION_FOOTER_PATTERN.test(lines[region.footer]))
|
|
125
|
+
return null;
|
|
118
126
|
const regionRows = lines.slice(region.start, region.footer);
|
|
119
127
|
if (regionRows.some(row => cli_patterns_1.ANTIGRAVITY_SWITCH_MODEL_HEADER_PATTERN.test(row)))
|
|
120
128
|
return null;
|
|
@@ -224,3 +232,82 @@ function detectAntigravityNumberedDialogPrompt(text) {
|
|
|
224
232
|
approvalTarget: (0, prompt_detect_multiple_choice_1.joinApprovalTarget)(lines, (0, prompt_detect_multiple_choice_1.findApprovalContextStart)(lines, dialog.questionRow), dialog.footerRow),
|
|
225
233
|
}, normalized, truncate_raw_content_1.truncateRawContent);
|
|
226
234
|
}
|
|
235
|
+
/**
|
|
236
|
+
* agy's `/feedback` category menu footer (`esc Cancel · 1-6 Select & Continue ·
|
|
237
|
+
* enter Continue`, `antigravity-live-2364/dialog-feedback-category.txt`): the
|
|
238
|
+
* one numbered agy screen the generic parser is left to read (#2364).
|
|
239
|
+
*/
|
|
240
|
+
/** A numbered option row (`> 1. Yes`, ` 2. No`): the `>` cursor, then the number. */
|
|
241
|
+
const OPTION_ROW_PATTERN = /^\s*(>)?\s*(\d+)\.\s+\S/;
|
|
242
|
+
/**
|
|
243
|
+
* agy's `/feedback` category menu footer (`esc Cancel · 1-6 Select & Continue ·
|
|
244
|
+
* enter Continue`, `antigravity-live-2364/dialog-feedback-category.txt`): the
|
|
245
|
+
* one numbered agy screen the generic parser is left to read (#2364). Anchored
|
|
246
|
+
* at the row start and matched only on the first row under the last option,
|
|
247
|
+
* so the same words inside an option label or a quoted command never match.
|
|
248
|
+
*/
|
|
249
|
+
const FEEDBACK_MENU_FOOTER_PATTERN = /^\s*esc Cancel\s*·\s*\d+-\d+\s+Select\b/;
|
|
250
|
+
/** How far above the bottom option row the run down from `1.` may reach. */
|
|
251
|
+
const OPTION_RUN_MAX_ROWS = 40;
|
|
252
|
+
/**
|
|
253
|
+
* Is this an agy screen with numbered options that the permission reader does
|
|
254
|
+
* NOT vouch for? (Issue #3808)
|
|
255
|
+
*
|
|
256
|
+
* True when the frame ends on a run of options numbered `1.` … `N.` (N ≥ 2,
|
|
257
|
+
* consecutive, wrapped label rows allowed between them, no boundary row
|
|
258
|
+
* inside) with one row wearing agy's `>` cursor, no `>` composer drawn under
|
|
259
|
+
* the run — agy paints none while a screen replaces it, so the options are the
|
|
260
|
+
* live screen's, not a reply's (a reply's list wears no cursor either) — and
|
|
261
|
+
* {@link readAntigravityNumberedDialog} does not read the frame (no complete
|
|
262
|
+
* `↑/↓ Navigate · tab Amend` footer: the login-method screen, a footer a narrow
|
|
263
|
+
* pane cut at `↑/↓ Nav`, or one below the pane altogether). Deliberately
|
|
264
|
+
* independent of the footer, so a footer that is not on screen cannot hand the
|
|
265
|
+
* frame back to the generic parser. A single `> 1. …` row — a sent message
|
|
266
|
+
* echoed above the spinner — is not a run.
|
|
267
|
+
*
|
|
268
|
+
* False for the `/feedback` menu (its `esc Cancel · 1-6 Select` footer directly
|
|
269
|
+
* under the last option), which keeps the generic reading #2364 left it.
|
|
270
|
+
*
|
|
271
|
+
* Callers treat true as "no prompt to answer": a human drives the screen.
|
|
272
|
+
*
|
|
273
|
+
* @param text - ANSI-stripped capture, box drawing optional
|
|
274
|
+
*/
|
|
275
|
+
function isAntigravityUnvouchedNumberedScreen(text) {
|
|
276
|
+
const lines = (0, tui_detection_frame_1.normalizeTuiFrameForDetection)(text).split('\n');
|
|
277
|
+
let last = -1;
|
|
278
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
279
|
+
if (patterns_1.ANTIGRAVITY_PROMPT_PATTERN.test(lines[i]))
|
|
280
|
+
return false;
|
|
281
|
+
if (OPTION_ROW_PATTERN.test(lines[i])) {
|
|
282
|
+
last = i;
|
|
283
|
+
break;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
if (last < 0)
|
|
287
|
+
return false;
|
|
288
|
+
// The run, read upward from the bottom option: N., N-1., … 1.
|
|
289
|
+
let expected = Number(OPTION_ROW_PATTERN.exec(lines[last])[2]);
|
|
290
|
+
if (expected < 2)
|
|
291
|
+
return false;
|
|
292
|
+
let highlighted = OPTION_ROW_PATTERN.exec(lines[last])[1] !== undefined;
|
|
293
|
+
const floor = Math.max(0, last - OPTION_RUN_MAX_ROWS);
|
|
294
|
+
for (let i = last - 1; i >= floor && expected > 1; i--) {
|
|
295
|
+
const match = OPTION_ROW_PATTERN.exec(lines[i]);
|
|
296
|
+
if (match === null) {
|
|
297
|
+
if (cli_patterns_1.ANTIGRAVITY_DIALOG_BOUNDARY_PATTERN.test(lines[i]))
|
|
298
|
+
return false;
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
if (Number(match[2]) !== expected - 1)
|
|
302
|
+
return false;
|
|
303
|
+
expected--;
|
|
304
|
+
if (match[1] !== undefined)
|
|
305
|
+
highlighted = true;
|
|
306
|
+
}
|
|
307
|
+
if (expected !== 1 || !highlighted)
|
|
308
|
+
return false;
|
|
309
|
+
const footer = lines.slice(last + 1).find(row => row.trim() !== '');
|
|
310
|
+
if (footer !== undefined && FEEDBACK_MENU_FOOTER_PATTERN.test(footer))
|
|
311
|
+
return false;
|
|
312
|
+
return readAntigravityNumberedDialog(lines) === null;
|
|
313
|
+
}
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* (Issue #3217). `cli-patterns.ts` re-exports every public name.
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.ANTIGRAVITY_SKIP_PATTERNS = exports.ANTIGRAVITY_SURVEY_PATTERN = exports.ANTIGRAVITY_DIALOG_MAX_ROWS = exports.ANTIGRAVITY_DIALOG_BOUNDARY_PATTERN = exports.ANTIGRAVITY_SWITCH_MODEL_HEADER_PATTERN = exports.ANTIGRAVITY_NUMBERED_OPTION_PATTERN = exports.ANTIGRAVITY_NAVIGATE_FOOTER_PATTERN = exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = exports.ANTIGRAVITY_SEPARATOR_PATTERN = exports.ANTIGRAVITY_THINKING_PATTERN = exports.ANTIGRAVITY_PROMPT_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_SOURCE = void 0;
|
|
7
|
+
exports.ANTIGRAVITY_SKIP_PATTERNS = exports.ANTIGRAVITY_TRUST_DIALOG_PATTERN = exports.ANTIGRAVITY_SURVEY_PATTERN = exports.ANTIGRAVITY_DIALOG_MAX_ROWS = exports.ANTIGRAVITY_DIALOG_BOUNDARY_PATTERN = exports.ANTIGRAVITY_SWITCH_MODEL_HEADER_PATTERN = exports.ANTIGRAVITY_NUMBERED_OPTION_PATTERN = exports.ANTIGRAVITY_PERMISSION_FOOTER_PATTERN = exports.ANTIGRAVITY_NAVIGATE_FOOTER_PATTERN = exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = exports.ANTIGRAVITY_SEPARATOR_PATTERN = exports.ANTIGRAVITY_THINKING_PATTERN = exports.ANTIGRAVITY_PROMPT_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_SOURCE = void 0;
|
|
8
|
+
exports.isAntigravityTrustScreen = isAntigravityTrustScreen;
|
|
8
9
|
exports.locateAntigravityDialogRegion = locateAntigravityDialogRegion;
|
|
9
10
|
exports.isAntigravityNumberedDialog = isAntigravityNumberedDialog;
|
|
10
11
|
const pasted_text_1 = require("../../shared/pasted-text");
|
|
@@ -104,6 +105,20 @@ exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = /Switch Model|↑\/↓\s*Navigate/m
|
|
|
104
105
|
* edit/expand command`, `enter Confirm`, `←/→ Effort enter Select`).
|
|
105
106
|
*/
|
|
106
107
|
exports.ANTIGRAVITY_NAVIGATE_FOOTER_PATTERN = /↑\/↓\s*Navigate/;
|
|
108
|
+
/**
|
|
109
|
+
* The footer every measured agy PERMISSION dialog ends on: `↑/↓ Navigate · tab
|
|
110
|
+
* Amend · f full diff` (file creation), `… · tab Amend · ctrl+g edit/expand
|
|
111
|
+
* command[ · ctrl+r Review]` (command execution)
|
|
112
|
+
* (`tests/fixtures/antigravity-live-2364/dialog-*.txt`).
|
|
113
|
+
*
|
|
114
|
+
* The numbered-dialog reader requires it on the footer row (Issue #3797 for the
|
|
115
|
+
* prompt observation, #3808 for every producer): agy 1.4's login-method screen
|
|
116
|
+
* (`↑/↓ Navigate · enter Select`) draws numbered rows too and is not a
|
|
117
|
+
* permission request. A footer cut short by a narrow pane, wrapped onto the
|
|
118
|
+
* next row, or spelled differently by another version fails it on purpose —
|
|
119
|
+
* the frame is then not answered.
|
|
120
|
+
*/
|
|
121
|
+
exports.ANTIGRAVITY_PERMISSION_FOOTER_PATTERN = /↑\/↓\s*Navigate\s*·\s*tab Amend\b/;
|
|
107
122
|
/**
|
|
108
123
|
* One numbered option row of agy's dialogs: `> 1. Yes`, ` 4. No`,
|
|
109
124
|
* ` 2. No, deny creation`.
|
|
@@ -176,6 +191,31 @@ exports.ANTIGRAVITY_DIALOG_MAX_ROWS = 60;
|
|
|
176
191
|
* that was waiting for a keypress. Anchored to the whole row.
|
|
177
192
|
*/
|
|
178
193
|
exports.ANTIGRAVITY_SURVEY_PATTERN = /^\s*\[1\]\s*Good\s+\[2\]\s*Fine\s+\[3\]\s*Bad\s+\[0\]\s*Skip\s*$/m;
|
|
194
|
+
/**
|
|
195
|
+
* The question of agy's startup folder-trust screen (Issue #988):
|
|
196
|
+
*
|
|
197
|
+
* Do you trust the contents of this project?
|
|
198
|
+
* > Yes, I trust this folder <- default-selected option
|
|
199
|
+
* No, exit
|
|
200
|
+
* ↑/↓ Navigate · enter Confirm
|
|
201
|
+
*
|
|
202
|
+
* Unnumbered, so {@link isAntigravityNumberedDialog} is false on it and neither
|
|
203
|
+
* the agy dialog reader nor the generic numbered parser reads it as a prompt
|
|
204
|
+
* (Issue #3757).
|
|
205
|
+
*/
|
|
206
|
+
exports.ANTIGRAVITY_TRUST_DIALOG_PATTERN = /Do you trust the contents of this project\?/;
|
|
207
|
+
/**
|
|
208
|
+
* Is agy's folder-trust screen live at the bottom of the frame (Issue #3757)?
|
|
209
|
+
*
|
|
210
|
+
* The question AND the `↑/↓ Navigate` footer, both in the status tail: the
|
|
211
|
+
* question alone also matches the dismissed screen left in the scrollback, or a
|
|
212
|
+
* reply quoting it, and neither of those is waiting for an answer.
|
|
213
|
+
*
|
|
214
|
+
* @param lastLines - The status detector's tail (`normalizeFrame(…).lastLines`)
|
|
215
|
+
*/
|
|
216
|
+
function isAntigravityTrustScreen(lastLines) {
|
|
217
|
+
return exports.ANTIGRAVITY_TRUST_DIALOG_PATTERN.test(lastLines) && exports.ANTIGRAVITY_NAVIGATE_FOOTER_PATTERN.test(lastLines);
|
|
218
|
+
}
|
|
179
219
|
/**
|
|
180
220
|
* Find the rows between the last boundary and the last `↑/↓ Navigate` footer
|
|
181
221
|
* (Issue #2364).
|