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
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Helpers the per-tool transcript `history.ts` modules share.
|
|
4
|
+
*
|
|
5
|
+
* Each of these was written out once per tool with only the turn type's name
|
|
6
|
+
* differing. The turn type is reduced to the one field these read.
|
|
7
|
+
*
|
|
8
|
+
* @module lib/hooks/sources/transcript-history
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
+
var ownKeys = function(o) {
|
|
28
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
+
var ar = [];
|
|
30
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
return ownKeys(o);
|
|
34
|
+
};
|
|
35
|
+
return function (mod) {
|
|
36
|
+
if (mod && mod.__esModule) return mod;
|
|
37
|
+
var result = {};
|
|
38
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
+
__setModuleDefault(result, mod);
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
})();
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
exports.resolveAssistantTimestampMs = resolveAssistantTimestampMs;
|
|
45
|
+
exports.nextTurnOpensAt = nextTurnOpensAt;
|
|
46
|
+
exports.isReadableFile = isReadableFile;
|
|
47
|
+
exports.selectUnwrittenTurns = selectUnwrittenTurns;
|
|
48
|
+
exports.resolveSessionIdFromEvents = resolveSessionIdFromEvents;
|
|
49
|
+
exports.acceptPathUnderRoot = acceptPathUnderRoot;
|
|
50
|
+
exports.growTurnRowTo = growTurnRowTo;
|
|
51
|
+
exports.refreshTurnRowsTo = refreshTurnRowsTo;
|
|
52
|
+
const promises_1 = require("fs/promises");
|
|
53
|
+
const path_1 = require("path");
|
|
54
|
+
/**
|
|
55
|
+
* When the assistant row for this turn is dated.
|
|
56
|
+
*
|
|
57
|
+
* **The turn's LAST assistant record, not its prompt (Issue #2273).** #2121
|
|
58
|
+
* dated the reply by the prompt record's clock so that a row written a poll late
|
|
59
|
+
* still sorted where the conversation put it, and #2196 moved it one millisecond
|
|
60
|
+
* on so that `groupMessagesIntoPairs` — which orders by timestamp and nothing
|
|
61
|
+
* else — could never return the answer above the question. Both properties
|
|
62
|
+
* survive: `earliest` is a floor this never goes under.
|
|
63
|
+
*
|
|
64
|
+
* What neither accounted for is the row that lands BETWEEN the prompt and the
|
|
65
|
+
* reply. A tool approval is written when the dialog appears, seconds into the
|
|
66
|
+
* turn, and the chat surface orders its rows by timestamp — so a reply dated at
|
|
67
|
+
* the turn's start draws ABOVE an approval that really happened before it. The
|
|
68
|
+
* measured case is in the Issue: prompt `04:49:50.989Z`, reply `04:49:54.000Z`,
|
|
69
|
+
* approval `04:49:57.513Z`, rendered as question → answer → approval.
|
|
70
|
+
*
|
|
71
|
+
* The turn's last assistant record is the moment the reply was finished, so
|
|
72
|
+
* everything the turn produced on the way sorts before it. `lastRecordAt` is 0
|
|
73
|
+
* when the window held no timestamped assistant record for the turn, and the row
|
|
74
|
+
* is then dated exactly where #2196 put it.
|
|
75
|
+
*
|
|
76
|
+
* `nextTurnOpensAt` is the ceiling. The next turn's prompt row may be a `/send`
|
|
77
|
+
* row written while THIS turn was still running — a queued prompt — and a reply
|
|
78
|
+
* that overtook it would be paired with the wrong question.
|
|
79
|
+
*
|
|
80
|
+
* @param lastRecordAt - Epoch ms of the turn's last assistant record, or 0
|
|
81
|
+
* @param nextTurnOpensAt - Epoch ms of the next turn's user row, or null when
|
|
82
|
+
* this is the newest turn in the window
|
|
83
|
+
*/
|
|
84
|
+
function resolveAssistantTimestampMs(turn, userRow, lastRecordAt = 0, nextTurnOpensAt = null) {
|
|
85
|
+
const earliest = userRow.timestampMs === null
|
|
86
|
+
? turn.startedAt
|
|
87
|
+
: Math.max(turn.startedAt, userRow.timestampMs + 1);
|
|
88
|
+
const latest = nextTurnOpensAt === null ? Number.POSITIVE_INFINITY : nextTurnOpensAt - 1;
|
|
89
|
+
return Math.max(earliest, Math.min(lastRecordAt, latest));
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* The instant the next pending turn's prompt row carries, or null (Issue #2273).
|
|
93
|
+
*
|
|
94
|
+
* The user row's own timestamp when there is one, because that is what History
|
|
95
|
+
* sorts on and it can be EARLIER than the turn's start — an adopted `/send` row
|
|
96
|
+
* was written when CommandMate handed the text to the pane, which for a queued
|
|
97
|
+
* prompt is while the previous turn was still running. The turn's start is the
|
|
98
|
+
* fallback for a turn that produced no row at all.
|
|
99
|
+
*/
|
|
100
|
+
function nextTurnOpensAt(turns, userRows, index) {
|
|
101
|
+
const next = turns[index + 1];
|
|
102
|
+
if (!next)
|
|
103
|
+
return null;
|
|
104
|
+
return userRows[index + 1]?.timestampMs ?? next.startedAt;
|
|
105
|
+
}
|
|
106
|
+
async function isReadableFile(path) {
|
|
107
|
+
try {
|
|
108
|
+
return (await (0, promises_1.stat)(path)).isFile();
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* The turns still to write: search backwards from the newest turn for one that
|
|
116
|
+
* is already a row, and take everything after it (Issue #2246).
|
|
117
|
+
*
|
|
118
|
+
* Record order and never a timestamp. A window with no anchor answers with the
|
|
119
|
+
* newest turn alone. The tools differ only in how a turn's request id is built.
|
|
120
|
+
*
|
|
121
|
+
* @param turns - Every turn in the window, oldest first
|
|
122
|
+
* @param requestIdOf - The request id the tool records a turn's user row under
|
|
123
|
+
*/
|
|
124
|
+
async function selectUnwrittenTurns(target, turns, requestIdOf) {
|
|
125
|
+
const [{ getDbInstance }, { findMessageByRequestId }] = await Promise.all([
|
|
126
|
+
Promise.resolve().then(() => __importStar(require('../../../lib/db/db-instance'))),
|
|
127
|
+
Promise.resolve().then(() => __importStar(require('../../../lib/db'))),
|
|
128
|
+
]);
|
|
129
|
+
const db = getDbInstance();
|
|
130
|
+
for (let index = turns.length - 1; index >= 0; index -= 1) {
|
|
131
|
+
const requestId = requestIdOf(turns[index]);
|
|
132
|
+
if (!findMessageByRequestId(db, target.worktreeId, requestId))
|
|
133
|
+
continue;
|
|
134
|
+
return {
|
|
135
|
+
turns: turns.slice(index + 1),
|
|
136
|
+
previousStartedAt: turns[index].startedAt,
|
|
137
|
+
anchored: true,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
turns: turns.slice(-1),
|
|
142
|
+
previousStartedAt: turns.length > 1 ? turns[turns.length - 2].startedAt : 0,
|
|
143
|
+
anchored: false,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* The session id this instance's transcript is under, or null.
|
|
148
|
+
*
|
|
149
|
+
* Reads the structured event state first and falls back to the latched value.
|
|
150
|
+
* The import is dynamic so that `agent-event-state`'s module graph does not
|
|
151
|
+
* become a static dependency of the poller.
|
|
152
|
+
*
|
|
153
|
+
* @param pointers - The tool's latched session ids, keyed by `key`
|
|
154
|
+
* @param key - This instance's key in `pointers`
|
|
155
|
+
* @param logger - The calling tool's logger
|
|
156
|
+
* @param failureEvent - The event name the tool logs when the state module is unreachable
|
|
157
|
+
*/
|
|
158
|
+
async function resolveSessionIdFromEvents(target, pointers, key, logger, failureEvent) {
|
|
159
|
+
try {
|
|
160
|
+
const { getLastAgentEvent } = await Promise.resolve().then(() => __importStar(require('../../../lib/session/agent-event-state')));
|
|
161
|
+
const sessionId = getLastAgentEvent(target.worktreeId, target.cliToolId, target.instanceId)?.sessionId;
|
|
162
|
+
if (typeof sessionId === 'string' && sessionId.length > 0) {
|
|
163
|
+
pointers.set(key, sessionId);
|
|
164
|
+
return sessionId;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
// A state module that cannot be reached is one that knows no session id.
|
|
169
|
+
logger.debug(failureEvent, {
|
|
170
|
+
worktreeId: target.worktreeId,
|
|
171
|
+
instanceId: target.instanceId ?? target.cliToolId,
|
|
172
|
+
error: error instanceof Error ? error.message : String(error),
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
return pointers.get(key) ?? null;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* A path named by something other than the tool's module, accepted only if it
|
|
179
|
+
* ends in `extension`, carries no NUL and is under `rootDir`.
|
|
180
|
+
*
|
|
181
|
+
* Containment is checked on the *resolved* path so that `..` cannot climb out.
|
|
182
|
+
*
|
|
183
|
+
* @returns The resolved path, or null when it is not acceptable
|
|
184
|
+
*/
|
|
185
|
+
function acceptPathUnderRoot(rootDir, extension, candidate) {
|
|
186
|
+
if (!candidate.endsWith(extension))
|
|
187
|
+
return null;
|
|
188
|
+
if (candidate.includes('\0'))
|
|
189
|
+
return null;
|
|
190
|
+
const root = (0, path_1.resolve)(rootDir);
|
|
191
|
+
const resolved = (0, path_1.resolve)(candidate);
|
|
192
|
+
if (resolved !== root && !resolved.startsWith(root + path_1.sep))
|
|
193
|
+
return null;
|
|
194
|
+
return resolved;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Replace a saved row whose body has since grown (Issue #2264).
|
|
198
|
+
*
|
|
199
|
+
* Strictly longer, never merely different; `message_updated`, never `message`.
|
|
200
|
+
*
|
|
201
|
+
* @param updatedEvent - The event name the tool logs on replacement
|
|
202
|
+
* @returns Whether the row was replaced
|
|
203
|
+
*/
|
|
204
|
+
async function growTurnRowTo(target, existing, rendered, path, logger, updatedEvent) {
|
|
205
|
+
const instanceId = target.instanceId ?? target.cliToolId;
|
|
206
|
+
// No `typeof previous !== 'string'` guard, unlike antigravity/history.ts:
|
|
207
|
+
// `chat_messages.content` is `TEXT NOT NULL`, so it is always a string here.
|
|
208
|
+
const previousLength = existing.content.length;
|
|
209
|
+
if (rendered.body.length <= previousLength)
|
|
210
|
+
return false;
|
|
211
|
+
const [{ getDbInstance }, { updateMessageContent }, { broadcastMessage }] = await Promise.all([
|
|
212
|
+
Promise.resolve().then(() => __importStar(require('../../../lib/db/db-instance'))),
|
|
213
|
+
Promise.resolve().then(() => __importStar(require('../../../lib/db'))),
|
|
214
|
+
Promise.resolve().then(() => __importStar(require('../../../lib/ws-server'))),
|
|
215
|
+
]);
|
|
216
|
+
updateMessageContent(getDbInstance(), existing.id, rendered.body);
|
|
217
|
+
broadcastMessage('message_updated', {
|
|
218
|
+
worktreeId: target.worktreeId,
|
|
219
|
+
message: { ...existing, content: rendered.body },
|
|
220
|
+
});
|
|
221
|
+
logger.info(updatedEvent, {
|
|
222
|
+
worktreeId: target.worktreeId,
|
|
223
|
+
instanceId,
|
|
224
|
+
sessionId: rendered.sessionId,
|
|
225
|
+
requestId: existing.requestId,
|
|
226
|
+
path,
|
|
227
|
+
previousLength,
|
|
228
|
+
bodyLength: rendered.body.length,
|
|
229
|
+
textBlocks: rendered.textBlocks,
|
|
230
|
+
toolBlocks: rendered.toolBlocks,
|
|
231
|
+
});
|
|
232
|
+
return true;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Re-read the newest already-written turns and grow the short ones (#2264).
|
|
236
|
+
*
|
|
237
|
+
* Turns that are still open are skipped; the database is asked before the turn
|
|
238
|
+
* is rendered.
|
|
239
|
+
*
|
|
240
|
+
* @param candidates - Already-written turns, oldest first
|
|
241
|
+
* @returns How many rows were replaced
|
|
242
|
+
*/
|
|
243
|
+
async function refreshTurnRowsTo(target, candidates, path, tool) {
|
|
244
|
+
if (candidates.length === 0)
|
|
245
|
+
return 0;
|
|
246
|
+
const [{ getDbInstance }, { findMessageByRequestId }] = await Promise.all([
|
|
247
|
+
Promise.resolve().then(() => __importStar(require('../../../lib/db/db-instance'))),
|
|
248
|
+
Promise.resolve().then(() => __importStar(require('../../../lib/db'))),
|
|
249
|
+
]);
|
|
250
|
+
const db = getDbInstance();
|
|
251
|
+
let updated = 0;
|
|
252
|
+
for (const turn of candidates) {
|
|
253
|
+
if (!tool.isWritable(turn))
|
|
254
|
+
continue;
|
|
255
|
+
const existing = findMessageByRequestId(db, target.worktreeId, tool.requestIdOf(turn));
|
|
256
|
+
if (!existing)
|
|
257
|
+
continue;
|
|
258
|
+
if (await tool.grow(target, existing, tool.render(turn), path))
|
|
259
|
+
updated += 1;
|
|
260
|
+
}
|
|
261
|
+
return updated;
|
|
262
|
+
}
|
|
@@ -68,6 +68,9 @@
|
|
|
68
68
|
*/
|
|
69
69
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
70
70
|
exports.TURN_REASONING_LABEL = exports.TURN_TOOL_LOG_LABEL = void 0;
|
|
71
|
+
exports.collapseToLine = collapseToLine;
|
|
72
|
+
exports.boundDetail = boundDetail;
|
|
73
|
+
exports.truncateTurnBody = truncateTurnBody;
|
|
71
74
|
exports.separateTurnBody = separateTurnBody;
|
|
72
75
|
/**
|
|
73
76
|
* The bold first line of the folded tool section.
|
|
@@ -89,6 +92,34 @@ exports.TURN_TOOL_LOG_LABEL = 'Tool calls';
|
|
|
89
92
|
* `components/worktree/ChatMessageBubble`.
|
|
90
93
|
*/
|
|
91
94
|
exports.TURN_REASONING_LABEL = 'Thinking';
|
|
95
|
+
/**
|
|
96
|
+
* A tool title on one line.
|
|
97
|
+
*
|
|
98
|
+
* A `bash` title is the command, and a heredoc puts newlines in it. Left alone
|
|
99
|
+
* they would end the list item and turn the rest of the command into body text.
|
|
100
|
+
*/
|
|
101
|
+
function collapseToLine(value) {
|
|
102
|
+
return value.replace(/\s+/g, ' ').trim();
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* A tool detail cut to `max` characters, the last one being `…`.
|
|
106
|
+
*
|
|
107
|
+
* The cap is each reader's own constant; the cut is the same in all of them.
|
|
108
|
+
*/
|
|
109
|
+
function boundDetail(value, max) {
|
|
110
|
+
return value.length <= max ? value : `${value.slice(0, max - 1)}…`;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* A turn body cut to `max` characters, the tail being `marker`.
|
|
114
|
+
*
|
|
115
|
+
* The cap and the marker are each reader's own constants; the cut is the same
|
|
116
|
+
* in all of them.
|
|
117
|
+
*/
|
|
118
|
+
function truncateTurnBody(body, max, marker) {
|
|
119
|
+
if (body.length <= max)
|
|
120
|
+
return body;
|
|
121
|
+
return body.slice(0, max - marker.length) + marker;
|
|
122
|
+
}
|
|
92
123
|
/**
|
|
93
124
|
* Put one block inside a blockquote, line by line.
|
|
94
125
|
*
|
|
@@ -33,9 +33,9 @@ exports.recordToolInputNormalization = recordToolInputNormalization;
|
|
|
33
33
|
exports.getLastToolInputNormalization = getLastToolInputNormalization;
|
|
34
34
|
exports.clearToolInputNormalizations = clearToolInputNormalizations;
|
|
35
35
|
const auto_yes_state_1 = require("../../lib/auto-yes-state");
|
|
36
|
+
const global_state_1 = require("../global-state");
|
|
36
37
|
/** compositeKey -> the most recent normalisation for that session. */
|
|
37
|
-
const lastNormalizations =
|
|
38
|
-
(globalThis.__toolInputNormalizations = new Map());
|
|
38
|
+
const lastNormalizations = (0, global_state_1.getOrInitGlobal)('__toolInputNormalizations', () => new Map());
|
|
39
39
|
/**
|
|
40
40
|
* Record that `instanceId`'s last permission request arrived in a shape this
|
|
41
41
|
* server had to rewrite before it could judge it.
|
|
@@ -43,6 +43,7 @@ exports.recordAntigravityPermissionReceipt = recordAntigravityPermissionReceipt;
|
|
|
43
43
|
exports.hasRecentAntigravityPermissionReceipt = hasRecentAntigravityPermissionReceipt;
|
|
44
44
|
exports.resetAntigravityPermissionReceiptsForTests = resetAntigravityPermissionReceiptsForTests;
|
|
45
45
|
const auto_yes_state_1 = require("../../lib/auto-yes-state");
|
|
46
|
+
const global_state_1 = require("../global-state");
|
|
46
47
|
/**
|
|
47
48
|
* How long after a `PreToolUse` question a dialog still counts as its dialog.
|
|
48
49
|
*
|
|
@@ -53,8 +54,7 @@ const auto_yes_state_1 = require("../../lib/auto-yes-state");
|
|
|
53
54
|
* cover it.
|
|
54
55
|
*/
|
|
55
56
|
exports.ANTIGRAVITY_PERMISSION_RECEIPT_WINDOW_MS = 8_000;
|
|
56
|
-
const receipts =
|
|
57
|
-
(globalThis.__antigravityPermissionReceipts = new Map());
|
|
57
|
+
const receipts = (0, global_state_1.getOrInitGlobal)('__antigravityPermissionReceipts', () => new Map());
|
|
58
58
|
/**
|
|
59
59
|
* How long an entry is kept before it is dropped on the next write.
|
|
60
60
|
*
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Auto-Yes's Enter record and the session epoch it belongs to (Issue #3397).
|
|
4
|
+
*
|
|
5
|
+
* Split out of `./auto-yes-enter-fallback` so that this — the part a session's
|
|
6
|
+
* lifecycle has to touch — imports nothing from detection. `beginAgentSession`
|
|
7
|
+
* (every tool's `startSession`, on the creation path) calls
|
|
8
|
+
* {@link beginEnterFallbackSession}: a new process on the same instance key is
|
|
9
|
+
* a new screen history, and an Enter sent to the previous process's dialog must
|
|
10
|
+
* neither be published against the new one (`currentPrompt: true` for the same
|
|
11
|
+
* question) nor keep the poller from answering it (`enterFallbackSentKey`).
|
|
12
|
+
*
|
|
13
|
+
* @module lib/polling/auto-yes-enter-fallback-state
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.enterFallbackScreenKey = enterFallbackScreenKey;
|
|
17
|
+
exports.recordEnterFallbackSent = recordEnterFallbackSent;
|
|
18
|
+
exports.recordEnterFallbackNoEffect = recordEnterFallbackNoEffect;
|
|
19
|
+
exports.getLastEnterFallback = getLastEnterFallback;
|
|
20
|
+
exports.publishEnterFallback = publishEnterFallback;
|
|
21
|
+
exports.forgetEnterFallback = forgetEnterFallback;
|
|
22
|
+
exports.forgetEnterFallbacksByWorktree = forgetEnterFallbacksByWorktree;
|
|
23
|
+
exports.clearEnterFallbacks = clearEnterFallbacks;
|
|
24
|
+
exports.beginEnterFallbackSession = beginEnterFallbackSession;
|
|
25
|
+
exports.getEnterFallbackSessionEpoch = getEnterFallbackSessionEpoch;
|
|
26
|
+
const prompt_key_1 = require("../../lib/detection/prompt-key");
|
|
27
|
+
const auto_yes_state_1 = require("../../lib/auto-yes-state");
|
|
28
|
+
const global_state_1 = require("../global-state");
|
|
29
|
+
/**
|
|
30
|
+
* What tells two prompts apart for the published record: the type, the
|
|
31
|
+
* question and the option labels.
|
|
32
|
+
*
|
|
33
|
+
* Not the poller's `promptFrameKey`: that one also carries the cursor and
|
|
34
|
+
* `approvalTarget`, and the status API reads a different number of rows than
|
|
35
|
+
* the poller does, so `approvalTarget` can differ between the two readings of
|
|
36
|
+
* one screen. The record is matched against the status API's prompt (to say
|
|
37
|
+
* "Auto-Yes sent Enter" under the window it was sent to), so it is keyed on
|
|
38
|
+
* what both readings share.
|
|
39
|
+
*/
|
|
40
|
+
function enterFallbackScreenKey(promptData) {
|
|
41
|
+
const options = promptData.type === 'multiple_choice'
|
|
42
|
+
? promptData.options.map((o) => `${o.number}.${o.label}`)
|
|
43
|
+
: promptData.options;
|
|
44
|
+
return [(0, prompt_key_1.generatePromptKey)(promptData), ...options].join('\u0000');
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* compositeKey -> the last Enter. `globalThis` for the reason
|
|
48
|
+
* `auto-yes-suppression-state` gives: the poller writes it and the
|
|
49
|
+
* `current-output` route reads it, and under `next dev` the two are bundled apart.
|
|
50
|
+
*/
|
|
51
|
+
const lastEnterFallbacks = (0, global_state_1.getOrInitGlobal)('__autoYesEnterFallbacks', () => new Map());
|
|
52
|
+
/**
|
|
53
|
+
* Record that Auto-Yes sent its Enter to a screen.
|
|
54
|
+
*
|
|
55
|
+
* @param at - Epoch ms; defaults to now. Overridable so tests are deterministic.
|
|
56
|
+
*/
|
|
57
|
+
function recordEnterFallbackSent(worktreeId, cliToolId, instanceId, sent, at = Date.now()) {
|
|
58
|
+
lastEnterFallbacks.set((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId), {
|
|
59
|
+
outcome: 'sent',
|
|
60
|
+
...sent,
|
|
61
|
+
sentAt: at,
|
|
62
|
+
at,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Record that the screen the last Enter went to is still up. A no-op when there
|
|
67
|
+
* is no record, or when it is about another screen.
|
|
68
|
+
*
|
|
69
|
+
* @param at - Epoch ms; defaults to now
|
|
70
|
+
*/
|
|
71
|
+
function recordEnterFallbackNoEffect(worktreeId, cliToolId, instanceId, screenKey, at = Date.now()) {
|
|
72
|
+
const key = (0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId);
|
|
73
|
+
const record = lastEnterFallbacks.get(key);
|
|
74
|
+
if (!record || record.screenKey !== screenKey)
|
|
75
|
+
return;
|
|
76
|
+
lastEnterFallbacks.set(key, { ...record, outcome: 'no-effect', at });
|
|
77
|
+
}
|
|
78
|
+
/** @returns The last Enter for this session, or null when Auto-Yes never sent one. */
|
|
79
|
+
function getLastEnterFallback(worktreeId, cliToolId, instanceId) {
|
|
80
|
+
return lastEnterFallbacks.get((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId)) ?? null;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* The record as published, judged against the prompt the payload carries.
|
|
84
|
+
*
|
|
85
|
+
* @param promptData - The screen-read prompt of the same payload, or null
|
|
86
|
+
*/
|
|
87
|
+
function publishEnterFallback(record, promptData) {
|
|
88
|
+
if (record === null)
|
|
89
|
+
return null;
|
|
90
|
+
return {
|
|
91
|
+
outcome: record.outcome,
|
|
92
|
+
promptType: record.promptType,
|
|
93
|
+
refusalReason: record.refusalReason,
|
|
94
|
+
sentAt: record.sentAt,
|
|
95
|
+
at: record.at,
|
|
96
|
+
currentPrompt: promptData != null && enterFallbackScreenKey(promptData) === record.screenKey,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Drop one session's record (Issue #3397). Called wherever the poller for it is
|
|
101
|
+
* stopped — `stopAutoYesPolling`, which the kill-session route (through
|
|
102
|
+
* `releaseAutoYes`), the Auto-Yes disable route and an expired / disabled grant
|
|
103
|
+
* all reach. A record that outlived its session would read `currentPrompt: true`
|
|
104
|
+
* against the same question on the NEXT session, and the window would say
|
|
105
|
+
* "Auto-Yes sent Enter" about an Enter nobody sent there.
|
|
106
|
+
*/
|
|
107
|
+
function forgetEnterFallback(compositeKey) {
|
|
108
|
+
lastEnterFallbacks.delete(compositeKey);
|
|
109
|
+
}
|
|
110
|
+
/** {@link forgetEnterFallback} for every instance of a worktree. */
|
|
111
|
+
function forgetEnterFallbacksByWorktree(worktreeId) {
|
|
112
|
+
for (const key of (0, auto_yes_state_1.filterCompositeKeysByWorktree)([...lastEnterFallbacks.keys()], worktreeId)) {
|
|
113
|
+
lastEnterFallbacks.delete(key);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/** Drop every record: server shutdown (`stopAllAutoYesPolling`), and a test seam. */
|
|
117
|
+
function clearEnterFallbacks() {
|
|
118
|
+
lastEnterFallbacks.clear();
|
|
119
|
+
}
|
|
120
|
+
// =============================================================================
|
|
121
|
+
// The session epoch
|
|
122
|
+
// =============================================================================
|
|
123
|
+
/**
|
|
124
|
+
* compositeKey -> how many sessions have been begun on it in this process.
|
|
125
|
+
* `globalThis` for the same reason as the record: `startSession` and the poller
|
|
126
|
+
* can be bundled apart under `next dev`.
|
|
127
|
+
*/
|
|
128
|
+
const sessionEpochs = (0, global_state_1.getOrInitGlobal)('__autoYesEnterFallbackEpochs', () => new Map());
|
|
129
|
+
/**
|
|
130
|
+
* A new agent process is being created for this instance (called from
|
|
131
|
+
* `beginAgentSession`): the record is dropped, and the epoch moves on so the
|
|
132
|
+
* poller drops its own per-screen keys at its next tick.
|
|
133
|
+
*/
|
|
134
|
+
function beginEnterFallbackSession(worktreeId, cliToolId, instanceId) {
|
|
135
|
+
const key = (0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId);
|
|
136
|
+
lastEnterFallbacks.delete(key);
|
|
137
|
+
sessionEpochs.set(key, (sessionEpochs.get(key) ?? 0) + 1);
|
|
138
|
+
}
|
|
139
|
+
/** The instance's current session epoch (0 until a session is begun). */
|
|
140
|
+
function getEnterFallbackSessionEpoch(compositeKey) {
|
|
141
|
+
return sessionEpochs.get(compositeKey) ?? 0;
|
|
142
|
+
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Auto-Yes's Enter on a choice screen CommandMate cannot read (Issue #3397).
|
|
4
|
+
*
|
|
5
|
+
* ## The screen
|
|
6
|
+
*
|
|
7
|
+
* `assessPromptAnswerability` refuses some frames that are plainly a choice
|
|
8
|
+
* screen: an AskUserQuestion picker whose layout no rule could verify
|
|
9
|
+
* (`unsupported_dialog_layout`), or a numbered list the tool's `detectDialog`
|
|
10
|
+
* does not recognise (`prompt_no_longer_active`). The prompt window then says
|
|
11
|
+
* "this screen cannot be operated from CommandMate" and offers direct input,
|
|
12
|
+
* and Auto-Yes — whose dialog gate (#1928) reads the same frame — sends nothing.
|
|
13
|
+
*
|
|
14
|
+
* With Auto-Yes on, that leaves an unattended worker waiting for a human on a
|
|
15
|
+
* screen where one Enter (confirm whatever is selected now) would do.
|
|
16
|
+
*
|
|
17
|
+
* ## When Enter is sent
|
|
18
|
+
*
|
|
19
|
+
* {@link judgeEnterFallback} answers for the frame, and the poller adds the
|
|
20
|
+
* rest (the policy, the session's owner, sending once per screen):
|
|
21
|
+
*
|
|
22
|
+
* 1. the tool is enabled in {@link AUTO_YES_ENTER_FALLBACK_DEFAULT_MODE} (or by
|
|
23
|
+
* {@link AUTO_YES_ENTER_FALLBACK_ENV_VAR});
|
|
24
|
+
* 2. `assessPromptAnswerability(cliToolId, raw).refusal !== null` — the SAME
|
|
25
|
+
* reading the status API publishes as `promptAnswerable`, so the screen
|
|
26
|
+
* that shows the direct-input link and the screen that gets an Enter are
|
|
27
|
+
* one set of frames, not two copies of a rule;
|
|
28
|
+
* 3. there is evidence that the pane's focus is on a choice screen:
|
|
29
|
+
* `unsupported_dialog_layout` (the picker's own footer is on screen), or a
|
|
30
|
+
* claude / codex frame whose input box is not on screen (`no_composer`);
|
|
31
|
+
* 4. the input box is NOT on screen (`content` / `ghost` / `empty`). Not even
|
|
32
|
+
* for `unsupported_dialog_layout`: with the composer up, the list is far more
|
|
33
|
+
* likely an agent's reply quoting one (#1896), and an Enter would submit
|
|
34
|
+
* whatever sits in the composer — the shape of the accident in which a
|
|
35
|
+
* parked `/create-pr` was confirmed without anyone asking for it;
|
|
36
|
+
* 5. the tool is still on the pane (a shell prompt under the list means the
|
|
37
|
+
* agent exited) and is not thinking (a frame mid-stream is not a screen).
|
|
38
|
+
*
|
|
39
|
+
* Everything not decided here is decided on the safe side — no Enter.
|
|
40
|
+
*
|
|
41
|
+
* ## Out of scope
|
|
42
|
+
*
|
|
43
|
+
* opencode / copilot's arrow-key screens (`answerMode: 'keys'`, #1893 — an
|
|
44
|
+
* Enter there confirms whatever is highlighted, which once turned a Reject into
|
|
45
|
+
* an Approve), multi-select screens and options that need typed text (the
|
|
46
|
+
* poller asks `resolveAutoAnswerWithPolicy`, which answers null for both), and
|
|
47
|
+
* Antigravity (its frames reach Auto-Yes only with a hook receipt, #2849).
|
|
48
|
+
*
|
|
49
|
+
* @module lib/polling/auto-yes-enter-fallback
|
|
50
|
+
*/
|
|
51
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
52
|
+
exports.getEnterFallbackSessionEpoch = exports.beginEnterFallbackSession = exports.clearEnterFallbacks = exports.forgetEnterFallbacksByWorktree = exports.forgetEnterFallback = exports.publishEnterFallback = exports.getLastEnterFallback = exports.recordEnterFallbackNoEffect = exports.recordEnterFallbackSent = exports.enterFallbackScreenKey = exports.AUTO_YES_ENTER_FALLBACK_ENV_VAR = exports.AUTO_YES_ENTER_FALLBACK_DEFAULT_MODE = exports.AUTO_YES_ENTER_FALLBACK_MODES = void 0;
|
|
53
|
+
exports.resolveAutoYesEnterFallbackMode = resolveAutoYesEnterFallbackMode;
|
|
54
|
+
exports.judgeEnterFallback = judgeEnterFallback;
|
|
55
|
+
const liveness_spec_1 = require("../../lib/cli-tools/liveness-spec");
|
|
56
|
+
const tool_liveness_1 = require("../../lib/detection/tool-liveness");
|
|
57
|
+
const composer_text_1 = require("../../lib/detection/composer-text");
|
|
58
|
+
const cli_patterns_1 = require("../../lib/detection/cli-patterns");
|
|
59
|
+
const auto_yes_state_1 = require("../../lib/auto-yes-state");
|
|
60
|
+
const auto_yes_dialog_gate_1 = require("./auto-yes-dialog-gate");
|
|
61
|
+
/** Every accepted value of {@link AutoYesEnterFallbackMode}, for parsing and tests. */
|
|
62
|
+
exports.AUTO_YES_ENTER_FALLBACK_MODES = ['enabled', 'disabled'];
|
|
63
|
+
/**
|
|
64
|
+
* The state each tool ships in.
|
|
65
|
+
*
|
|
66
|
+
* `enabled` only for claude and codex: they are the two tools whose input box
|
|
67
|
+
* can be located (`SUPPORTED_COMPOSER_TOOLS` in `detection/composer-text`), so
|
|
68
|
+
* they are the only two for which "the composer is not on screen" can be read
|
|
69
|
+
* at all — and condition 4 of the module docstring is what keeps #1896 from
|
|
70
|
+
* coming back. Every other tool stays as it was: the frame is left to a human.
|
|
71
|
+
*/
|
|
72
|
+
exports.AUTO_YES_ENTER_FALLBACK_DEFAULT_MODE = {
|
|
73
|
+
claude: 'enabled',
|
|
74
|
+
codex: 'enabled',
|
|
75
|
+
copilot: 'disabled',
|
|
76
|
+
opencode: 'disabled',
|
|
77
|
+
'opencode-v2': 'disabled',
|
|
78
|
+
gemini: 'disabled',
|
|
79
|
+
antigravity: 'disabled',
|
|
80
|
+
'vibe-local': 'disabled',
|
|
81
|
+
'command-code': 'disabled',
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* The switch, spelled like `CM_AUTOYES_DIALOG_GATE`: comma-separated
|
|
85
|
+
* `<tool>=<mode>` pairs, `*` for every tool, a tool-specific entry beating `*`.
|
|
86
|
+
*
|
|
87
|
+
* ```
|
|
88
|
+
* CM_AUTOYES_ENTER_FALLBACK=*=disabled # never send the Enter
|
|
89
|
+
* CM_AUTOYES_ENTER_FALLBACK=codex=disabled # claude only
|
|
90
|
+
* ```
|
|
91
|
+
*
|
|
92
|
+
* Read on every poll, so an operator can turn it off without a restart.
|
|
93
|
+
*/
|
|
94
|
+
exports.AUTO_YES_ENTER_FALLBACK_ENV_VAR = 'CM_AUTOYES_ENTER_FALLBACK';
|
|
95
|
+
function isMode(value) {
|
|
96
|
+
return exports.AUTO_YES_ENTER_FALLBACK_MODES.includes(value);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Resolve one tool's mode. An unparseable entry is ignored rather than thrown:
|
|
100
|
+
* this runs on the polling path.
|
|
101
|
+
*
|
|
102
|
+
* @param tool - CLI tool to resolve for
|
|
103
|
+
* @param env - Environment to read; injectable for tests
|
|
104
|
+
*/
|
|
105
|
+
function resolveAutoYesEnterFallbackMode(tool, env = process.env) {
|
|
106
|
+
const raw = env[exports.AUTO_YES_ENTER_FALLBACK_ENV_VAR];
|
|
107
|
+
let wildcard = null;
|
|
108
|
+
let specific = null;
|
|
109
|
+
if (typeof raw === 'string' && raw.trim() !== '') {
|
|
110
|
+
for (const entry of raw.split(',')) {
|
|
111
|
+
const [rawKey, rawValue] = entry.split('=');
|
|
112
|
+
if (rawValue === undefined)
|
|
113
|
+
continue;
|
|
114
|
+
const key = rawKey.trim();
|
|
115
|
+
const value = rawValue.trim();
|
|
116
|
+
if (!isMode(value))
|
|
117
|
+
continue;
|
|
118
|
+
if (key === '*')
|
|
119
|
+
wildcard = value;
|
|
120
|
+
else if (key === tool)
|
|
121
|
+
specific = value;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return specific ?? wildcard ?? exports.AUTO_YES_ENTER_FALLBACK_DEFAULT_MODE[tool] ?? 'disabled';
|
|
125
|
+
}
|
|
126
|
+
/** The composer states that mean "the input box is on screen". */
|
|
127
|
+
const COMPOSER_ON_SCREEN = new Set(['content', 'ghost', 'empty']);
|
|
128
|
+
/** The tools whose `no_composer` is a measured reading (see `SUPPORTED_COMPOSER_TOOLS`). */
|
|
129
|
+
const NO_COMPOSER_EVIDENCE_TOOLS = new Set(['claude', 'codex']);
|
|
130
|
+
/**
|
|
131
|
+
* May Auto-Yes send its Enter at this frame? Conditions 1-5 of the module
|
|
132
|
+
* docstring, in that order; the policy, the session's owner and "once per
|
|
133
|
+
* screen" are the poller's.
|
|
134
|
+
*
|
|
135
|
+
* @param cliToolId - CLI tool the frame came from
|
|
136
|
+
* @param rawOutput - The tick's capture as captured (ANSI and box drawing
|
|
137
|
+
* intact). `undefined` is refused: the composer's dim placeholder is only
|
|
138
|
+
* distinguishable with the SGR attributes, and box drawing is what locates it.
|
|
139
|
+
* @param env - Environment to read the switch from; injectable for tests
|
|
140
|
+
*/
|
|
141
|
+
function judgeEnterFallback(cliToolId, rawOutput, env = process.env) {
|
|
142
|
+
if (resolveAutoYesEnterFallbackMode(cliToolId, env) !== 'enabled') {
|
|
143
|
+
return { eligible: false, reason: 'tool-disabled', refusalReason: null, composerState: null };
|
|
144
|
+
}
|
|
145
|
+
if (rawOutput === undefined) {
|
|
146
|
+
return { eligible: false, reason: 'no-raw-frame', refusalReason: null, composerState: null };
|
|
147
|
+
}
|
|
148
|
+
const refusal = (0, auto_yes_dialog_gate_1.assessPromptAnswerability)(cliToolId, rawOutput).refusal;
|
|
149
|
+
if (refusal === null) {
|
|
150
|
+
return { eligible: false, reason: 'answerable', refusalReason: null, composerState: null };
|
|
151
|
+
}
|
|
152
|
+
const composerState = (0, composer_text_1.extractComposerText)(rawOutput, cliToolId).state;
|
|
153
|
+
const ineligible = (reason) => ({
|
|
154
|
+
eligible: false,
|
|
155
|
+
reason,
|
|
156
|
+
refusalReason: refusal.reason,
|
|
157
|
+
composerState,
|
|
158
|
+
});
|
|
159
|
+
if (COMPOSER_ON_SCREEN.has(composerState))
|
|
160
|
+
return ineligible('composer-visible');
|
|
161
|
+
const pickerFooterOnScreen = refusal.reason === auto_yes_dialog_gate_1.UNSUPPORTED_DIALOG_LAYOUT_REASON;
|
|
162
|
+
const composerOffScreen = NO_COMPOSER_EVIDENCE_TOOLS.has(cliToolId) && composerState === 'no_composer';
|
|
163
|
+
if (!pickerFooterOnScreen && !composerOffScreen)
|
|
164
|
+
return ineligible('no-choice-screen-evidence');
|
|
165
|
+
if (!(0, tool_liveness_1.judgeToolLiveness)(rawOutput, (0, liveness_spec_1.resolveLivenessSpec)(cliToolId)).alive) {
|
|
166
|
+
return ineligible('tool-exited');
|
|
167
|
+
}
|
|
168
|
+
const recentLines = (0, cli_patterns_1.stripAnsi)(rawOutput).split('\n').slice(-auto_yes_state_1.THINKING_CHECK_LINE_COUNT).join('\n');
|
|
169
|
+
if ((0, cli_patterns_1.detectThinking)(cliToolId, recentLines))
|
|
170
|
+
return ineligible('thinking');
|
|
171
|
+
return { eligible: true, refusalReason: refusal.reason, composerState };
|
|
172
|
+
}
|
|
173
|
+
// The screen key, the record and the session epoch live in
|
|
174
|
+
// `./auto-yes-enter-fallback-state` (Issue #3397, review round 2): a module with
|
|
175
|
+
// no detection imports, so `agent-session-lifecycle` — on every tool's
|
|
176
|
+
// `startSession` path — can expire the record without pulling this one in.
|
|
177
|
+
var auto_yes_enter_fallback_state_1 = require("./auto-yes-enter-fallback-state");
|
|
178
|
+
Object.defineProperty(exports, "enterFallbackScreenKey", { enumerable: true, get: function () { return auto_yes_enter_fallback_state_1.enterFallbackScreenKey; } });
|
|
179
|
+
Object.defineProperty(exports, "recordEnterFallbackSent", { enumerable: true, get: function () { return auto_yes_enter_fallback_state_1.recordEnterFallbackSent; } });
|
|
180
|
+
Object.defineProperty(exports, "recordEnterFallbackNoEffect", { enumerable: true, get: function () { return auto_yes_enter_fallback_state_1.recordEnterFallbackNoEffect; } });
|
|
181
|
+
Object.defineProperty(exports, "getLastEnterFallback", { enumerable: true, get: function () { return auto_yes_enter_fallback_state_1.getLastEnterFallback; } });
|
|
182
|
+
Object.defineProperty(exports, "publishEnterFallback", { enumerable: true, get: function () { return auto_yes_enter_fallback_state_1.publishEnterFallback; } });
|
|
183
|
+
Object.defineProperty(exports, "forgetEnterFallback", { enumerable: true, get: function () { return auto_yes_enter_fallback_state_1.forgetEnterFallback; } });
|
|
184
|
+
Object.defineProperty(exports, "forgetEnterFallbacksByWorktree", { enumerable: true, get: function () { return auto_yes_enter_fallback_state_1.forgetEnterFallbacksByWorktree; } });
|
|
185
|
+
Object.defineProperty(exports, "clearEnterFallbacks", { enumerable: true, get: function () { return auto_yes_enter_fallback_state_1.clearEnterFallbacks; } });
|
|
186
|
+
Object.defineProperty(exports, "beginEnterFallbackSession", { enumerable: true, get: function () { return auto_yes_enter_fallback_state_1.beginEnterFallbackSession; } });
|
|
187
|
+
Object.defineProperty(exports, "getEnterFallbackSessionEpoch", { enumerable: true, get: function () { return auto_yes_enter_fallback_state_1.getEnterFallbackSessionEpoch; } });
|