commandmate 0.44.1 → 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 +169 -169
- package/.next/app-path-routes-manifest.json +35 -35
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- 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 -2
- 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 -2
- 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 +3 -3
- 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 +35 -35
- 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 -0
- package/.next/server/chunks/2710.js +1 -1
- package/.next/server/chunks/2908.js +1 -0
- 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 -0
- package/.next/server/chunks/5625.js +25 -0
- package/.next/server/chunks/5845.js +1 -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 -0
- package/.next/server/chunks/8543.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 -5
- package/.next/server/chunks/9390.js +2 -3
- 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-f1f258d4a1d92620.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-da66300cc20244ed.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 +10 -13
- 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 +608 -416
- package/dist/cli/types/api-responses.d.ts +174 -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 +228 -0
- package/dist/lib/session/prompt-view.d.ts.map +1 -0
- package/dist/lib/session/prompt-view.js +290 -0
- 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/server.js +5 -3
- 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 +139 -0
- package/dist/server/src/lib/auto-yes-poller.js +465 -160
- package/dist/server/src/lib/auto-yes-state.js +2 -2
- package/dist/server/src/lib/cli-tools/antigravity.js +39 -80
- 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 -3047
- 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/status-detector.js +1 -1
- package/dist/server/src/lib/detection/tools/antigravity/detect.js +12 -60
- package/dist/server/src/lib/detection/tools/antigravity/dialog.js +2 -15
- package/dist/server/src/lib/detection/tools/antigravity/live-region.js +39 -0
- package/dist/server/src/lib/detection/tools/antigravity/patterns.js +286 -0
- package/dist/server/src/lib/detection/tools/claude/detect.js +11 -17
- package/dist/server/src/lib/detection/tools/claude/live-region.js +26 -0
- 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/cli-patterns.js +1 -1
- package/dist/server/src/lib/detection/tools/codex/detect.js +71 -130
- package/dist/server/src/lib/detection/tools/codex/live-region.js +104 -0
- 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 +19 -50
- package/dist/server/src/lib/detection/tools/command-code/dialog.js +2 -18
- package/dist/server/src/lib/detection/tools/command-code/live-region.js +36 -0
- 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 +13 -35
- package/dist/server/src/lib/detection/tools/copilot/live-region.js +52 -0
- 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/frame.js +36 -2
- package/dist/server/src/lib/detection/tools/gemini/patterns.js +29 -0
- package/dist/server/src/lib/detection/tools/live-region-specs.js +31 -0
- package/dist/server/src/lib/detection/tools/live-region.js +204 -0
- package/dist/server/src/lib/detection/tools/opencode/detect.js +11 -49
- package/dist/server/src/lib/detection/tools/opencode/live-region.js +24 -0
- package/dist/server/src/lib/detection/tools/opencode/patterns.js +508 -0
- package/dist/server/src/lib/detection/tools/opencode-gutter-live-region.js +72 -0
- package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +10 -42
- package/dist/server/src/lib/detection/tools/opencode-v2/live-region.js +24 -0
- package/dist/server/src/lib/detection/tools/opencode-v2/patterns.js +63 -0
- package/dist/server/src/lib/detection/tools/run-detection.js +31 -50
- 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-dialog-gate.js +16 -4
- 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 +666 -1162
- 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 +6 -5
- 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 -2
- package/dist/server/src/lib/realtime/terminal-session-ownership.js +45 -0
- package/dist/server/src/lib/relay/relay-delivery.js +6 -2
- package/dist/server/src/lib/relay/relay-readiness.js +38 -1
- package/dist/server/src/lib/relay/relay-triggers.js +9 -0
- package/dist/server/src/lib/resource-cleanup.js +6 -4
- 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 +454 -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 +290 -0
- package/dist/server/src/lib/session/prompt-waiting-composition.js +35 -0
- 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/waiting-kind.js +3 -0
- package/dist/server/src/lib/session-cleanup.js +6 -8
- 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.2.json +33 -0
- 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/434.js +0 -1
- package/.next/server/chunks/5775.js +0 -1
- package/.next/server/chunks/6474.js +0 -14
- package/.next/server/chunks/650.js +0 -1
- package/.next/server/chunks/6661.js +0 -1
- package/.next/server/chunks/8583.js +0 -1
- package/.next/server/chunks/964.js +0 -1
- package/.next/server/chunks/967.js +0 -1
- package/.next/server/chunks/9882.js +0 -25
- package/.next/static/chunks/591-308072f285c34787.js +0 -1
- package/.next/static/chunks/app/sessions/page-049e06335187aa91.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-040c5f0f585e6812.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/{57lOiz8zSEHdw97XIm0af → tWwHQzmvc-rv9KKUtDWfQ}/_buildManifest.js +0 -0
- /package/.next/static/{57lOiz8zSEHdw97XIm0af → tWwHQzmvc-rv9KKUtDWfQ}/_ssgManifest.js +0 -0
|
@@ -19,14 +19,20 @@ exports.isCodexStalePrompt = isCodexStalePrompt;
|
|
|
19
19
|
exports.isCodexModelPickerFrame = isCodexModelPickerFrame;
|
|
20
20
|
const cli_patterns_1 = require("../../cli-patterns");
|
|
21
21
|
const prompt_detector_1 = require("../../prompt-detector");
|
|
22
|
+
const verdicts_1 = require("../verdicts");
|
|
22
23
|
const status_reason_1 = require("../../status-reason");
|
|
23
24
|
const cli_patterns_2 = require("./cli-patterns");
|
|
24
25
|
const prompt_1 = require("./prompt");
|
|
25
26
|
const frame_1 = require("../frame");
|
|
26
27
|
const dialog_block_1 = require("../dialog-block");
|
|
28
|
+
const live_region_1 = require("./live-region");
|
|
29
|
+
const patterns_1 = require("./patterns");
|
|
27
30
|
const run_detection_1 = require("../run-detection");
|
|
28
31
|
const verified_against_1 = require("../verified-against");
|
|
29
32
|
const thinking_constants_1 = require("../../../../config/thinking-constants");
|
|
33
|
+
function detectCodexPrompt(clean) {
|
|
34
|
+
return (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(clean), (0, cli_patterns_1.buildDetectPromptOptions)('codex'));
|
|
35
|
+
}
|
|
30
36
|
/** codex-cli build these rules were read off (#1628 / #1829 / #1890; value in ../verified-against, #1929). */
|
|
31
37
|
exports.VERIFIED_AGAINST = verified_against_1.CODEX_VERIFIED_AGAINST;
|
|
32
38
|
/**
|
|
@@ -43,38 +49,6 @@ exports.VERIFIED_AGAINST = verified_against_1.CODEX_VERIFIED_AGAINST;
|
|
|
43
49
|
*/
|
|
44
50
|
const CODEX_CONFIRMATION_FOOTER_PATTERN = /press\s+(?:number|enter)\s+to\s+confirm/i;
|
|
45
51
|
const CODEX_NUMBERED_OPTION_PATTERN = /^\s*[❯›●]?\s*\d{1,2}[.)]\s/;
|
|
46
|
-
/**
|
|
47
|
-
* Index of the Codex status bar within the last 10 content rows, or -1.
|
|
48
|
-
*
|
|
49
|
-
* Issue #2818: a bar carrying a thread title or the Plan-mode badge after the
|
|
50
|
-
* path (codex 0.154.0+) is the same bar, so it is a boundary too. Without it
|
|
51
|
-
* such frames fell to branch D, whose 15-row tail still holds a finished
|
|
52
|
-
* turn's `• Ran …` record, and an idle session read `running`.
|
|
53
|
-
*/
|
|
54
|
-
function findCodexFooterBoundary(contentLines) {
|
|
55
|
-
for (let ci = contentLines.length - 1; ci >= Math.max(0, contentLines.length - 10); ci--) {
|
|
56
|
-
const line = contentLines[ci];
|
|
57
|
-
if (cli_patterns_1.CODEX_STATUS_BAR_PATTERN.test(line) || cli_patterns_1.CODEX_TRAILED_STATUS_BAR_PATTERN.test(line))
|
|
58
|
-
return ci;
|
|
59
|
-
}
|
|
60
|
-
return -1;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Exclusive end of the conversation area — the row below the status bar, with
|
|
64
|
-
* the padding above it walked off (Issue #1928).
|
|
65
|
-
*
|
|
66
|
-
* The same boundary branches 0.8 and 2.7 compute inline, named once so
|
|
67
|
-
* `detectDialog` reads the region THEY read. Falls back to the whole frame when
|
|
68
|
-
* the bar cannot be located, which is Issue #1150's drift case: there the tail
|
|
69
|
-
* is the conversation, so the dialog rule still has the right rows.
|
|
70
|
-
*/
|
|
71
|
-
function findCodexContentEnd(contentLines) {
|
|
72
|
-
const boundary = findCodexFooterBoundary(contentLines);
|
|
73
|
-
let end = boundary >= 0 ? boundary - 1 : contentLines.length - 1;
|
|
74
|
-
while (end >= 0 && contentLines[end].trim() === '')
|
|
75
|
-
end--;
|
|
76
|
-
return end + 1;
|
|
77
|
-
}
|
|
78
52
|
/**
|
|
79
53
|
* Issue #1160: decide whether a Codex prompt that detectPrompt() matched is a stale,
|
|
80
54
|
* already-answered prompt left in the 50-line scan window rather than an active one.
|
|
@@ -98,7 +72,7 @@ function findCodexContentEnd(contentLines) {
|
|
|
98
72
|
* here — keeping the guard conservative against flipping a genuine prompt to running.
|
|
99
73
|
*/
|
|
100
74
|
function isCodexStalePrompt(contentLines) {
|
|
101
|
-
const footerBoundary = findCodexFooterBoundary(contentLines);
|
|
75
|
+
const footerBoundary = (0, live_region_1.findCodexFooterBoundary)(contentLines);
|
|
102
76
|
const end = footerBoundary >= 0 ? footerBoundary : contentLines.length;
|
|
103
77
|
let lastPromptIdx = -1;
|
|
104
78
|
let lastThinkingIdx = -1;
|
|
@@ -163,9 +137,28 @@ function isCodexApprovalRequest(promptDetection, selectionWindow) {
|
|
|
163
137
|
function isCodexDialogGlyphTail(raw) {
|
|
164
138
|
return (0, cli_patterns_2.findCodexBottomGlyphRow)(raw)?.kind === 'option';
|
|
165
139
|
}
|
|
140
|
+
/**
|
|
141
|
+
* Issue #3205: the bottom content row as the idle/running branches read it.
|
|
142
|
+
*
|
|
143
|
+
* A composer holding several lines puts its continuation rows below the `›`
|
|
144
|
+
* row, so `lastRow` is then the composer's last line (` world`), which is
|
|
145
|
+
* neither the `›` the idle branch looks for nor anything codex is working on —
|
|
146
|
+
* branch C read every such frame as `running`. When the live region's composer
|
|
147
|
+
* ends on `lastRow`, the composer's `›` row is returned instead, so its 2nd and
|
|
148
|
+
* later lines are read as composer text and never as transcript or a working
|
|
149
|
+
* row. Any other frame keeps `lastRow`.
|
|
150
|
+
*/
|
|
151
|
+
function codexTailRowAboveComposerText(frame, lastRow) {
|
|
152
|
+
const region = (0, frame_1.liveRegionOf)(frame, 'codex');
|
|
153
|
+
if (region.anchor !== 'composer' || region.composerEndRow !== lastRow)
|
|
154
|
+
return lastRow;
|
|
155
|
+
return region.startRow;
|
|
156
|
+
}
|
|
166
157
|
exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
167
158
|
tool: 'codex',
|
|
168
159
|
verifiedAgainst: exports.VERIFIED_AGAINST,
|
|
160
|
+
// Issue #3183: where the live part of the frame begins (`./live-region.ts`).
|
|
161
|
+
liveRegion: live_region_1.CODEX_LIVE_REGION,
|
|
169
162
|
beforePrompt(frame) {
|
|
170
163
|
const { contentLines } = frame;
|
|
171
164
|
// 0.6. The composer is the pane's bottom → no dialog is open (Issue #2841).
|
|
@@ -175,7 +168,11 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
|
175
168
|
// dialog is up, so a composer at the bottom vetoes all of them at once, and
|
|
176
169
|
// the chain goes on to the prompt / thinking / idle readings it would have
|
|
177
170
|
// reached had the transcript not quoted anything.
|
|
178
|
-
|
|
171
|
+
//
|
|
172
|
+
// Issue #3183: "the composer is the bottom" is the live region's
|
|
173
|
+
// `composerAtBottom`, located once by `normalizeFrame` from
|
|
174
|
+
// `CODEX_LIVE_REGION` (the #2841 reading, unchanged).
|
|
175
|
+
if ((0, frame_1.liveRegionOf)(frame, 'codex').composerAtBottom) {
|
|
179
176
|
return null;
|
|
180
177
|
}
|
|
181
178
|
// 0.7. Codex: pager / edit-previous (transcript) mode detection (Issue #1017)
|
|
@@ -193,14 +190,7 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
|
193
190
|
// content must not be misread as one. CODEX_PAGER_FOOTER_PATTERN does not match the
|
|
194
191
|
// genuine "/model" selection footer, so the 0.8 path below is unaffected (no regression).
|
|
195
192
|
if (cli_patterns_1.CODEX_PAGER_FOOTER_PATTERN.test(frame.lastLines)) {
|
|
196
|
-
return
|
|
197
|
-
status: 'waiting',
|
|
198
|
-
confidence: 'high',
|
|
199
|
-
reason: status_reason_1.STATUS_REASON.CODEX_PAGER,
|
|
200
|
-
hasActivePrompt: false,
|
|
201
|
-
evidence: 'positive',
|
|
202
|
-
promptDetection: (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(frame.clean), (0, cli_patterns_1.buildDetectPromptOptions)('codex')),
|
|
203
|
-
};
|
|
193
|
+
return (0, verdicts_1.positiveVerdictWithPrompt)('waiting', status_reason_1.STATUS_REASON.CODEX_PAGER, detectCodexPrompt(frame.clean));
|
|
204
194
|
}
|
|
205
195
|
// 0.75. Codex: the hooks review screens (Issue #1829)
|
|
206
196
|
// codex-cli 0.148.0 answers "1. Review hooks" with a two-screen review UI:
|
|
@@ -213,16 +203,9 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
|
213
203
|
// interactive element and nothing but a keypress moves them: that is `waiting`.
|
|
214
204
|
// Checked ahead of prompt detection because the transcript rows on screen 2 are
|
|
215
205
|
// ordinary text that must not be read as options.
|
|
216
|
-
const codexLifecycleDialog = (0, cli_patterns_1.getCodexLifecycleDialog)(
|
|
206
|
+
const codexLifecycleDialog = (0, cli_patterns_1.getCodexLifecycleDialog)((0, frame_1.withLiveRegion)(frame, 'codex'));
|
|
217
207
|
if (codexLifecycleDialog === 'hooks-list' || codexLifecycleDialog === 'hooks-detail') {
|
|
218
|
-
return
|
|
219
|
-
status: 'waiting',
|
|
220
|
-
confidence: 'high',
|
|
221
|
-
reason: status_reason_1.STATUS_REASON.CODEX_HOOKS_REVIEW,
|
|
222
|
-
hasActivePrompt: false,
|
|
223
|
-
evidence: 'positive',
|
|
224
|
-
promptDetection: (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(frame.clean), (0, cli_patterns_1.buildDetectPromptOptions)('codex')),
|
|
225
|
-
};
|
|
208
|
+
return (0, verdicts_1.positiveVerdictWithPrompt)('waiting', status_reason_1.STATUS_REASON.CODEX_HOOKS_REVIEW, detectCodexPrompt(frame.clean));
|
|
226
209
|
}
|
|
227
210
|
// 0.8. Codex: selection list detection BEFORE prompt detection (Issue #622)
|
|
228
211
|
// CODEX_SELECTION_LIST_PATTERN matches "press enter to confirm/select" footer.
|
|
@@ -238,11 +221,7 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
|
238
221
|
// Issue #1150: the status bar is located via CODEX_STATUS_BAR_PATTERN (version-
|
|
239
222
|
// independent; matches both legacy "N% left ·" and v0.141 "model · path" bars),
|
|
240
223
|
// and since #2818 via CODEX_TRAILED_STATUS_BAR_PATTERN too (0.154+ "· <title>").
|
|
241
|
-
const
|
|
242
|
-
let codexContentEnd = codexFooterBoundary >= 0 ? codexFooterBoundary - 1 : contentLines.length - 1;
|
|
243
|
-
while (codexContentEnd >= 0 && contentLines[codexContentEnd].trim() === '') {
|
|
244
|
-
codexContentEnd--;
|
|
245
|
-
}
|
|
224
|
+
const codexContentEnd = (0, live_region_1.findCodexContentEnd)(contentLines) - 1;
|
|
246
225
|
if (codexContentEnd >= 0) {
|
|
247
226
|
const codexSelectionWindow = contentLines
|
|
248
227
|
.slice(Math.max(0, codexContentEnd - frame_1.STATUS_CHECK_LINE_COUNT + 1), codexContentEnd + 1)
|
|
@@ -255,7 +234,7 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
|
255
234
|
if (cli_patterns_1.CODEX_SELECTION_LIST_PATTERN.test(codexSelectionWindow) ||
|
|
256
235
|
cli_patterns_1.CODEX_PICKER_FOOTER_PATTERN.test(codexLastRow) ||
|
|
257
236
|
cli_patterns_1.CODEX_EFFORT_PICKER_FOOTER_PATTERN.test(codexLastRow)) {
|
|
258
|
-
const codexPromptDetection = (
|
|
237
|
+
const codexPromptDetection = detectCodexPrompt(frame.clean);
|
|
259
238
|
// Issue #1628: an approval request wears the same footer as a menu but is the
|
|
260
239
|
// agent blocked on the human, so it must surface as an active prompt (exit 10
|
|
261
240
|
// for `wait`, PromptPanel in the UI) instead of a navigable list. The #1160
|
|
@@ -263,23 +242,9 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
|
263
242
|
// still inside the window, with Codex running below it, is dead scrollback.
|
|
264
243
|
if (isCodexApprovalRequest(codexPromptDetection, codexSelectionWindow) &&
|
|
265
244
|
!isCodexStalePrompt(contentLines)) {
|
|
266
|
-
return
|
|
267
|
-
status: 'waiting',
|
|
268
|
-
confidence: 'high',
|
|
269
|
-
reason: status_reason_1.STATUS_REASON.PROMPT_DETECTED,
|
|
270
|
-
hasActivePrompt: true,
|
|
271
|
-
evidence: 'positive',
|
|
272
|
-
promptDetection: codexPromptDetection,
|
|
273
|
-
};
|
|
245
|
+
return (0, verdicts_1.activePromptVerdict)(status_reason_1.STATUS_REASON.PROMPT_DETECTED, codexPromptDetection);
|
|
274
246
|
}
|
|
275
|
-
return
|
|
276
|
-
status: 'waiting',
|
|
277
|
-
confidence: 'high',
|
|
278
|
-
reason: status_reason_1.STATUS_REASON.CODEX_SELECTION_LIST,
|
|
279
|
-
hasActivePrompt: false,
|
|
280
|
-
evidence: 'positive',
|
|
281
|
-
promptDetection: codexPromptDetection,
|
|
282
|
-
};
|
|
247
|
+
return (0, verdicts_1.positiveVerdictWithPrompt)('waiting', status_reason_1.STATUS_REASON.CODEX_SELECTION_LIST, codexPromptDetection);
|
|
283
248
|
}
|
|
284
249
|
}
|
|
285
250
|
// 0.85. Codex: every OTHER dialog — recognised by structure (Issue #2310)
|
|
@@ -310,32 +275,18 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
|
310
275
|
// block with codex working below it is scrollback, not a dialog — and the
|
|
311
276
|
// glyph rule agrees independently, because the bottom-most `›` on such a
|
|
312
277
|
// frame is the composer codex draws while it works.
|
|
313
|
-
const codexDialogFrame = (0, cli_patterns_2.readCodexDialogFrame)(frame.raw, contentLines, findCodexContentEnd(contentLines));
|
|
278
|
+
const codexDialogFrame = (0, cli_patterns_2.readCodexDialogFrame)(frame.raw, contentLines, (0, live_region_1.findCodexContentEnd)(contentLines));
|
|
314
279
|
if (codexDialogFrame && !isCodexStalePrompt(contentLines)) {
|
|
315
280
|
// The footer is not consulted for the verdict; an unrecognised one means
|
|
316
281
|
// codex reworded a screen, which is worth saying out loud exactly once.
|
|
317
282
|
if (!codexDialogFrame.footerRecognised) {
|
|
318
283
|
(0, cli_patterns_2.reportCodexDialogFooterDrift)(codexDialogFrame.footer);
|
|
319
284
|
}
|
|
320
|
-
const codexPromptDetection = (
|
|
285
|
+
const codexPromptDetection = detectCodexPrompt(frame.clean);
|
|
321
286
|
if (codexPromptDetection.isPrompt) {
|
|
322
|
-
return
|
|
323
|
-
status: 'waiting',
|
|
324
|
-
confidence: 'high',
|
|
325
|
-
reason: status_reason_1.STATUS_REASON.PROMPT_DETECTED,
|
|
326
|
-
hasActivePrompt: true,
|
|
327
|
-
evidence: 'positive',
|
|
328
|
-
promptDetection: codexPromptDetection,
|
|
329
|
-
};
|
|
287
|
+
return (0, verdicts_1.activePromptVerdict)(status_reason_1.STATUS_REASON.PROMPT_DETECTED, codexPromptDetection);
|
|
330
288
|
}
|
|
331
|
-
return
|
|
332
|
-
status: 'waiting',
|
|
333
|
-
confidence: 'high',
|
|
334
|
-
reason: status_reason_1.STATUS_REASON.CODEX_SELECTION_LIST,
|
|
335
|
-
hasActivePrompt: false,
|
|
336
|
-
evidence: 'positive',
|
|
337
|
-
promptDetection: codexPromptDetection,
|
|
338
|
-
};
|
|
289
|
+
return (0, verdicts_1.positiveVerdictWithPrompt)('waiting', status_reason_1.STATUS_REASON.CODEX_SELECTION_LIST, codexPromptDetection);
|
|
339
290
|
}
|
|
340
291
|
return null;
|
|
341
292
|
},
|
|
@@ -343,7 +294,7 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
|
343
294
|
// Issue #2841: a prompt above the composer is conversation text, not a
|
|
344
295
|
// dialog — the same veto branch 0.6 applies to the status branches.
|
|
345
296
|
return (isCodexStalePrompt(frame.contentLines) ||
|
|
346
|
-
(0,
|
|
297
|
+
(0, frame_1.liveRegionOf)(frame, 'codex').composerAtBottom);
|
|
347
298
|
},
|
|
348
299
|
// §4 D1 決定 4 (Issue #1928). All three inputs are readings this module
|
|
349
300
|
// already performs for its status branches, passed rather than recomputed:
|
|
@@ -353,13 +304,15 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
|
353
304
|
// Issue #2841: Auto-Yes and `respond` act on this answer, so it takes the
|
|
354
305
|
// same veto as the status branches — before the lifecycle screens too, whose
|
|
355
306
|
// wording (`Do you trust …`) can be quoted like any other.
|
|
356
|
-
|
|
357
|
-
|
|
307
|
+
// Issue #3183: the veto itself is applied by `createToolStatusDetector`'s
|
|
308
|
+
// wrapper from the live region, for every tool; this early return only
|
|
309
|
+
// saves the parse.
|
|
310
|
+
if ((0, frame_1.liveRegionOf)(frame, 'codex').composerAtBottom)
|
|
358
311
|
return null;
|
|
359
312
|
return (0, prompt_1.detectCodexDialog)(frame, {
|
|
360
|
-
contentEnd,
|
|
313
|
+
contentEnd: (0, live_region_1.findCodexContentEnd)(frame.contentLines),
|
|
361
314
|
stalePrompt: isCodexStalePrompt(frame.contentLines),
|
|
362
|
-
lifecycleDialog: (0, cli_patterns_1.getCodexLifecycleDialog)(
|
|
315
|
+
lifecycleDialog: (0, cli_patterns_1.getCodexLifecycleDialog)((0, frame_1.withLiveRegion)(frame, 'codex')),
|
|
363
316
|
});
|
|
364
317
|
},
|
|
365
318
|
afterThinking(frame) {
|
|
@@ -370,26 +323,25 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
|
370
323
|
// A. Thinking indicators (• Ran, • Planning) in the conversation area → should show spinner
|
|
371
324
|
// B. Idle prompt (›) at the end of the conversation area → should show ready
|
|
372
325
|
// Strategy: find the Codex status bar, extract content above it, then check for thinking/idle.
|
|
373
|
-
const codexFooterBoundary = findCodexFooterBoundary(contentLines);
|
|
326
|
+
const codexFooterBoundary = (0, live_region_1.findCodexFooterBoundary)(contentLines);
|
|
374
327
|
if (codexFooterBoundary >= 0) {
|
|
375
328
|
// Find last non-empty content line above footer (skip padding + input area)
|
|
376
329
|
let lastContentIdx = codexFooterBoundary - 1;
|
|
377
330
|
while (lastContentIdx >= 0 && contentLines[lastContentIdx].trim() === '') {
|
|
378
331
|
lastContentIdx--;
|
|
379
332
|
}
|
|
333
|
+
// Issue #3205: a multi-line composer ends on its own `›` row here.
|
|
334
|
+
lastContentIdx = codexTailRowAboveComposerText(frame, lastContentIdx);
|
|
380
335
|
if (lastContentIdx >= 0) {
|
|
381
336
|
// A. Check content area for thinking indicators (wider window than the shared step)
|
|
382
337
|
const codexThinkingWindow = contentLines
|
|
383
338
|
.slice(Math.max(0, lastContentIdx - thinking_constants_1.THINKING_TAIL_LINE_COUNT + 1), lastContentIdx + 1)
|
|
384
339
|
.join('\n');
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
hasActivePrompt: false,
|
|
391
|
-
evidence: 'positive',
|
|
392
|
-
};
|
|
340
|
+
// Issue #3337: or the live status row, whatever its bullet and header —
|
|
341
|
+
// codex 0.160.0's `◦ Working (43s • esc to interrupt)` frame reached B.
|
|
342
|
+
if ((0, cli_patterns_1.detectThinking)('codex', codexThinkingWindow) ||
|
|
343
|
+
patterns_1.CODEX_LIVE_STATUS_ROW_PATTERN.test(codexThinkingWindow)) {
|
|
344
|
+
return (0, verdicts_1.positiveVerdict)('running', status_reason_1.STATUS_REASON.THINKING_INDICATOR);
|
|
393
345
|
}
|
|
394
346
|
// B. Check if the last content line is the idle › prompt.
|
|
395
347
|
// The last non-empty line above the status bar is the current active line.
|
|
@@ -409,26 +361,14 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
|
409
361
|
// ANSI has been stripped still reports idle exactly as it did before.
|
|
410
362
|
if (cli_patterns_1.CODEX_PROMPT_PATTERN.test(contentLines[lastContentIdx].trim()) &&
|
|
411
363
|
!isCodexDialogGlyphTail(frame.raw)) {
|
|
412
|
-
return
|
|
413
|
-
status: 'ready',
|
|
414
|
-
confidence: 'high',
|
|
415
|
-
reason: status_reason_1.STATUS_REASON.INPUT_PROMPT,
|
|
416
|
-
hasActivePrompt: false,
|
|
417
|
-
evidence: 'positive',
|
|
418
|
-
};
|
|
364
|
+
return (0, verdicts_1.positiveVerdict)('ready', status_reason_1.STATUS_REASON.INPUT_PROMPT);
|
|
419
365
|
}
|
|
420
366
|
// C. Fallback: status bar present but neither thinking nor idle › detected.
|
|
421
367
|
// This means Codex is actively processing — command output has pushed the
|
|
422
368
|
// • Ran/• Working indicators beyond the 5-line thinking window.
|
|
423
369
|
// The status bar ("model · N% left · path") is always visible during Codex
|
|
424
370
|
// sessions, and the only idle state (›) was checked in B above.
|
|
425
|
-
return
|
|
426
|
-
status: 'running',
|
|
427
|
-
confidence: 'high',
|
|
428
|
-
reason: status_reason_1.STATUS_REASON.THINKING_INDICATOR,
|
|
429
|
-
hasActivePrompt: false,
|
|
430
|
-
evidence: 'positive',
|
|
431
|
-
};
|
|
371
|
+
return (0, verdicts_1.positiveVerdict)('running', status_reason_1.STATUS_REASON.THINKING_INDICATOR);
|
|
432
372
|
}
|
|
433
373
|
}
|
|
434
374
|
else {
|
|
@@ -449,17 +389,15 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
|
449
389
|
while (codexTailIdx >= 0 && contentLines[codexTailIdx].trim() === '') {
|
|
450
390
|
codexTailIdx--;
|
|
451
391
|
}
|
|
392
|
+
// Issue #3205: as in 2.7, a multi-line composer is read from its `›` row.
|
|
393
|
+
codexTailIdx = codexTailRowAboveComposerText(frame, codexTailIdx);
|
|
452
394
|
const codexTailIsIdlePrompt = codexTailIdx >= 0 &&
|
|
453
395
|
cli_patterns_1.CODEX_PROMPT_PATTERN.test(contentLines[codexTailIdx].trim()) &&
|
|
454
396
|
!isCodexDialogGlyphTail(frame.raw);
|
|
455
|
-
if (!codexTailIsIdlePrompt &&
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
reason: status_reason_1.STATUS_REASON.THINKING_INDICATOR,
|
|
460
|
-
hasActivePrompt: false,
|
|
461
|
-
evidence: 'positive',
|
|
462
|
-
};
|
|
397
|
+
if (!codexTailIsIdlePrompt &&
|
|
398
|
+
((0, cli_patterns_1.detectThinking)('codex', frame.lastLines) ||
|
|
399
|
+
patterns_1.CODEX_LIVE_STATUS_ROW_PATTERN.test(frame.lastLines))) {
|
|
400
|
+
return (0, verdicts_1.positiveVerdict)('running', status_reason_1.STATUS_REASON.THINKING_INDICATOR);
|
|
463
401
|
}
|
|
464
402
|
}
|
|
465
403
|
return null;
|
|
@@ -477,13 +415,16 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
|
477
415
|
* `detectDialog` vouches for, so the same words quoted in a reply do not count.
|
|
478
416
|
* `/prompt-response` does not call this and keeps accepting an answer.
|
|
479
417
|
*
|
|
480
|
-
* @param cleanOutput - The capture Auto-Yes judged (ANSI and box drawing
|
|
418
|
+
* @param cleanOutput - The capture Auto-Yes judged (ANSI and box drawing
|
|
419
|
+
* stripped), or the frame the poller normalised once for the tick (Issue #3183)
|
|
481
420
|
*/
|
|
482
421
|
function isCodexModelPickerFrame(cleanOutput) {
|
|
483
|
-
const frame =
|
|
422
|
+
const frame = typeof cleanOutput === 'string'
|
|
423
|
+
? (0, frame_1.normalizeFrame)(cleanOutput, 'codex')
|
|
424
|
+
: (0, frame_1.withLiveRegion)(cleanOutput, 'codex');
|
|
484
425
|
if (!exports.codexStatusDetector.detectDialog(frame))
|
|
485
426
|
return false;
|
|
486
|
-
const contentEnd = findCodexContentEnd(frame.contentLines);
|
|
427
|
+
const contentEnd = (0, live_region_1.findCodexContentEnd)(frame.contentLines);
|
|
487
428
|
const block = (0, dialog_block_1.findNumberedOptionBlock)((0, cli_patterns_1.stripBoxDrawing)(frame.clean).split('\n'), contentEnd);
|
|
488
429
|
return (block !== null &&
|
|
489
430
|
(cli_patterns_1.CODEX_PICKER_FOOTER_PATTERN.test(block.footer) ||
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Codex's live region (Issue #3183; design doc §7 "codex").
|
|
4
|
+
*
|
|
5
|
+
* - **composer** — the bottom-most genuine `›` row ({@link findCodexComposerRow},
|
|
6
|
+
* the #892 rule), with "is it the bottom of the pane?" answered by
|
|
7
|
+
* {@link isCodexComposerAtBottom} (the #2841 rule: the RAW glyph row's SGR
|
|
8
|
+
* first, the stripped last content row otherwise). Before #3183 those were two
|
|
9
|
+
* separate readings in two files; they are now the two halves of one marker.
|
|
10
|
+
* Measured: `codex-dialogs-0157/quoted-approval-idle.txt` L997 (composer) under
|
|
11
|
+
* the quotation at L40-L49.
|
|
12
|
+
* - **composer end** — the composer's last row (Issue #3205). A composer holding
|
|
13
|
+
* several lines draws its continuation rows under the `›` row, so the bottom
|
|
14
|
+
* content row is then the composer's last line, not the `›` row. The extent is
|
|
15
|
+
* `composer-text.ts`'s {@link findCodexInputBox} (the #1890 reading), mapped
|
|
16
|
+
* onto `contentLines` by {@link findCodexComposerEndRow}.
|
|
17
|
+
* - **dialog top** — not declared. codex removes its composer while a dialog is
|
|
18
|
+
* open and the dialog takes the bottom of the pane (`codex-dialogs-0157/
|
|
19
|
+
* approval.txt` L987-L1000), so the whole frame is the right fallback.
|
|
20
|
+
*
|
|
21
|
+
* @module lib/detection/tools/codex/live-region
|
|
22
|
+
*/
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.CODEX_LIVE_REGION = void 0;
|
|
25
|
+
exports.findCodexFooterBoundary = findCodexFooterBoundary;
|
|
26
|
+
exports.findCodexContentEnd = findCodexContentEnd;
|
|
27
|
+
exports.findCodexComposerEndRow = findCodexComposerEndRow;
|
|
28
|
+
const cli_patterns_1 = require("../../cli-patterns");
|
|
29
|
+
const cli_patterns_2 = require("./cli-patterns");
|
|
30
|
+
const composer_text_1 = require("../../composer-text");
|
|
31
|
+
const ansi_1 = require("../../ansi");
|
|
32
|
+
const live_region_1 = require("../live-region");
|
|
33
|
+
/**
|
|
34
|
+
* Index of the Codex status bar within the last 10 content rows, or -1.
|
|
35
|
+
*
|
|
36
|
+
* Issue #2818: a bar carrying a thread title or the Plan-mode badge after the
|
|
37
|
+
* path (codex 0.154.0+) is the same bar, so it is a boundary too. Without it
|
|
38
|
+
* such frames fell to branch D, whose 15-row tail still holds a finished
|
|
39
|
+
* turn's `• Ran …` record, and an idle session read `running`.
|
|
40
|
+
*/
|
|
41
|
+
function findCodexFooterBoundary(contentLines) {
|
|
42
|
+
for (let ci = contentLines.length - 1; ci >= Math.max(0, contentLines.length - 10); ci--) {
|
|
43
|
+
const line = contentLines[ci];
|
|
44
|
+
if (cli_patterns_1.CODEX_STATUS_BAR_PATTERN.test(line) || cli_patterns_1.CODEX_TRAILED_STATUS_BAR_PATTERN.test(line))
|
|
45
|
+
return ci;
|
|
46
|
+
}
|
|
47
|
+
return -1;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Exclusive end of the conversation area — the row below the status bar, with
|
|
51
|
+
* the padding above it walked off (Issue #1928).
|
|
52
|
+
*
|
|
53
|
+
* Falls back to the whole frame when the bar cannot be located, which is
|
|
54
|
+
* Issue #1150's drift case: there the tail is the conversation, so the dialog
|
|
55
|
+
* rule still has the right rows.
|
|
56
|
+
*/
|
|
57
|
+
function findCodexContentEnd(contentLines) {
|
|
58
|
+
const boundary = findCodexFooterBoundary(contentLines);
|
|
59
|
+
let end = boundary >= 0 ? boundary - 1 : contentLines.length - 1;
|
|
60
|
+
while (end >= 0 && contentLines[end].trim() === '')
|
|
61
|
+
end--;
|
|
62
|
+
return end + 1;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Index into `contentLines` of the composer's last row, given its `›` row
|
|
66
|
+
* (Issue #3205).
|
|
67
|
+
*
|
|
68
|
+
* The rows are counted on the RAW capture by {@link findCodexInputBox}, which
|
|
69
|
+
* is what reads the composer's text for `send` (#1890), so both answer with the
|
|
70
|
+
* same rows. `contentLines` has had its blank rows compacted, so the raw index
|
|
71
|
+
* cannot be used as it is; the composer block holds no blank row, though, so
|
|
72
|
+
* its row count carries over once its first row is the same text as
|
|
73
|
+
* `composerRow`. Anything else — no input box found, or a different first row —
|
|
74
|
+
* answers `composerRow`: the one-row composer every rule read before #3205.
|
|
75
|
+
*/
|
|
76
|
+
function findCodexComposerEndRow(raw, contentLines, composerRow, contentEnd) {
|
|
77
|
+
const rawLines = raw.split('\n');
|
|
78
|
+
const box = (0, composer_text_1.findCodexInputBox)(rawLines);
|
|
79
|
+
if (box === null)
|
|
80
|
+
return composerRow;
|
|
81
|
+
if ((0, ansi_1.stripAnsi)(rawLines[box.firstRow]).trim() !== contentLines[composerRow]?.trim())
|
|
82
|
+
return composerRow;
|
|
83
|
+
const end = Math.min(composerRow + (box.lastRow - box.firstRow), contentEnd - 1);
|
|
84
|
+
return Math.max(composerRow, end);
|
|
85
|
+
}
|
|
86
|
+
exports.CODEX_LIVE_REGION = {
|
|
87
|
+
composer: {
|
|
88
|
+
locate({ raw, contentLines }) {
|
|
89
|
+
const contentEnd = findCodexContentEnd(contentLines);
|
|
90
|
+
const atBottom = (0, cli_patterns_2.isCodexComposerAtBottom)(raw, contentLines, contentEnd);
|
|
91
|
+
const row = (0, cli_patterns_1.findCodexComposerRow)(contentLines);
|
|
92
|
+
if (row >= 0) {
|
|
93
|
+
return { start: row, end: findCodexComposerEndRow(raw, contentLines, row, contentEnd), atBottom };
|
|
94
|
+
}
|
|
95
|
+
if (!atBottom)
|
|
96
|
+
return null;
|
|
97
|
+
// The raw glyph row said "composer" although its text reads as a numbered
|
|
98
|
+
// row (a hand-typed `1. buy milk`): the composer is the last content row.
|
|
99
|
+
const start = (0, live_region_1.lastContentRow)(contentLines.slice(0, contentEnd));
|
|
100
|
+
return start < 0 ? null : { start, end: start, atBottom: true };
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
composerHidesDialogs: true,
|
|
104
|
+
};
|