commandmate 0.44.2 → 0.44.3
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 +149 -149
- package/.next/app-path-routes-manifest.json +21 -21
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +12 -12
- package/.next/react-loadable-manifest.json +0 -6
- package/.next/required-server-files.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/update/route.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.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 +2 -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.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.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.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 +2 -2
- 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 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +2 -2
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route.js +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.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.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.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.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.js +2 -2
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route.js +2 -2
- 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.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 +3 -3
- 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 +2 -2
- 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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route.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.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.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.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]/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 +2 -2
- 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 +2 -2
- 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 +3 -3
- 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.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.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.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.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.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.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.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_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_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 +21 -21
- package/.next/server/chunks/1191.js +2 -2
- package/.next/server/chunks/1210.js +1 -1
- package/.next/server/chunks/1559.js +2 -0
- package/.next/server/chunks/1789.js +1 -0
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2404.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2460.js +1 -1
- package/.next/server/chunks/2710.js +1 -1
- package/.next/server/chunks/2908.js +1 -1
- package/.next/server/chunks/2980.js +1 -1
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3480.js +1 -1
- package/.next/server/chunks/3718.js +1 -1
- package/.next/server/chunks/4207.js +2 -2
- package/.next/server/chunks/450.js +1 -1
- package/.next/server/chunks/4672.js +5 -0
- package/.next/server/chunks/{9353.js → 4718.js} +2 -2
- package/.next/server/chunks/4837.js +14 -0
- package/.next/server/chunks/5048.js +1 -1
- package/.next/server/chunks/5209.js +1 -0
- package/.next/server/chunks/5595.js +1 -1
- package/.next/server/chunks/5625.js +25 -0
- package/.next/server/chunks/611.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/6793.js +3 -3
- package/.next/server/chunks/7491.js +2 -2
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/850.js +1 -1
- package/.next/server/chunks/8728.js +3 -3
- package/.next/server/chunks/8791.js +1 -1
- package/.next/server/chunks/8800.js +1 -1
- package/.next/server/chunks/8918.js +7 -7
- package/.next/server/chunks/9130.js +1 -1
- package/.next/server/chunks/9390.js +2 -2
- package/.next/server/chunks/9584.js +1 -1
- package/.next/server/chunks/9627.js +6 -6
- package/.next/server/chunks/9731.js +3 -3
- 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/{1642-fb2e176aaadbd137.js → 1642-767aed8e7c61ef7f.js} +1 -1
- package/.next/static/chunks/{2407-051f6f84226a9f2c.js → 2407-06d35bb1aa02de80.js} +1 -1
- package/.next/static/chunks/{2619-04bc32f026a0d946.js → 2619-a305ad4810f1393a.js} +1 -1
- package/.next/static/chunks/4727-5d695d71e3fdf97b.js +1 -0
- package/.next/static/chunks/{8165-3853772f6ae1299b.js → 8165-3525fb42f1b4976e.js} +1 -1
- package/.next/static/chunks/app/{layout-9da1ab602bcb3051.js → layout-0d1750b833f5cc3e.js} +1 -1
- package/.next/static/chunks/app/sessions/page-2af68c63211c751f.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-e36898c3a80e7302.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/terminal/{page-373ea37b16d930c7.js → page-c601f3b3ece6557e.js} +1 -1
- package/.next/static/css/057f64a65726c439.css +1 -0
- package/.next/trace +13 -13
- package/dist/cli/commands/ask.d.ts.map +1 -1
- package/dist/cli/commands/ask.js +120 -119
- package/dist/cli/commands/attach.d.ts +94 -0
- package/dist/cli/commands/attach.d.ts.map +1 -1
- package/dist/cli/commands/attach.js +145 -7
- package/dist/cli/commands/auto-yes.js +1 -1
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +3 -5
- package/dist/cli/commands/command-target.d.ts +23 -0
- package/dist/cli/commands/command-target.d.ts.map +1 -0
- package/dist/cli/commands/command-target.js +25 -0
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +41 -2
- package/dist/cli/commands/message-dispatch.d.ts +36 -0
- package/dist/cli/commands/message-dispatch.d.ts.map +1 -0
- package/dist/cli/commands/message-dispatch.js +63 -0
- package/dist/cli/commands/reply.d.ts.map +1 -1
- package/dist/cli/commands/reply.js +2 -5
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +3 -6
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +149 -146
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +589 -431
- package/dist/cli/types/api-responses.d.ts +159 -27
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/api-responses.js +4 -2
- package/dist/cli/utils/api-client.d.ts +25 -5
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +87 -55
- package/dist/cli/utils/server-url.d.ts +1 -0
- package/dist/cli/utils/server-url.d.ts.map +1 -1
- package/dist/cli/utils/server-url.js +7 -0
- package/dist/config/uat-isolation.d.ts +140 -0
- package/dist/config/uat-isolation.d.ts.map +1 -0
- package/dist/config/uat-isolation.js +246 -0
- package/dist/lib/global-state.d.ts +12 -0
- package/dist/lib/global-state.d.ts.map +1 -0
- package/dist/lib/global-state.js +16 -0
- package/dist/lib/polling/auto-yes-suppression-reason.d.ts +33 -0
- package/dist/lib/polling/auto-yes-suppression-reason.d.ts.map +1 -0
- package/dist/lib/polling/auto-yes-suppression-reason.js +2 -0
- package/dist/lib/session/prompt-view.d.ts +26 -3
- package/dist/lib/session/prompt-view.d.ts.map +1 -1
- package/dist/lib/session/prompt-view.js +26 -3
- package/dist/lib/session/status-evidence-type.d.ts +16 -0
- package/dist/lib/session/status-evidence-type.d.ts.map +1 -0
- package/dist/lib/session/status-evidence-type.js +2 -0
- package/dist/lib/tmux/legacy-session-alias.d.ts.map +1 -1
- package/dist/lib/tmux/legacy-session-alias.js +2 -1
- package/dist/server/locales/en/worktree.json +3 -1
- package/dist/server/locales/ja/worktree.json +3 -1
- package/dist/server/src/cli/types/api-responses.js +4 -2
- package/dist/server/src/config/cli-tool-timing-config.js +1 -6
- package/dist/server/src/config/uat-isolation.js +246 -0
- package/dist/server/src/lib/assistant-response-saver.js +62 -3
- package/dist/server/src/lib/auto-yes-lifecycle.js +6 -0
- package/dist/server/src/lib/auto-yes-poller.js +450 -160
- package/dist/server/src/lib/auto-yes-state.js +2 -2
- package/dist/server/src/lib/cli-tools/antigravity.js +38 -79
- package/dist/server/src/lib/cli-tools/base.js +151 -0
- package/dist/server/src/lib/cli-tools/codex.js +44 -80
- package/dist/server/src/lib/cli-tools/command-code.js +24 -56
- package/dist/server/src/lib/cli-tools/copilot.js +25 -67
- package/dist/server/src/lib/cli-tools/direct-input.js +8 -0
- package/dist/server/src/lib/cli-tools/gemini.js +23 -73
- package/dist/server/src/lib/cli-tools/opencode-pane-width.js +53 -0
- package/dist/server/src/lib/cli-tools/opencode-v2.js +9 -7
- package/dist/server/src/lib/cli-tools/opencode.js +21 -85
- package/dist/server/src/lib/cli-tools/submit-verified-sender.js +127 -4
- package/dist/server/src/lib/cli-tools/vibe-local.js +21 -66
- package/dist/server/src/lib/detection/cli-patterns.js +374 -3065
- package/dist/server/src/lib/detection/idle-evidence-observation.js +2 -2
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +7 -32
- package/dist/server/src/lib/detection/prompt-detector.js +2 -35
- package/dist/server/src/lib/detection/selection-shape-patterns.js +69 -0
- package/dist/server/src/lib/detection/selection-shape.js +32 -520
- package/dist/server/src/lib/detection/shared/pasted-text.js +41 -0
- package/dist/server/src/lib/detection/shared/shell-pane-command.js +16 -0
- package/dist/server/src/lib/detection/shared/strip-box-drawing.js +25 -0
- package/dist/server/src/lib/detection/tools/antigravity/detect.js +5 -29
- package/dist/server/src/lib/detection/tools/antigravity/dialog.js +2 -15
- package/dist/server/src/lib/detection/tools/antigravity/patterns.js +286 -0
- package/dist/server/src/lib/detection/tools/claude/detect.js +3 -14
- package/dist/server/src/lib/detection/tools/claude/patterns.js +264 -4
- package/dist/server/src/lib/detection/tools/claude/prompt.js +2 -10
- package/dist/server/src/lib/detection/tools/codex/detect.js +46 -85
- package/dist/server/src/lib/detection/tools/codex/live-region.js +33 -2
- package/dist/server/src/lib/detection/tools/codex/patterns.js +855 -0
- package/dist/server/src/lib/detection/tools/codex/prompt.js +2 -10
- package/dist/server/src/lib/detection/tools/command-code/detect.js +8 -50
- package/dist/server/src/lib/detection/tools/command-code/dialog.js +2 -18
- package/dist/server/src/lib/detection/tools/command-code/patterns.js +234 -0
- package/dist/server/src/lib/detection/tools/command-code/selection-shape.js +461 -0
- package/dist/server/src/lib/detection/tools/context-above.js +20 -0
- package/dist/server/src/lib/detection/tools/copilot/detect.js +10 -35
- package/dist/server/src/lib/detection/tools/copilot/patterns.js +640 -0
- package/dist/server/src/lib/detection/tools/copilot/prompt.js +2 -10
- package/dist/server/src/lib/detection/tools/gemini/patterns.js +29 -0
- package/dist/server/src/lib/detection/tools/live-region-specs.js +1 -1
- package/dist/server/src/lib/detection/tools/opencode/detect.js +8 -49
- package/dist/server/src/lib/detection/tools/opencode/patterns.js +508 -0
- package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +7 -42
- package/dist/server/src/lib/detection/tools/opencode-v2/patterns.js +63 -0
- package/dist/server/src/lib/detection/tools/run-detection.js +6 -47
- package/dist/server/src/lib/detection/tools/verdicts.js +59 -0
- package/dist/server/src/lib/detection/tools/vibe-local/patterns.js +20 -0
- package/dist/server/src/lib/detection/truncate-raw-content.js +38 -0
- package/dist/server/src/lib/detection/turn-abandoned.js +66 -0
- package/dist/server/src/lib/detection/unclassified-frame-tracker.js +2 -2
- package/dist/server/src/lib/global-state.js +16 -0
- package/dist/server/src/lib/hooks/agent-session-telemetry.js +4 -6
- package/dist/server/src/lib/hooks/permission-decision-state.js +2 -2
- package/dist/server/src/lib/hooks/sources/antigravity/history.js +11 -76
- package/dist/server/src/lib/hooks/sources/antigravity/hooks-config.js +63 -1
- package/dist/server/src/lib/hooks/sources/antigravity/source.js +16 -0
- package/dist/server/src/lib/hooks/sources/antigravity/transcript.js +3 -12
- package/dist/server/src/lib/hooks/sources/claude/history.js +17 -156
- package/dist/server/src/lib/hooks/sources/claude/queued-notice.js +53 -0
- package/dist/server/src/lib/hooks/sources/claude/source.js +33 -3
- package/dist/server/src/lib/hooks/sources/claude/transcript.js +3 -13
- package/dist/server/src/lib/hooks/sources/codex/history.js +11 -74
- package/dist/server/src/lib/hooks/sources/codex/hooks-config.js +147 -11
- package/dist/server/src/lib/hooks/sources/codex/relay-install.js +64 -21
- package/dist/server/src/lib/hooks/sources/codex/transcript.js +5 -15
- package/dist/server/src/lib/hooks/sources/command-code/history.js +20 -121
- package/dist/server/src/lib/hooks/sources/command-code/transcript.js +3 -13
- package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +161 -31
- package/dist/server/src/lib/hooks/sources/define-source.js +40 -55
- package/dist/server/src/lib/hooks/sources/event-mapper.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode/diff.js +3 -4
- package/dist/server/src/lib/hooks/sources/opencode/history.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode/launch-settings.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode/payloads.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode/ports.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode/subscription.js +4 -3
- package/dist/server/src/lib/hooks/sources/opencode/transcript.js +3 -16
- package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode-v2/mappers.js +5 -4
- package/dist/server/src/lib/hooks/sources/opencode-v2/ports.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +3 -7
- package/dist/server/src/lib/hooks/sources/opencode-v2/usage.js +2 -1
- package/dist/server/src/lib/hooks/sources/pending-decisions.js +2 -1
- package/dist/server/src/lib/hooks/sources/registry.js +3 -2
- package/dist/server/src/lib/hooks/sources/transcript-history.js +262 -0
- package/dist/server/src/lib/hooks/sources/turn-body.js +31 -0
- package/dist/server/src/lib/hooks/tool-input-normalization-state.js +2 -2
- package/dist/server/src/lib/polling/antigravity-permission-receipts.js +2 -2
- package/dist/server/src/lib/polling/auto-yes-enter-fallback-state.js +142 -0
- package/dist/server/src/lib/polling/auto-yes-enter-fallback.js +187 -0
- package/dist/server/src/lib/polling/auto-yes-resolver.js +9 -3
- package/dist/server/src/lib/polling/auto-yes-suppression-reason.js +2 -0
- package/dist/server/src/lib/polling/auto-yes-suppression-state.js +2 -2
- package/dist/server/src/lib/polling/pending-scraped-response.js +190 -0
- package/dist/server/src/lib/polling/prompt-dedup-state.js +2 -2
- package/dist/server/src/lib/polling/prompt-dedup.js +2 -2
- package/dist/server/src/lib/polling/response-checker-dialog-gate.js +95 -0
- package/dist/server/src/lib/polling/response-checker-extraction-result.js +50 -0
- package/dist/server/src/lib/polling/response-checker-extraction-steps.js +670 -0
- package/dist/server/src/lib/polling/response-checker.js +641 -1142
- package/dist/server/src/lib/polling/response-dedup.js +3 -4
- package/dist/server/src/lib/polling/response-poller-constants.js +17 -0
- package/dist/server/src/lib/polling/response-poller-core.js +54 -20
- package/dist/server/src/lib/polling/startup-screen.js +142 -0
- package/dist/server/src/lib/polling/structured-history-gate.js +3 -2
- package/dist/server/src/lib/prompt-answer-semantic.js +178 -0
- package/dist/server/src/lib/prompt-answer-sender.js +5 -4
- package/dist/server/src/lib/push/failure-episode-state.js +2 -2
- package/dist/server/src/lib/push/notification-dedup.js +3 -4
- package/dist/server/src/lib/push/prompt-card-state.js +2 -2
- package/dist/server/src/lib/push/waiting-push-notifier.js +3 -4
- package/dist/server/src/lib/realtime/publisher-registry.js +3 -2
- package/dist/server/src/lib/realtime/terminal-broadcast.js +38 -5
- package/dist/server/src/lib/realtime/terminal-session-ownership.js +45 -0
- package/dist/server/src/lib/relay/relay-delivery.js +3 -2
- package/dist/server/src/lib/relay/relay-readiness.js +38 -1
- package/dist/server/src/lib/response-cleaner.js +24 -1
- package/dist/server/src/lib/response-extractor.js +16 -0
- package/dist/server/src/lib/schedule-manager.js +8 -10
- package/dist/server/src/lib/session/agent-event-ask-user-question.js +168 -0
- package/dist/server/src/lib/session/agent-event-awaiting-instruction.js +104 -0
- package/dist/server/src/lib/session/agent-event-dedup.js +539 -0
- package/dist/server/src/lib/session/agent-event-model.js +562 -0
- package/dist/server/src/lib/session/agent-event-record.js +10 -0
- package/dist/server/src/lib/session/agent-event-state.js +106 -1854
- package/dist/server/src/lib/session/agent-event-structured-state.js +109 -0
- package/dist/server/src/lib/session/agent-event-turn.js +811 -0
- package/dist/server/src/lib/session/agent-session-lifecycle.js +11 -2
- package/dist/server/src/lib/session/chat-turn-progress.js +322 -0
- package/dist/server/src/lib/session/claude-executor.js +45 -5
- package/dist/server/src/lib/session/claude-session.js +21 -65
- package/dist/server/src/lib/session/cli-session.js +17 -0
- package/dist/server/src/lib/session/current-output-builder.js +450 -1103
- package/dist/server/src/lib/session/current-output-history-writers.js +255 -0
- package/dist/server/src/lib/session/current-output-types.js +9 -0
- package/dist/server/src/lib/session/detection-divergence.js +55 -0
- package/dist/server/src/lib/session/global-session-constants.js +2 -13
- package/dist/server/src/lib/session/hook-turn-hold.js +102 -0
- package/dist/server/src/lib/session/layer-disagreement.js +2 -2
- package/dist/server/src/lib/session/opencode-session-store.js +2 -1
- package/dist/server/src/lib/session/prompt-view.js +26 -3
- package/dist/server/src/lib/session/prompt-waiting-composition.js +3 -2
- package/dist/server/src/lib/session/provisional-turn.js +3 -1
- package/dist/server/src/lib/session/send-user-message.js +1 -1
- package/dist/server/src/lib/session/session-starting-state.js +4 -6
- package/dist/server/src/lib/session/status-evidence-type.js +2 -0
- package/dist/server/src/lib/session/status-evidence.js +2 -2
- package/dist/server/src/lib/session/structured-status-merge.js +335 -0
- package/dist/server/src/lib/session/waiting-episode-state.js +3 -4
- package/dist/server/src/lib/session-cleanup.js +1 -5
- package/dist/server/src/lib/skills/install-plan.js +2 -1
- package/dist/server/src/lib/skills/snapshot-store.js +2 -2
- package/dist/server/src/lib/skills/uninstall-plan.js +2 -2
- package/dist/server/src/lib/timer-manager.js +6 -8
- package/dist/server/src/lib/tmux/geometry-delegation.js +3 -4
- package/dist/server/src/lib/tmux/legacy-session-alias.js +2 -1
- package/dist/server/src/lib/tmux/session-hooks.js +2 -1
- package/dist/server/src/lib/tmux/session-status-options.js +3 -3
- package/dist/server/src/lib/tmux/tmux-capture-cache.js +3 -2
- package/dist/server/src/lib/tmux/tmux.js +33 -59
- package/dist/server/src/lib/tui-accumulator.js +2 -2
- package/dist/server/src/lib/version-checker.js +6 -6
- package/dist/server/src/lib/ws-server.js +47 -11
- package/docs/en/user-guide/webapp-guide.md +27 -3
- package/package.json +1 -1
- package/release-notes/0.44.3.json +82 -0
- package/scripts/hooks/cmate-agent-event.sh +18 -0
- package/.next/server/chunks/1068.js +0 -1
- package/.next/server/chunks/4372.js +0 -5
- package/.next/server/chunks/6474.js +0 -14
- package/.next/server/chunks/967.js +0 -1
- package/.next/server/chunks/9798.js +0 -2
- package/.next/server/chunks/9882.js +0 -25
- package/.next/static/chunks/591-539fec878c9dec5e.js +0 -1
- package/.next/static/chunks/app/sessions/page-049e06335187aa91.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-2a81397e60f17e63.js +0 -1
- package/.next/static/css/38070d879efa1371.css +0 -1
- package/dist/server/src/lib/cli-tools/index.js +0 -41
- package/dist/server/src/lib/polling/global-session-poller.js +0 -140
- /package/.next/static/{QlCqLjorauDDBXPa-C7TK → tWwHQzmvc-rv9KKUtDWfQ}/_buildManifest.js +0 -0
- /package/.next/static/{QlCqLjorauDDBXPa-C7TK → tWwHQzmvc-rv9KKUtDWfQ}/_ssgManifest.js +0 -0
|
@@ -120,7 +120,7 @@ exports.antigravityTranscriptPath = antigravityTranscriptPath;
|
|
|
120
120
|
exports.acceptAntigravityTranscriptPath = acceptAntigravityTranscriptPath;
|
|
121
121
|
exports.captureAntigravityTranscriptTurn = captureAntigravityTranscriptTurn;
|
|
122
122
|
exports.resolveAntigravityTranscriptPath = resolveAntigravityTranscriptPath;
|
|
123
|
-
const
|
|
123
|
+
const global_state_1 = require("../../../../lib/global-state");
|
|
124
124
|
const os_1 = require("os");
|
|
125
125
|
const path_1 = require("path");
|
|
126
126
|
const auto_yes_state_1 = require("../../../../lib/auto-yes-state");
|
|
@@ -129,6 +129,7 @@ const user_turn_recorder_1 = require("../../../../lib/history/user-turn-recorder
|
|
|
129
129
|
const assistant_response_saver_1 = require("../../../../lib/assistant-response-saver");
|
|
130
130
|
const logger_1 = require("../../../../lib/logger");
|
|
131
131
|
const agent_transcript_1 = require("../../../../types/agent-transcript");
|
|
132
|
+
const transcript_history_1 = require("../transcript-history");
|
|
132
133
|
const transcript_1 = require("./transcript");
|
|
133
134
|
const logger = (0, logger_1.createLogger)('lib/hooks/sources/antigravity/history');
|
|
134
135
|
/**
|
|
@@ -178,7 +179,7 @@ const ANTIGRAVITY_CONVERSATION_ID_PATTERN = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9
|
|
|
178
179
|
* agy sends `conversationId` on every event it delivers — but a future one that
|
|
179
180
|
* did not would otherwise blank the pointer mid-session.
|
|
180
181
|
*/
|
|
181
|
-
const conversationPointers = (
|
|
182
|
+
const conversationPointers = (0, global_state_1.getOrInitGlobal)('__antigravityTranscriptConversations', () => new Map());
|
|
182
183
|
/**
|
|
183
184
|
* How many written-but-unconfirmed turns one instance may be following (#2443).
|
|
184
185
|
*
|
|
@@ -212,7 +213,7 @@ exports.ANTIGRAVITY_UNSETTLED_TURN_LIMIT = 16;
|
|
|
212
213
|
* coverage #2438 shipped. Persisting it would make a row's repair depend on a
|
|
213
214
|
* table that outlives the transcript window it can only be repaired from.
|
|
214
215
|
*/
|
|
215
|
-
const unsettledTurns = (
|
|
216
|
+
const unsettledTurns = (0, global_state_1.getOrInitGlobal)('__antigravityUnsettledTurns', () => new Map());
|
|
216
217
|
function keyOf(target) {
|
|
217
218
|
return (0, auto_yes_state_1.buildCompositeKey)(target.worktreeId, target.cliToolId, target.instanceId);
|
|
218
219
|
}
|
|
@@ -346,24 +347,7 @@ async function resolveAntigravityStopAt(target) {
|
|
|
346
347
|
* status quo.
|
|
347
348
|
*/
|
|
348
349
|
async function resolveAntigravityConversationId(target) {
|
|
349
|
-
|
|
350
|
-
try {
|
|
351
|
-
const { getLastAgentEvent } = await Promise.resolve().then(() => __importStar(require('../../../../lib/session/agent-event-state')));
|
|
352
|
-
const conversationId = getLastAgentEvent(target.worktreeId, target.cliToolId, target.instanceId)?.sessionId;
|
|
353
|
-
if (typeof conversationId === 'string' && conversationId.length > 0) {
|
|
354
|
-
conversationPointers.set(key, conversationId);
|
|
355
|
-
return conversationId;
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
catch (error) {
|
|
359
|
-
// A state module that cannot be reached is one that knows no conversation.
|
|
360
|
-
logger.debug('antigravity-transcript-conversation-lookup-failed', {
|
|
361
|
-
worktreeId: target.worktreeId,
|
|
362
|
-
instanceId: target.instanceId ?? target.cliToolId,
|
|
363
|
-
error: error instanceof Error ? error.message : String(error),
|
|
364
|
-
});
|
|
365
|
-
}
|
|
366
|
-
return conversationPointers.get(key) ?? null;
|
|
350
|
+
return (0, transcript_history_1.resolveSessionIdFromEvents)(target, conversationPointers, keyOf(target), logger, 'antigravity-transcript-conversation-lookup-failed');
|
|
367
351
|
}
|
|
368
352
|
/**
|
|
369
353
|
* `~/.gemini/antigravity-cli`.
|
|
@@ -408,15 +392,7 @@ function antigravityTranscriptPath(agyHome, conversationId) {
|
|
|
408
392
|
* @returns The resolved path, or null when it is not acceptable
|
|
409
393
|
*/
|
|
410
394
|
function acceptAntigravityTranscriptPath(agyHome, candidate) {
|
|
411
|
-
|
|
412
|
-
return null;
|
|
413
|
-
if (candidate.includes('\0'))
|
|
414
|
-
return null;
|
|
415
|
-
const root = (0, path_1.resolve)(antigravityBrainRoot(agyHome));
|
|
416
|
-
const resolved = (0, path_1.resolve)(candidate);
|
|
417
|
-
if (resolved !== root && !resolved.startsWith(root + path_1.sep))
|
|
418
|
-
return null;
|
|
419
|
-
return resolved;
|
|
395
|
+
return (0, transcript_history_1.acceptPathUnderRoot)(antigravityBrainRoot(agyHome), transcript_1.ANTIGRAVITY_TRANSCRIPT_EXTENSION, candidate);
|
|
420
396
|
}
|
|
421
397
|
/**
|
|
422
398
|
* Read this instance's unwritten turns out of its transcript and write them.
|
|
@@ -616,7 +592,7 @@ async function captureAntigravityTranscriptTurn(target, capture = {}, report) {
|
|
|
616
592
|
let captured = false;
|
|
617
593
|
for (let index = 0; index < pending.turns.length; index += 1) {
|
|
618
594
|
const turn = pending.turns[index];
|
|
619
|
-
captured = await writeAntigravityTurn(target, turn, (0, transcript_1.renderAntigravityTurn)(turn), resolveAssistantTimestampMs(turn, userRows[index], (0, transcript_1.antigravityTurnLastRecordAt)(turn), nextTurnOpensAt(pending.turns, userRows, index)), path, report);
|
|
595
|
+
captured = await writeAntigravityTurn(target, turn, (0, transcript_1.renderAntigravityTurn)(turn), (0, transcript_history_1.resolveAssistantTimestampMs)(turn, userRows[index], (0, transcript_1.antigravityTurnLastRecordAt)(turn), (0, transcript_history_1.nextTurnOpensAt)(pending.turns, userRows, index)), path, report);
|
|
620
596
|
// Issue #2443: a row now exists for this turn, and whether it is the body
|
|
621
597
|
// agy finished on is a separate question from whether it could be saved.
|
|
622
598
|
// An unconfirmed one joins the follow list so that its conclusion is still
|
|
@@ -675,27 +651,7 @@ async function resolveAntigravityTranscriptPath(target, capture = {}) {
|
|
|
675
651
|
* @param turns - Every turn in the window, oldest first
|
|
676
652
|
*/
|
|
677
653
|
async function selectUnwrittenAntigravityTurns(target, turns) {
|
|
678
|
-
|
|
679
|
-
Promise.resolve().then(() => __importStar(require('../../../../lib/db/db-instance'))),
|
|
680
|
-
Promise.resolve().then(() => __importStar(require('../../../../lib/db'))),
|
|
681
|
-
]);
|
|
682
|
-
const db = getDbInstance();
|
|
683
|
-
for (let index = turns.length - 1; index >= 0; index -= 1) {
|
|
684
|
-
const turn = turns[index];
|
|
685
|
-
const requestId = (0, agent_transcript_1.antigravityTurnRequestId)(turn.conversationId, turn.stepIndex);
|
|
686
|
-
if (!findMessageByRequestId(db, target.worktreeId, requestId))
|
|
687
|
-
continue;
|
|
688
|
-
return {
|
|
689
|
-
turns: turns.slice(index + 1),
|
|
690
|
-
previousStartedAt: turn.startedAt,
|
|
691
|
-
anchored: true,
|
|
692
|
-
};
|
|
693
|
-
}
|
|
694
|
-
return {
|
|
695
|
-
turns: turns.slice(-1),
|
|
696
|
-
previousStartedAt: turns.length > 1 ? turns[turns.length - 2].startedAt : 0,
|
|
697
|
-
anchored: false,
|
|
698
|
-
};
|
|
654
|
+
return (0, transcript_history_1.selectUnwrittenTurns)(target, turns, (turn) => (0, agent_transcript_1.antigravityTurnRequestId)(turn.conversationId, turn.stepIndex));
|
|
699
655
|
}
|
|
700
656
|
/**
|
|
701
657
|
* The transcript file for this conversation, or null.
|
|
@@ -712,15 +668,7 @@ async function locateAntigravityTranscript(agyHome, conversationId) {
|
|
|
712
668
|
const accepted = acceptAntigravityTranscriptPath(agyHome, candidate);
|
|
713
669
|
if (!accepted)
|
|
714
670
|
return null;
|
|
715
|
-
return (await isReadableFile(accepted)) ? accepted : null;
|
|
716
|
-
}
|
|
717
|
-
async function isReadableFile(path) {
|
|
718
|
-
try {
|
|
719
|
-
return (await (0, promises_1.stat)(path)).isFile();
|
|
720
|
-
}
|
|
721
|
-
catch {
|
|
722
|
-
return false;
|
|
723
|
-
}
|
|
671
|
+
return (await (0, transcript_history_1.isReadableFile)(accepted)) ? accepted : null;
|
|
724
672
|
}
|
|
725
673
|
/**
|
|
726
674
|
* Record the prompt this turn answers, before the reply is written (#2196).
|
|
@@ -757,7 +705,7 @@ async function recordAntigravityUserTurn(target, turn, previousStartedAt = 0) {
|
|
|
757
705
|
}
|
|
758
706
|
return recorded;
|
|
759
707
|
}
|
|
760
|
-
|
|
708
|
+
/*
|
|
761
709
|
* When the assistant row for this turn is dated.
|
|
762
710
|
*
|
|
763
711
|
* **The turn's LAST record, not its first (Issue #2273).** #2196 dated the reply
|
|
@@ -789,14 +737,7 @@ async function recordAntigravityUserTurn(target, turn, previousStartedAt = 0) {
|
|
|
789
737
|
* @param nextTurnOpensAt - Epoch ms of the next turn's user row, or null when
|
|
790
738
|
* this is the newest turn in the window
|
|
791
739
|
*/
|
|
792
|
-
|
|
793
|
-
const earliest = userRow.timestampMs === null
|
|
794
|
-
? turn.startedAt
|
|
795
|
-
: Math.max(turn.startedAt, userRow.timestampMs + 1);
|
|
796
|
-
const latest = nextTurnOpensAt === null ? Number.POSITIVE_INFINITY : nextTurnOpensAt - 1;
|
|
797
|
-
return Math.max(earliest, Math.min(lastRecordAt, latest));
|
|
798
|
-
}
|
|
799
|
-
/**
|
|
740
|
+
/*
|
|
800
741
|
* The instant the next pending turn's prompt row carries, or null (Issue #2273).
|
|
801
742
|
*
|
|
802
743
|
* The user row's own timestamp when there is one, because that is what History
|
|
@@ -805,12 +746,6 @@ function resolveAssistantTimestampMs(turn, userRow, lastRecordAt = 0, nextTurnOp
|
|
|
805
746
|
* prompt is while the previous turn was still running. The turn's start is the
|
|
806
747
|
* fallback for a turn that produced no row at all.
|
|
807
748
|
*/
|
|
808
|
-
function nextTurnOpensAt(turns, userRows, index) {
|
|
809
|
-
const next = turns[index + 1];
|
|
810
|
-
if (!next)
|
|
811
|
-
return null;
|
|
812
|
-
return userRows[index + 1]?.timestampMs ?? next.startedAt;
|
|
813
|
-
}
|
|
814
749
|
/**
|
|
815
750
|
* How many already-written turns are re-rendered and compared (Issue #2438).
|
|
816
751
|
*
|
|
@@ -80,10 +80,12 @@ exports.buildAntigravityStopHookCommand = buildAntigravityStopHookCommand;
|
|
|
80
80
|
exports.buildAntigravityPermissionHookCommand = buildAntigravityPermissionHookCommand;
|
|
81
81
|
exports.buildAntigravityHookConfig = buildAntigravityHookConfig;
|
|
82
82
|
exports.mergeAntigravityHooksConfig = mergeAntigravityHooksConfig;
|
|
83
|
+
exports.inspectAntigravityHooksConfigReadOnly = inspectAntigravityHooksConfigReadOnly;
|
|
83
84
|
exports.writeAntigravityHooksConfig = writeAntigravityHooksConfig;
|
|
84
85
|
exports.buildAntigravityLaunchCommand = buildAntigravityLaunchCommand;
|
|
85
86
|
const os_1 = require("os");
|
|
86
87
|
const path_1 = require("path");
|
|
88
|
+
const uat_isolation_1 = require("../../../../config/uat-isolation");
|
|
87
89
|
const types_1 = require("../../../../lib/cli-tools/types");
|
|
88
90
|
const agent_event_types_1 = require("../../../../lib/hooks/agent-event-types");
|
|
89
91
|
const hook_settings_generator_1 = require("../../../../lib/hooks/hook-settings-generator");
|
|
@@ -359,9 +361,58 @@ function buildAntigravityHookConfig(relayPath) {
|
|
|
359
361
|
function mergeAntigravityHooksConfig(existing, config) {
|
|
360
362
|
return { ...existing, [exports.ANTIGRAVITY_HOOK_NAME]: config };
|
|
361
363
|
}
|
|
364
|
+
/**
|
|
365
|
+
* Whether the shared `~/.gemini/config/hooks.json` may be used, unwritten, by a
|
|
366
|
+
* server in UAT isolation mode (`CM_UAT_ISOLATION=1`, Issue #3360).
|
|
367
|
+
*
|
|
368
|
+
* Usable only when the file holds CommandMate's named hook and nothing else,
|
|
369
|
+
* exactly as this build writes it. A comparison against the merge with what is
|
|
370
|
+
* there would keep the user's own hooks (one may post straight to production)
|
|
371
|
+
* and still compare equal, so any other top-level key is refused, with its own
|
|
372
|
+
* reason.
|
|
373
|
+
*/
|
|
374
|
+
function inspectAntigravityHooksConfigReadOnly(options = {}) {
|
|
375
|
+
const configPath = getAntigravityHooksConfigPath(options);
|
|
376
|
+
if (!(0, hook_settings_generator_1.isHookInjectionEnabled)()) {
|
|
377
|
+
return {
|
|
378
|
+
usable: false,
|
|
379
|
+
reason: 'CM_AGENT_HOOKS_INJECT=0',
|
|
380
|
+
fix: 'Do not combine CM_AGENT_HOOKS_INJECT=0 with UAT isolation.',
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
const relayPath = (0, hook_settings_generator_1.resolveRelayScriptPath)();
|
|
384
|
+
if (!relayPath) {
|
|
385
|
+
return { usable: false, reason: 'this build ships no relay script', fix: uat_isolation_1.UAT_SAME_BUILD_FIX };
|
|
386
|
+
}
|
|
387
|
+
const existing = (0, shared_config_tree_1.readJsonObjectFile)(configPath);
|
|
388
|
+
if (existing === null) {
|
|
389
|
+
logger.info('antigravity-hooks-config-absent-readonly', { configPath });
|
|
390
|
+
return { usable: false, reason: `${configPath} does not exist or cannot be read`, fix: uat_isolation_1.UAT_SAME_BUILD_FIX };
|
|
391
|
+
}
|
|
392
|
+
if (Object.keys(existing).some((key) => key !== exports.ANTIGRAVITY_HOOK_NAME)) {
|
|
393
|
+
logger.info('antigravity-hooks-config-foreign-readonly', { configPath });
|
|
394
|
+
return {
|
|
395
|
+
usable: false,
|
|
396
|
+
reason: `${configPath} also holds hooks (or keys) CommandMate did not write, which would run in the UAT session`,
|
|
397
|
+
fix: 'Skip antigravity scenarios in this UAT, or run it where the shared hooks file holds only the hook CommandMate writes.',
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
const own = mergeAntigravityHooksConfig(null, buildAntigravityHookConfig(relayPath));
|
|
401
|
+
if (JSON.stringify(existing) !== JSON.stringify(own)) {
|
|
402
|
+
logger.info('antigravity-hooks-config-differs-readonly', { configPath });
|
|
403
|
+
return { usable: false, reason: `${configPath} differs from what this build writes`, fix: uat_isolation_1.UAT_SAME_BUILD_FIX };
|
|
404
|
+
}
|
|
405
|
+
return { usable: true, configPath };
|
|
406
|
+
}
|
|
362
407
|
/**
|
|
363
408
|
* Write `~/.gemini/config/hooks.json`.
|
|
364
409
|
*
|
|
410
|
+
* Under `CM_UAT_ISOLATION=1` (Issue #3360) nothing is written: an existing file
|
|
411
|
+
* that already holds exactly this config is reused, anything else answers null
|
|
412
|
+
* (and `source.prepareLaunch` then refuses the launch). Under `own-home`
|
|
413
|
+
* (Issue #3312) it is written once the path checks out, else this throws
|
|
414
|
+
* `UatIsolationLaunchRefusedError`.
|
|
415
|
+
*
|
|
365
416
|
* @returns The path written, or null when injection is off or not possible
|
|
366
417
|
*/
|
|
367
418
|
function writeAntigravityHooksConfig(options = {}) {
|
|
@@ -373,9 +424,20 @@ function writeAntigravityHooksConfig(options = {}) {
|
|
|
373
424
|
return null;
|
|
374
425
|
}
|
|
375
426
|
const configPath = getAntigravityHooksConfigPath(options);
|
|
427
|
+
// Issue #3312: outside the fail-open `try` on purpose — under `own-home` a
|
|
428
|
+
// path outside the dedicated user's HOME refuses the launch.
|
|
429
|
+
const policy = (0, uat_isolation_1.sharedHookWritePolicy)('antigravity', [configPath]);
|
|
376
430
|
try {
|
|
431
|
+
if (policy === 'read-only') {
|
|
432
|
+
// Issue #3360: the file is the user's, shared with their production
|
|
433
|
+
// server, and names a relay by this checkout's path. A UAT server writes
|
|
434
|
+
// nothing to it; see {@link inspectAntigravityHooksConfigReadOnly}.
|
|
435
|
+
const inspection = inspectAntigravityHooksConfigReadOnly(options);
|
|
436
|
+
return inspection.usable ? inspection.configPath : null;
|
|
437
|
+
}
|
|
377
438
|
const existing = (0, shared_config_tree_1.readJsonObjectFile)(configPath);
|
|
378
|
-
|
|
439
|
+
const merged = mergeAntigravityHooksConfig(existing, buildAntigravityHookConfig(relayPath));
|
|
440
|
+
(0, shared_config_tree_1.writeJsonObjectFile)(configPath, merged);
|
|
379
441
|
return configPath;
|
|
380
442
|
}
|
|
381
443
|
catch (error) {
|
|
@@ -66,6 +66,7 @@ exports.antigravityAgentEventSource = void 0;
|
|
|
66
66
|
exports.parseAntigravityPermissionRequest = parseAntigravityPermissionRequest;
|
|
67
67
|
exports.encodeAntigravityVerdict = encodeAntigravityVerdict;
|
|
68
68
|
exports.extractAntigravityEventDetail = extractAntigravityEventDetail;
|
|
69
|
+
const uat_isolation_1 = require("../../../../config/uat-isolation");
|
|
69
70
|
const agent_event_types_1 = require("../../../../lib/hooks/agent-event-types");
|
|
70
71
|
const permission_request_payload_1 = require("../../../../lib/hooks/permission-request-payload");
|
|
71
72
|
const define_source_1 = require("../define-source");
|
|
@@ -263,6 +264,21 @@ exports.antigravityAgentEventSource = (0, define_source_1.definePushHookSource)(
|
|
|
263
264
|
// so no worktree path is needed and `prepareLaunch` really does write it.
|
|
264
265
|
prepareLaunch: ({ target, executablePath }) => {
|
|
265
266
|
const settingsPath = (0, hooks_config_1.writeAntigravityHooksConfig)();
|
|
267
|
+
// Issue #3360: under UAT isolation the shared file is never written, and a
|
|
268
|
+
// file this build did not produce is refused rather than launched against —
|
|
269
|
+
// agy reads `~/.gemini/config/hooks.json` whatever this server passes, so
|
|
270
|
+
// "without hooks" would mean production's hooks in the UAT session.
|
|
271
|
+
if (settingsPath === null && (0, uat_isolation_1.isUatIsolationEnabled)()) {
|
|
272
|
+
// Issue #3312: under `own-home` the file is written, not inspected, so a
|
|
273
|
+
// null here is a write that failed — still refused, never started bare.
|
|
274
|
+
if ((0, uat_isolation_1.getUatIsolationMode)() === 'own-home') {
|
|
275
|
+
throw new uat_isolation_1.UatIsolationLaunchRefusedError('antigravity', '~/.gemini/config/hooks.json could not be prepared', uat_isolation_1.UAT_SAME_BUILD_FIX);
|
|
276
|
+
}
|
|
277
|
+
const inspection = (0, hooks_config_1.inspectAntigravityHooksConfigReadOnly)();
|
|
278
|
+
throw inspection.usable
|
|
279
|
+
? new uat_isolation_1.UatIsolationLaunchRefusedError('antigravity', '~/.gemini/config/hooks.json could not be prepared', uat_isolation_1.UAT_SAME_BUILD_FIX)
|
|
280
|
+
: new uat_isolation_1.UatIsolationLaunchRefusedError('antigravity', inspection.reason, inspection.fix);
|
|
281
|
+
}
|
|
266
282
|
// #1846: the two correlation URLs are the plan's `env`. `worktreePath` is
|
|
267
283
|
// in the context now and deliberately unused here — agy's config is one
|
|
268
284
|
// file for the machine, so there is nothing per-worktree to write.
|
|
@@ -174,7 +174,7 @@ function readAntigravityToolCall(value) {
|
|
|
174
174
|
const detail = args
|
|
175
175
|
? ((0, event_mapper_1.readStringField)(args, 'toolAction') ?? (0, event_mapper_1.readStringField)(args, 'toolSummary'))
|
|
176
176
|
: null;
|
|
177
|
-
return { name, detail: detail ? boundDetailText(collapseToLine(detail)) : null };
|
|
177
|
+
return { name, detail: detail ? boundDetailText((0, turn_body_1.collapseToLine)(detail)) : null };
|
|
178
178
|
}
|
|
179
179
|
/**
|
|
180
180
|
* Read one parsed transcript line.
|
|
@@ -379,13 +379,8 @@ function renderThinking(text) {
|
|
|
379
379
|
.join('\n');
|
|
380
380
|
return `> **${exports.ANTIGRAVITY_THINKING_LABEL}**\n>\n${quoted}`;
|
|
381
381
|
}
|
|
382
|
-
function collapseToLine(value) {
|
|
383
|
-
return value.replace(/\s+/g, ' ').trim();
|
|
384
|
-
}
|
|
385
382
|
function boundDetailText(value) {
|
|
386
|
-
return value
|
|
387
|
-
? value
|
|
388
|
-
: `${value.slice(0, exports.MAX_ANTIGRAVITY_TOOL_DETAIL_LENGTH - 1)}…`;
|
|
383
|
+
return (0, turn_body_1.boundDetail)(value, exports.MAX_ANTIGRAVITY_TOOL_DETAIL_LENGTH);
|
|
389
384
|
}
|
|
390
385
|
/**
|
|
391
386
|
* Render one turn to Markdown.
|
|
@@ -432,11 +427,7 @@ function renderAntigravityTurn(turn) {
|
|
|
432
427
|
unknown.add(record.type);
|
|
433
428
|
}
|
|
434
429
|
let body = (0, turn_body_1.separateTurnBody)(rendered).body;
|
|
435
|
-
|
|
436
|
-
body =
|
|
437
|
-
body.slice(0, exports.MAX_ANTIGRAVITY_TURN_BODY_LENGTH - exports.ANTIGRAVITY_TURN_TRUNCATION_MARKER.length) +
|
|
438
|
-
exports.ANTIGRAVITY_TURN_TRUNCATION_MARKER;
|
|
439
|
-
}
|
|
430
|
+
body = (0, turn_body_1.truncateTurnBody)(body, exports.MAX_ANTIGRAVITY_TURN_BODY_LENGTH, exports.ANTIGRAVITY_TURN_TRUNCATION_MARKER);
|
|
440
431
|
return {
|
|
441
432
|
conversationId: turn.conversationId,
|
|
442
433
|
stepIndex: turn.stepIndex,
|
|
@@ -99,6 +99,7 @@ exports.acceptClaudeTranscriptHint = acceptClaudeTranscriptHint;
|
|
|
99
99
|
exports.captureClaudeTranscriptTurn = captureClaudeTranscriptTurn;
|
|
100
100
|
exports.resolveClaudeTranscriptPath = resolveClaudeTranscriptPath;
|
|
101
101
|
exports.readClaudeTurnProgress = readClaudeTurnProgress;
|
|
102
|
+
const global_state_1 = require("../../../../lib/global-state");
|
|
102
103
|
const promises_1 = require("fs/promises");
|
|
103
104
|
const os_1 = require("os");
|
|
104
105
|
const path_1 = require("path");
|
|
@@ -107,6 +108,7 @@ const user_turn_recorder_1 = require("../../../../lib/history/user-turn-recorder
|
|
|
107
108
|
const assistant_response_saver_1 = require("../../../../lib/assistant-response-saver");
|
|
108
109
|
const logger_1 = require("../../../../lib/logger");
|
|
109
110
|
const agent_transcript_1 = require("../../../../types/agent-transcript");
|
|
111
|
+
const transcript_history_1 = require("../transcript-history");
|
|
110
112
|
const transcript_1 = require("./transcript");
|
|
111
113
|
const logger = (0, logger_1.createLogger)('lib/hooks/sources/claude/history');
|
|
112
114
|
/**
|
|
@@ -180,7 +182,7 @@ const CLAUDE_TRANSCRIPT_EXTENSION = '.jsonl';
|
|
|
180
182
|
* mid-session. Same reasoning as `getLastKnownAgentModel`, which latches for the
|
|
181
183
|
* same reason.
|
|
182
184
|
*/
|
|
183
|
-
const sessionPointers = (
|
|
185
|
+
const sessionPointers = (0, global_state_1.getOrInitGlobal)('__claudeTranscriptSessions', () => new Map());
|
|
184
186
|
function keyOf(target) {
|
|
185
187
|
return (0, auto_yes_state_1.buildCompositeKey)(target.worktreeId, target.cliToolId, target.instanceId);
|
|
186
188
|
}
|
|
@@ -196,24 +198,7 @@ function resetClaudeTranscriptSessions() {
|
|
|
196
198
|
* become a static dependency of the poller.
|
|
197
199
|
*/
|
|
198
200
|
async function resolveClaudeSessionId(target) {
|
|
199
|
-
|
|
200
|
-
try {
|
|
201
|
-
const { getLastAgentEvent } = await Promise.resolve().then(() => __importStar(require('../../../../lib/session/agent-event-state')));
|
|
202
|
-
const sessionId = getLastAgentEvent(target.worktreeId, target.cliToolId, target.instanceId)?.sessionId;
|
|
203
|
-
if (typeof sessionId === 'string' && sessionId.length > 0) {
|
|
204
|
-
sessionPointers.set(key, sessionId);
|
|
205
|
-
return sessionId;
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
catch (error) {
|
|
209
|
-
// A state module that cannot be reached is one that knows no session id.
|
|
210
|
-
logger.debug('claude-transcript-session-lookup-failed', {
|
|
211
|
-
worktreeId: target.worktreeId,
|
|
212
|
-
instanceId: target.instanceId ?? target.cliToolId,
|
|
213
|
-
error: error instanceof Error ? error.message : String(error),
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
|
-
return sessionPointers.get(key) ?? null;
|
|
201
|
+
return (0, transcript_history_1.resolveSessionIdFromEvents)(target, sessionPointers, keyOf(target), logger, 'claude-transcript-session-lookup-failed');
|
|
217
202
|
}
|
|
218
203
|
/** `<home>/.claude/projects`. */
|
|
219
204
|
function claudeProjectsRoot(homeDir) {
|
|
@@ -249,15 +234,7 @@ function claudeTranscriptPath(homeDir, worktreePath, sessionId) {
|
|
|
249
234
|
* @returns The resolved path, or null when it is not acceptable
|
|
250
235
|
*/
|
|
251
236
|
function acceptClaudeTranscriptHint(homeDir, hint) {
|
|
252
|
-
|
|
253
|
-
return null;
|
|
254
|
-
if (hint.includes('\0'))
|
|
255
|
-
return null;
|
|
256
|
-
const root = (0, path_1.resolve)(claudeProjectsRoot(homeDir));
|
|
257
|
-
const resolved = (0, path_1.resolve)(hint);
|
|
258
|
-
if (resolved !== root && !resolved.startsWith(root + path_1.sep))
|
|
259
|
-
return null;
|
|
260
|
-
return resolved;
|
|
237
|
+
return (0, transcript_history_1.acceptPathUnderRoot)(claudeProjectsRoot(homeDir), CLAUDE_TRANSCRIPT_EXTENSION, hint);
|
|
261
238
|
}
|
|
262
239
|
/**
|
|
263
240
|
* Read this instance's unwritten turns out of its transcript and write them.
|
|
@@ -467,7 +444,7 @@ async function captureClaudeTranscriptTurn(target, capture, report) {
|
|
|
467
444
|
let captured = false;
|
|
468
445
|
for (let index = 0; index < pending.turns.length; index += 1) {
|
|
469
446
|
const turn = pending.turns[index];
|
|
470
|
-
captured = await writeClaudeTurn(target, turn, (0, transcript_1.renderClaudeTurn)(turn), resolveAssistantTimestampMs(turn, userRows[index], lastRecordAt.get(turn.promptUuid) ?? 0, nextTurnOpensAt(pending.turns, userRows, index)), path, report);
|
|
447
|
+
captured = await writeClaudeTurn(target, turn, (0, transcript_1.renderClaudeTurn)(turn), (0, transcript_history_1.resolveAssistantTimestampMs)(turn, userRows[index], lastRecordAt.get(turn.promptUuid) ?? 0, (0, transcript_history_1.nextTurnOpensAt)(pending.turns, userRows, index)), path, report);
|
|
471
448
|
}
|
|
472
449
|
if (captured) {
|
|
473
450
|
// Issue #2437: History now holds this turn as the agent's own Markdown.
|
|
@@ -518,26 +495,7 @@ async function captureClaudeTranscriptTurn(target, capture, report) {
|
|
|
518
495
|
* @param turns - Every turn in the window, oldest first
|
|
519
496
|
*/
|
|
520
497
|
async function selectUnwrittenClaudeTurns(target, turns) {
|
|
521
|
-
|
|
522
|
-
Promise.resolve().then(() => __importStar(require('../../../../lib/db/db-instance'))),
|
|
523
|
-
Promise.resolve().then(() => __importStar(require('../../../../lib/db'))),
|
|
524
|
-
]);
|
|
525
|
-
const db = getDbInstance();
|
|
526
|
-
for (let index = turns.length - 1; index >= 0; index -= 1) {
|
|
527
|
-
const requestId = (0, agent_transcript_1.claudeTurnRequestId)(turns[index].promptUuid);
|
|
528
|
-
if (!findMessageByRequestId(db, target.worktreeId, requestId))
|
|
529
|
-
continue;
|
|
530
|
-
return {
|
|
531
|
-
turns: turns.slice(index + 1),
|
|
532
|
-
previousStartedAt: turns[index].startedAt,
|
|
533
|
-
anchored: true,
|
|
534
|
-
};
|
|
535
|
-
}
|
|
536
|
-
return {
|
|
537
|
-
turns: turns.slice(-1),
|
|
538
|
-
previousStartedAt: turns.length > 1 ? turns[turns.length - 2].startedAt : 0,
|
|
539
|
-
anchored: false,
|
|
540
|
-
};
|
|
498
|
+
return (0, transcript_history_1.selectUnwrittenTurns)(target, turns, (turn) => (0, agent_transcript_1.claudeTurnRequestId)(turn.promptUuid));
|
|
541
499
|
}
|
|
542
500
|
/**
|
|
543
501
|
* The transcript file this instance would be read from, or null (Issue #2246).
|
|
@@ -780,43 +738,6 @@ async function recordClaudeUserTurn(target, turn, previousStartedAt = 0) {
|
|
|
780
738
|
}
|
|
781
739
|
return recorded;
|
|
782
740
|
}
|
|
783
|
-
/**
|
|
784
|
-
* When the assistant row for this turn is dated.
|
|
785
|
-
*
|
|
786
|
-
* **The turn's LAST assistant record, not its prompt (Issue #2273).** #2121
|
|
787
|
-
* dated the reply by the prompt record's clock so that a row written a poll late
|
|
788
|
-
* still sorted where the conversation put it, and #2196 moved it one millisecond
|
|
789
|
-
* on so that `groupMessagesIntoPairs` — which orders by timestamp and nothing
|
|
790
|
-
* else — could never return the answer above the question. Both properties
|
|
791
|
-
* survive: `earliest` is a floor this never goes under.
|
|
792
|
-
*
|
|
793
|
-
* What neither accounted for is the row that lands BETWEEN the prompt and the
|
|
794
|
-
* reply. A tool approval is written when the dialog appears, seconds into the
|
|
795
|
-
* turn, and the chat surface orders its rows by timestamp — so a reply dated at
|
|
796
|
-
* the turn's start draws ABOVE an approval that really happened before it. The
|
|
797
|
-
* measured case is in the Issue: prompt `04:49:50.989Z`, reply `04:49:54.000Z`,
|
|
798
|
-
* approval `04:49:57.513Z`, rendered as question → answer → approval.
|
|
799
|
-
*
|
|
800
|
-
* The turn's last assistant record is the moment the reply was finished, so
|
|
801
|
-
* everything the turn produced on the way sorts before it. `lastRecordAt` is 0
|
|
802
|
-
* when the window held no timestamped assistant record for the turn, and the row
|
|
803
|
-
* is then dated exactly where #2196 put it.
|
|
804
|
-
*
|
|
805
|
-
* `nextTurnOpensAt` is the ceiling. The next turn's prompt row may be a `/send`
|
|
806
|
-
* row written while THIS turn was still running — a queued prompt — and a reply
|
|
807
|
-
* that overtook it would be paired with the wrong question.
|
|
808
|
-
*
|
|
809
|
-
* @param lastRecordAt - Epoch ms of the turn's last assistant record, or 0
|
|
810
|
-
* @param nextTurnOpensAt - Epoch ms of the next turn's user row, or null when
|
|
811
|
-
* this is the newest turn in the window
|
|
812
|
-
*/
|
|
813
|
-
function resolveAssistantTimestampMs(turn, userRow, lastRecordAt = 0, nextTurnOpensAt = null) {
|
|
814
|
-
const earliest = userRow.timestampMs === null
|
|
815
|
-
? turn.startedAt
|
|
816
|
-
: Math.max(turn.startedAt, userRow.timestampMs + 1);
|
|
817
|
-
const latest = nextTurnOpensAt === null ? Number.POSITIVE_INFINITY : nextTurnOpensAt - 1;
|
|
818
|
-
return Math.max(earliest, Math.min(lastRecordAt, latest));
|
|
819
|
-
}
|
|
820
741
|
/**
|
|
821
742
|
* When each turn's last assistant record was written (Issue #2273).
|
|
822
743
|
*
|
|
@@ -850,21 +771,6 @@ function lastClaudeAssistantRecordAt(records) {
|
|
|
850
771
|
}
|
|
851
772
|
return at;
|
|
852
773
|
}
|
|
853
|
-
/**
|
|
854
|
-
* The instant the next pending turn's prompt row carries, or null (Issue #2273).
|
|
855
|
-
*
|
|
856
|
-
* The user row's own timestamp when there is one, because that is what History
|
|
857
|
-
* sorts on and it can be EARLIER than the turn's start — an adopted `/send` row
|
|
858
|
-
* was written when CommandMate handed the text to the pane, which for a queued
|
|
859
|
-
* prompt is while the previous turn was still running. The turn's start is the
|
|
860
|
-
* fallback for a turn that produced no row at all.
|
|
861
|
-
*/
|
|
862
|
-
function nextTurnOpensAt(turns, userRows, index) {
|
|
863
|
-
const next = turns[index + 1];
|
|
864
|
-
if (!next)
|
|
865
|
-
return null;
|
|
866
|
-
return userRows[index + 1]?.timestampMs ?? next.startedAt;
|
|
867
|
-
}
|
|
868
774
|
/**
|
|
869
775
|
* The transcript file for this instance, or null.
|
|
870
776
|
*
|
|
@@ -876,25 +782,17 @@ function nextTurnOpensAt(turns, userRows, index) {
|
|
|
876
782
|
async function locateClaudeTranscript(homeDir, capture, sessionId) {
|
|
877
783
|
if (sessionId) {
|
|
878
784
|
const path = claudeTranscriptPath(homeDir, capture.worktreePath, sessionId);
|
|
879
|
-
if (await isReadableFile(path))
|
|
785
|
+
if (await (0, transcript_history_1.isReadableFile)(path))
|
|
880
786
|
return path;
|
|
881
787
|
}
|
|
882
788
|
const hint = capture.transcriptPathHint;
|
|
883
789
|
if (typeof hint === 'string' && hint.length > 0) {
|
|
884
790
|
const accepted = acceptClaudeTranscriptHint(homeDir, hint);
|
|
885
|
-
if (accepted && (await isReadableFile(accepted)))
|
|
791
|
+
if (accepted && (await (0, transcript_history_1.isReadableFile)(accepted)))
|
|
886
792
|
return accepted;
|
|
887
793
|
}
|
|
888
794
|
return null;
|
|
889
795
|
}
|
|
890
|
-
async function isReadableFile(path) {
|
|
891
|
-
try {
|
|
892
|
-
return (await (0, promises_1.stat)(path)).isFile();
|
|
893
|
-
}
|
|
894
|
-
catch {
|
|
895
|
-
return false;
|
|
896
|
-
}
|
|
897
|
-
}
|
|
898
796
|
/** `\n`, which in UTF-8 is one byte and never part of another character. */
|
|
899
797
|
const LINE_FEED = 0x0a;
|
|
900
798
|
/**
|
|
@@ -1156,7 +1054,7 @@ async function captureHeadlessClaudeTurn(target, records, sessionId, path, repor
|
|
|
1156
1054
|
const captured = await writeClaudeTurn(target, turn,
|
|
1157
1055
|
// An empty body stays empty, so the writer hands the turn back to the
|
|
1158
1056
|
// scraper instead of saving a row that is nothing but the marker.
|
|
1159
|
-
rendered.body.length === 0 ? rendered : markClaudeTurnHeadMissing(rendered), resolveAssistantTimestampMs(turn, NO_USER_ROW, headless.lastRecordAt, null), path, report);
|
|
1057
|
+
rendered.body.length === 0 ? rendered : markClaudeTurnHeadMissing(rendered), (0, transcript_history_1.resolveAssistantTimestampMs)(turn, NO_USER_ROW, headless.lastRecordAt, null), path, report);
|
|
1160
1058
|
if (captured) {
|
|
1161
1059
|
// Issue #2437, for the reason the prompt-opened path gives.
|
|
1162
1060
|
await (0, assistant_response_saver_1.advanceCapturedLineForTranscriptTurn)(target);
|
|
@@ -1218,32 +1116,7 @@ exports.CLAUDE_TURN_RECHECK_LIMIT = 3;
|
|
|
1218
1116
|
* @returns Whether the row was replaced
|
|
1219
1117
|
*/
|
|
1220
1118
|
async function growClaudeTurnRow(target, existing, rendered, path) {
|
|
1221
|
-
|
|
1222
|
-
const previousLength = existing.content.length;
|
|
1223
|
-
if (rendered.body.length <= previousLength)
|
|
1224
|
-
return false;
|
|
1225
|
-
const [{ getDbInstance }, { updateMessageContent }, { broadcastMessage }] = await Promise.all([
|
|
1226
|
-
Promise.resolve().then(() => __importStar(require('../../../../lib/db/db-instance'))),
|
|
1227
|
-
Promise.resolve().then(() => __importStar(require('../../../../lib/db'))),
|
|
1228
|
-
Promise.resolve().then(() => __importStar(require('../../../../lib/ws-server'))),
|
|
1229
|
-
]);
|
|
1230
|
-
updateMessageContent(getDbInstance(), existing.id, rendered.body);
|
|
1231
|
-
broadcastMessage('message_updated', {
|
|
1232
|
-
worktreeId: target.worktreeId,
|
|
1233
|
-
message: { ...existing, content: rendered.body },
|
|
1234
|
-
});
|
|
1235
|
-
logger.info('claude-transcript-turn-updated', {
|
|
1236
|
-
worktreeId: target.worktreeId,
|
|
1237
|
-
instanceId,
|
|
1238
|
-
sessionId: rendered.sessionId,
|
|
1239
|
-
requestId: existing.requestId,
|
|
1240
|
-
path,
|
|
1241
|
-
previousLength,
|
|
1242
|
-
bodyLength: rendered.body.length,
|
|
1243
|
-
textBlocks: rendered.textBlocks,
|
|
1244
|
-
toolBlocks: rendered.toolBlocks,
|
|
1245
|
-
});
|
|
1246
|
-
return true;
|
|
1119
|
+
return (0, transcript_history_1.growTurnRowTo)(target, existing, rendered, path, logger, 'claude-transcript-turn-updated');
|
|
1247
1120
|
}
|
|
1248
1121
|
/**
|
|
1249
1122
|
* Re-read the newest already-written turns and grow the short ones (#2264).
|
|
@@ -1266,24 +1139,12 @@ async function growClaudeTurnRow(target, existing, rendered, path) {
|
|
|
1266
1139
|
* @returns How many rows were replaced
|
|
1267
1140
|
*/
|
|
1268
1141
|
async function refreshClaudeTurnRows(target, candidates, path) {
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
const db = getDbInstance();
|
|
1276
|
-
let updated = 0;
|
|
1277
|
-
for (const turn of candidates) {
|
|
1278
|
-
if (!(0, transcript_1.isClaudeTurnWritable)(turn))
|
|
1279
|
-
continue;
|
|
1280
|
-
const existing = findMessageByRequestId(db, target.worktreeId, (0, agent_transcript_1.claudeTurnRequestId)(turn.promptUuid));
|
|
1281
|
-
if (!existing)
|
|
1282
|
-
continue;
|
|
1283
|
-
if (await growClaudeTurnRow(target, existing, (0, transcript_1.renderClaudeTurn)(turn), path))
|
|
1284
|
-
updated += 1;
|
|
1285
|
-
}
|
|
1286
|
-
return updated;
|
|
1142
|
+
return (0, transcript_history_1.refreshTurnRowsTo)(target, candidates, path, {
|
|
1143
|
+
isWritable: transcript_1.isClaudeTurnWritable,
|
|
1144
|
+
requestIdOf: (turn) => (0, agent_transcript_1.claudeTurnRequestId)(turn.promptUuid),
|
|
1145
|
+
render: transcript_1.renderClaudeTurn,
|
|
1146
|
+
grow: growClaudeTurnRow,
|
|
1147
|
+
});
|
|
1287
1148
|
}
|
|
1288
1149
|
/**
|
|
1289
1150
|
* Write one rendered turn, unless it is already there.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* A `UserPromptSubmit` that is a queued notice joining the running turn
|
|
4
|
+
* (Issue #3330).
|
|
5
|
+
*
|
|
6
|
+
* Claude Code queues the completion notice of a background task (a `Bash` run
|
|
7
|
+
* with `run_in_background`, a subagent) and hands it to the model the next time
|
|
8
|
+
* it can: after a tool result inside a running turn, or as the prompt of a turn
|
|
9
|
+
* of its own when the session is idle. Either way it fires `UserPromptSubmit`
|
|
10
|
+
* once per notice, and the prompt it reports is the notice — the text the
|
|
11
|
+
* transcript records as `queue-operation` content, which starts with
|
|
12
|
+
* `<task-notification>`.
|
|
13
|
+
*
|
|
14
|
+
* Measured on the server logs and transcripts of 2026-10-02 to 2026-10-05: of
|
|
15
|
+
* the 188 Claude `user_prompt_submit`s applied while a turn of theirs was still
|
|
16
|
+
* open, 178 matched a `queue-operation: remove` (`reason: absorbed_mid_turn`)
|
|
17
|
+
* of a `<task-notification>` one for one. A prompt the operator typed into a
|
|
18
|
+
* running turn is absorbed the same way but fires no hook at all (9 of 9
|
|
19
|
+
* removes of other content had no delivery beside them).
|
|
20
|
+
*
|
|
21
|
+
* The answer is about the payload only. Whether there is a running turn to join
|
|
22
|
+
* is the state's question (`applyTurnTransition`), and a notice that arrives
|
|
23
|
+
* while the agent is idle opens its turn as before.
|
|
24
|
+
*/
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.QUEUED_NOTICE_FIELD = exports.CLAUDE_TASK_NOTIFICATION_PREFIX = void 0;
|
|
27
|
+
exports.isClaudeQueuedNoticePrompt = isClaudeQueuedNoticePrompt;
|
|
28
|
+
/** The tag every queued background-task notice begins with. */
|
|
29
|
+
exports.CLAUDE_TASK_NOTIFICATION_PREFIX = '<task-notification>';
|
|
30
|
+
/**
|
|
31
|
+
* The body field the relay script (`scripts/hooks/cmate-agent-event.sh`) sets
|
|
32
|
+
* to `true` in place of the prompt.
|
|
33
|
+
*
|
|
34
|
+
* The relay rebuilds the body it posts and does not forward the prompt — the
|
|
35
|
+
* operator's text has no business in a request whose receiver needs one bit of
|
|
36
|
+
* it — so it answers the question below itself and sends the answer.
|
|
37
|
+
*/
|
|
38
|
+
exports.QUEUED_NOTICE_FIELD = 'queuedNotice';
|
|
39
|
+
/**
|
|
40
|
+
* Whether this `UserPromptSubmit` payload is a queued background-task notice.
|
|
41
|
+
*
|
|
42
|
+
* Two shapes say so: Claude's own payload (the injected `type: "http"` hook),
|
|
43
|
+
* whose `prompt` starts with the tag, and the relay script's body, which
|
|
44
|
+
* carries {@link QUEUED_NOTICE_FIELD} `: true` instead. Anything else —
|
|
45
|
+
* including a relay too old to send the field — answers false, which is the
|
|
46
|
+
* behaviour before this Issue.
|
|
47
|
+
*/
|
|
48
|
+
function isClaudeQueuedNoticePrompt(payload) {
|
|
49
|
+
if (payload[exports.QUEUED_NOTICE_FIELD] === true)
|
|
50
|
+
return true;
|
|
51
|
+
const prompt = payload.prompt;
|
|
52
|
+
return typeof prompt === 'string' && prompt.trimStart().startsWith(exports.CLAUDE_TASK_NOTIFICATION_PREFIX);
|
|
53
|
+
}
|