commandmate 0.46.0 → 0.47.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +417 -410
- package/.next/app-path-routes-manifest.json +22 -21
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +12 -12
- package/.next/react-loadable-manifest.json +2 -2
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +8 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route.js +4 -2
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/capabilities/route.js +1 -1
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route.js +1 -1
- package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js +2 -2
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +9 -9
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route.js +1 -7
- package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route.js +1 -7
- package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/route.js +1 -1
- package/.next/server/app/api/relays/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route.js +9 -9
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.js +1 -1
- package/.next/server/app/sessions/page.js.nft.json +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +11 -11
- package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +22 -21
- package/.next/server/chunks/1210.js +1 -1
- package/.next/server/chunks/1501.js +2 -2
- package/.next/server/chunks/1559.js +1 -1
- package/.next/server/chunks/1601.js +7 -0
- package/.next/server/chunks/1836.js +1 -0
- package/.next/server/chunks/1945.js +14 -0
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2404.js +1 -1
- package/.next/server/chunks/2422.js +1 -0
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2460.js +1 -1
- package/.next/server/chunks/2534.js +1 -1
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/{3077.js → 4194.js} +12 -12
- package/.next/server/chunks/4207.js +1 -1
- package/.next/server/chunks/4248.js +1 -1
- package/.next/server/chunks/5209.js +1 -1
- package/.next/server/chunks/5292.js +3 -3
- package/.next/server/chunks/5595.js +1 -1
- package/.next/server/chunks/5845.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/{2283.js → 6486.js} +7 -7
- package/.next/server/chunks/6722.js +1 -1
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/6793.js +2 -2
- package/.next/server/chunks/7166.js +19 -0
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/8581.js +12 -12
- package/.next/server/chunks/8728.js +2 -2
- package/.next/server/chunks/8791.js +1 -1
- package/.next/server/chunks/8918.js +6 -6
- package/.next/server/chunks/9199.js +1 -0
- package/.next/server/chunks/936.js +1 -0
- package/.next/server/chunks/9390.js +1 -1
- package/.next/server/chunks/9540.js +1 -0
- package/.next/server/chunks/9627.js +3 -2
- package/.next/server/chunks/9731.js +3 -3
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{2407-acb644c5487e1720.js → 2407-b2f524f99f7fc353.js} +1 -1
- package/.next/static/chunks/{2717.21abf5b6bbd45520.js → 2717.1583400c272dc1d9.js} +1 -1
- package/.next/static/chunks/5371-a549a0d2c2044d41.js +1 -0
- package/.next/static/chunks/5794-80ac3f06f098ea29.js +1 -0
- package/.next/static/chunks/602-1c1488959215e140.js +1 -0
- package/.next/static/chunks/{8407-9a72e6f07c5d5458.js → 8407-155f84e5ba05f1d5.js} +1 -1
- package/.next/static/chunks/9079-24f9fa549ed298f1.js +1 -0
- package/.next/static/chunks/app/api/agents/update/{route-0468c3c4baa46028.js → route-c81284a9d8b35304.js} +1 -1
- package/.next/static/chunks/app/api/agents/versions/{route-0468c3c4baa46028.js → route-c81284a9d8b35304.js} +1 -1
- package/.next/static/chunks/app/api/app/release-notes/{route-0468c3c4baa46028.js → route-c81284a9d8b35304.js} +1 -1
- package/.next/static/chunks/app/api/app/update/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/{route-0468c3c4baa46028.js → route-c81284a9d8b35304.js} +1 -1
- package/.next/static/chunks/app/api/auth/login/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/relays/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/remote/pair/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/settings/default-agents/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/skills/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/templates/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/layout-419eaf7de340f4ab.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/proxy/[...path]/route-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/sessions/page-e02f1adb1d1c1ccc.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/layout-c81284a9d8b35304.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-45294052ee3032f1.js +1 -0
- package/.next/static/chunks/{webpack-c0b821f340afdebf.js → webpack-468b7b33030234b3.js} +1 -1
- package/.next/trace +13 -13
- package/.next/types/app/api/worktrees/[id]/prompt-response/strict/route.ts +347 -0
- package/.next/types/routes.d.ts +2 -1
- package/.next/types/validator.ts +9 -0
- package/dist/cli/commands/auto-yes.d.ts +19 -0
- package/dist/cli/commands/auto-yes.d.ts.map +1 -1
- package/dist/cli/commands/auto-yes.js +45 -0
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +23 -18
- package/dist/cli/commands/ls.d.ts +15 -1
- package/dist/cli/commands/ls.d.ts.map +1 -1
- package/dist/cli/commands/ls.js +39 -3
- package/dist/cli/commands/prompt.d.ts +42 -0
- package/dist/cli/commands/prompt.d.ts.map +1 -0
- package/dist/cli/commands/prompt.js +211 -0
- package/dist/cli/commands/relays.d.ts.map +1 -1
- package/dist/cli/commands/relays.js +13 -1
- package/dist/cli/commands/respond-strict.d.ts +31 -0
- package/dist/cli/commands/respond-strict.d.ts.map +1 -0
- package/dist/cli/commands/respond-strict.js +214 -0
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +38 -0
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +41 -5
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +2 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +18 -0
- package/dist/cli/commands/wait.d.ts +21 -1
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +113 -12
- package/dist/cli/docs/agent-operations.d.ts +1 -1
- package/dist/cli/docs/agent-operations.d.ts.map +1 -1
- package/dist/cli/docs/agent-operations.js +63 -1
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +6 -2
- package/dist/cli/types/api-responses.d.ts +62 -6
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/index.d.ts +30 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/types/index.js +12 -1
- package/dist/cli/utils/api-client.d.ts +13 -1
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +10 -2
- package/dist/cli/utils/daemon-factory.d.ts.map +1 -1
- package/dist/cli/utils/daemon-factory.js +3 -1
- package/dist/cli/utils/daemon.d.ts +38 -1
- package/dist/cli/utils/daemon.d.ts.map +1 -1
- package/dist/cli/utils/daemon.js +161 -8
- package/dist/cli/utils/paths.d.ts +12 -0
- package/dist/cli/utils/paths.d.ts.map +1 -1
- package/dist/cli/utils/paths.js +17 -0
- package/dist/lib/polling/auto-yes-suppression-reason.d.ts +55 -1
- package/dist/lib/polling/auto-yes-suppression-reason.d.ts.map +1 -1
- package/dist/lib/polling/auto-yes-suppression-reason.js +20 -0
- package/dist/lib/prompt-observation/kinds.d.ts +101 -0
- package/dist/lib/prompt-observation/kinds.d.ts.map +1 -0
- package/dist/lib/prompt-observation/kinds.js +123 -0
- package/dist/lib/prompt-observation/types.d.ts +271 -0
- package/dist/lib/prompt-observation/types.d.ts.map +1 -0
- package/dist/lib/prompt-observation/types.js +14 -0
- package/dist/lib/session/send-attempt-types.d.ts +66 -0
- package/dist/lib/session/send-attempt-types.d.ts.map +1 -0
- package/dist/lib/session/send-attempt-types.js +17 -0
- package/dist/server/locales/en/worktree.json +4 -0
- package/dist/server/locales/ja/worktree.json +4 -0
- package/dist/server/server.js +20 -1
- package/dist/server/src/config/auto-yes-config.js +11 -0
- package/dist/server/src/lib/assistant-response-saver.js +13 -0
- package/dist/server/src/lib/auto-yes-lifecycle.js +28 -2
- package/dist/server/src/lib/auto-yes-poller.js +593 -78
- package/dist/server/src/lib/auto-yes-shutdown-record.js +257 -0
- package/dist/server/src/lib/auto-yes-state.js +197 -4
- package/dist/server/src/lib/cli-tools/antigravity-startup-trust.js +135 -0
- package/dist/server/src/lib/cli-tools/antigravity.js +162 -29
- package/dist/server/src/lib/cli-tools/command-code.js +10 -2
- package/dist/server/src/lib/cli-tools/copilot.js +21 -10
- package/dist/server/src/lib/cli-tools/gemini.js +60 -13
- package/dist/server/src/lib/cli-tools/launch-dialog.js +203 -0
- package/dist/server/src/lib/cli-tools/launch-window.js +96 -0
- package/dist/server/src/lib/conversation-logger.js +14 -2
- package/dist/server/src/lib/db/chat-db.js +2 -1
- package/dist/server/src/lib/detection/selection-shape.js +35 -1
- package/dist/server/src/lib/detection/tools/antigravity/detect.js +38 -9
- package/dist/server/src/lib/detection/tools/antigravity/dialog.js +88 -1
- package/dist/server/src/lib/detection/tools/antigravity/patterns.js +41 -1
- package/dist/server/src/lib/detection/tools/claude/detect.js +60 -0
- package/dist/server/src/lib/detection/tools/command-code/selection-shape.js +63 -13
- package/dist/server/src/lib/detection/tools/copilot/patterns.js +7 -1
- package/dist/server/src/lib/history/user-turn-recorder.js +14 -0
- package/dist/server/src/lib/hooks/sources/antigravity/history.js +28 -0
- package/dist/server/src/lib/hooks/sources/claude/history.js +7 -0
- package/dist/server/src/lib/hooks/sources/codex/history.js +7 -0
- package/dist/server/src/lib/hooks/sources/command-code/history.js +7 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +11 -2
- package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +5 -3
- package/dist/server/src/lib/hooks/sources/transcript-history.js +34 -0
- package/dist/server/src/lib/log-manager.js +7 -2
- package/dist/server/src/lib/polling/antigravity-permission-receipts.js +15 -0
- package/dist/server/src/lib/polling/antigravity-receipt-episodes.js +281 -0
- package/dist/server/src/lib/polling/auto-yes-confirm-page.js +56 -0
- package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +8 -1
- package/dist/server/src/lib/polling/auto-yes-enter-fallback-state.js +22 -3
- package/dist/server/src/lib/polling/auto-yes-policy.js +61 -7
- package/dist/server/src/lib/polling/auto-yes-poller-state.js +234 -0
- package/dist/server/src/lib/polling/auto-yes-poller-stop-reason.js +50 -0
- package/dist/server/src/lib/polling/auto-yes-prompt-suppression.js +220 -5
- package/dist/server/src/lib/polling/auto-yes-suppression-reason.js +20 -0
- package/dist/server/src/lib/polling/auto-yes-suppression-state.js +10 -0
- package/dist/server/src/lib/polling/pending-scraped-response.js +119 -3
- package/dist/server/src/lib/polling/poller-owner.js +110 -0
- package/dist/server/src/lib/polling/response-checker-dialog-gate.js +2 -2
- package/dist/server/src/lib/polling/response-checker.js +211 -39
- package/dist/server/src/lib/polling/response-dedup.js +8 -0
- package/dist/server/src/lib/polling/response-poller-core.js +226 -75
- package/dist/server/src/lib/polling/structured-history-gate.js +20 -1
- package/dist/server/src/lib/prompt-answer-sender.js +59 -12
- package/dist/server/src/lib/prompt-observation/kinds.js +123 -0
- package/dist/server/src/lib/prompt-observation/types.js +14 -0
- package/dist/server/src/lib/push/prompt-push-gate.js +195 -3
- package/dist/server/src/lib/push/waiting-push-notifier.js +74 -7
- package/dist/server/src/lib/realtime/terminal-broadcast.js +14 -0
- package/dist/server/src/lib/relay/relay-delivery-claims.js +46 -0
- package/dist/server/src/lib/relay/relay-delivery.js +76 -30
- package/dist/server/src/lib/schedule-manager.js +28 -0
- package/dist/server/src/lib/session/chat-turn-progress.js +57 -6
- package/dist/server/src/lib/session/cli-session.js +38 -3
- package/dist/server/src/lib/session/current-output-builder.js +19 -0
- package/dist/server/src/lib/session/send-attempt-state.js +155 -0
- package/dist/server/src/lib/session/send-attempt-types.js +17 -0
- package/dist/server/src/lib/session/send-user-message.js +46 -0
- package/dist/server/src/lib/session/worktree-session-reconcile.js +85 -11
- package/dist/server/src/lib/timer-manager.js +7 -0
- package/dist/server/src/lib/tmux/session-created-signal.js +76 -0
- package/dist/server/src/lib/tmux/tmux-capture-cache.js +58 -6
- package/dist/server/src/lib/tmux/tmux.js +28 -2
- package/dist/server/src/lib/verification/env-clean-gate.js +30 -2
- package/dist/server/src/lib/verification/scope-gate-format.js +100 -0
- package/dist/server/src/lib/verification/scope-gate-glob.js +185 -0
- package/dist/server/src/lib/verification/scope-gate.js +19 -271
- package/dist/server/src/lib/ws-server.js +48 -6
- package/docs/en/user-guide/cli-setup-guide.md +12 -1
- package/docs/en/user-guide/webapp-guide.md +2 -0
- package/package.json +1 -1
- package/release-notes/0.46.1.json +40 -0
- package/release-notes/0.47.0.json +118 -0
- package/.next/server/chunks/1789.js +0 -1
- package/.next/server/chunks/2908.js +0 -1
- package/.next/server/chunks/3718.js +0 -1
- package/.next/server/chunks/4837.js +0 -14
- package/.next/server/chunks/5625.js +0 -25
- package/.next/server/chunks/611.js +0 -1
- package/.next/server/chunks/850.js +0 -1
- package/.next/static/chunks/3201-c01f1feed69020e6.js +0 -1
- package/.next/static/chunks/5371-a94ed618148287a0.js +0 -1
- package/.next/static/chunks/5794-947fb4934d8be193.js +0 -1
- package/.next/static/chunks/602-25e45a2422d2a3ea.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/capabilities/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/relays/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/remote/pair/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/settings/default-agents/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/skills/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/templates/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/layout-ae30ce63569c22be.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/sessions/page-9859ed61e93e6890.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-0468c3c4baa46028.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-2eb1d0fd0a077b7e.js +0 -1
- /package/.next/static/{zI2nQ6WKboSbFbMF4EtrJ → b5BiQC9F6r_XFPdA9cuSj}/_buildManifest.js +0 -0
- /package/.next/static/{zI2nQ6WKboSbFbMF4EtrJ → b5BiQC9F6r_XFPdA9cuSj}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The screen kinds a prompt observation publishes (Issue #3755, #3746 A-3).
|
|
4
|
+
*
|
|
5
|
+
* ## Why a vocabulary of its own
|
|
6
|
+
*
|
|
7
|
+
* `promptData.type` (`yes_no` / `multiple_choice` / `unclassified`) says how a
|
|
8
|
+
* parsed prompt is answered, and agy's status detector
|
|
9
|
+
* (`detection/tools/antigravity/detect.ts`) publishes the folder-trust screen,
|
|
10
|
+
* the `/model` picker and the slash popup under ONE reason
|
|
11
|
+
* (`antigravity_selection_list`). Neither can say "this is the trust screen and
|
|
12
|
+
* not the picker", which is exactly what a caller about to answer one of them
|
|
13
|
+
* has to be sure of (#3746 P4-1). So the values a caller may branch on — and
|
|
14
|
+
* that the strict `respond` (#3756) may make a send condition — live here, and
|
|
15
|
+
* are never mixed into `promptData.type` or read back from the detector's
|
|
16
|
+
* reason.
|
|
17
|
+
*
|
|
18
|
+
* A kind is added only for a screen whose reading is pinned to a measured
|
|
19
|
+
* frame. Everything else that waits on a human is `unknown`: an unmeasured
|
|
20
|
+
* screen must not borrow a measured screen's name.
|
|
21
|
+
*
|
|
22
|
+
* ## No imports, on purpose
|
|
23
|
+
*
|
|
24
|
+
* The CLI (`tsconfig.cli.json`) compiles with `"paths": {}` and reaches a
|
|
25
|
+
* module under `src/lib` only by a relative path whose graph uses no `@/`
|
|
26
|
+
* alias (the arrangement `lib/session/prompt-view` documents). `prompt` and
|
|
27
|
+
* `wait` import these values from here rather than restating them.
|
|
28
|
+
*
|
|
29
|
+
* @module lib/prompt-observation/kinds
|
|
30
|
+
*/
|
|
31
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
+
exports.EXITING_STRICT_ANSWERS = exports.UNNUMBERED_STRICT_RESPOND_KINDS = exports.STRICT_RESPOND_KINDS = exports.NO_PROMPT_OBSERVATION_KINDS = exports.PROMPT_OBSERVATION_KINDS = exports.PROMPT_OBSERVATION_SCHEMA_VERSION = void 0;
|
|
33
|
+
exports.isPromptObservationKind = isPromptObservationKind;
|
|
34
|
+
exports.isDecisionKind = isDecisionKind;
|
|
35
|
+
exports.isStrictRespondKind = isStrictRespondKind;
|
|
36
|
+
exports.isExitingStrictAnswer = isExitingStrictAnswer;
|
|
37
|
+
/** `schemaVersion` of the observation payload. Bumped when a field changes meaning. */
|
|
38
|
+
exports.PROMPT_OBSERVATION_SCHEMA_VERSION = 1;
|
|
39
|
+
/**
|
|
40
|
+
* Every kind an observation can publish.
|
|
41
|
+
*
|
|
42
|
+
* - `antigravity-trust` — agy's first-run folder trust screen (`Do you trust
|
|
43
|
+
* the contents of this project?` over `> Yes, I trust this folder` /
|
|
44
|
+
* `No, exit`). Unnumbered; Enter confirms the highlighted row.
|
|
45
|
+
* - `antigravity-model-picker` — agy's `/model` picker (`Switch Model`): the
|
|
46
|
+
* 1.1.27 layout (`antigravity-live-2364/picker-switch-model.txt`) and the
|
|
47
|
+
* 1.4 one with a search box (`prompt-observation-3797/`, Issue #3797).
|
|
48
|
+
* - `antigravity-permission` — agy's numbered permission dialog (command
|
|
49
|
+
* execution, file creation; `tests/fixtures/antigravity-live-2364/dialog-*`),
|
|
50
|
+
* ending on its `tab Amend` footer. agy's numbered login-method screen is
|
|
51
|
+
* not one (`unknown`).
|
|
52
|
+
* - `antigravity-slash-menu` — agy's slash-command popup.
|
|
53
|
+
* - `composer` — no confirmation: the agent sits at its input box.
|
|
54
|
+
* - `none` — no confirmation, and not at the input box either (working).
|
|
55
|
+
* - `unknown` — something waits on a human and no measured reading names it.
|
|
56
|
+
*/
|
|
57
|
+
exports.PROMPT_OBSERVATION_KINDS = [
|
|
58
|
+
'antigravity-trust',
|
|
59
|
+
'antigravity-model-picker',
|
|
60
|
+
'antigravity-permission',
|
|
61
|
+
'antigravity-slash-menu',
|
|
62
|
+
'composer',
|
|
63
|
+
'none',
|
|
64
|
+
'unknown',
|
|
65
|
+
];
|
|
66
|
+
/** The two kinds that mean "nothing on screen is asking for a decision". */
|
|
67
|
+
exports.NO_PROMPT_OBSERVATION_KINDS = ['composer', 'none'];
|
|
68
|
+
/** Whether `value` is one of {@link PROMPT_OBSERVATION_KINDS}. */
|
|
69
|
+
function isPromptObservationKind(value) {
|
|
70
|
+
return typeof value === 'string' && exports.PROMPT_OBSERVATION_KINDS.includes(value);
|
|
71
|
+
}
|
|
72
|
+
/** Whether `kind` is a screen that asks for a decision (neither `composer` nor `none`). */
|
|
73
|
+
function isDecisionKind(kind) {
|
|
74
|
+
return !exports.NO_PROMPT_OBSERVATION_KINDS.includes(kind);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* The kinds the strict `respond` (Issue #3756) answers. Every other kind is
|
|
78
|
+
* refused before a key: the `/model` picker's effort slider is not read, the
|
|
79
|
+
* slash popup is a menu of the composer, and `unknown` is never answered.
|
|
80
|
+
*/
|
|
81
|
+
exports.STRICT_RESPOND_KINDS = ['antigravity-trust', 'antigravity-permission'];
|
|
82
|
+
/** Whether `kind` is one of {@link STRICT_RESPOND_KINDS}. */
|
|
83
|
+
function isStrictRespondKind(kind) {
|
|
84
|
+
return typeof kind === 'string' && exports.STRICT_RESPOND_KINDS.includes(kind);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Strict kinds whose rows carry no number: answered only by a label, which is
|
|
88
|
+
* sent as ↑/↓ and Enter. An option number or `--default` is refused there.
|
|
89
|
+
*/
|
|
90
|
+
exports.UNNUMBERED_STRICT_RESPOND_KINDS = ['antigravity-trust'];
|
|
91
|
+
/**
|
|
92
|
+
* Per strict kind, the answer whose consequence is the agent exiting (Issue
|
|
93
|
+
* #3788): its 1-based position, valid only on a screen that shows exactly
|
|
94
|
+
* `optionCount` options AND whose row at that position reads `label`. agy's
|
|
95
|
+
* trust screen offers `Yes, I trust this folder` then `No, exit` (measured:
|
|
96
|
+
* `tests/fixtures/prompt-observation-3755/antigravity-trust.txt`,
|
|
97
|
+
* `antigravity-live-2364/trust-dialog.txt`), and agy exits on the second.
|
|
98
|
+
*
|
|
99
|
+
* The three conditions only narrow: a screen drawn in another order, with
|
|
100
|
+
* another number of rows, or with another wording has no exiting answer, and
|
|
101
|
+
* its outcome stays `indeterminate` (exit 41).
|
|
102
|
+
*
|
|
103
|
+
* Only after such an answer may a shell back in front of the pane be read as
|
|
104
|
+
* the session having ended: after any other answer it is the agent falling
|
|
105
|
+
* over (a crash, a failed start), which the answer did not ask for. A kind
|
|
106
|
+
* absent here has no exiting answer.
|
|
107
|
+
*/
|
|
108
|
+
exports.EXITING_STRICT_ANSWERS = {
|
|
109
|
+
// eslint-disable-next-line no-restricted-syntax -- agy's drawn option row, matched against the screen, not display text
|
|
110
|
+
'antigravity-trust': { position: 2, optionCount: 2, label: 'No, exit' },
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* Whether answering option `position` (1-based) of a `kind` screen showing
|
|
114
|
+
* `options` (labels in draw order) exits the agent: the declared position, the
|
|
115
|
+
* declared number of options, and the declared label at that position (runs of
|
|
116
|
+
* spaces folded, ends trimmed; case kept).
|
|
117
|
+
*/
|
|
118
|
+
function isExitingStrictAnswer(kind, position, options) {
|
|
119
|
+
const exiting = exports.EXITING_STRICT_ANSWERS[kind];
|
|
120
|
+
if (exiting === undefined || exiting.position !== position || exiting.optionCount !== options.length)
|
|
121
|
+
return false;
|
|
122
|
+
return options[position - 1].replace(/\s+/g, ' ').trim() === exiting.label;
|
|
123
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The payload of one prompt observation (Issue #3755): what
|
|
4
|
+
* `GET /api/worktrees/:id/current-output?observe=1` adds as `promptObservation`,
|
|
5
|
+
* what `commandmate prompt --json` prints, and what `commandmate wait` adds to
|
|
6
|
+
* its exit-10 payload as `observation`.
|
|
7
|
+
*
|
|
8
|
+
* Types only, and importable from the CLI for the reason `./kinds` gives: the
|
|
9
|
+
* two imports outside this directory (`polling/auto-yes-suppression-reason`,
|
|
10
|
+
* `session/send-attempt-types`) have no imports of their own.
|
|
11
|
+
*
|
|
12
|
+
* @module lib/prompt-observation/types
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -56,6 +56,43 @@
|
|
|
56
56
|
* it resolves in seconds, and the reminder below is what catches it when it
|
|
57
57
|
* does not.
|
|
58
58
|
*
|
|
59
|
+
* ## "About to answer" has a deadline (Issue #3757)
|
|
60
|
+
*
|
|
61
|
+
* Nothing recorded is not proof that Auto-Yes is answering. A screen the poller
|
|
62
|
+
* cannot read at all (agy's folder-trust screen was the measured case: the
|
|
63
|
+
* poller read no prompt, so it recorded nothing) looked exactly like the
|
|
64
|
+
* common case above, and the wait was held silent until the ten-minute
|
|
65
|
+
* reminder. So the hold lasts {@link AUTO_YES_ANSWER_GRACE_MS} — time for the
|
|
66
|
+
* poller to answer or to record why it did not — and a wait still open after
|
|
67
|
+
* that notifies as `auto-yes-not-answered`. `waiting-push-notifier` asks again
|
|
68
|
+
* when the hold ends.
|
|
69
|
+
*
|
|
70
|
+
* The hold is NOT counted from `waitingSince`. That is the wait's identity,
|
|
71
|
+
* not when anyone saw it: it can be a hook's timestamp older than the probe
|
|
72
|
+
* that opened the edge, and it stays frozen across several prompts of one
|
|
73
|
+
* episode. It is counted from {@link autoYesHoldStartedAt}: the later of the
|
|
74
|
+
* moment the gate first held this episode and the poller's last answer, so a
|
|
75
|
+
* second prompt right after an answer gets a full hold of its own. Both
|
|
76
|
+
* producers ask through {@link decideAndLogPromptPush} and share that origin.
|
|
77
|
+
*
|
|
78
|
+
* ## The hold reaches the session wait's tick (Issue #3791)
|
|
79
|
+
*
|
|
80
|
+
* The 9 s assume the poller's next tick is at most a cooldown away. Its ticks
|
|
81
|
+
* are a poll interval, a cooldown or the thinking interval (5 s) apart — inside
|
|
82
|
+
* the 9 s — with two exceptions. An error backoff (up to `MAX_BACKOFF_MS`) is
|
|
83
|
+
* not waited for: a poller failing in a row is the least likely to answer, and
|
|
84
|
+
* a broken Auto-Yes is when a human most needs the notification. The session
|
|
85
|
+
* wait is: a capture that found no session puts the next tick `MAX_BACKOFF_MS`
|
|
86
|
+
* away, and a session started meanwhile (`send --auto-yes` enables Auto-Yes
|
|
87
|
+
* before the session exists) gets its first prompt answered on that tick. So
|
|
88
|
+
* when the hold begins while that tick is pending, it lasts until the tick plus
|
|
89
|
+
* two ticks (answer, or the Enter fallback's second look):
|
|
90
|
+
* {@link autoYesHoldEndsAt}. The tick is read once, and only counts while the
|
|
91
|
+
* poller that scheduled it is still the one running — a poller stopped or
|
|
92
|
+
* replaced meanwhile will not tick. Issue #3796: the session's creation brings
|
|
93
|
+
* that tick forward to a poll interval, and the hold follows it — the tick is
|
|
94
|
+
* only ever read earlier than it was when the hold began.
|
|
95
|
+
*
|
|
59
96
|
* ## The reminder is never muted
|
|
60
97
|
*
|
|
61
98
|
* `runEscalationTick` has already established that the wait is still open — it
|
|
@@ -71,12 +108,141 @@
|
|
|
71
108
|
* @module lib/push/prompt-push-gate
|
|
72
109
|
*/
|
|
73
110
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
111
|
+
exports.AUTO_YES_HOLD_MAX_AGE_MS = exports.AUTO_YES_ANSWER_AFTER_TICK_MS = exports.AUTO_YES_ANSWER_GRACE_MS = void 0;
|
|
112
|
+
exports.autoYesHoldStartedAt = autoYesHoldStartedAt;
|
|
113
|
+
exports.autoYesHoldEndsAt = autoYesHoldEndsAt;
|
|
114
|
+
exports.forgetAutoYesHold = forgetAutoYesHold;
|
|
115
|
+
exports.clearAutoYesHolds = clearAutoYesHolds;
|
|
74
116
|
exports.decidePromptPush = decidePromptPush;
|
|
75
117
|
exports.isPromptPushSuppressed = isPromptPushSuppressed;
|
|
118
|
+
exports.decideAndLogPromptPush = decideAndLogPromptPush;
|
|
76
119
|
const auto_yes_state_1 = require("../../lib/auto-yes-state");
|
|
77
120
|
const logger_1 = require("../../lib/logger");
|
|
78
121
|
const auto_yes_suppression_state_1 = require("../../lib/polling/auto-yes-suppression-state");
|
|
122
|
+
const global_state_1 = require("../../lib/global-state");
|
|
79
123
|
const logger = (0, logger_1.createLogger)('push/prompt-gate');
|
|
124
|
+
/**
|
|
125
|
+
* How long a wait with nothing recorded about it is held as "Auto-Yes is
|
|
126
|
+
* answering" (Issue #3757), from {@link autoYesHoldStartedAt}. The poller
|
|
127
|
+
* answers a prompt it can read on the tick that sees it and records a reason
|
|
128
|
+
* on the same tick when it will not, but that tick can be a cooldown away
|
|
129
|
+
* (`COOLDOWN_INTERVAL_MS` after an answer, as long while thinking), and the
|
|
130
|
+
* Enter fallback needs one more tick: a cooldown plus two ticks, 9 s.
|
|
131
|
+
*/
|
|
132
|
+
exports.AUTO_YES_ANSWER_GRACE_MS = Math.max(3 * auto_yes_state_1.POLLING_INTERVAL_MS, auto_yes_state_1.COOLDOWN_INTERVAL_MS + 2 * auto_yes_state_1.POLLING_INTERVAL_MS);
|
|
133
|
+
/** compositeKey -> the hold of that session's current episode. globalThis per #1736. */
|
|
134
|
+
const autoYesHolds = (0, global_state_1.getOrInitGlobal)('__promptPushAutoYesHolds', () => new Map());
|
|
135
|
+
/**
|
|
136
|
+
* Where this wait's `auto-yes-answering` hold is counted from (Issue #3757):
|
|
137
|
+
* the later of the moment the gate first held this episode (recorded here on
|
|
138
|
+
* the first call) and the Auto-Yes poller's last answer to this session.
|
|
139
|
+
*
|
|
140
|
+
* The poller's answer is read off its state on `globalThis`
|
|
141
|
+
* (`__autoYesPollerStates`, `lastServerResponseTimestamp`) rather than through
|
|
142
|
+
* `auto-yes-poller`, which imports `response-checker`, which imports this gate.
|
|
143
|
+
*
|
|
144
|
+
* @param now - Epoch ms of the decision; recorded as the start of a new hold
|
|
145
|
+
*/
|
|
146
|
+
function autoYesHoldStartedAt(input, now) {
|
|
147
|
+
const key = (0, auto_yes_state_1.buildCompositeKey)(input.worktreeId, input.cliToolId, input.instanceId);
|
|
148
|
+
sweepStaleAutoYesHolds(now);
|
|
149
|
+
let hold = autoYesHolds.get(key);
|
|
150
|
+
if (hold === undefined || hold.since !== input.waitingSince) {
|
|
151
|
+
hold = { since: input.waitingSince, firstHeldAt: now, sessionWaitTick: pendingSessionWaitTick(key, now) };
|
|
152
|
+
autoYesHolds.set(key, hold);
|
|
153
|
+
}
|
|
154
|
+
// Issue #3770: Auto-Yes switched off and on again inside one episode starts a
|
|
155
|
+
// fresh hold; the old origin would read the poller's silence while it was off
|
|
156
|
+
// as "did not answer".
|
|
157
|
+
const enabledAt = (0, auto_yes_state_1.getAutoYesState)(input.worktreeId, input.cliToolId, input.instanceId)?.enabledAt;
|
|
158
|
+
if (enabledAt !== undefined && enabledAt > hold.firstHeldAt && enabledAt <= now)
|
|
159
|
+
hold.firstHeldAt = enabledAt;
|
|
160
|
+
const lastAnswer = globalThis.__autoYesPollerStates?.get(key)?.lastServerResponseTimestamp ?? null;
|
|
161
|
+
return lastAnswer !== null ? Math.max(hold.firstHeldAt, lastAnswer) : hold.firstHeldAt;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* How long after the poller's tick the hold still lasts (Issue #3791): that
|
|
165
|
+
* tick answers, or records why not, and the Enter fallback answers on the tick
|
|
166
|
+
* after it — the "two ticks" of {@link AUTO_YES_ANSWER_GRACE_MS}.
|
|
167
|
+
*/
|
|
168
|
+
exports.AUTO_YES_ANSWER_AFTER_TICK_MS = 2 * auto_yes_state_1.POLLING_INTERVAL_MS;
|
|
169
|
+
/**
|
|
170
|
+
* The Auto-Yes poller's pending session-wait tick (Issue #3791), read off its
|
|
171
|
+
* state on `globalThis` for the same reason as `lastServerResponseTimestamp`.
|
|
172
|
+
* Only a tick due after `now`, and no further than the session wait puts it.
|
|
173
|
+
*/
|
|
174
|
+
function pendingSessionWaitTick(key, now) {
|
|
175
|
+
const poller = globalThis.__autoYesPollerStates?.get(key);
|
|
176
|
+
const at = poller?.sessionWaitTickAt;
|
|
177
|
+
if (poller === undefined || at === undefined || at <= now)
|
|
178
|
+
return undefined;
|
|
179
|
+
return { at: Math.min(at, now + auto_yes_state_1.MAX_BACKOFF_MS), poller, heldAt: now };
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Issue #3796: when the session wait's tick the hold counts on actually comes.
|
|
183
|
+
* The tick read when the hold began, brought forward when the poller ticked
|
|
184
|
+
* early — its session was created, and it rescheduled the tick a poll interval
|
|
185
|
+
* away (`sessionWaitTickAt`), or already ran it (`sessionWaitTickRanAt`,
|
|
186
|
+
* `sessionAppearedAt`) — only times since the hold began count. Only
|
|
187
|
+
* ever earlier: a session wait scheduled after the hold began does not extend
|
|
188
|
+
* it (#3791).
|
|
189
|
+
*/
|
|
190
|
+
function effectiveSessionWaitTickAt(tick) {
|
|
191
|
+
let at = tick.at;
|
|
192
|
+
for (const t of [tick.poller.sessionWaitTickAt, tick.poller.sessionWaitTickRanAt, tick.poller.sessionAppearedAt]) {
|
|
193
|
+
if (t !== undefined && t >= tick.heldAt && t < at)
|
|
194
|
+
at = t;
|
|
195
|
+
}
|
|
196
|
+
return at;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* When this wait's `auto-yes-answering` hold ends (Issue #3791): a full
|
|
200
|
+
* {@link AUTO_YES_ANSWER_GRACE_MS} after {@link autoYesHoldStartedAt}, and not
|
|
201
|
+
* before {@link AUTO_YES_ANSWER_AFTER_TICK_MS} past the session wait's tick
|
|
202
|
+
* pending when the hold began — while the poller that scheduled it still runs.
|
|
203
|
+
*
|
|
204
|
+
* @param now - Epoch ms of the decision; recorded as the start of a new hold
|
|
205
|
+
*/
|
|
206
|
+
function autoYesHoldEndsAt(input, now) {
|
|
207
|
+
const startedAt = autoYesHoldStartedAt(input, now);
|
|
208
|
+
const key = (0, auto_yes_state_1.buildCompositeKey)(input.worktreeId, input.cliToolId, input.instanceId);
|
|
209
|
+
const tick = autoYesHolds.get(key)?.sessionWaitTick;
|
|
210
|
+
const graceEndsAt = startedAt + exports.AUTO_YES_ANSWER_GRACE_MS;
|
|
211
|
+
// A poller stopped or replaced since (disable, off → on) will not tick.
|
|
212
|
+
if (tick === undefined || globalThis.__autoYesPollerStates?.get(key) !== tick.poller)
|
|
213
|
+
return graceEndsAt;
|
|
214
|
+
// Kept on the hold: an earlier tick once adopted is not lost when the poller
|
|
215
|
+
// later reschedules (an ordinary tick after a failed capture, a new session
|
|
216
|
+
// wait) — the hold never moves back out.
|
|
217
|
+
tick.at = effectiveSessionWaitTickAt(tick);
|
|
218
|
+
return Math.max(graceEndsAt, tick.at + exports.AUTO_YES_ANSWER_AFTER_TICK_MS);
|
|
219
|
+
}
|
|
220
|
+
/** A hold older than this is dropped (Issue #3770): its episode is long over. */
|
|
221
|
+
exports.AUTO_YES_HOLD_MAX_AGE_MS = 60 * 60 * 1000;
|
|
222
|
+
function sweepStaleAutoYesHolds(now) {
|
|
223
|
+
for (const [key, hold] of autoYesHolds) {
|
|
224
|
+
if (now - hold.firstHeldAt >= exports.AUTO_YES_HOLD_MAX_AGE_MS)
|
|
225
|
+
autoYesHolds.delete(key);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Drop the hold of one session (Issue #3770): Auto-Yes went off, or the
|
|
230
|
+
* episode closed.
|
|
231
|
+
*
|
|
232
|
+
* @param since - Issue #3776: drop it only when it is this episode's hold. A
|
|
233
|
+
* caller retiring one episode must not take the next episode's origin with it
|
|
234
|
+
* (that hold would start over, and its notification come up to a hold late).
|
|
235
|
+
* Omitted, the session's hold goes whatever its episode.
|
|
236
|
+
*/
|
|
237
|
+
function forgetAutoYesHold(key, since) {
|
|
238
|
+
if (since !== undefined && autoYesHolds.get(key)?.since !== since)
|
|
239
|
+
return;
|
|
240
|
+
autoYesHolds.delete(key);
|
|
241
|
+
}
|
|
242
|
+
/** Forget every hold. Test seam. */
|
|
243
|
+
function clearAutoYesHolds() {
|
|
244
|
+
autoYesHolds.clear();
|
|
245
|
+
}
|
|
80
246
|
/**
|
|
81
247
|
* Decide whether this prompt notification is worth a human's attention.
|
|
82
248
|
*
|
|
@@ -97,6 +263,10 @@ function decidePromptPush(input) {
|
|
|
97
263
|
if (input.escalated === true) {
|
|
98
264
|
return { suppress: false, reason: 'escalation-reminder' };
|
|
99
265
|
}
|
|
266
|
+
const holdEndsAt = input.holdEndsAt ?? (input.holdStartedAt !== undefined ? input.holdStartedAt + exports.AUTO_YES_ANSWER_GRACE_MS : undefined);
|
|
267
|
+
if (holdEndsAt !== undefined && (input.now ?? Date.now()) >= holdEndsAt) {
|
|
268
|
+
return { suppress: false, reason: 'auto-yes-not-answered' };
|
|
269
|
+
}
|
|
100
270
|
return { suppress: true, reason: 'auto-yes-answering' };
|
|
101
271
|
}
|
|
102
272
|
/**
|
|
@@ -111,7 +281,23 @@ function decidePromptPush(input) {
|
|
|
111
281
|
* so the line is only there for the "why did this one ring?" question.
|
|
112
282
|
*/
|
|
113
283
|
function isPromptPushSuppressed(input) {
|
|
114
|
-
|
|
284
|
+
return decideAndLogPromptPush(input).suppress;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* {@link isPromptPushSuppressed}, with the whole decision handed back — for the
|
|
288
|
+
* caller that has to ask again when an `auto-yes-answering` hold ends
|
|
289
|
+
* (`waiting-push-notifier`, Issue #3757).
|
|
290
|
+
*/
|
|
291
|
+
function decideAndLogPromptPush(input, options = {}) {
|
|
292
|
+
let decision = decidePromptPush(input);
|
|
293
|
+
if (decision.reason === 'auto-yes-inactive') {
|
|
294
|
+
forgetAutoYesHold((0, auto_yes_state_1.buildCompositeKey)(input.worktreeId, input.cliToolId, input.instanceId));
|
|
295
|
+
}
|
|
296
|
+
// Issue #3757: only a wait that reached the hold gets an origin recorded.
|
|
297
|
+
if (decision.reason === 'auto-yes-answering' && input.holdStartedAt === undefined && input.holdEndsAt === undefined) {
|
|
298
|
+
const now = input.now ?? Date.now();
|
|
299
|
+
decision = decidePromptPush({ ...input, now, holdEndsAt: autoYesHoldEndsAt(input, now) });
|
|
300
|
+
}
|
|
115
301
|
const context = {
|
|
116
302
|
worktreeId: input.worktreeId,
|
|
117
303
|
cliToolId: input.cliToolId,
|
|
@@ -122,9 +308,15 @@ function isPromptPushSuppressed(input) {
|
|
|
122
308
|
...(decision.stopReason !== undefined ? { stopReason: decision.stopReason } : {}),
|
|
123
309
|
...(decision.suppressedBy !== undefined ? { suppressedBy: decision.suppressedBy } : {}),
|
|
124
310
|
};
|
|
125
|
-
|
|
311
|
+
// A re-ask at the end of a hold (Issue #3757) that holds again was already
|
|
312
|
+
// logged when the hold began.
|
|
313
|
+
if (decision.suppress && options.recheck === true)
|
|
314
|
+
logger.debug('prompt-push-suppressed', context);
|
|
315
|
+
else if (decision.suppress)
|
|
126
316
|
logger.info('prompt-push-suppressed', context);
|
|
317
|
+
else if (decision.reason === 'auto-yes-not-answered')
|
|
318
|
+
logger.info('prompt-push-allowed', context);
|
|
127
319
|
else
|
|
128
320
|
logger.debug('prompt-push-allowed', context);
|
|
129
|
-
return decision
|
|
321
|
+
return decision;
|
|
130
322
|
}
|
|
@@ -103,6 +103,12 @@ exports.CLASSIFICATION_GRACE_MS = 8_000;
|
|
|
103
103
|
const pending = (0, global_state_1.getOrInitGlobal)('__waitingPushPending', () => new Map());
|
|
104
104
|
/** Composite key -> the timer holding that wait's first notification (#2156). */
|
|
105
105
|
const graceTimers = (0, global_state_1.getOrInitGlobal)('__waitingPushGraceTimers', () => new Map());
|
|
106
|
+
/**
|
|
107
|
+
* Composite key -> the timer that asks the gate again when its
|
|
108
|
+
* `auto-yes-answering` hold ends (Issue #3757). Apart from {@link graceTimers}:
|
|
109
|
+
* that one is the classification hold of #2156, this one the Auto-Yes hold.
|
|
110
|
+
*/
|
|
111
|
+
const answerGraceTimers = (0, global_state_1.getOrInitGlobal)('__waitingPushAnswerGraceTimers', () => new Map());
|
|
106
112
|
/**
|
|
107
113
|
* The worktree's display name, for the notification title.
|
|
108
114
|
*
|
|
@@ -160,10 +166,15 @@ function isUnnamedWait(kind) {
|
|
|
160
166
|
/** Drop the hold on this wait without sending anything. */
|
|
161
167
|
function cancelGrace(key) {
|
|
162
168
|
const timer = graceTimers.get(key);
|
|
163
|
-
if (timer
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
169
|
+
if (timer !== undefined) {
|
|
170
|
+
clearTimeout(timer);
|
|
171
|
+
graceTimers.delete(key);
|
|
172
|
+
}
|
|
173
|
+
const answerTimer = answerGraceTimers.get(key);
|
|
174
|
+
if (answerTimer !== undefined) {
|
|
175
|
+
clearTimeout(answerTimer);
|
|
176
|
+
answerGraceTimers.delete(key);
|
|
177
|
+
}
|
|
167
178
|
}
|
|
168
179
|
/**
|
|
169
180
|
* The Auto-Yes gate, then the fan-out.
|
|
@@ -172,17 +183,70 @@ function cancelGrace(key) {
|
|
|
172
183
|
* moment it decides to send, so a notification dropped after the fan-out began
|
|
173
184
|
* would still consume the episode's one slot — see `prompt-push-gate`.
|
|
174
185
|
*/
|
|
175
|
-
function gateAndSend(wait, now) {
|
|
176
|
-
|
|
186
|
+
function gateAndSend(wait, now, recheck = false) {
|
|
187
|
+
const decision = (0, prompt_push_gate_1.decideAndLogPromptPush)({
|
|
177
188
|
worktreeId: wait.worktreeId,
|
|
178
189
|
cliToolId: wait.cliToolId,
|
|
179
190
|
instanceId: wait.instanceId,
|
|
180
191
|
waitingSince: wait.since,
|
|
181
|
-
|
|
192
|
+
now,
|
|
193
|
+
}, { recheck });
|
|
194
|
+
if (decision.suppress) {
|
|
195
|
+
// Issue #3757: "Auto-Yes is answering" is a hold, not a verdict. Ask again
|
|
196
|
+
// when it ends; a wait Auto-Yes did answer is gone from the episode store
|
|
197
|
+
// by then and nothing is sent.
|
|
198
|
+
if (decision.reason === 'auto-yes-answering')
|
|
199
|
+
holdForAutoYesAnswer(wait, now);
|
|
182
200
|
return;
|
|
183
201
|
}
|
|
184
202
|
void sendWaitingPush(wait, false, now);
|
|
185
203
|
}
|
|
204
|
+
/**
|
|
205
|
+
* Re-ask the gate for this wait when its `auto-yes-answering` hold ends
|
|
206
|
+
* (Issue #3757). The edge fires once, so without this a wait Auto-Yes never
|
|
207
|
+
* answered — a screen the poller cannot read and records nothing about — stayed
|
|
208
|
+
* silent until the escalation reminder, ten minutes later.
|
|
209
|
+
*/
|
|
210
|
+
function holdForAutoYesAnswer(wait, now) {
|
|
211
|
+
const key = (0, auto_yes_state_1.buildCompositeKey)(wait.worktreeId, wait.cliToolId, wait.instanceId);
|
|
212
|
+
const existing = answerGraceTimers.get(key);
|
|
213
|
+
if (existing !== undefined)
|
|
214
|
+
clearTimeout(existing);
|
|
215
|
+
// From the gate's own origin, not `since` (Issue #3757 review), and past the
|
|
216
|
+
// poller's session-wait tick (Issue #3791). Capped at the grace, so a clock
|
|
217
|
+
// that went backwards cannot arm an overflowing timer, and a longer hold is
|
|
218
|
+
// asked about again every grace: a poller stopped meanwhile ends it then
|
|
219
|
+
// rather than at a tick that will not come.
|
|
220
|
+
const holdEndsAt = (0, prompt_push_gate_1.autoYesHoldEndsAt)({ worktreeId: wait.worktreeId, cliToolId: wait.cliToolId, instanceId: wait.instanceId, waitingSince: wait.since }, now);
|
|
221
|
+
const delay = Math.min(prompt_push_gate_1.AUTO_YES_ANSWER_GRACE_MS, Math.max(0, holdEndsAt - now));
|
|
222
|
+
const timer = setTimeout(() => {
|
|
223
|
+
answerGraceTimers.delete(key);
|
|
224
|
+
releaseAutoYesHold(key, wait.since);
|
|
225
|
+
}, delay);
|
|
226
|
+
// Never hold the process open for it, as with the other timers here.
|
|
227
|
+
timer.unref?.();
|
|
228
|
+
answerGraceTimers.set(key, timer);
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* The Auto-Yes hold ended: notify unless the wait is over or is another one
|
|
232
|
+
* (Issue #3757). Read from the episode store, as {@link releaseHeldWait} does.
|
|
233
|
+
*/
|
|
234
|
+
function releaseAutoYesHold(key, since) {
|
|
235
|
+
const held = pending.get(key);
|
|
236
|
+
if (held === undefined || held.since !== since)
|
|
237
|
+
return;
|
|
238
|
+
const episode = (0, waiting_episode_state_1.getWaitingEpisode)(held.worktreeId, held.cliToolId, held.instanceId);
|
|
239
|
+
if (episode === null || episode.since !== held.since) {
|
|
240
|
+
pending.delete(key);
|
|
241
|
+
// Issue #3776: this episode's hold only — the next one may hold already.
|
|
242
|
+
(0, prompt_push_gate_1.forgetAutoYesHold)(key, held.since);
|
|
243
|
+
stopEscalationTimerIfIdle();
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
const settled = { ...held, kind: episode.kind };
|
|
247
|
+
pending.set(key, settled);
|
|
248
|
+
gateAndSend(settled, Date.now(), true);
|
|
249
|
+
}
|
|
186
250
|
/**
|
|
187
251
|
* The grace elapsed: send the held wait with whatever it is called *now*
|
|
188
252
|
* (Issue #2156).
|
|
@@ -380,6 +444,9 @@ function stopWaitingPushNotifier() {
|
|
|
380
444
|
for (const timer of graceTimers.values())
|
|
381
445
|
clearTimeout(timer);
|
|
382
446
|
graceTimers.clear();
|
|
447
|
+
for (const timer of answerGraceTimers.values())
|
|
448
|
+
clearTimeout(timer);
|
|
449
|
+
answerGraceTimers.clear();
|
|
383
450
|
pending.clear();
|
|
384
451
|
stopEscalationTimerIfIdle();
|
|
385
452
|
}
|
|
@@ -24,6 +24,7 @@ const manager_1 = require("../../lib/cli-tools/manager");
|
|
|
24
24
|
const tmux_capture_cache_1 = require("../../lib/tmux/tmux-capture-cache");
|
|
25
25
|
const global_state_1 = require("../global-state");
|
|
26
26
|
const terminal_session_ownership_1 = require("./terminal-session-ownership");
|
|
27
|
+
const poller_owner_1 = require("../../lib/polling/poller-owner");
|
|
27
28
|
const logger = (0, logger_1.createLogger)('terminal-broadcast');
|
|
28
29
|
const versionCounters = (0, global_state_1.getOrInitGlobal)('__terminalSnapshotVersions', () => new Map());
|
|
29
30
|
exports.INTERACTION_SNAPSHOT_RETRY_DELAYS_MS = [100, 250, 500, 750];
|
|
@@ -43,11 +44,24 @@ async function broadcastTerminalSnapshot(worktreeId, cliToolId, instanceId) {
|
|
|
43
44
|
try {
|
|
44
45
|
if (!(await isPushableSession(worktreeId, cliToolId, instanceId)))
|
|
45
46
|
return;
|
|
47
|
+
// Issue #3705: the response poller starts this snapshot inside its tick's
|
|
48
|
+
// owner (`snapshotOwnerStorage`) and the question is asked again after each
|
|
49
|
+
// `await`: a successor that took the key meanwhile is not overwritten by
|
|
50
|
+
// the turn that ended, and its `version` is not spent on it. Outside a
|
|
51
|
+
// poller tick, always yes.
|
|
52
|
+
if (!(0, poller_owner_1.maySnapshotPublish)())
|
|
53
|
+
throw new poller_owner_1.RetiredSnapshotError();
|
|
46
54
|
const db = (0, db_instance_1.getDbInstance)();
|
|
47
55
|
const payload = await (0, current_output_builder_1.buildCurrentOutput)(db, worktreeId, cliToolId, instanceId);
|
|
56
|
+
if (!(0, poller_owner_1.maySnapshotPublish)())
|
|
57
|
+
throw new poller_owner_1.RetiredSnapshotError();
|
|
48
58
|
emitTerminalSnapshot(worktreeId, cliToolId, payload, instanceId);
|
|
49
59
|
}
|
|
50
60
|
catch (error) {
|
|
61
|
+
if (error instanceof poller_owner_1.RetiredSnapshotError) {
|
|
62
|
+
logger.info('terminal-snapshot:retired', { worktreeId, cliToolId, instanceId });
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
51
65
|
logger.error('terminal-snapshot:failed', {
|
|
52
66
|
worktreeId,
|
|
53
67
|
error: error instanceof Error ? error.message : String(error),
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Relays whose payload is being typed into the requester's composer right now
|
|
4
|
+
* (Issue #3732).
|
|
5
|
+
*
|
|
6
|
+
* A claim is taken by `relay-delivery` immediately before `sendUserMessage`, in
|
|
7
|
+
* the same synchronous stretch that re-read the row and found it still open, and
|
|
8
|
+
* released once the attempt is over (delivered, held or failed). While it is
|
|
9
|
+
* held, `withdrawRelay` answers `delivering` instead of cancelling: a cancel
|
|
10
|
+
* that reported success would be a lie once the send is already under way, and
|
|
11
|
+
* the send cannot be taken back.
|
|
12
|
+
*
|
|
13
|
+
* A module of its own, rather than an export of `relay-delivery`, so that
|
|
14
|
+
* `relay-service` (and the cancel route behind it) can consult it without
|
|
15
|
+
* importing the send path.
|
|
16
|
+
*
|
|
17
|
+
* On `globalThis` for the reason the in-flight set is (#1736): the poller's and
|
|
18
|
+
* the API's bundles must see the same set under `next dev`. Being in memory is
|
|
19
|
+
* enough — a claim only lives for the duration of one send in this process, so
|
|
20
|
+
* there is nothing to migrate and nothing to recover after a restart.
|
|
21
|
+
*
|
|
22
|
+
* @module lib/relay/relay-delivery-claims
|
|
23
|
+
*/
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.claimRelayDelivery = claimRelayDelivery;
|
|
26
|
+
exports.releaseRelayDelivery = releaseRelayDelivery;
|
|
27
|
+
exports.isRelayDeliveryClaimed = isRelayDeliveryClaimed;
|
|
28
|
+
exports.resetRelayDeliveryClaims = resetRelayDeliveryClaims;
|
|
29
|
+
const global_state_1 = require("../global-state");
|
|
30
|
+
const claims = (0, global_state_1.getOrInitGlobal)('__relayDeliveryClaims', () => new Set());
|
|
31
|
+
/** Mark a relay as being delivered. */
|
|
32
|
+
function claimRelayDelivery(relayId) {
|
|
33
|
+
claims.add(relayId);
|
|
34
|
+
}
|
|
35
|
+
/** The attempt is over, whatever its outcome. */
|
|
36
|
+
function releaseRelayDelivery(relayId) {
|
|
37
|
+
claims.delete(relayId);
|
|
38
|
+
}
|
|
39
|
+
/** Whether a send for this relay is under way right now. */
|
|
40
|
+
function isRelayDeliveryClaimed(relayId) {
|
|
41
|
+
return claims.has(relayId);
|
|
42
|
+
}
|
|
43
|
+
/** Forget every claim. Test seam. */
|
|
44
|
+
function resetRelayDeliveryClaims() {
|
|
45
|
+
claims.clear();
|
|
46
|
+
}
|