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
|
@@ -49,6 +49,7 @@ const session_name_1 = require("../../lib/cli-tools/session-name");
|
|
|
49
49
|
const geometry_delegation_1 = require("../../lib/tmux/geometry-delegation");
|
|
50
50
|
const tmux_session_surface_1 = require("../../lib/session/tmux-session-surface");
|
|
51
51
|
const response_poller_core_1 = require("./response-poller-core");
|
|
52
|
+
const poller_owner_1 = require("./poller-owner");
|
|
52
53
|
const push_1 = require("../../lib/push");
|
|
53
54
|
// Issue #1790: imported by deep path, not through `@/lib/push`. Suites that
|
|
54
55
|
// replace the barrel to count notifications (e.g. the #1547 escalation test)
|
|
@@ -227,6 +228,15 @@ function detectPromptOnCleanFrame(cleanOutput, cliToolId, precomputedLines, rawF
|
|
|
227
228
|
? { isPrompt: false, cleanContent: cleanOutput.trim() }
|
|
228
229
|
: dialog;
|
|
229
230
|
}
|
|
231
|
+
// Issue #3808: a numbered agy screen the reader declines — the login-method
|
|
232
|
+
// screen, a permission dialog whose `tab Amend` footer a narrow pane cut or
|
|
233
|
+
// left below the pane — is not handed to the generic parser either, which
|
|
234
|
+
// reads `> 1. Google OAuth` as an answerable option. Judged without the
|
|
235
|
+
// footer, so a missing footer cannot reopen the generic path. The status
|
|
236
|
+
// verdict publishes the same frame as unclassified (`tools/antigravity/detect.ts`).
|
|
237
|
+
if ((0, dialog_1.isAntigravityUnvouchedNumberedScreen)(cleanOutput)) {
|
|
238
|
+
return { isPrompt: false, cleanContent: cleanOutput.trim() };
|
|
239
|
+
}
|
|
230
240
|
}
|
|
231
241
|
// Issue #2522: Command Code's footer-less `AskUserQuestion`, read by the same
|
|
232
242
|
// module `tools/command-code/detect.ts` publishes its status from — so the
|
|
@@ -449,6 +459,48 @@ function markOrSettleStructuredHistoryRecheck(pollerKey, recorded) {
|
|
|
449
459
|
(0, response_dedup_1.markStructuredHistoryRecheckPending)(pollerKey);
|
|
450
460
|
}
|
|
451
461
|
}
|
|
462
|
+
/**
|
|
463
|
+
* Whether this tick may still act for `pollerKey` after the `await` it has just
|
|
464
|
+
* resumed from, logging the refusal when it may not (Issue #3705).
|
|
465
|
+
*
|
|
466
|
+
* #3663, #3684 and #3701 asked {@link mayActForPollerKey} at the writes that had
|
|
467
|
+
* been reported, one at a time. A tick resumes from an `await` with no idea
|
|
468
|
+
* whether its chain was stopped, cut loose past `STALLED_TICK_TIMEOUT` or moved
|
|
469
|
+
* by a worktree-ID migration in the meantime, and every write after that
|
|
470
|
+
* `await` — the prompt sweep, the waiting edge, the completion push, the cursor,
|
|
471
|
+
* the fault notifier, the TUI accumulator, the recheck and skip-streak state —
|
|
472
|
+
* lands under a key it no longer owns, on whatever the successor has put there.
|
|
473
|
+
* So the question is asked after every `await` of the tick, named by the point
|
|
474
|
+
* it resumed from, and the writes below each point run only on a yes.
|
|
475
|
+
*
|
|
476
|
+
* Not asked where a self-stop hands back its verdict (`return await
|
|
477
|
+
* recordCompletedResponse(…)`): `runPollTick` settles the pause from that
|
|
478
|
+
* value, and a stop the tick raised itself must not lose what it recorded.
|
|
479
|
+
*
|
|
480
|
+
* @param ctx - What this tick is keyed by
|
|
481
|
+
* @param after - The `await` the tick has just resumed from, for the log line
|
|
482
|
+
*/
|
|
483
|
+
function mayStillActAfter(ctx, after) {
|
|
484
|
+
if ((0, poller_owner_1.mayActForPollerKey)(ctx.pollerKey))
|
|
485
|
+
return true;
|
|
486
|
+
// One line per retired tick, at the first point that turned it away: a tick
|
|
487
|
+
// refused at the capture is asked again after the reader and the log.
|
|
488
|
+
const owner = (0, poller_owner_1.currentPollerOwner)();
|
|
489
|
+
if (owner === undefined || !refusalLogged.has(owner)) {
|
|
490
|
+
if (owner)
|
|
491
|
+
refusalLogged.add(owner);
|
|
492
|
+
logger.info('retired-tick-refused', {
|
|
493
|
+
worktreeId: ctx.worktreeId,
|
|
494
|
+
cliToolId: ctx.cliToolId,
|
|
495
|
+
instanceId: ctx.resolvedInstanceId,
|
|
496
|
+
generation: owner?.generation,
|
|
497
|
+
after,
|
|
498
|
+
});
|
|
499
|
+
}
|
|
500
|
+
return false;
|
|
501
|
+
}
|
|
502
|
+
/** The retired chains {@link mayStillActAfter} has already logged (Issue #3705). */
|
|
503
|
+
const refusalLogged = new WeakSet();
|
|
452
504
|
/**
|
|
453
505
|
* Read the frame this tick captured: is there a finished turn on it that the
|
|
454
506
|
* cursor has not already counted?
|
|
@@ -469,17 +521,25 @@ function markOrSettleStructuredHistoryRecheck(pollerKey, recorded) {
|
|
|
469
521
|
* @param ctx - What this tick is keyed by
|
|
470
522
|
* @param output - The capture this tick made
|
|
471
523
|
* @param lastCapturedLine - Its cursor, 0 when there is none
|
|
524
|
+
* @param owns - Whether the tick still owns its key (Issue #3705); false reads
|
|
525
|
+
* the frame and writes nothing
|
|
472
526
|
* @returns What the tick goes on with, or `false` when the tick ends here
|
|
473
527
|
*/
|
|
474
|
-
function extractCompletedTurn(ctx, output, lastCapturedLine) {
|
|
528
|
+
function extractCompletedTurn(ctx, output, lastCapturedLine, owns) {
|
|
475
529
|
const { db, worktreeId, cliToolId, instanceId, resolvedInstanceId, pollerKey } = ctx;
|
|
476
530
|
// Issue #2000: the frame is in hand, so this is the cheapest place to ask
|
|
477
531
|
// whether the model API has stalled the session. Level in, edge out — see
|
|
478
532
|
// the helper.
|
|
479
|
-
|
|
533
|
+
//
|
|
534
|
+
// Issue #3705: every write in this function is the caller's `owns` — asked
|
|
535
|
+
// right after the capture, with no `await` since. A retired tick's frame is
|
|
536
|
+
// read, and none of it lands on the fault episode, the accumulator, the skip
|
|
537
|
+
// streaks or the pending prompts of the key it lost.
|
|
538
|
+
if (owns)
|
|
539
|
+
observeUpstreamFaultForPush(worktreeId, cliToolId, instanceId, output);
|
|
480
540
|
// Layer 2: Accumulate TUI content for full-screen TUI tools, so a turn that
|
|
481
541
|
// outgrows the alternate-screen pane keeps the head that has scrolled away.
|
|
482
|
-
if (cliToolId === 'opencode' || cliToolId === 'copilot') {
|
|
542
|
+
if (owns && (cliToolId === 'opencode' || cliToolId === 'copilot')) {
|
|
483
543
|
// Issue #1911: opencode is accumulated from the CURRENT TURN'S REGION
|
|
484
544
|
// rather than the whole frame. Feeding the raw pane seeded the accumulator
|
|
485
545
|
// with the previous turn's transcript, the echoed prompt and the bottom
|
|
@@ -501,7 +561,7 @@ function extractCompletedTurn(ctx, output, lastCapturedLine) {
|
|
|
501
561
|
//
|
|
502
562
|
// Issue #3552: the same frame ends a run of duplicate response ticks for
|
|
503
563
|
// the same reason — an unfinished frame is not the saved reply.
|
|
504
|
-
if (result) {
|
|
564
|
+
if (owns && result) {
|
|
505
565
|
(0, prompt_dedup_1.resetDuplicatePromptSkipStreak)(pollerKey);
|
|
506
566
|
(0, response_dedup_1.resetDuplicateResponseSkipStreak)(pollerKey);
|
|
507
567
|
}
|
|
@@ -509,7 +569,7 @@ function extractCompletedTurn(ctx, output, lastCapturedLine) {
|
|
|
509
569
|
const { thinkingPattern } = (0, cli_patterns_1.getCliToolPatterns)(cliToolId);
|
|
510
570
|
const cleanOutput = (0, cli_patterns_1.stripAnsi)(output);
|
|
511
571
|
const tailLines = cleanOutput.split('\n').slice(-thinking_constants_1.THINKING_TAIL_LINE_COUNT).join('\n');
|
|
512
|
-
if (thinkingPattern.test(tailLines)) {
|
|
572
|
+
if (owns && thinkingPattern.test(tailLines)) {
|
|
513
573
|
// Intended twin of the sweep in recordCompletedResponse: this one runs when
|
|
514
574
|
// working is visible on an unfinished frame, that one when a response is
|
|
515
575
|
// recorded (Issue #31).
|
|
@@ -570,6 +630,21 @@ function extractCompletedTurn(ctx, output, lastCapturedLine) {
|
|
|
570
630
|
*/
|
|
571
631
|
function savePromptMessage(ctx, promptDetection, result, isFullScreenTui) {
|
|
572
632
|
const { db, worktree, worktreeId, cliToolId, instanceId, resolvedInstanceId, pollerKey } = ctx;
|
|
633
|
+
// Issue #3701: the question #3663 / #3684 ask, for the prompt a tick retired
|
|
634
|
+
// during the capture's `await` then finds on the pane — no row, broadcast,
|
|
635
|
+
// task event, push or waiting episode under the key it lost. Asked BEFORE the
|
|
636
|
+
// dedup below, which registers the hash before the save: a refused tick that
|
|
637
|
+
// registered it would make the successor drop the same prompt as a
|
|
638
|
+
// duplicate. No `await` from here to the end of this function.
|
|
639
|
+
if (!(0, poller_owner_1.mayActForPollerKey)(pollerKey)) {
|
|
640
|
+
logger.info('prompt-save-refused', {
|
|
641
|
+
worktreeId,
|
|
642
|
+
cliToolId,
|
|
643
|
+
instanceId: resolvedInstanceId,
|
|
644
|
+
generation: (0, poller_owner_1.currentPollerOwner)()?.generation,
|
|
645
|
+
});
|
|
646
|
+
return false;
|
|
647
|
+
}
|
|
573
648
|
// Issue #565: Content hash-based duplicate prompt prevention
|
|
574
649
|
const promptContent = promptDetection.rawContent || promptDetection.cleanContent;
|
|
575
650
|
const normalizedForDedup = (0, prompt_dedup_1.normalizePromptForDedup)(promptContent, cliToolId);
|
|
@@ -686,9 +761,10 @@ function savePromptMessage(ctx, promptDetection, result, isFullScreenTui) {
|
|
|
686
761
|
* @param cliToolId - CLI tool identifier
|
|
687
762
|
* @param result - The complete extraction this tick made
|
|
688
763
|
* @param pollerKey - Poller key ("worktreeId:instanceId")
|
|
764
|
+
* @param owns - Whether the tick still owns its key (Issue #3705)
|
|
689
765
|
* @returns The cleaned response
|
|
690
766
|
*/
|
|
691
|
-
function cleanCompletedResponse(cliToolId, result, pollerKey) {
|
|
767
|
+
function cleanCompletedResponse(cliToolId, result, pollerKey, owns) {
|
|
692
768
|
// Clean up responses
|
|
693
769
|
let cleanedResponse = result.response;
|
|
694
770
|
if (cliToolId === 'gemini') {
|
|
@@ -702,7 +778,10 @@ function cleanCompletedResponse(cliToolId, result, pollerKey) {
|
|
|
702
778
|
const sourceContent = accumulatedContent || result.response;
|
|
703
779
|
cleanedResponse = (0, response_cleaner_1.cleanCopilotResponse)(sourceContent);
|
|
704
780
|
cleanedResponse = (0, response_cleaner_1.truncateMessage)(cleanedResponse, copilot_constants_1.COPILOT_MAX_MESSAGE_LENGTH, copilot_constants_1.COPILOT_TRUNCATION_MARKER);
|
|
705
|
-
|
|
781
|
+
// Issue #3705: read, but not cleared, by a tick that lost the key — the
|
|
782
|
+
// successor may already be accumulating its own turn under it.
|
|
783
|
+
if (owns)
|
|
784
|
+
(0, tui_accumulator_1.clearTuiAccumulator)(pollerKey);
|
|
706
785
|
}
|
|
707
786
|
else if (cliToolId === 'opencode') {
|
|
708
787
|
// Issue #1911 defect 3: opencode wrote to the Layer-2 accumulator but never
|
|
@@ -724,7 +803,8 @@ function cleanCompletedResponse(cliToolId, result, pollerKey) {
|
|
|
724
803
|
? accumulatedContent
|
|
725
804
|
: result.response;
|
|
726
805
|
cleanedResponse = (0, response_cleaner_1.cleanOpenCodeResponse)(sourceContent);
|
|
727
|
-
|
|
806
|
+
if (owns)
|
|
807
|
+
(0, tui_accumulator_1.clearTuiAccumulator)(pollerKey);
|
|
728
808
|
}
|
|
729
809
|
return cleanedResponse;
|
|
730
810
|
}
|
|
@@ -744,6 +824,15 @@ function cleanCompletedResponse(cliToolId, result, pollerKey) {
|
|
|
744
824
|
*/
|
|
745
825
|
async function recheckDuplicateResponse(ctx, result, claudeMetadata) {
|
|
746
826
|
const { db, worktree, worktreeId, cliToolId, instanceId, resolvedInstanceId, pollerKey } = ctx;
|
|
827
|
+
// Issue #3705 (review): a retired tick reaches this function too. The dedup
|
|
828
|
+
// answers "duplicate" on a hash match BEFORE it asks about ownership (it only
|
|
829
|
+
// refuses to REGISTER a hash), and the hash it matches may be the successor's
|
|
830
|
+
// — the same reply, saved by the chain that replaced this one while this
|
|
831
|
+
// tick's capture was in flight. Everything below writes under the key (the
|
|
832
|
+
// skip-log claim, the cursor, the recheck claim, then the reader), so the
|
|
833
|
+
// question is asked first, with no `await` between it and those writes.
|
|
834
|
+
if (!mayStillActAfter(ctx, 'capture'))
|
|
835
|
+
return false;
|
|
747
836
|
// Issue #1695: this branch used to drop the response silently — the
|
|
748
837
|
// prompt-side guard above has logged its skip since #565, this one
|
|
749
838
|
// logged nothing at all, so a reply that never reached History left no
|
|
@@ -821,6 +910,11 @@ async function recheckDuplicateResponse(ctx, result, claudeMetadata) {
|
|
|
821
910
|
worktreePath: worktree.path,
|
|
822
911
|
transcriptPathHint: claudeMetadata?.logFilePath ?? null,
|
|
823
912
|
});
|
|
913
|
+
// Issue #3705: the recheck the successor is owed is not settled, and its
|
|
914
|
+
// hold not dropped, by a tick retired while the reader ran. What the reader
|
|
915
|
+
// answered is still the answer (it asks the same question before it writes).
|
|
916
|
+
if (!mayStillActAfter(ctx, 'recheck-reader'))
|
|
917
|
+
return recaptured;
|
|
824
918
|
if (recaptured) {
|
|
825
919
|
(0, response_dedup_1.settleStructuredHistoryRecheck)(pollerKey);
|
|
826
920
|
// Issue #2436: the turn is now the agent's own Markdown, so a
|
|
@@ -868,7 +962,10 @@ function recordOrHoldScrapedResponse(ctx, cleanedResponse, claudeMetadata, decis
|
|
|
868
962
|
// width and gutter-prefixed, so no content check could ever recognise them
|
|
869
963
|
// as the same reply.
|
|
870
964
|
if (holdScrapedHistory) {
|
|
871
|
-
(
|
|
965
|
+
// Issue #3663: refused (false) to a tick whose chain was retired while it
|
|
966
|
+
// awaited the reader — a stop, a stalled-tick restart or a worktree-ID
|
|
967
|
+
// migration. The store logs that, so this tick does not claim a hold.
|
|
968
|
+
const held = (0, pending_scraped_response_1.holdScrapedResponse)(pollerKey, {
|
|
872
969
|
worktreeId,
|
|
873
970
|
cliToolId,
|
|
874
971
|
instanceId: resolvedInstanceId,
|
|
@@ -884,19 +981,37 @@ function recordOrHoldScrapedResponse(ctx, cleanedResponse, claudeMetadata, decis
|
|
|
884
981
|
transcriptPathHint: claudeMetadata?.logFilePath ?? null,
|
|
885
982
|
expiresAt: Date.now() + pending_scraped_response_1.PENDING_SCRAPE_HOLD_MS,
|
|
886
983
|
});
|
|
887
|
-
|
|
984
|
+
if (held) {
|
|
985
|
+
logger.info('structured-history-scrape-held', {
|
|
986
|
+
worktreeId,
|
|
987
|
+
cliToolId,
|
|
988
|
+
instanceId: resolvedInstanceId,
|
|
989
|
+
scrapedLength: cleanedResponse.length,
|
|
990
|
+
holdMs: pending_scraped_response_1.PENDING_SCRAPE_HOLD_MS,
|
|
991
|
+
});
|
|
992
|
+
// The completion edge is announced HERE and not at the flush, because the
|
|
993
|
+
// turn finished now. A relay waiting on this session gets #2401's grace
|
|
994
|
+
// window to find a turn-keyed row, which is exactly the row the hold is
|
|
995
|
+
// waiting for; delaying the announcement by the hold would delay every
|
|
996
|
+
// delivery by it too. Issue #3684: only for a hold that was taken — a
|
|
997
|
+
// refused one is a retired tick, which announces nothing under the key
|
|
998
|
+
// it lost, as in the immediate-save branch below.
|
|
999
|
+
(0, relay_triggers_1.onRelayTurnCompleted)(worktreeId, cliToolId, resolvedInstanceId, false);
|
|
1000
|
+
}
|
|
1001
|
+
}
|
|
1002
|
+
else if (!suppressScrapedHistory && !(0, poller_owner_1.mayActForPollerKey)(pollerKey)) {
|
|
1003
|
+
// Issue #3684: the same question the hold asks (#3663), for the reply saved
|
|
1004
|
+
// at once — a tick retired while it awaited the reader or the log writes no
|
|
1005
|
+
// row, broadcast or relay edge under the key it lost. No `await` between
|
|
1006
|
+
// this check and the three below. Issue #3705: the caller now asks the
|
|
1007
|
+
// same question for the rest of the tick's writes and the Markdown log for
|
|
1008
|
+
// its own, so a retired tick reaches this branch only to be refused here.
|
|
1009
|
+
logger.info('scraped-response-save-refused', {
|
|
888
1010
|
worktreeId,
|
|
889
1011
|
cliToolId,
|
|
890
1012
|
instanceId: resolvedInstanceId,
|
|
891
|
-
|
|
892
|
-
holdMs: pending_scraped_response_1.PENDING_SCRAPE_HOLD_MS,
|
|
1013
|
+
generation: (0, poller_owner_1.currentPollerOwner)()?.generation,
|
|
893
1014
|
});
|
|
894
|
-
// The completion edge is announced HERE and not at the flush, because the
|
|
895
|
-
// turn finished now. A relay waiting on this session gets #2401's grace
|
|
896
|
-
// window to find a turn-keyed row, which is exactly the row the hold is
|
|
897
|
-
// waiting for; delaying the announcement by the hold would delay every
|
|
898
|
-
// delivery by it too.
|
|
899
|
-
(0, relay_triggers_1.onRelayTurnCompleted)(worktreeId, cliToolId, resolvedInstanceId, false);
|
|
900
1015
|
}
|
|
901
1016
|
else if (!suppressScrapedHistory) {
|
|
902
1017
|
// Create new CLI tool message in database
|
|
@@ -999,7 +1114,13 @@ async function recordCompletedResponse(ctx, turn, claudeMetadata, cleanedRespons
|
|
|
999
1114
|
// a return — so unless the fact is written down now, the ask never happens
|
|
1000
1115
|
// again. A `true` settles it: the turn is recorded and there is nothing left
|
|
1001
1116
|
// to re-ask about.
|
|
1002
|
-
|
|
1117
|
+
//
|
|
1118
|
+
// Issue #3705: by a tick that still owns the key. A retired one goes on to
|
|
1119
|
+
// the scrape decision below only so that the store's and the save branch's
|
|
1120
|
+
// own refusals (#3663, #3684) speak for it; nothing else it would write does.
|
|
1121
|
+
if (mayStillActAfter(ctx, 'reader')) {
|
|
1122
|
+
markOrSettleStructuredHistoryRecheck(pollerKey, structuredHistoryLive);
|
|
1123
|
+
}
|
|
1003
1124
|
// Issue #2317 Phase D: the scrape is dropped while the geometry is
|
|
1004
1125
|
// delegated, and the transcript capture above is what makes that safe.
|
|
1005
1126
|
//
|
|
@@ -1030,8 +1151,29 @@ async function recordCompletedResponse(ctx, turn, claudeMetadata, cleanedRespons
|
|
|
1030
1151
|
// out. Only the two writes that RECORD THE REPLY wait.
|
|
1031
1152
|
const holdScrapedHistory = !suppressScrapedHistory && captureReport.outcome === 'not_yet_closed';
|
|
1032
1153
|
// Create Markdown log file for the conversation pair
|
|
1154
|
+
//
|
|
1155
|
+
// Issue #3705: keyed, so the log asks before its own write (after its own
|
|
1156
|
+
// awaits) whether this tick still owns the key. A held reply confirmed by a
|
|
1157
|
+
// stop is logged by the store with no key (`pending-scraped-response`), and
|
|
1158
|
+
// that log is kept.
|
|
1033
1159
|
if (cleanedResponse && !suppressScrapedHistory && !holdScrapedHistory) {
|
|
1034
|
-
await (0, conversation_logger_1.recordClaudeConversation)(db, worktreeId, cleanedResponse, cliToolId);
|
|
1160
|
+
await (0, conversation_logger_1.recordClaudeConversation)(db, worktreeId, cleanedResponse, cliToolId, { pollerKey });
|
|
1161
|
+
}
|
|
1162
|
+
// Issue #3705: everything from here to the end of the function runs without
|
|
1163
|
+
// an `await`, so this is the tick's last chance to find out that it was
|
|
1164
|
+
// retired while the reader or the log ran. A retired tick sweeps no prompt to
|
|
1165
|
+
// "answered", closes no waiting episode, sends no completion push and moves
|
|
1166
|
+
// no cursor under the key it lost — the successor's, possibly. The scrape
|
|
1167
|
+
// decision still runs: every branch of it asks the same question itself
|
|
1168
|
+
// (#3663 the hold, #3684 the immediate save, the store the discard), and its
|
|
1169
|
+
// refusal lines are what the earlier suites read.
|
|
1170
|
+
if (!mayStillActAfter(ctx, 'conversation-log')) {
|
|
1171
|
+
recordOrHoldScrapedResponse(ctx, cleanedResponse, claudeMetadata, {
|
|
1172
|
+
structuredHistoryLive,
|
|
1173
|
+
suppressScrapedHistory,
|
|
1174
|
+
holdScrapedHistory,
|
|
1175
|
+
});
|
|
1176
|
+
return false;
|
|
1035
1177
|
}
|
|
1036
1178
|
// Mark any pending prompts as answered. Intended twin of the sweep in
|
|
1037
1179
|
// extractCompletedTurn (working visible on an unfinished frame); this one runs
|
|
@@ -1103,8 +1245,23 @@ async function checkForResponse(worktreeId, cliToolId, instanceId) {
|
|
|
1103
1245
|
(0, response_poller_core_1.stopPolling)(worktreeId, cliToolId, instanceId);
|
|
1104
1246
|
return false;
|
|
1105
1247
|
}
|
|
1248
|
+
const pollerKey = (0, response_poller_core_1.getPollerKey)(worktreeId, cliToolId, instanceId);
|
|
1249
|
+
// Issue #3213: what the steps split out of this function are keyed by.
|
|
1250
|
+
const ctx = {
|
|
1251
|
+
db,
|
|
1252
|
+
worktree,
|
|
1253
|
+
worktreeId,
|
|
1254
|
+
cliToolId,
|
|
1255
|
+
instanceId,
|
|
1256
|
+
resolvedInstanceId,
|
|
1257
|
+
pollerKey,
|
|
1258
|
+
};
|
|
1106
1259
|
// Check if CLI tool session is running
|
|
1107
1260
|
const running = await (0, cli_session_1.isSessionRunning)(worktreeId, cliToolId, instanceId);
|
|
1261
|
+
// Issue #3705: the first of the tick's awaits. Every one of them is followed
|
|
1262
|
+
// by the same question; see `mayStillActAfter`.
|
|
1263
|
+
if (!mayStillActAfter(ctx, 'session-check'))
|
|
1264
|
+
return false;
|
|
1108
1265
|
if (!running) {
|
|
1109
1266
|
logger.info('session-not-running');
|
|
1110
1267
|
// `stopPolling` is what confirms a held scrape here; see
|
|
@@ -1116,23 +1273,14 @@ async function checkForResponse(worktreeId, cliToolId, instanceId) {
|
|
|
1116
1273
|
(0, response_poller_core_1.stopPolling)(worktreeId, cliToolId, instanceId);
|
|
1117
1274
|
return false;
|
|
1118
1275
|
}
|
|
1119
|
-
const pollerKey = (0, response_poller_core_1.getPollerKey)(worktreeId, cliToolId, instanceId);
|
|
1120
|
-
// Issue #3213: what the steps split out of this function are keyed by.
|
|
1121
|
-
const ctx = {
|
|
1122
|
-
db,
|
|
1123
|
-
worktree,
|
|
1124
|
-
worktreeId,
|
|
1125
|
-
cliToolId,
|
|
1126
|
-
instanceId,
|
|
1127
|
-
resolvedInstanceId,
|
|
1128
|
-
pollerKey,
|
|
1129
|
-
};
|
|
1130
1276
|
// Issue #2436: a scrape held by an earlier tick, whose transcript has now
|
|
1131
1277
|
// had its whole budget to close. Ahead of everything below because most
|
|
1132
1278
|
// ticks of a finished turn never reach the save path — a static frame is a
|
|
1133
1279
|
// duplicate for an alternate-screen tool and yields no new lines for a
|
|
1134
1280
|
// scrollback one, and both of those return early.
|
|
1135
1281
|
await (0, pending_scraped_response_1.settleExpiredPendingScrapedResponse)(pollerKey);
|
|
1282
|
+
if (!mayStillActAfter(ctx, 'pending-scrape-settle'))
|
|
1283
|
+
return false;
|
|
1136
1284
|
// Issue #2317 Phase D: is a human reading this pane at their own terminal
|
|
1137
1285
|
// size right now, and did they just stop?
|
|
1138
1286
|
//
|
|
@@ -1144,6 +1292,8 @@ async function checkForResponse(worktreeId, cliToolId, instanceId) {
|
|
|
1144
1292
|
const delegation = (0, tmux_session_surface_1.isLiveAttachEligibleSession)(sessionName)
|
|
1145
1293
|
? await (0, geometry_delegation_1.probeGeometryDelegation)(sessionName)
|
|
1146
1294
|
: { delegated: false, released: false };
|
|
1295
|
+
if (!mayStillActAfter(ctx, 'geometry-probe'))
|
|
1296
|
+
return false;
|
|
1147
1297
|
if (delegation.released) {
|
|
1148
1298
|
// The canvas is 1000 rows again, so a cursor recorded against a 44-row
|
|
1149
1299
|
// frame indexes into a pane that no longer exists. Zero is the only value
|
|
@@ -1170,7 +1320,16 @@ async function checkForResponse(worktreeId, cliToolId, instanceId) {
|
|
|
1170
1320
|
// taken from the same constant extractResponse() measures saturation against
|
|
1171
1321
|
// (Issue #1670) — a literal here would silently decouple the two.
|
|
1172
1322
|
const output = await (0, cli_session_1.captureSessionOutput)(worktreeId, cliToolId, tmux_capture_cache_1.CACHE_MAX_CAPTURE_LINES, instanceId);
|
|
1173
|
-
|
|
1323
|
+
// Issue #3705: there is no `await` from here to the transcript reader
|
|
1324
|
+
// inside the save path, so this one answer covers every write in between —
|
|
1325
|
+
// the fault notifier, the TUI accumulator, the prompt sweep, the skip
|
|
1326
|
+
// streaks, the cursor, the in-progress id. A retired tick still READS the
|
|
1327
|
+
// frame and goes on, because the writes that already ask for themselves
|
|
1328
|
+
// (the prompt row #3701, the response hash #3663, the reader and the
|
|
1329
|
+
// scrape decision) are where its refusal is recorded; it writes none of
|
|
1330
|
+
// the rest.
|
|
1331
|
+
const owns = mayStillActAfter(ctx, 'capture');
|
|
1332
|
+
const turn = extractCompletedTurn(ctx, output, lastCapturedLine, owns);
|
|
1174
1333
|
if (!turn) {
|
|
1175
1334
|
return false;
|
|
1176
1335
|
}
|
|
@@ -1197,29 +1356,38 @@ async function checkForResponse(worktreeId, cliToolId, instanceId) {
|
|
|
1197
1356
|
// Issue #3552: a live prompt is not the saved reply, so a run of
|
|
1198
1357
|
// duplicate response ticks is over; the response hash is kept (a resume
|
|
1199
1358
|
// after the answer must not re-save the reply underneath, #2230).
|
|
1200
|
-
|
|
1359
|
+
if (owns)
|
|
1360
|
+
(0, response_dedup_1.resetDuplicateResponseSkipStreak)(pollerKey);
|
|
1361
|
+
// Asks for itself (#3701), before the prompt dedup.
|
|
1201
1362
|
return savePromptMessage(ctx, promptDetection, result, isFullScreenTui);
|
|
1202
1363
|
}
|
|
1203
1364
|
// Issue #3538: a finished frame without a live prompt ends the run of
|
|
1204
1365
|
// duplicate prompt ticks, as an unfinished one does in `extractCompletedTurn`.
|
|
1205
|
-
|
|
1366
|
+
if (owns)
|
|
1367
|
+
(0, prompt_dedup_1.resetDuplicatePromptSkipStreak)(pollerKey);
|
|
1206
1368
|
// Validate response content is not empty
|
|
1207
1369
|
if (!result.response || result.response.trim() === '') {
|
|
1208
1370
|
// Issue #3552: an empty response is not the saved reply either.
|
|
1209
|
-
|
|
1210
|
-
|
|
1371
|
+
if (owns) {
|
|
1372
|
+
(0, response_dedup_1.resetDuplicateResponseSkipStreak)(pollerKey);
|
|
1373
|
+
(0, db_1.updateSessionState)(db, worktreeId, cliToolId, result.lineCount, resolvedInstanceId);
|
|
1374
|
+
}
|
|
1211
1375
|
return false;
|
|
1212
1376
|
}
|
|
1213
1377
|
// Parse Claude-specific metadata
|
|
1214
1378
|
const claudeMetadata = cliToolId === 'claude'
|
|
1215
1379
|
? (0, claude_output_1.parseClaudeOutput)(result.response)
|
|
1216
1380
|
: undefined;
|
|
1217
|
-
const cleanedResponse = cleanCompletedResponse(cliToolId, result, pollerKey);
|
|
1381
|
+
const cleanedResponse = cleanCompletedResponse(cliToolId, result, pollerKey, owns);
|
|
1218
1382
|
// If cleaned response is empty or just "[No content]", skip saving
|
|
1219
1383
|
if (!cleanedResponse || cleanedResponse.trim() === '' || cleanedResponse === '[No content]') {
|
|
1220
1384
|
// Issue #3552: nor is one that cleans down to nothing.
|
|
1221
|
-
|
|
1222
|
-
|
|
1385
|
+
if (owns) {
|
|
1386
|
+
(0, response_dedup_1.resetDuplicateResponseSkipStreak)(pollerKey);
|
|
1387
|
+
(0, db_1.updateSessionState)(db, worktreeId, cliToolId, result.lineCount, resolvedInstanceId);
|
|
1388
|
+
}
|
|
1389
|
+
// Left as it was (Issue #3705 sets it aside as harmless): nothing sets the
|
|
1390
|
+
// in-progress id to a non-null value or reads it today.
|
|
1223
1391
|
(0, db_1.clearInProgressMessageId)(db, worktreeId, cliToolId, resolvedInstanceId);
|
|
1224
1392
|
return false;
|
|
1225
1393
|
}
|
|
@@ -1234,6 +1402,10 @@ async function checkForResponse(worktreeId, cliToolId, instanceId) {
|
|
|
1234
1402
|
// Without this the disabled cursor would leave nothing suppressing re-saves and
|
|
1235
1403
|
// the poller would append the same finished reply every 2 s.
|
|
1236
1404
|
if (!lineCountIsCursor) {
|
|
1405
|
+
// A retired tick registers no hash here (#3663, `./response-dedup`), but
|
|
1406
|
+
// it can still MATCH one — the successor's, for the same reply. The
|
|
1407
|
+
// recheck below therefore opens on the ownership question itself before
|
|
1408
|
+
// its claim, its cursor and its read (Issue #3705 review).
|
|
1237
1409
|
if ((0, response_dedup_1.isDuplicateResponse)(pollerKey, cleanedResponse)) {
|
|
1238
1410
|
// `await`, so that a rejection still lands in the catch below.
|
|
1239
1411
|
return await recheckDuplicateResponse(ctx, result, claudeMetadata);
|
|
@@ -64,6 +64,7 @@ exports.renameResponseHashCacheKey = renameResponseHashCacheKey;
|
|
|
64
64
|
exports.renameResponseHashCacheKeys = renameResponseHashCacheKeys;
|
|
65
65
|
const crypto_1 = require("crypto");
|
|
66
66
|
const global_state_1 = require("../global-state");
|
|
67
|
+
const poller_owner_1 = require("./poller-owner");
|
|
67
68
|
const responseHashCache = (0, global_state_1.getOrInitGlobal)('__responseHashCache', () => new Map());
|
|
68
69
|
/**
|
|
69
70
|
* In-memory cache: pollerKey -> ticks still to wait before the transcript reader
|
|
@@ -127,6 +128,13 @@ function isDuplicateResponse(pollerKey, content) {
|
|
|
127
128
|
if (responseHashCache.get(pollerKey) === hash) {
|
|
128
129
|
return true;
|
|
129
130
|
}
|
|
131
|
+
// Issue #3663: a tick of a stopped chain no longer owns its key, so it does
|
|
132
|
+
// not register a hash there — the same line the held scrape draws. Left
|
|
133
|
+
// behind, the hash of a reply that tick never saves (its hold is refused)
|
|
134
|
+
// would be inherited by the next chain on the key, or moved by a migration,
|
|
135
|
+
// and make the successor skip it.
|
|
136
|
+
if (!(0, poller_owner_1.mayActForPollerKey)(pollerKey))
|
|
137
|
+
return false;
|
|
130
138
|
responseHashCache.set(pollerKey, hash);
|
|
131
139
|
// Issue #3519: a new response starts a new run of duplicate ticks.
|
|
132
140
|
duplicateResponseSkipStreak.delete(pollerKey);
|