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
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
11
|
exports.claudeStatusDetector = void 0;
|
|
12
12
|
exports.findClaudeTranscriptTail = findClaudeTranscriptTail;
|
|
13
|
+
exports.isClaudeAskUserQuestionConfirmPage = isClaudeAskUserQuestionConfirmPage;
|
|
13
14
|
exports.readIdleEvidence = readIdleEvidence;
|
|
14
15
|
const cli_patterns_1 = require("../../cli-patterns");
|
|
15
16
|
const composer_text_1 = require("../../composer-text");
|
|
@@ -17,6 +18,7 @@ const prompt_detect_multiple_choice_1 = require("../../prompt-detect-multiple-ch
|
|
|
17
18
|
const verdicts_1 = require("../verdicts");
|
|
18
19
|
const status_reason_1 = require("../../status-reason");
|
|
19
20
|
const prompt_1 = require("./prompt");
|
|
21
|
+
const picker_chrome_1 = require("./picker-chrome");
|
|
20
22
|
const frame_1 = require("../frame");
|
|
21
23
|
const live_region_1 = require("./live-region");
|
|
22
24
|
const run_detection_1 = require("../run-detection");
|
|
@@ -59,6 +61,64 @@ function findClaudeTranscriptTail(contentLines) {
|
|
|
59
61
|
}
|
|
60
62
|
return index;
|
|
61
63
|
}
|
|
64
|
+
/** The confirmation page's question, as the whole row (Issue #3748). */
|
|
65
|
+
const CLAUDE_SUBMIT_CONFIRM_QUESTION_ROW = /^\s*Ready to submit your answers\?\s*$/;
|
|
66
|
+
/** Its option 1, as the whole row, cursor or not. */
|
|
67
|
+
const CLAUDE_SUBMIT_ANSWERS_OPTION_ROW = /^\s*(?:❯\s*)?1\.\s+Submit answers\s*$/;
|
|
68
|
+
/** Its option 2, as the whole row, cursor or not. */
|
|
69
|
+
const CLAUDE_SUBMIT_CANCEL_OPTION_ROW = /^\s*(?:❯\s*)?2\.\s+Cancel\s*$/;
|
|
70
|
+
/** The multi-question tab bar's `✔ Submit` tab — only that bar leads to this page. */
|
|
71
|
+
const CLAUDE_SUBMIT_TAB_PATTERN = /✔\s*Submit/;
|
|
72
|
+
/**
|
|
73
|
+
* How far above the question the tab bar may sit: the page lists every
|
|
74
|
+
* question and answer (`● …` / `→ …`) between them, wrapped at the pane width.
|
|
75
|
+
*/
|
|
76
|
+
const CLAUDE_SUBMIT_CONFIRM_TAB_LOOKBACK = 200;
|
|
77
|
+
/** The nearest non-blank row above `row`, or -1. */
|
|
78
|
+
function previousNonBlankRow(lines, row) {
|
|
79
|
+
for (let i = row - 1; i >= 0; i--) {
|
|
80
|
+
if (lines[i].trim() !== '')
|
|
81
|
+
return i;
|
|
82
|
+
}
|
|
83
|
+
return -1;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Is this frame Claude's `AskUserQuestion` confirmation page? (Issue #3748)
|
|
87
|
+
*
|
|
88
|
+
* Read strictly, row by row, from the end of the transcript up — all of:
|
|
89
|
+
*
|
|
90
|
+
* 1. the transcript's last row ({@link findClaudeTranscriptTail}, which steps
|
|
91
|
+
* over Claude's chrome) is `2. Cancel`, the row above it `1. Submit
|
|
92
|
+
* answers`, and the cursor `❯` is on one of the two;
|
|
93
|
+
* 2. the nearest non-blank row above the options IS `Ready to submit your
|
|
94
|
+
* answers?` — the whole row, not a row that contains it;
|
|
95
|
+
* 3. the multi-question tab bar (`← ☒ … ✔ Submit →`) sits above that.
|
|
96
|
+
*
|
|
97
|
+
* Deliberately NOT `detectClaudeDialog`'s `ask_user` kind: that classifies by a
|
|
98
|
+
* substring of the four rows above the options, so a Bash approval whose command
|
|
99
|
+
* is `grep -rn "review your answers" src`, an Edit approval whose diff holds
|
|
100
|
+
* the phrase, or a question that asks it read as this page — and Auto-Yes then
|
|
101
|
+
* left an ordinary `1. Yes` to a human. The dialog gate's reading is unchanged.
|
|
102
|
+
*
|
|
103
|
+
* `Submit answers` picks nothing — it commits whatever stands as the answers —
|
|
104
|
+
* so Auto-Yes leaves this page to a human, as it does Command Code's (#3497).
|
|
105
|
+
*/
|
|
106
|
+
function isClaudeAskUserQuestionConfirmPage(frame) {
|
|
107
|
+
const lines = frame.contentLines;
|
|
108
|
+
const cancelRow = findClaudeTranscriptTail(lines);
|
|
109
|
+
if (cancelRow < 0 || !CLAUDE_SUBMIT_CANCEL_OPTION_ROW.test(lines[cancelRow]))
|
|
110
|
+
return false;
|
|
111
|
+
const submitRow = cancelRow - 1;
|
|
112
|
+
if (submitRow < 0 || !CLAUDE_SUBMIT_ANSWERS_OPTION_ROW.test(lines[submitRow]))
|
|
113
|
+
return false;
|
|
114
|
+
if (!lines[submitRow].includes('❯') && !lines[cancelRow].includes('❯'))
|
|
115
|
+
return false;
|
|
116
|
+
const questionRow = previousNonBlankRow(lines, submitRow);
|
|
117
|
+
if (questionRow < 0 || !CLAUDE_SUBMIT_CONFIRM_QUESTION_ROW.test(lines[questionRow]))
|
|
118
|
+
return false;
|
|
119
|
+
const tabRow = (0, picker_chrome_1.findAskUserQuestionTabRow)(lines, questionRow, CLAUDE_SUBMIT_CONFIRM_TAB_LOOKBACK);
|
|
120
|
+
return tabRow >= 0 && CLAUDE_SUBMIT_TAB_PATTERN.test(lines[tabRow]);
|
|
121
|
+
}
|
|
62
122
|
/**
|
|
63
123
|
* §4 D1 決定 1: does this frame positively show that Claude's turn is over?
|
|
64
124
|
*
|
|
@@ -17,6 +17,7 @@ exports.hasCommandCodePlanReviewFooterAtBottom = hasCommandCodePlanReviewFooterA
|
|
|
17
17
|
exports.hasDismissablePanelFooter = hasDismissablePanelFooter;
|
|
18
18
|
exports.isCommandCodeQuestionTabRow = isCommandCodeQuestionTabRow;
|
|
19
19
|
exports.readCommandCodeReviewPage = readCommandCodeReviewPage;
|
|
20
|
+
exports.isCommandCodeQuestionConfirmPage = isCommandCodeQuestionConfirmPage;
|
|
20
21
|
const ansi_1 = require("../../ansi");
|
|
21
22
|
const selection_shape_patterns_1 = require("../../selection-shape-patterns");
|
|
22
23
|
/**
|
|
@@ -404,22 +405,13 @@ const COMMAND_CODE_REVIEW_BACK_HINT_PATTERN = /^[^\S\n]*\u2190[^\S\n]+to[^\S\n]+
|
|
|
404
405
|
*/
|
|
405
406
|
const COMMAND_CODE_REVIEW_UNANSWERED_PATTERN = /have\s+not\s+answered\s+all\s+questions/i;
|
|
406
407
|
/**
|
|
407
|
-
*
|
|
408
|
-
* (Issue #2755 §7
|
|
409
|
-
*
|
|
410
|
-
* The same region {@link readCommandCodeQuestionRegion} works on — last rule
|
|
411
|
-
* row, tab strip as the first row under it — plus the three rows above. The
|
|
412
|
-
* question-shaped conditions are deliberately NOT applied: this page has no
|
|
413
|
-
* question body of its own on the `Submit`/`Cancel` spelling (the answers sit
|
|
414
|
-
* where the question would), and it draws `1.` twice, so the strict reading
|
|
415
|
-
* declines it for a numbering reason that says nothing about what it is.
|
|
416
|
-
*
|
|
417
|
-
* `null` for everything else, so no existing verdict moves except the two
|
|
418
|
-
* captures this is about.
|
|
408
|
+
* The rows under the frame's LAST rule row, when the first of them that carries
|
|
409
|
+
* content is a question-screen tab strip (Issue #2755 §7, split out by Issue
|
|
410
|
+
* #3497 so the Review page reading and the confirm-page guard share one anchor).
|
|
419
411
|
*
|
|
420
412
|
* @param frame - a raw `capture-pane -p -e` frame, ANSI intact (CRLF tolerated)
|
|
421
413
|
*/
|
|
422
|
-
function
|
|
414
|
+
function readQuestionTabRegion(frame) {
|
|
423
415
|
if (!frame)
|
|
424
416
|
return null;
|
|
425
417
|
const lines = frame.replace(/\r\n/g, '\n').split('\n').map(ansi_1.stripAnsi);
|
|
@@ -446,6 +438,28 @@ function readCommandCodeReviewPage(frame) {
|
|
|
446
438
|
return null;
|
|
447
439
|
if (!isCommandCodeQuestionTabRow(region[tabOffset]))
|
|
448
440
|
return null;
|
|
441
|
+
return region;
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Read Command Code's `AskUserQuestion` Review page, if this frame is one
|
|
445
|
+
* (Issue #2755 §7).
|
|
446
|
+
*
|
|
447
|
+
* The same region {@link readCommandCodeQuestionRegion} works on — last rule
|
|
448
|
+
* row, tab strip as the first row under it — plus the three rows above. The
|
|
449
|
+
* question-shaped conditions are deliberately NOT applied: this page has no
|
|
450
|
+
* question body of its own on the `Submit`/`Cancel` spelling (the answers sit
|
|
451
|
+
* where the question would), and it draws `1.` twice, so the strict reading
|
|
452
|
+
* declines it for a numbering reason that says nothing about what it is.
|
|
453
|
+
*
|
|
454
|
+
* `null` for everything else, so no existing verdict moves except the two
|
|
455
|
+
* captures this is about.
|
|
456
|
+
*
|
|
457
|
+
* @param frame - a raw `capture-pane -p -e` frame, ANSI intact (CRLF tolerated)
|
|
458
|
+
*/
|
|
459
|
+
function readCommandCodeReviewPage(frame) {
|
|
460
|
+
const region = readQuestionTabRegion(frame);
|
|
461
|
+
if (region === null)
|
|
462
|
+
return null;
|
|
449
463
|
const body = region.join('\n');
|
|
450
464
|
if (!COMMAND_CODE_REVIEW_SUBMIT_ROW_PATTERN.test(body))
|
|
451
465
|
return null;
|
|
@@ -459,3 +473,39 @@ function readCommandCodeReviewPage(frame) {
|
|
|
459
473
|
cursorOnSubmit: submitRow !== undefined && submitRow.includes(exports.COMMAND_CODE_CURSOR_GLYPH),
|
|
460
474
|
};
|
|
461
475
|
}
|
|
476
|
+
/**
|
|
477
|
+
* Is this frame an `AskUserQuestion` CONFIRM page — `❯ 1. Submit` / `2. Cancel`
|
|
478
|
+
* under the question screen's tab strip — whatever else it draws? (Issue #3497)
|
|
479
|
+
*
|
|
480
|
+
* {@link readCommandCodeReviewPage} needs all three of its rows, the back hint
|
|
481
|
+
* included, and on a frame without `← to go back and edit` it answers `null`.
|
|
482
|
+
* The question region declines that page too (it draws `1.` twice), so the
|
|
483
|
+
* GENERIC parser reads it; and a free-text question drawn with the pair as its
|
|
484
|
+
* only options is read by the question reader itself. Either way the payload is
|
|
485
|
+
* a two-option `multiple_choice` whose default is `Submit`, which Auto-Yes
|
|
486
|
+
* answered `1` — committing the worker's own proposal as the human's answer
|
|
487
|
+
* (Kewton/Musunest#283).
|
|
488
|
+
*
|
|
489
|
+
* This is the wider reading Auto-Yes declines on, and deliberately NOT a change
|
|
490
|
+
* to the Review page reading: the status path and the answer panels keep what
|
|
491
|
+
* they publish for these frames, so a human is still shown the question. True
|
|
492
|
+
* when the tab strip sits directly under the last rule row and the region
|
|
493
|
+
* carries the confirm pair — `1. Submit` and `2. Cancel`, the `❯` on either —
|
|
494
|
+
* with or without the back hint, and whichever tab is current (the incident's
|
|
495
|
+
* page was a free-text question drawn with the same pair).
|
|
496
|
+
*
|
|
497
|
+
* The question screens themselves (#2521 / #2522 / #2753 / #2754) never carry
|
|
498
|
+
* the pair: their `Submit` / `Next` confirm row has no number, and the Review
|
|
499
|
+
* TAB showing a diff (`◯ Dispatch | ● Review` over `1 +` gutter rows) has no
|
|
500
|
+
* `Submit` row at all.
|
|
501
|
+
*
|
|
502
|
+
* @param frame - a raw capture with its box drawing intact (ANSI optional)
|
|
503
|
+
*/
|
|
504
|
+
function isCommandCodeQuestionConfirmPage(frame) {
|
|
505
|
+
const region = readQuestionTabRegion(frame);
|
|
506
|
+
if (region === null)
|
|
507
|
+
return false;
|
|
508
|
+
const body = region.join('\n');
|
|
509
|
+
return (COMMAND_CODE_REVIEW_SUBMIT_ROW_PATTERN.test(body) &&
|
|
510
|
+
COMMAND_CODE_REVIEW_CANCEL_ROW_PATTERN.test(body));
|
|
511
|
+
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* (Issue #3217). `cli-patterns.ts` re-exports every public name.
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.COPILOT_SKIP_PATTERNS = exports.COPILOT_FOLDER_TRUST_ANSWER_KEY = exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN = exports.COPILOT_FOLDER_TRUST_ANCHORS = exports.COPILOT_SELECTION_FOOTER_PATTERN = exports.COPILOT_BOOT_BANNER_ANCHORS = exports.COPILOT_TRANSCRIPT_CONTINUATION_PATTERN = exports.COPILOT_TOOL_ROW_PATTERN = exports.COPILOT_TOOL_VERBS = exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN = exports.COPILOT_USER_ECHO_PATTERN = exports.COPILOT_REASONING_HEADER_PATTERN = exports.COPILOT_BOX_ROW_PATTERN = exports.COPILOT_SEPARATOR_PATTERN = exports.COPILOT_IDLE_STATUS_PATTERN = exports.COPILOT_WORKING_STATUS_PATTERN = exports.COPILOT_THINKING_PATTERN = exports.COPILOT_PROMPT_PATTERN = void 0;
|
|
7
|
+
exports.COPILOT_SKIP_PATTERNS = exports.COPILOT_FOLDER_TRUST_ANSWER_KEY = exports.COPILOT_FOLDER_TRUST_OPTION_LABEL_PATTERN = exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN = exports.COPILOT_FOLDER_TRUST_ANCHORS = exports.COPILOT_SELECTION_FOOTER_PATTERN = exports.COPILOT_BOOT_BANNER_ANCHORS = exports.COPILOT_TRANSCRIPT_CONTINUATION_PATTERN = exports.COPILOT_TOOL_ROW_PATTERN = exports.COPILOT_TOOL_VERBS = exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN = exports.COPILOT_USER_ECHO_PATTERN = exports.COPILOT_REASONING_HEADER_PATTERN = exports.COPILOT_BOX_ROW_PATTERN = exports.COPILOT_SEPARATOR_PATTERN = exports.COPILOT_IDLE_STATUS_PATTERN = exports.COPILOT_WORKING_STATUS_PATTERN = exports.COPILOT_THINKING_PATTERN = exports.COPILOT_PROMPT_PATTERN = void 0;
|
|
8
8
|
exports.readCopilotStatusBar = readCopilotStatusBar;
|
|
9
9
|
exports.findCopilotChromeStart = findCopilotChromeStart;
|
|
10
10
|
exports.isCopilotSelectionFrame = isCopilotSelectionFrame;
|
|
@@ -559,6 +559,12 @@ exports.COPILOT_FOLDER_TRUST_ANCHORS = [
|
|
|
559
559
|
* line and accept `1. Yes, and remember ...`.
|
|
560
560
|
*/
|
|
561
561
|
exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN = /^[ \t]*(?:[>❯][ \t]*)?1\.[ \t]+Yes[ \t]*$/m;
|
|
562
|
+
/**
|
|
563
|
+
* The folder-trust dialog's option labels as the prompt parser reads them
|
|
564
|
+
* (`1. Yes` -> `Yes`), for the Auto-Yes poller to tell the dialog itself from
|
|
565
|
+
* another prompt under a reply that quotes its question (Issue #3790).
|
|
566
|
+
*/
|
|
567
|
+
exports.COPILOT_FOLDER_TRUST_OPTION_LABEL_PATTERN = /^(?:Yes|Yes, and remember this folder for future sessions|No \(Esc\))$/;
|
|
562
568
|
/**
|
|
563
569
|
* Key that selects {@link COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN}.
|
|
564
570
|
* Measured on 1.0.80: the digit confirms on its own — sending a trailing Enter
|
|
@@ -101,6 +101,7 @@ exports.USER_TURN_ADOPTION_WINDOW_MS = void 0;
|
|
|
101
101
|
exports.normalizeUserTurnContent = normalizeUserTurnContent;
|
|
102
102
|
exports.recordUserTurn = recordUserTurn;
|
|
103
103
|
const logger_1 = require("../../lib/logger");
|
|
104
|
+
const poller_owner_1 = require("../../lib/polling/poller-owner");
|
|
104
105
|
const logger = (0, logger_1.createLogger)('lib/history/user-turn-recorder');
|
|
105
106
|
/**
|
|
106
107
|
* How far from the agent's own clock a `/send` row may sit and still be the
|
|
@@ -182,6 +183,19 @@ async function recordUserTurn(target, key, content, timestampMs, options = {}) {
|
|
|
182
183
|
timestampMs: existing.timestamp.getTime(),
|
|
183
184
|
};
|
|
184
185
|
}
|
|
186
|
+
// Issue #3705: the last `await` is behind us, and from here the recorder
|
|
187
|
+
// writes — a key onto an existing `/send` row, or a new row — with none
|
|
188
|
+
// between. A retired tick does neither under the instance it lost: both are
|
|
189
|
+
// keyed by `request_id`, which stops the same row being written twice and
|
|
190
|
+
// says nothing about who may write it.
|
|
191
|
+
if (!(0, poller_owner_1.mayActForAgentInstance)(target)) {
|
|
192
|
+
logger.info('user-turn-record-refused', {
|
|
193
|
+
...describe(target),
|
|
194
|
+
requestId: key,
|
|
195
|
+
generation: (0, poller_owner_1.currentPollerOwner)()?.generation,
|
|
196
|
+
});
|
|
197
|
+
return { outcome: 'refused', messageId: null, timestampMs: null };
|
|
198
|
+
}
|
|
185
199
|
const at = timestampMs > 0 ? timestampMs : Date.now();
|
|
186
200
|
const adopted = adoptExistingRow(chatDb, db, target, instanceId, key, normalized, at, options);
|
|
187
201
|
if (adopted)
|
|
@@ -524,6 +524,10 @@ async function captureAntigravityTranscriptTurn(target, capture = {}, report) {
|
|
|
524
524
|
// what the promotion to "final" rests on.
|
|
525
525
|
const instanceKey = keyOf(target);
|
|
526
526
|
const stopAt = await resolveAntigravityStopAt(target);
|
|
527
|
+
// Issue #3705: the follow list below is this instance's, and a tick retired
|
|
528
|
+
// while the reads above ran no longer speaks for it. Nothing is written yet.
|
|
529
|
+
if (!(0, transcript_history_1.mayReaderWrite)(target, logger, 'antigravity-transcript-write-refused', 'follow-list'))
|
|
530
|
+
return false;
|
|
527
531
|
const completions = new Map();
|
|
528
532
|
for (const turn of built.turns) {
|
|
529
533
|
completions.set(turn.stepIndex, (0, transcript_1.resolveAntigravityTurnCompletion)(turn, stopAt));
|
|
@@ -546,6 +550,9 @@ async function captureAntigravityTranscriptTurn(target, capture = {}, report) {
|
|
|
546
550
|
});
|
|
547
551
|
}
|
|
548
552
|
const pending = await selectUnwrittenAntigravityTurns(target, built.turns);
|
|
553
|
+
// Issue #3705: `unsettledStepsFor` below may drop the follow list.
|
|
554
|
+
if (!(0, transcript_history_1.mayReaderWrite)(target, logger, 'antigravity-transcript-write-refused', 'follow-list'))
|
|
555
|
+
return false;
|
|
549
556
|
const writtenTurns = built.turns.slice(0, built.turns.length - pending.turns.length);
|
|
550
557
|
// Before anything is written: the rows that are already there (#2438). This
|
|
551
558
|
// is deliberately ahead of the early return below, because "the newest turn
|
|
@@ -598,6 +605,11 @@ async function captureAntigravityTranscriptTurn(target, capture = {}, report) {
|
|
|
598
605
|
// An unconfirmed one joins the follow list so that its conclusion is still
|
|
599
606
|
// picked up once three later turns have pushed it out of #2438's window.
|
|
600
607
|
if (captured) {
|
|
608
|
+
// Issue #3705: after the write's own `await`. The row is there (it was
|
|
609
|
+
// written while the tick still owned the key), so the answer is true;
|
|
610
|
+
// the follow list and the cursor are no longer this tick's to move.
|
|
611
|
+
if (!(0, transcript_history_1.mayReaderWrite)(target, logger, 'antigravity-transcript-write-refused', 'follow-list'))
|
|
612
|
+
return captured;
|
|
601
613
|
noteUnsettledAntigravityTurn(target, instanceKey, turn, completions.get(turn.stepIndex) ?? (0, transcript_1.resolveAntigravityTurnCompletion)(turn, stopAt));
|
|
602
614
|
}
|
|
603
615
|
}
|
|
@@ -810,6 +822,10 @@ async function growAntigravityTurnRow(target, existing, rendered, path) {
|
|
|
810
822
|
Promise.resolve().then(() => __importStar(require('../../../../lib/db'))),
|
|
811
823
|
Promise.resolve().then(() => __importStar(require('../../../../lib/ws-server'))),
|
|
812
824
|
]);
|
|
825
|
+
// Issue #3705: by row id, so a retired tick would grow a row the successor —
|
|
826
|
+
// or the migration — has since taken over.
|
|
827
|
+
if (!(0, transcript_history_1.mayReaderWrite)(target, logger, 'antigravity-transcript-write-refused', 'grow'))
|
|
828
|
+
return false;
|
|
813
829
|
updateMessageContent(getDbInstance(), existing.id, rendered.body);
|
|
814
830
|
broadcastMessage('message_updated', {
|
|
815
831
|
worktreeId: target.worktreeId,
|
|
@@ -866,6 +882,11 @@ async function refreshAntigravityTurnRows(target, candidates, path, follow) {
|
|
|
866
882
|
const db = getDbInstance();
|
|
867
883
|
let updated = 0;
|
|
868
884
|
for (const turn of candidates) {
|
|
885
|
+
// Issue #3705: asked at the top of every pass — the first comes after the
|
|
886
|
+
// imports, every later one after the previous turn's grow — because both
|
|
887
|
+
// follow-list writes below come before this pass's own `await`.
|
|
888
|
+
if (!(0, transcript_history_1.mayReaderWrite)(target, logger, 'antigravity-transcript-write-refused', 'follow-list'))
|
|
889
|
+
break;
|
|
869
890
|
// Issue #2443: the row lookup moved ahead of the writable check, because
|
|
870
891
|
// the follow list is a statement about ROWS. A turn that is open again has a
|
|
871
892
|
// row whose body is provisional by definition and must stay followed, and a
|
|
@@ -1067,6 +1088,13 @@ async function writeAntigravityTurn(target, turn, rendered, timestampMs, path, r
|
|
|
1067
1088
|
await growAntigravityTurnRow(target, existing, rendered, path);
|
|
1068
1089
|
return true;
|
|
1069
1090
|
}
|
|
1091
|
+
// Issue #3705: the last `await` (the imports) is behind us and the row and its
|
|
1092
|
+
// broadcast follow with none between. A tick retired meanwhile writes no row
|
|
1093
|
+
// under the instance it lost — the request id only stops the SAME row being
|
|
1094
|
+
// written twice — and answers false: History does not hold the turn.
|
|
1095
|
+
if (!(0, transcript_history_1.mayReaderWrite)(target, logger, 'antigravity-transcript-write-refused', 'reply-row')) {
|
|
1096
|
+
return false;
|
|
1097
|
+
}
|
|
1070
1098
|
const message = createMessage(db, {
|
|
1071
1099
|
worktreeId: target.worktreeId,
|
|
1072
1100
|
role: 'assistant',
|
|
@@ -1238,6 +1238,13 @@ async function writeClaudeTurn(target, turn, rendered, timestampMs, path, report
|
|
|
1238
1238
|
await growClaudeTurnRow(target, existing, rendered, path);
|
|
1239
1239
|
return true;
|
|
1240
1240
|
}
|
|
1241
|
+
// Issue #3705: the last `await` (the imports) is behind us and the row and its
|
|
1242
|
+
// broadcast follow with none between. A tick retired meanwhile writes no row
|
|
1243
|
+
// under the instance it lost — the request id only stops the SAME row being
|
|
1244
|
+
// written twice — and answers false: History does not hold the turn.
|
|
1245
|
+
if (!(0, transcript_history_1.mayReaderWrite)(target, logger, 'claude-transcript-write-refused', 'reply-row')) {
|
|
1246
|
+
return false;
|
|
1247
|
+
}
|
|
1241
1248
|
const message = createMessage(db, {
|
|
1242
1249
|
worktreeId: target.worktreeId,
|
|
1243
1250
|
role: 'assistant',
|
|
@@ -729,6 +729,13 @@ async function writeCodexTurn(target, turn, rendered, timestampMs, windowFacts,
|
|
|
729
729
|
itemsInWindow: turn.items.length,
|
|
730
730
|
});
|
|
731
731
|
}
|
|
732
|
+
// Issue #3705: the last `await` (the imports) is behind us and the row and its
|
|
733
|
+
// broadcast follow with none between. A tick retired meanwhile writes no row
|
|
734
|
+
// under the instance it lost — the request id only stops the SAME row being
|
|
735
|
+
// written twice — and answers false: History does not hold the turn.
|
|
736
|
+
if (!(0, transcript_history_1.mayReaderWrite)(target, logger, 'codex-transcript-write-refused', 'reply-row')) {
|
|
737
|
+
return false;
|
|
738
|
+
}
|
|
732
739
|
const message = createMessage(db, {
|
|
733
740
|
worktreeId: target.worktreeId,
|
|
734
741
|
role: 'assistant',
|
|
@@ -765,6 +765,13 @@ async function writeCommandCodeTurn(target, turn, rendered, timestampMs, path, r
|
|
|
765
765
|
await growCommandCodeTurnRow(target, existing, rendered, path);
|
|
766
766
|
return true;
|
|
767
767
|
}
|
|
768
|
+
// Issue #3705: the last `await` (the imports) is behind us and the row and its
|
|
769
|
+
// broadcast follow with none between. A tick retired meanwhile writes no row
|
|
770
|
+
// under the instance it lost — the request id only stops the SAME row being
|
|
771
|
+
// written twice — and answers false: History does not hold the turn.
|
|
772
|
+
if (!(0, transcript_history_1.mayReaderWrite)(target, logger, 'command-code-transcript-write-refused', 'reply-row')) {
|
|
773
|
+
return false;
|
|
774
|
+
}
|
|
768
775
|
const message = createMessage(db, {
|
|
769
776
|
worktreeId: target.worktreeId,
|
|
770
777
|
role: 'assistant',
|
|
@@ -367,9 +367,13 @@ async function writeOpencodeV2Turn(target, rendered, timestampMs) {
|
|
|
367
367
|
* @param target - The instance the stream belongs to
|
|
368
368
|
* @param port - Its server
|
|
369
369
|
* @param sessionId - `ses_…` from the end-of-turn frame
|
|
370
|
+
* @param isCurrent - Whether the subscription that asked is still the
|
|
371
|
+
* instance's (Issue #3733); checked after the read, right before the model
|
|
372
|
+
* is latched. False skips only the latch: the rows are still written (the
|
|
373
|
+
* turn did happen, and `requestId` keeps a later sync from doubling them)
|
|
370
374
|
* @returns How many rows were written
|
|
371
375
|
*/
|
|
372
|
-
function syncOpencodeV2History(target, port, sessionId) {
|
|
376
|
+
function syncOpencodeV2History(target, port, sessionId, isCurrent = () => true) {
|
|
373
377
|
return serialize((0, secrets_1.opencodeV2KeyOf)(target), async () => {
|
|
374
378
|
const instanceId = target.instanceId ?? target.cliToolId;
|
|
375
379
|
try {
|
|
@@ -395,7 +399,12 @@ function syncOpencodeV2History(target, port, sessionId) {
|
|
|
395
399
|
}
|
|
396
400
|
// Issue #2964: the model that answered, onto the hook latch the UI and
|
|
397
401
|
// `capture --json` read. Before the rows, so a failed write cannot cost it.
|
|
398
|
-
|
|
402
|
+
// Issue #3733: not for a subscription closed or replaced during the read —
|
|
403
|
+
// a restarted or stopped session would show the old model, and its change
|
|
404
|
+
// broadcast and Push (#2357) would fire for a session that is not there.
|
|
405
|
+
if (isCurrent()) {
|
|
406
|
+
(0, agent_event_state_1.recordAgentReportedModel)(target.worktreeId, tool_id_1.OPENCODE_V2_CLI_TOOL_ID, target.instanceId ?? tool_id_1.OPENCODE_V2_CLI_TOOL_ID, readLatestOpencodeV2AssistantModel(entries));
|
|
407
|
+
}
|
|
399
408
|
const closed = buildOpencodeV2TurnsFromMessages(entries, sessionId).filter((turn) => turn.closed);
|
|
400
409
|
const kept = closed.slice(-exports.MAX_OPENCODE_V2_SYNCED_TURNS);
|
|
401
410
|
let written = 0;
|
|
@@ -386,7 +386,7 @@ function deliver(state, frame) {
|
|
|
386
386
|
error: error instanceof Error ? error.message : String(error),
|
|
387
387
|
});
|
|
388
388
|
}
|
|
389
|
-
void recordOpencodeV2TurnEnd(state.target, state.port, frame);
|
|
389
|
+
void recordOpencodeV2TurnEnd(state.target, state.port, frame, () => isCurrentSubscription(state));
|
|
390
390
|
void refreshOpencodeV2UsageOnFrame(state.target, state.port, frame, () => isCurrentSubscription(state));
|
|
391
391
|
}
|
|
392
392
|
function isCurrentSubscription(state) {
|
|
@@ -429,16 +429,18 @@ function refreshOpencodeV2UsageOnFrame(target, port, frame, isCurrent = () => tr
|
|
|
429
429
|
*
|
|
430
430
|
* Exported for the tests, which drive frames through the path the stream does.
|
|
431
431
|
*
|
|
432
|
+
* @param isCurrent - Handed to `syncOpencodeV2History`, which skips the model
|
|
433
|
+
* latch when it is false after the read (Issue #3733)
|
|
432
434
|
* @returns The sync, or null when the frame ends no turn
|
|
433
435
|
*/
|
|
434
|
-
function recordOpencodeV2TurnEnd(target, port, frame) {
|
|
436
|
+
function recordOpencodeV2TurnEnd(target, port, frame, isCurrent = () => true) {
|
|
435
437
|
try {
|
|
436
438
|
if (!(0, history_1.isOpencodeV2TurnEndEventType)((0, mappers_1.frameType)(frame)))
|
|
437
439
|
return null;
|
|
438
440
|
const sessionId = (0, mappers_1.frameSessionId)(frame);
|
|
439
441
|
if (sessionId === null)
|
|
440
442
|
return null;
|
|
441
|
-
return (0, history_1.syncOpencodeV2History)(target, port, sessionId);
|
|
443
|
+
return (0, history_1.syncOpencodeV2History)(target, port, sessionId, isCurrent);
|
|
442
444
|
}
|
|
443
445
|
catch (error) {
|
|
444
446
|
logger.warn('opencode-v2-history-trigger-failed', {
|
|
@@ -41,6 +41,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
41
41
|
};
|
|
42
42
|
})();
|
|
43
43
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
exports.mayReaderWrite = mayReaderWrite;
|
|
44
45
|
exports.resolveAssistantTimestampMs = resolveAssistantTimestampMs;
|
|
45
46
|
exports.nextTurnOpensAt = nextTurnOpensAt;
|
|
46
47
|
exports.isReadableFile = isReadableFile;
|
|
@@ -51,6 +52,35 @@ exports.growTurnRowTo = growTurnRowTo;
|
|
|
51
52
|
exports.refreshTurnRowsTo = refreshTurnRowsTo;
|
|
52
53
|
const promises_1 = require("fs/promises");
|
|
53
54
|
const path_1 = require("path");
|
|
55
|
+
const poller_owner_1 = require("../../../lib/polling/poller-owner");
|
|
56
|
+
/**
|
|
57
|
+
* Whether the reader may still write for `target` now, logging the refusal when
|
|
58
|
+
* it may not (Issue #3705).
|
|
59
|
+
*
|
|
60
|
+
* Asked by every reader write — a reply row, its growth, a user row, its key,
|
|
61
|
+
* the follow list — after the last `await` before it and with none between it
|
|
62
|
+
* and the write. The question is the poller's (`mayActForAgentInstance`): only
|
|
63
|
+
* a response-poller tick whose chain was stopped (a stop, a restart past
|
|
64
|
+
* `STALLED_TICK_TIMEOUT`, a worktree-ID migration) and that is reading for its
|
|
65
|
+
* own instance is turned away. The Stop hook, a route and a tick reading for
|
|
66
|
+
* another instance write as before. Answering false writes nothing — the
|
|
67
|
+
* request id of a row makes a write idempotent, it does not make a retired
|
|
68
|
+
* tick's write right, and a grow or a key is not idempotent at all.
|
|
69
|
+
*
|
|
70
|
+
* @param refusedEvent - The tool's own log event for the refusal
|
|
71
|
+
* @param write - What was about to be written, for the log line
|
|
72
|
+
*/
|
|
73
|
+
function mayReaderWrite(target, logger, refusedEvent, write) {
|
|
74
|
+
if ((0, poller_owner_1.mayActForAgentInstance)(target))
|
|
75
|
+
return true;
|
|
76
|
+
logger.info(refusedEvent, {
|
|
77
|
+
worktreeId: target.worktreeId,
|
|
78
|
+
instanceId: target.instanceId ?? target.cliToolId,
|
|
79
|
+
generation: (0, poller_owner_1.currentPollerOwner)()?.generation,
|
|
80
|
+
write,
|
|
81
|
+
});
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
54
84
|
/**
|
|
55
85
|
* When the assistant row for this turn is dated.
|
|
56
86
|
*
|
|
@@ -213,6 +243,10 @@ async function growTurnRowTo(target, existing, rendered, path, logger, updatedEv
|
|
|
213
243
|
Promise.resolve().then(() => __importStar(require('../../../lib/db'))),
|
|
214
244
|
Promise.resolve().then(() => __importStar(require('../../../lib/ws-server'))),
|
|
215
245
|
]);
|
|
246
|
+
// Issue #3705: by row id, so a retired tick would grow a row the successor —
|
|
247
|
+
// or the migration — has since taken over.
|
|
248
|
+
if (!mayReaderWrite(target, logger, 'transcript-write-refused', 'grow'))
|
|
249
|
+
return false;
|
|
216
250
|
updateMessageContent(getDbInstance(), existing.id, rendered.body);
|
|
217
251
|
broadcastMessage('message_updated', {
|
|
218
252
|
worktreeId: target.worktreeId,
|
|
@@ -69,7 +69,8 @@ function getLogFilePath(worktreeId, cliToolId = 'claude') {
|
|
|
69
69
|
* @param userMessage - User's message
|
|
70
70
|
* @param claudeResponse - Claude's response
|
|
71
71
|
* @param cliToolId - CLI tool ID (claude, codex, gemini)
|
|
72
|
-
* @
|
|
72
|
+
* @param options - See {@link CreateLogOptions}
|
|
73
|
+
* @returns Path to the created log file, or null when `options.mayWrite` refused it
|
|
73
74
|
*
|
|
74
75
|
* @example
|
|
75
76
|
* ```typescript
|
|
@@ -81,7 +82,7 @@ function getLogFilePath(worktreeId, cliToolId = 'claude') {
|
|
|
81
82
|
* );
|
|
82
83
|
* ```
|
|
83
84
|
*/
|
|
84
|
-
async function createLog(worktreeId, userMessage, claudeResponse, cliToolId = 'claude') {
|
|
85
|
+
async function createLog(worktreeId, userMessage, claudeResponse, cliToolId = 'claude', options = {}) {
|
|
85
86
|
await ensureLogDirectory(cliToolId);
|
|
86
87
|
const logPath = getLogFilePath(worktreeId, cliToolId);
|
|
87
88
|
const timestamp = (0, date_fns_1.format)(new Date(), 'yyyy-MM-dd HH:mm:ss');
|
|
@@ -105,6 +106,10 @@ async function createLog(worktreeId, userMessage, claudeResponse, cliToolId = 'c
|
|
|
105
106
|
logContent += `### ${displayName}\n\n`;
|
|
106
107
|
logContent += `${claudeResponse}\n\n`;
|
|
107
108
|
logContent += `---\n\n`;
|
|
109
|
+
// Issue #3705: after the two awaits above and right before the write — the
|
|
110
|
+
// only place the caller's question can still be answered for this entry.
|
|
111
|
+
if (options.mayWrite && !options.mayWrite())
|
|
112
|
+
return null;
|
|
108
113
|
await promises_1.default.writeFile(logPath, logContent, 'utf-8');
|
|
109
114
|
return logPath;
|
|
110
115
|
}
|
|
@@ -41,6 +41,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
41
41
|
exports.ANTIGRAVITY_PERMISSION_RECEIPT_WINDOW_MS = void 0;
|
|
42
42
|
exports.recordAntigravityPermissionReceipt = recordAntigravityPermissionReceipt;
|
|
43
43
|
exports.hasRecentAntigravityPermissionReceipt = hasRecentAntigravityPermissionReceipt;
|
|
44
|
+
exports.getAntigravityPermissionReceiptAt = getAntigravityPermissionReceiptAt;
|
|
44
45
|
exports.resetAntigravityPermissionReceiptsForTests = resetAntigravityPermissionReceiptsForTests;
|
|
45
46
|
const auto_yes_state_1 = require("../../lib/auto-yes-state");
|
|
46
47
|
const global_state_1 = require("../global-state");
|
|
@@ -69,6 +70,12 @@ function pruneExpiredReceipts(now) {
|
|
|
69
70
|
receipts.delete(key);
|
|
70
71
|
}
|
|
71
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Per-instance episode state of the poller's reads (Issue #3767); the logic is in
|
|
75
|
+
* `antigravity-receipt-episodes.ts`. The Map lives here only so that
|
|
76
|
+
* {@link resetAntigravityPermissionReceiptsForTests} empties both records.
|
|
77
|
+
*/
|
|
78
|
+
const observations = (0, global_state_1.getOrInitGlobal)('__antigravityReceiptObservations', () => new Map());
|
|
72
79
|
/**
|
|
73
80
|
* Record that agy asked CommandMate about a tool call.
|
|
74
81
|
*
|
|
@@ -107,7 +114,15 @@ function hasRecentAntigravityPermissionReceipt(worktreeId, cliToolId, instanceId
|
|
|
107
114
|
return false;
|
|
108
115
|
return now - receipt.at <= exports.ANTIGRAVITY_PERMISSION_RECEIPT_WINDOW_MS;
|
|
109
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* The latest question's arrival time for this instance, kept past the window
|
|
119
|
+
* (Issue #3767), or null when none was ever received.
|
|
120
|
+
*/
|
|
121
|
+
function getAntigravityPermissionReceiptAt(worktreeId, cliToolId, instanceId) {
|
|
122
|
+
return receipts.get((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId))?.at ?? null;
|
|
123
|
+
}
|
|
110
124
|
/** Empty the record. Tests only: production entries age out on their own. */
|
|
111
125
|
function resetAntigravityPermissionReceiptsForTests() {
|
|
112
126
|
receipts.clear();
|
|
127
|
+
observations.clear();
|
|
113
128
|
}
|