commandmate 0.44.0 → 0.44.2
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 +331 -335
- package/.next/app-path-routes-manifest.json +35 -35
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +15 -15
- package/.next/react-loadable-manifest.json +3 -3
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/capabilities/route.js +1 -1
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js +2 -2
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route_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.js +2 -2
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -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_client-reference-manifest.js +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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route.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_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 +7 -7
- 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/1068.js +1 -1
- package/.next/server/chunks/1210.js +1 -1
- 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/2816.js +1 -1
- package/.next/server/chunks/2908.js +1 -0
- package/.next/server/chunks/4372.js +5 -0
- package/.next/server/chunks/5595.js +1 -0
- package/.next/server/chunks/5845.js +1 -0
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6474.js +3 -3
- package/.next/server/chunks/7685.js +1 -1
- 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/8581.js +2 -2
- package/.next/server/chunks/8728.js +2 -2
- package/.next/server/chunks/9130.js +1 -5
- package/.next/server/chunks/9390.js +1 -2
- package/.next/server/chunks/9627.js +1 -1
- package/.next/server/chunks/967.js +1 -1
- package/.next/server/chunks/9731.js +3 -3
- package/.next/server/chunks/9798.js +2 -0
- package/.next/server/chunks/9882.js +3 -3
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages-manifest.json +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{2407-340774f1a24f2b45.js → 2407-051f6f84226a9f2c.js} +1 -1
- package/.next/static/chunks/344-e1cefd00787060e4.js +1 -0
- package/.next/static/chunks/3922.f45dcfc1e7da552a.js +1 -0
- package/.next/static/chunks/591-539fec878c9dec5e.js +1 -0
- package/.next/static/chunks/6654-ac431270fac1a283.js +1 -0
- package/.next/static/chunks/{9619-84aced0846cbe3ac.js → 9619-6c17a271f7f98fbb.js} +1 -1
- package/.next/static/chunks/998-2eb5883186abd0bd.js +1 -0
- package/.next/static/chunks/app/layout-9da1ab602bcb3051.js +1 -0
- package/.next/static/chunks/app/more/{page-30057cf1e0762ad2.js → page-87c84987b2765213.js} +1 -1
- package/.next/static/chunks/app/{page-8483ba400af011f5.js → page-1b820c421db48c2c.js} +1 -1
- package/.next/static/chunks/app/review/page-95f749caae382f46.js +1 -0
- package/.next/static/chunks/app/sessions/page-049e06335187aa91.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-2a81397e60f17e63.js +1 -0
- package/.next/static/chunks/{webpack-49ade0526854dd4e.js → webpack-021f0741f22dd16a.js} +1 -1
- package/.next/trace +13 -13
- package/README.md +72 -25
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +7 -8
- package/dist/cli/commands/remote.d.ts +10 -0
- package/dist/cli/commands/remote.d.ts.map +1 -1
- package/dist/cli/commands/remote.js +17 -1
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +47 -2
- package/dist/cli/docs/setup-guide.d.ts +1 -1
- package/dist/cli/docs/setup-guide.d.ts.map +1 -1
- package/dist/cli/docs/setup-guide.js +2 -0
- package/dist/cli/types/api-responses.d.ts +25 -0
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/lib/detection/status-reason.d.ts +17 -0
- package/dist/lib/detection/status-reason.d.ts.map +1 -1
- package/dist/lib/detection/status-reason.js +17 -0
- package/dist/lib/session/prompt-view.d.ts +205 -0
- package/dist/lib/session/prompt-view.d.ts.map +1 -0
- package/dist/lib/session/prompt-view.js +267 -0
- package/dist/server/locales/en/worktree.json +13 -1
- package/dist/server/locales/ja/worktree.json +13 -1
- package/dist/server/server.js +5 -3
- package/dist/server/src/config/session-starting-config.js +75 -0
- package/dist/server/src/lib/auto-yes-lifecycle.js +133 -0
- package/dist/server/src/lib/auto-yes-poller.js +19 -4
- package/dist/server/src/lib/cli-tools/antigravity.js +3 -2
- package/dist/server/src/lib/cli-tools/base.js +15 -1
- package/dist/server/src/lib/cli-tools/codex.js +3 -2
- package/dist/server/src/lib/cli-tools/command-code.js +3 -2
- package/dist/server/src/lib/cli-tools/copilot.js +2 -1
- package/dist/server/src/lib/cli-tools/gemini.js +2 -1
- package/dist/server/src/lib/cli-tools/liveness-spec.js +27 -9
- package/dist/server/src/lib/cli-tools/opencode-v2.js +2 -1
- package/dist/server/src/lib/cli-tools/opencode.js +2 -1
- package/dist/server/src/lib/cli-tools/vibe-local.js +2 -1
- package/dist/server/src/lib/detection/cli-patterns.js +38 -20
- package/dist/server/src/lib/detection/status-detector.js +1 -1
- package/dist/server/src/lib/detection/status-reason.js +17 -0
- package/dist/server/src/lib/detection/tool-liveness.js +3 -1
- package/dist/server/src/lib/detection/tools/antigravity/detect.js +7 -31
- package/dist/server/src/lib/detection/tools/antigravity/live-region.js +39 -0
- package/dist/server/src/lib/detection/tools/claude/detect.js +8 -3
- package/dist/server/src/lib/detection/tools/claude/live-region.js +26 -0
- package/dist/server/src/lib/detection/tools/codex/cli-patterns.js +1 -1
- package/dist/server/src/lib/detection/tools/codex/detect.js +26 -46
- package/dist/server/src/lib/detection/tools/codex/live-region.js +73 -0
- package/dist/server/src/lib/detection/tools/command-code/detect.js +11 -0
- package/dist/server/src/lib/detection/tools/command-code/live-region.js +36 -0
- package/dist/server/src/lib/detection/tools/copilot/detect.js +3 -0
- package/dist/server/src/lib/detection/tools/copilot/live-region.js +52 -0
- package/dist/server/src/lib/detection/tools/frame.js +36 -2
- 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 +3 -0
- package/dist/server/src/lib/detection/tools/opencode/live-region.js +24 -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 +3 -0
- package/dist/server/src/lib/detection/tools/opencode-v2/live-region.js +24 -0
- package/dist/server/src/lib/detection/tools/run-detection.js +25 -3
- package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +16 -4
- package/dist/server/src/lib/polling/response-checker.js +25 -20
- package/dist/server/src/lib/prompt-answer-sender.js +1 -1
- package/dist/server/src/lib/realtime/terminal-broadcast.js +8 -0
- package/dist/server/src/lib/relay/relay-delivery.js +3 -0
- 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/session/agent-session-lifecycle.js +11 -0
- package/dist/server/src/lib/session/claude-session.js +7 -1
- package/dist/server/src/lib/session/current-output-builder.js +53 -21
- package/dist/server/src/lib/session/launch-screen.js +57 -0
- package/dist/server/src/lib/session/prompt-view.js +267 -0
- package/dist/server/src/lib/session/prompt-waiting-composition.js +34 -0
- package/dist/server/src/lib/session/session-starting-state.js +236 -0
- package/dist/server/src/lib/session/waiting-kind.js +3 -0
- package/dist/server/src/lib/session-cleanup.js +5 -3
- package/package.json +1 -1
- package/release-notes/0.44.1.json +54 -0
- package/release-notes/0.44.2.json +33 -0
- package/.next/server/chunks/434.js +0 -1
- package/.next/server/chunks/5775.js +0 -1
- 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/static/chunks/344-6f9fc1f38f01a839.js +0 -1
- package/.next/static/chunks/3922.8e79fc89f593280b.js +0 -1
- package/.next/static/chunks/5449-6cb80bab2bd06b79.js +0 -1
- package/.next/static/chunks/591-0a45801e83f26f24.js +0 -1
- package/.next/static/chunks/6966-bb854d1145783a64.js +0 -1
- package/.next/static/chunks/app/layout-0fc249fb7de75a27.js +0 -1
- package/.next/static/chunks/app/review/page-ff9efae3f86eb840.js +0 -1
- package/.next/static/chunks/app/sessions/page-55297155e7bf01b9.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-d2103e0c25be83c8.js +0 -1
- /package/.next/static/{wu7SUiHTirFcrpo5teyZ3 → QlCqLjorauDDBXPa-C7TK}/_buildManifest.js +0 -0
- /package/.next/static/{wu7SUiHTirFcrpo5teyZ3 → QlCqLjorauDDBXPa-C7TK}/_ssgManifest.js +0 -0
|
@@ -28,6 +28,7 @@ const logger_1 = require("../logger");
|
|
|
28
28
|
const terminal_keys_1 = require("../../types/terminal-keys");
|
|
29
29
|
const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
|
|
30
30
|
const tmux_pane_config_1 = require("../../config/tmux-pane-config");
|
|
31
|
+
const session_starting_state_1 = require("../session/session-starting-state");
|
|
31
32
|
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
32
33
|
const logger = (0, logger_1.createLogger)('cli-tools/base');
|
|
33
34
|
/**
|
|
@@ -213,8 +214,12 @@ class BaseCLITool {
|
|
|
213
214
|
* @throws Whatever {@link launchSession} threw — unchanged, after reporting
|
|
214
215
|
*/
|
|
215
216
|
async startSession(worktreeId, worktreePath, instanceId, model) {
|
|
217
|
+
// Issue #3195: this launch's "starting" record is written under this token
|
|
218
|
+
// (see `session-starting-state`), so the `finally` below clears this
|
|
219
|
+
// launch's record and never a later launch's of the same instance.
|
|
220
|
+
const startingToken = (0, session_starting_state_1.issueSessionStartingToken)();
|
|
216
221
|
try {
|
|
217
|
-
await this.launchSession(worktreeId, worktreePath, instanceId, model);
|
|
222
|
+
await (0, session_starting_state_1.runWithSessionStartingToken)(startingToken, () => this.launchSession(worktreeId, worktreePath, instanceId, model));
|
|
218
223
|
}
|
|
219
224
|
catch (error) {
|
|
220
225
|
// Issue #2429: a launch that threw is reported as a failed start and as
|
|
@@ -229,6 +234,15 @@ class BaseCLITool {
|
|
|
229
234
|
}, error);
|
|
230
235
|
throw error;
|
|
231
236
|
}
|
|
237
|
+
finally {
|
|
238
|
+
// Issue #3179: the launch is over, returned or thrown, so the screen
|
|
239
|
+
// stops showing it as starting. `beginAgentSession` wrote the record on
|
|
240
|
+
// the creation path; a reused pane never had one, and this is a no-op for
|
|
241
|
+
// it. `relaunchIfToolExited` comes through here too. Issue #3195: only
|
|
242
|
+
// under this launch's token — a launch killed and started again has a
|
|
243
|
+
// newer record under this key, and it is not this launch's to end.
|
|
244
|
+
(0, session_starting_state_1.clearSessionStarting)(worktreeId, this.id, instanceId, startingToken);
|
|
245
|
+
}
|
|
232
246
|
const adopted = this.takeAdoptionMark(worktreeId, instanceId);
|
|
233
247
|
if (adopted !== null)
|
|
234
248
|
await this.warnIfHookUrlIsStale(worktreeId, adopted, instanceId);
|
|
@@ -20,6 +20,7 @@ const hooks_config_1 = require("../../lib/hooks/sources/codex/hooks-config");
|
|
|
20
20
|
const agent_session_lifecycle_1 = require("../../lib/session/agent-session-lifecycle");
|
|
21
21
|
const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
|
|
22
22
|
const install_hints_1 = require("./install-hints");
|
|
23
|
+
const launch_screen_1 = require("../../lib/session/launch-screen");
|
|
23
24
|
const logger = (0, logger_1.createLogger)('cli-tools/codex');
|
|
24
25
|
/**
|
|
25
26
|
* Extract error message from unknown error type (DRY)
|
|
@@ -268,11 +269,11 @@ class CodexTool extends base_1.BaseCLITool {
|
|
|
268
269
|
// as the new one's.
|
|
269
270
|
const relaunchIntoSamePane = async () => {
|
|
270
271
|
(0, agent_session_lifecycle_1.beginAgentSession)({ worktreeId, cliToolId: sources_1.CODEX_CLI_TOOL_ID, instanceId });
|
|
271
|
-
await (0, tmux_1.sendKeys)(sessionName, launchCommand, true);
|
|
272
|
+
await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(launchCommand), true);
|
|
272
273
|
await new Promise((resolve) => setTimeout(resolve, CODEX_INIT_WAIT_MS));
|
|
273
274
|
};
|
|
274
275
|
// Start Codex CLI in interactive mode
|
|
275
|
-
await (0, tmux_1.sendKeys)(sessionName, launchCommand, true);
|
|
276
|
+
await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(launchCommand), true);
|
|
276
277
|
// Wait for Codex to initialize
|
|
277
278
|
await new Promise((resolve) => setTimeout(resolve, CODEX_INIT_WAIT_MS));
|
|
278
279
|
// Poll until Codex interactive prompt is ready
|
|
@@ -53,6 +53,7 @@ const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
|
|
|
53
53
|
const install_hints_1 = require("./install-hints");
|
|
54
54
|
const plan_review_state_1 = require("../detection/tools/command-code/plan-review-state");
|
|
55
55
|
const session_start_error_1 = require("../../lib/session/session-start-error");
|
|
56
|
+
const launch_screen_1 = require("../../lib/session/launch-screen");
|
|
56
57
|
const logger = (0, logger_1.createLogger)('cli-tools/command-code');
|
|
57
58
|
/** The executable CommandMate launches. See the module docblock for why not `cmd`. */
|
|
58
59
|
exports.COMMAND_CODE_COMMAND = 'commandcode';
|
|
@@ -258,11 +259,11 @@ class CommandCodeTool extends base_1.BaseCLITool {
|
|
|
258
259
|
});
|
|
259
260
|
await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_SESSION_CREATE_WAIT_MS));
|
|
260
261
|
}
|
|
261
|
-
await (0, tmux_1.sendKeys)(sessionName, buildCommandCodeLaunchCommand({
|
|
262
|
+
await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(buildCommandCodeLaunchCommand({
|
|
262
263
|
target: { worktreeId, cliToolId: tool_id_1.COMMAND_CODE_CLI_TOOL_ID, instanceId },
|
|
263
264
|
executablePath: this.command,
|
|
264
265
|
worktreePath,
|
|
265
|
-
}), true);
|
|
266
|
+
})), true);
|
|
266
267
|
await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.COMMAND_CODE_INIT_WAIT_MS));
|
|
267
268
|
await this.waitForReady(sessionName);
|
|
268
269
|
logger.info('started-command-code-session');
|
|
@@ -35,6 +35,7 @@ const tool_id_1 = require("../../lib/hooks/sources/copilot/tool-id");
|
|
|
35
35
|
const errors_1 = require("../../lib/errors");
|
|
36
36
|
const logger_1 = require("../../lib/logger");
|
|
37
37
|
const install_hints_1 = require("./install-hints");
|
|
38
|
+
const launch_screen_1 = require("../../lib/session/launch-screen");
|
|
38
39
|
const logger = (0, logger_1.createLogger)('cli-tools/copilot');
|
|
39
40
|
/** Interval for polling prompt detection */
|
|
40
41
|
const COPILOT_POLL_INTERVAL_MS = 1000;
|
|
@@ -369,7 +370,7 @@ class CopilotTool extends base_1.BaseCLITool {
|
|
|
369
370
|
worktreePath,
|
|
370
371
|
});
|
|
371
372
|
// Start Copilot CLI in interactive mode
|
|
372
|
-
await (0, tmux_1.sendKeys)(sessionName, launchCommand, true);
|
|
373
|
+
await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(launchCommand), true);
|
|
373
374
|
// Issue #1907: no blind sleep before this. The 4-second one that used to
|
|
374
375
|
// sit here was a guess at how long copilot takes to paint (measured on
|
|
375
376
|
// 1.0.80: banner at ~1.3 s, folder-trust dialog at ~2.5 s), and it was
|
|
@@ -22,6 +22,7 @@ const agent_session_lifecycle_1 = require("../../lib/session/agent-session-lifec
|
|
|
22
22
|
const logger_1 = require("../../lib/logger");
|
|
23
23
|
const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
|
|
24
24
|
const install_hints_1 = require("./install-hints");
|
|
25
|
+
const launch_screen_1 = require("../../lib/session/launch-screen");
|
|
25
26
|
const logger = (0, logger_1.createLogger)('cli-tools/gemini');
|
|
26
27
|
/**
|
|
27
28
|
* Extract error message from unknown error type (DRY)
|
|
@@ -128,7 +129,7 @@ class GeminiTool extends base_1.BaseCLITool {
|
|
|
128
129
|
executablePath: this.command,
|
|
129
130
|
worktreePath,
|
|
130
131
|
});
|
|
131
|
-
await (0, tmux_1.sendKeys)(sessionName, launchCommand, true);
|
|
132
|
+
await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(launchCommand), true);
|
|
132
133
|
// Wait for Gemini to initialize (minimum wait for banner/auth)
|
|
133
134
|
await new Promise((resolve) => setTimeout(resolve, GEMINI_INIT_WAIT_MS));
|
|
134
135
|
// Poll until Gemini interactive prompt is ready
|
|
@@ -90,22 +90,40 @@ const ADDED_TOOL_DEFAULTS = {
|
|
|
90
90
|
*/
|
|
91
91
|
const LIVENESS_SPECS = {
|
|
92
92
|
/**
|
|
93
|
-
* claude's is `isSessionHealthy`,
|
|
93
|
+
* claude's is `isSessionHealthy`, expressed as a declaration.
|
|
94
94
|
*
|
|
95
|
-
*
|
|
96
|
-
* null` (the check has always tested the whole frame)
|
|
97
|
-
* []` (the length gate and the endings are the whole rule), and
|
|
95
|
+
* Two fields carry that history and are claude's alone: `aliveTailLines:
|
|
96
|
+
* null` (the check has always tested the whole frame) and
|
|
98
97
|
* `unreadableIsExited: true` (an empty pane and a capture that threw have
|
|
99
|
-
* both meant "unhealthy" since it was written).
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
98
|
+
* both meant "unhealthy" since it was written). Neither is "improved" here.
|
|
99
|
+
*
|
|
100
|
+
* `shellPromptPatterns` is NOT claude's alone any more (Issue #3191). #2070
|
|
101
|
+
* left it `[]` so claude's verdicts would not move, which kept claude on the
|
|
102
|
+
* length-gated endings rule — and that rule cannot see a prompt of 40
|
|
103
|
+
* characters or more. Measured 2026-10-04: after `/exit` the pane fell back
|
|
104
|
+
* to `maenokota@MAENOnoMac-Studio uat-repo-wt2 %` (42 characters) and the
|
|
105
|
+
* session stayed `running`, so the next send sat in `waitForPrompt` until
|
|
106
|
+
* `Prompt detection timeout (10000ms)`; the author's everyday prompt
|
|
107
|
+
* (`… MyCodeBranchDesk %`, 46) is past the gate too.
|
|
108
|
+
*
|
|
109
|
+
* The positive `user@host …` forms are therefore claude's as well. What made
|
|
110
|
+
* that safe to adopt unnarrowed: every row of every claude screen fixture in
|
|
111
|
+
* the repository (`tests/fixtures/claude-*`, `tests/unit/detection/tools/
|
|
112
|
+
* claude/fixtures/`, the #2070 frames — composer, transcript, dialogs,
|
|
113
|
+
* pickers, banners) was swept against both patterns and NONE matched, not
|
|
114
|
+
* just none on the bottom row; `tool-liveness-3191.test.ts` keeps that
|
|
115
|
+
* sweep. The whole-frame `CLAUDE_PROMPT_PATTERN` check still runs first, so
|
|
116
|
+
* a pane with claude's composer anywhere on it stays alive regardless. Below
|
|
117
|
+
* the 40-character gate the verdicts are unchanged — a pattern match there
|
|
118
|
+
* already ended in `$` / `%` / `#` — only the reason reads `shell prompt
|
|
119
|
+
* detected` instead of `shell prompt ending detected` for a `user@host:…`
|
|
120
|
+
* row.
|
|
103
121
|
*/
|
|
104
122
|
claude: {
|
|
105
123
|
...SHARED,
|
|
106
124
|
alivePatterns: [cli_patterns_1.CLAUDE_PROMPT_PATTERN],
|
|
107
125
|
aliveTailLines: null,
|
|
108
|
-
shellPromptPatterns:
|
|
126
|
+
shellPromptPatterns: tool_liveness_1.SHELL_PROMPT_LINE_PATTERNS,
|
|
109
127
|
unreadableIsExited: true,
|
|
110
128
|
fatalPatterns: cli_patterns_1.CLAUDE_SESSION_ERROR_PATTERNS,
|
|
111
129
|
fatalRegexPatterns: cli_patterns_1.CLAUDE_SESSION_ERROR_REGEX_PATTERNS,
|
|
@@ -57,6 +57,7 @@ const graceful_exit_1 = require("./graceful-exit");
|
|
|
57
57
|
const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
|
|
58
58
|
const install_hints_1 = require("./install-hints");
|
|
59
59
|
const opencode_executable_1 = require("./opencode-executable");
|
|
60
|
+
const launch_screen_1 = require("../../lib/session/launch-screen");
|
|
60
61
|
const logger = (0, logger_1.createLogger)('cli-tools/opencode-v2');
|
|
61
62
|
const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
|
|
62
63
|
/** Interval between composer polls (launch and send). */
|
|
@@ -232,7 +233,7 @@ class OpenCodeV2Tool extends base_1.BaseCLITool {
|
|
|
232
233
|
if (port === null) {
|
|
233
234
|
logger.warn('opencode-v2-launch-without-server', { worktreeId, instanceId });
|
|
234
235
|
}
|
|
235
|
-
await (0, tmux_1.sendKeys)(sessionName, (0, agent_session_lifecycle_1.buildAgentLaunchCommandLine)({ target, executablePath: executable.path, worktreePath }), true);
|
|
236
|
+
await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)((0, agent_session_lifecycle_1.buildAgentLaunchCommandLine)({ target, executablePath: executable.path, worktreePath })), true);
|
|
236
237
|
await this.waitForReady(sessionName);
|
|
237
238
|
await (0, runtime_1.attachOpencodeV2EventStream)(target);
|
|
238
239
|
logger.info('started-opencode-v2-session');
|
|
@@ -75,6 +75,7 @@ const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
|
|
|
75
75
|
const install_hints_1 = require("./install-hints");
|
|
76
76
|
const opencode_executable_1 = require("./opencode-executable");
|
|
77
77
|
const log_diagnosis_1 = require("../../lib/hooks/sources/opencode/log-diagnosis");
|
|
78
|
+
const launch_screen_1 = require("../../lib/session/launch-screen");
|
|
78
79
|
const logger = (0, logger_1.createLogger)('cli-tools/opencode');
|
|
79
80
|
const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
|
|
80
81
|
/**
|
|
@@ -393,7 +394,7 @@ class OpenCodeTool extends base_1.BaseCLITool {
|
|
|
393
394
|
});
|
|
394
395
|
}
|
|
395
396
|
const launchedAt = Date.now();
|
|
396
|
-
await (0, tmux_1.sendKeys)(sessionName, launchCommand, true);
|
|
397
|
+
await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(launchCommand), true);
|
|
397
398
|
// Issue #1908: poll for opencode's own composer instead of sleeping 15 s.
|
|
398
399
|
await this.waitForReady(sessionName);
|
|
399
400
|
// Issue #1763: subscribe once the server is up. Health-checked first, so
|
|
@@ -21,6 +21,7 @@ const logger_1 = require("../../lib/logger");
|
|
|
21
21
|
const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
|
|
22
22
|
const install_hints_1 = require("./install-hints");
|
|
23
23
|
const agent_session_lifecycle_1 = require("../../lib/session/agent-session-lifecycle");
|
|
24
|
+
const launch_screen_1 = require("../../lib/session/launch-screen");
|
|
24
25
|
const logger = (0, logger_1.createLogger)('cli-tools/vibe-local');
|
|
25
26
|
/**
|
|
26
27
|
* Extract error message from unknown error type (DRY)
|
|
@@ -123,7 +124,7 @@ class VibeLocalTool extends base_1.BaseCLITool {
|
|
|
123
124
|
}
|
|
124
125
|
// Start vibe-local in interactive mode with auto-approve (-y)
|
|
125
126
|
// -y flag skips the permission confirmation prompt
|
|
126
|
-
await (0, tmux_1.sendKeys)(sessionName, vibeLocalCommand, true);
|
|
127
|
+
await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(vibeLocalCommand), true);
|
|
127
128
|
// Wait for vibe-local to initialize (banner + model loading)
|
|
128
129
|
await new Promise((resolve) => setTimeout(resolve, VIBE_LOCAL_INIT_WAIT_MS));
|
|
129
130
|
logger.info('started-vibe-local-session:sessionname');
|
|
@@ -4,14 +4,15 @@
|
|
|
4
4
|
* Shared between response-poller.ts and API routes
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.
|
|
8
|
-
exports.CLAUDE_SESSION_ERROR_REGEX_PATTERNS = exports.CLAUDE_SESSION_ERROR_PATTERNS = exports.extractAnsiSequences = exports.stripAnsi = exports.COMMAND_CODE_SKIP_PATTERNS = exports.COMMAND_CODE_HOOK_NOTICE_PATTERN = exports.COMMAND_CODE_BANNER_PATTERNS = exports.COMMAND_CODE_MODE_INDICATOR_PATTERN = exports.COMMAND_CODE_COMPLETION_PATTERN = exports.COMMAND_CODE_RESPONSE_MARKER_PATTERN = exports.COMMAND_CODE_THINKING_PATTERN = exports.COMMAND_CODE_INTERRUPT_HINT_PATTERN = exports.COMMAND_CODE_SEPARATOR_PATTERN = exports.COMMAND_CODE_PROMPT_PATTERN = exports.COMMAND_CODE_SPINNER_CHARS = exports.ANTIGRAVITY_SKIP_PATTERNS = exports.ANTIGRAVITY_SURVEY_PATTERN = exports.ANTIGRAVITY_DIALOG_MAX_ROWS = exports.ANTIGRAVITY_DIALOG_BOUNDARY_PATTERN = exports.ANTIGRAVITY_SWITCH_MODEL_HEADER_PATTERN = exports.ANTIGRAVITY_NUMBERED_OPTION_PATTERN = exports.ANTIGRAVITY_NAVIGATE_FOOTER_PATTERN = exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = exports.ANTIGRAVITY_SEPARATOR_PATTERN = exports.ANTIGRAVITY_THINKING_PATTERN = exports.ANTIGRAVITY_PROMPT_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_SOURCE = exports.VIBE_LOCAL_THINKING_PATTERN = exports.VIBE_LOCAL_PROMPT_PATTERN = exports.COPILOT_SKIP_PATTERNS = exports.COPILOT_FOLDER_TRUST_ANSWER_KEY = exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN = exports.COPILOT_FOLDER_TRUST_ANCHORS = exports.COPILOT_SELECTION_FOOTER_PATTERN = exports.COPILOT_BOOT_BANNER_ANCHORS = exports.COPILOT_TRANSCRIPT_CONTINUATION_PATTERN = exports.COPILOT_TOOL_ROW_PATTERN = exports.COPILOT_TOOL_VERBS = exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN = exports.COPILOT_USER_ECHO_PATTERN = exports.COPILOT_REASONING_HEADER_PATTERN = exports.COPILOT_BOX_ROW_PATTERN = exports.COPILOT_SEPARATOR_PATTERN = exports.COPILOT_IDLE_STATUS_PATTERN = exports.COPILOT_WORKING_STATUS_PATTERN = exports.COPILOT_THINKING_PATTERN = exports.COPILOT_PROMPT_PATTERN = exports.OPENCODE_V2_SKIP_PATTERNS = void 0;
|
|
7
|
+
exports.OPENCODE_V2_DIALOG_TITLE_PATTERN = exports.OPENCODE_V2_THINKING_PATTERN = exports.OPENCODE_V2_FOOTER_PATTERN = exports.OPENCODE_V2_IDLE_COMPOSER_PATTERN = exports.OPENCODE_SKIP_PATTERNS = exports.OPENCODE_SEPARATOR_PATTERN = exports.CLAUDE_SELECTION_LIST_FOOTER = exports.CLAUDE_MODEL_OVERLAY_FOOTER_PATTERN = exports.OPENCODE_SELECTION_LIST_PATTERN = exports.OPENCODE_FOOTER_STATUS_PATTERN = exports.OPENCODE_USER_ECHO_PATTERN = exports.OPENCODE_GUTTER_ROW_PATTERN = exports.OPENCODE_COMPOSER_BOTTOM_BORDER = exports.OPENCODE_PROCESSING_INDICATOR = exports.OPENCODE_PERMISSION_PATTERN = exports.OPENCODE_TURN_COMPLETE_PATTERN = exports.OPENCODE_RESPONSE_COMPLETE = exports.OPENCODE_LOADING_PATTERN = exports.OPENCODE_THINKING_PATTERN = exports.OPENCODE_PROMPT_AFTER_RESPONSE = exports.OPENCODE_IDLE_COMPOSER_PATTERN = exports.OPENCODE_PROMPT_PATTERN = exports.GEMINI_THINKING_PATTERN = exports.GEMINI_PROMPT_PATTERN = exports.MAX_PASTED_TEXT_RETRIES = exports.PASTED_TEXT_DETECT_DELAY = exports.PASTED_TEXT_PATTERN = exports.CODEX_USER_ECHO_PATTERN = exports.CODEX_TRAILED_STATUS_BAR_PATTERN = exports.CODEX_STATUS_BAR_PATTERN = exports.CODEX_PAGER_FOOTER_PATTERN = exports.CODEX_EFFORT_PICKER_FOOTER_PATTERN = exports.CODEX_PICKER_FOOTER_PATTERN = exports.CODEX_FORM_SUBMIT_FOOTER_PATTERN = exports.CODEX_APPROVAL_FOOTER_PATTERN = exports.CODEX_SELECTION_LIST_PATTERN = exports.CODEX_SEPARATOR_PATTERN = exports.CODEX_HOOKS_REVIEW_ANCHORS = exports.CODEX_GENUINE_PROMPT_LINE = exports.CODEX_DIALOG_PATTERN = exports.CODEX_TRUST_QUESTION_PATTERN = exports.CODEX_PROMPT_PATTERN = exports.CLAUDE_TRUST_DIALOG_PATTERN = exports.CLAUDE_SEPARATOR_PATTERN = exports.CLAUDE_PROMPT_PATTERN = exports.CODEX_INTERRUPT_HINT_PATTERN = exports.CODEX_THINKING_PATTERN = exports.CLAUDE_INTERRUPT_HINT_PATTERN = exports.CLAUDE_THINKING_PATTERN = exports.CLAUDE_SPINNER_CHARS = void 0;
|
|
8
|
+
exports.CLAUDE_SESSION_ERROR_REGEX_PATTERNS = exports.CLAUDE_SESSION_ERROR_PATTERNS = exports.extractAnsiSequences = exports.stripAnsi = exports.COMMAND_CODE_SKIP_PATTERNS = exports.COMMAND_CODE_HOOK_NOTICE_PATTERN = exports.COMMAND_CODE_BANNER_PATTERNS = exports.COMMAND_CODE_MODE_INDICATOR_PATTERN = exports.COMMAND_CODE_COMPLETION_PATTERN = exports.COMMAND_CODE_RESPONSE_MARKER_PATTERN = exports.COMMAND_CODE_THINKING_PATTERN = exports.COMMAND_CODE_INTERRUPT_HINT_PATTERN = exports.COMMAND_CODE_SEPARATOR_PATTERN = exports.COMMAND_CODE_PROMPT_PATTERN = exports.COMMAND_CODE_SPINNER_CHARS = exports.ANTIGRAVITY_SKIP_PATTERNS = exports.ANTIGRAVITY_SURVEY_PATTERN = exports.ANTIGRAVITY_DIALOG_MAX_ROWS = exports.ANTIGRAVITY_DIALOG_BOUNDARY_PATTERN = exports.ANTIGRAVITY_SWITCH_MODEL_HEADER_PATTERN = exports.ANTIGRAVITY_NUMBERED_OPTION_PATTERN = exports.ANTIGRAVITY_NAVIGATE_FOOTER_PATTERN = exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = exports.ANTIGRAVITY_SEPARATOR_PATTERN = exports.ANTIGRAVITY_THINKING_PATTERN = exports.ANTIGRAVITY_PROMPT_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_SOURCE = exports.VIBE_LOCAL_THINKING_PATTERN = exports.VIBE_LOCAL_PROMPT_PATTERN = exports.COPILOT_SKIP_PATTERNS = exports.COPILOT_FOLDER_TRUST_ANSWER_KEY = exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN = exports.COPILOT_FOLDER_TRUST_ANCHORS = exports.COPILOT_SELECTION_FOOTER_PATTERN = exports.COPILOT_BOOT_BANNER_ANCHORS = exports.COPILOT_TRANSCRIPT_CONTINUATION_PATTERN = exports.COPILOT_TOOL_ROW_PATTERN = exports.COPILOT_TOOL_VERBS = exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN = exports.COPILOT_USER_ECHO_PATTERN = exports.COPILOT_REASONING_HEADER_PATTERN = exports.COPILOT_BOX_ROW_PATTERN = exports.COPILOT_SEPARATOR_PATTERN = exports.COPILOT_IDLE_STATUS_PATTERN = exports.COPILOT_WORKING_STATUS_PATTERN = exports.COPILOT_THINKING_PATTERN = exports.COPILOT_PROMPT_PATTERN = exports.OPENCODE_V2_SKIP_PATTERNS = exports.findOpencodeV2DialogTitle = void 0;
|
|
9
9
|
exports.isCodexTurnActive = isCodexTurnActive;
|
|
10
10
|
exports.findClaudeChromeStart = findClaudeChromeStart;
|
|
11
11
|
exports.resolveClaudeTrustDialogKeys = resolveClaudeTrustDialogKeys;
|
|
12
12
|
exports.isClaudeTrustDialogOpen = isClaudeTrustDialogOpen;
|
|
13
13
|
exports.isShellPaneCommand = isShellPaneCommand;
|
|
14
14
|
exports.isCodexPromptReady = isCodexPromptReady;
|
|
15
|
+
exports.findCodexComposerRow = findCodexComposerRow;
|
|
15
16
|
exports.getCodexActiveDialog = getCodexActiveDialog;
|
|
16
17
|
exports.getCodexLifecycleDialog = getCodexLifecycleDialog;
|
|
17
18
|
exports.findCodexChromeStart = findCodexChromeStart;
|
|
@@ -364,7 +365,7 @@ exports.CODEX_DIALOG_PATTERN = new RegExp(`Skip until next version|${exports.COD
|
|
|
364
365
|
* distinguishes the genuine input line from a dialog option line. Single-line
|
|
365
366
|
* (no /m, no /g) -- callers test it per line to locate the prompt's position.
|
|
366
367
|
*/
|
|
367
|
-
|
|
368
|
+
exports.CODEX_GENUINE_PROMPT_LINE = /^\s*›(?!\s*\d+\.)/;
|
|
368
369
|
/**
|
|
369
370
|
* Decide whether Codex output shows a genuine interactive input prompt rather than
|
|
370
371
|
* a startup dialog (Issue #890, reworked in Issue #892).
|
|
@@ -395,7 +396,7 @@ function isCodexPromptReady(output) {
|
|
|
395
396
|
lastDialogMarkerIdx = i;
|
|
396
397
|
continue;
|
|
397
398
|
}
|
|
398
|
-
if (CODEX_GENUINE_PROMPT_LINE.test(line)) {
|
|
399
|
+
if (exports.CODEX_GENUINE_PROMPT_LINE.test(line)) {
|
|
399
400
|
lastPromptIdx = i;
|
|
400
401
|
}
|
|
401
402
|
}
|
|
@@ -415,32 +416,49 @@ function isCodexPromptReady(output) {
|
|
|
415
416
|
* on the update dialog could confirm the default "1. Update now" (npm install).
|
|
416
417
|
*/
|
|
417
418
|
/**
|
|
418
|
-
*
|
|
419
|
-
*
|
|
420
|
-
* (Issue #
|
|
419
|
+
* Index of codex's bottom-most genuine input-prompt row, or -1 (Issue #892).
|
|
420
|
+
*
|
|
421
|
+
* This is codex's live-region composer marker (Issue #3183): the declaration in
|
|
422
|
+
* `tools/codex/live-region.ts` is built on it, so `NormalizedFrame.liveRegion`
|
|
423
|
+
* starts at this row, and the string entries below — which keep a caller that
|
|
424
|
+
* has no `NormalizedFrame` (codex's own launch loop) — read the same row.
|
|
421
425
|
*
|
|
422
|
-
* This is the one rule that keeps every Codex dialog classifier honest.
|
|
423
426
|
* capturePane returns scrollback, so a dialog that was answered minutes ago is
|
|
424
427
|
* still in the frame; only what sits BELOW the live prompt is still awaiting a
|
|
425
428
|
* key. Shared by getCodexActiveDialog and getCodexLifecycleDialog so the two
|
|
426
429
|
* cannot drift into disagreeing about what "active" means.
|
|
427
430
|
*/
|
|
428
|
-
function
|
|
429
|
-
const lines = output.split('\n');
|
|
430
|
-
// Index of the bottom-most genuine input-prompt line (-1 if none).
|
|
431
|
-
let promptIdx = -1;
|
|
431
|
+
function findCodexComposerRow(lines) {
|
|
432
432
|
for (let i = lines.length - 1; i >= 0; i--) {
|
|
433
|
-
if (CODEX_GENUINE_PROMPT_LINE.test(lines[i]))
|
|
434
|
-
|
|
435
|
-
|
|
433
|
+
if (exports.CODEX_GENUINE_PROMPT_LINE.test(lines[i]))
|
|
434
|
+
return i;
|
|
435
|
+
}
|
|
436
|
+
return -1;
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* The rows of codex's ACTIVE region: everything strictly below the composer
|
|
440
|
+
* row, or the whole frame when there is none (Issue #892).
|
|
441
|
+
*
|
|
442
|
+
* A {@link NormalizedFrame} carries that answer already (Issue #3183); a string
|
|
443
|
+
* is read with the same marker, {@link findCodexComposerRow}.
|
|
444
|
+
*/
|
|
445
|
+
function codexActiveRows(input) {
|
|
446
|
+
if (typeof input !== 'string') {
|
|
447
|
+
const region = input.liveRegion;
|
|
448
|
+
if (region.tool === 'codex') {
|
|
449
|
+
return region.anchor === 'composer'
|
|
450
|
+
? input.contentLines.slice((region.composerEndRow ?? region.startRow) + 1)
|
|
451
|
+
: input.contentLines;
|
|
436
452
|
}
|
|
453
|
+
return codexActiveRows(input.clean);
|
|
437
454
|
}
|
|
438
|
-
|
|
455
|
+
const lines = input.split('\n');
|
|
456
|
+
return lines.slice(findCodexComposerRow(lines) + 1);
|
|
439
457
|
}
|
|
440
458
|
function getCodexActiveDialog(output) {
|
|
441
459
|
// Residual dialog text above a live prompt is excluded, so a dialog lingering
|
|
442
460
|
// in scrollback is never treated as active.
|
|
443
|
-
const active =
|
|
461
|
+
const active = codexActiveRows(output).join('\n');
|
|
444
462
|
if (active === '') {
|
|
445
463
|
return null;
|
|
446
464
|
}
|
|
@@ -525,7 +543,7 @@ const CODEX_UPDATE_DIALOG_ANCHORS = [
|
|
|
525
543
|
/**
|
|
526
544
|
* Classify the bottom-most ACTIVE codex lifecycle screen (Issue #1829).
|
|
527
545
|
*
|
|
528
|
-
* Position-based, via {@link
|
|
546
|
+
* Position-based, via {@link codexActiveRows}: a dialog left in
|
|
529
547
|
* scrollback above a live prompt is not active and returns `null`. That is not
|
|
530
548
|
* a detail — the auto-answer guard in the Auto-Yes poller is built on this
|
|
531
549
|
* function, and a whole-frame version of it would switch Auto-Yes off for the
|
|
@@ -540,11 +558,11 @@ const CODEX_UPDATE_DIALOG_ANCHORS = [
|
|
|
540
558
|
* reports these screens, so a human still sees them; what this function gates is
|
|
541
559
|
* only whether a machine may answer on their behalf.
|
|
542
560
|
*
|
|
543
|
-
* @param output - ANSI-stripped pane capture
|
|
561
|
+
* @param output - ANSI-stripped pane capture, or a frame `normalizeFrame(…, 'codex')` built
|
|
544
562
|
* @returns The active lifecycle screen, or null when none is
|
|
545
563
|
*/
|
|
546
564
|
function getCodexLifecycleDialog(output) {
|
|
547
|
-
const activeLines =
|
|
565
|
+
const activeLines = codexActiveRows(output);
|
|
548
566
|
const window = [];
|
|
549
567
|
for (let i = activeLines.length - 1; i >= 0 && window.length < CODEX_LIFECYCLE_TAIL_LINES; i--) {
|
|
550
568
|
if (activeLines[i].trim() === '')
|
|
@@ -139,7 +139,7 @@ Object.defineProperty(exports, "STATUS_CHECK_LINE_COUNT", { enumerable: true, ge
|
|
|
139
139
|
* @returns Detection result with status, confidence, reason, hasActivePrompt, evidence and promptDetection
|
|
140
140
|
*/
|
|
141
141
|
function detectSessionStatus(output, cliToolId, lastOutputTimestamp) {
|
|
142
|
-
const frame = (0, frame_1.normalizeFrame)(output);
|
|
142
|
+
const frame = (0, frame_1.normalizeFrame)(output, cliToolId);
|
|
143
143
|
const verdict = (0, registry_1.getToolStatusDetector)(cliToolId).detect(frame, {
|
|
144
144
|
lastOutputTimestamp,
|
|
145
145
|
// Issue #2991: the same presence reading Auto-Yes and History use, so an
|
|
@@ -115,6 +115,23 @@ exports.STATUS_REASON = {
|
|
|
115
115
|
OPENCODE_RESPONSE_COMPLETE: 'opencode_response_complete',
|
|
116
116
|
INPUT_PROMPT: 'input_prompt',
|
|
117
117
|
NO_RECENT_OUTPUT: 'no_recent_output',
|
|
118
|
+
/**
|
|
119
|
+
* Issue #3179: the agent's launch is still in progress.
|
|
120
|
+
*
|
|
121
|
+
* Published by `current-output-builder` and `worktree-status-helper` while
|
|
122
|
+
* `lib/session/session-starting-state` holds a record for the instance — from
|
|
123
|
+
* `beginAgentSession` until `startSession` returns or throws, bounded by the
|
|
124
|
+
* tool's readiness wait and released early by a dialog the launch does not
|
|
125
|
+
* answer. The frame underneath (a shell prompt and the launch line, or a trust
|
|
126
|
+
* dialog the launch is about to answer) is not read while it is up: the status
|
|
127
|
+
* is `running`, and `isUnclassifiedActive` / `isSelectionListActive` /
|
|
128
|
+
* `isPromptWaiting` are all false, so no pad, no answer sheet and no `wait`
|
|
129
|
+
* exit 10 is raised for a screen nobody has to drive.
|
|
130
|
+
*
|
|
131
|
+
* ADDITIVE in the sense {@link STATUS_REASON.EXITED} is: a reader that does not
|
|
132
|
+
* know the token sees a `running` session.
|
|
133
|
+
*/
|
|
134
|
+
STARTING: 'starting',
|
|
118
135
|
/**
|
|
119
136
|
* Issue #2070: the tmux session is there, and the TOOL is not.
|
|
120
137
|
*
|
|
@@ -49,7 +49,9 @@ exports.SHELL_PROMPT_ENDINGS = ['$', '%', '#'];
|
|
|
49
49
|
* reproduced on renders as `maenokota@MAENOnoMac-Studio work-codex %` — forty
|
|
50
50
|
* characters exactly, i.e. one past this gate — so a codex session that had
|
|
51
51
|
* genuinely fallen back to the shell read as alive. See
|
|
52
|
-
* {@link SHELL_PROMPT_LINE_PATTERNS}.
|
|
52
|
+
* {@link SHELL_PROMPT_LINE_PATTERNS}. Issue #3191 found the same gap for claude
|
|
53
|
+
* (`… uat-repo-wt2 %`, 42 characters, after `/exit`), and claude now takes the
|
|
54
|
+
* line patterns too.
|
|
53
55
|
*/
|
|
54
56
|
exports.MAX_SHELL_PROMPT_LENGTH = 40;
|
|
55
57
|
/**
|
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
*/
|
|
18
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
19
|
exports.antigravityStatusDetector = exports.VERIFIED_AGAINST = void 0;
|
|
20
|
-
exports.isAntigravityQuotedNumberedList = isAntigravityQuotedNumberedList;
|
|
21
20
|
const cli_patterns_1 = require("../../cli-patterns");
|
|
22
21
|
const status_reason_1 = require("../../status-reason");
|
|
22
|
+
const live_region_1 = require("./live-region");
|
|
23
23
|
const run_detection_1 = require("../run-detection");
|
|
24
24
|
const verified_against_1 = require("../verified-against");
|
|
25
25
|
const dialog_1 = require("./dialog");
|
|
@@ -89,39 +89,15 @@ function isAntigravitySelectionScreenOpen(lastLines) {
|
|
|
89
89
|
const { promptPattern } = (0, cli_patterns_1.getCliToolPatterns)('antigravity');
|
|
90
90
|
return !rows.slice(matchedAt + 1).some(row => promptPattern.test(row));
|
|
91
91
|
}
|
|
92
|
-
/**
|
|
93
|
-
* Is the numbered list the shared parser read a quotation, not a dialog?
|
|
94
|
-
* (Issue #2845)
|
|
95
|
-
*
|
|
96
|
-
* The shared pass takes any `> 1. …` run in the last rows for a menu, wherever
|
|
97
|
-
* on the frame it sits. agy draws its numbered screens either IN PLACE OF the
|
|
98
|
-
* composer (the approval dialogs) or BELOW it (`/feedback`'s category menu),
|
|
99
|
-
* never above it — so a numbered list with the composer drawn under its last row
|
|
100
|
-
* is the model's reply, or a dialog left in the scrollback. Branch 0.9 declines
|
|
101
|
-
* such a frame (see {@link isAntigravitySelectionScreenOpen}); without this the
|
|
102
|
-
* shared pass then read the quoted `Do you want to proceed?` menu itself and
|
|
103
|
-
* published the composer-idle pane as `waiting` / `prompt_detected`.
|
|
104
|
-
*/
|
|
105
|
-
function isAntigravityQuotedNumberedList(frame, prompt) {
|
|
106
|
-
if (prompt.promptData?.type !== 'multiple_choice')
|
|
107
|
-
return false;
|
|
108
|
-
const rows = (0, cli_patterns_1.stripBoxDrawing)(frame.contentLines.join('\n')).split('\n');
|
|
109
|
-
const { promptPattern } = (0, cli_patterns_1.getCliToolPatterns)('antigravity');
|
|
110
|
-
let composerAt = -1;
|
|
111
|
-
for (let i = rows.length - 1; i >= 0; i--) {
|
|
112
|
-
if (promptPattern.test(rows[i])) {
|
|
113
|
-
composerAt = i;
|
|
114
|
-
break;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
if (composerAt < 0)
|
|
118
|
-
return false;
|
|
119
|
-
return !rows.slice(composerAt + 1).some(row => cli_patterns_1.ANTIGRAVITY_NUMBERED_OPTION_PATTERN.test(row));
|
|
120
|
-
}
|
|
121
92
|
exports.antigravityStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
122
93
|
tool: 'antigravity',
|
|
123
94
|
verifiedAgainst: exports.VERIFIED_AGAINST,
|
|
124
|
-
|
|
95
|
+
// Issue #3183: where the live part of the frame begins (`./live-region.ts`).
|
|
96
|
+
liveRegion: live_region_1.ANTIGRAVITY_LIVE_REGION,
|
|
97
|
+
// Issue #2845's quoted-list rule (a numbered list with the `>` composer drawn
|
|
98
|
+
// under its last row is the model's reply) is the live region's now: the
|
|
99
|
+
// composer marker in `./live-region.ts` and the shared veto in
|
|
100
|
+
// `run-detection.ts`, which the Auto-Yes path applies too (#2851).
|
|
125
101
|
beforePrompt(frame) {
|
|
126
102
|
// 0.85. Issue #2364: the survey agy draws in place of its composer after a
|
|
127
103
|
// tool decision — `[1] Good [2] Fine [3] Bad [0] Skip` under `How's the
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Antigravity's (agy) live region (Issue #3183; design doc §7 "antigravity").
|
|
4
|
+
*
|
|
5
|
+
* - **composer** — the bottom-most bare `>` row (or the mode banner that
|
|
6
|
+
* replaces it, `ANTIGRAVITY_PROMPT_PATTERN`). A user turn echoed into the
|
|
7
|
+
* transcript has text after its `>` and does not match. It is the bottom of
|
|
8
|
+
* the pane unless a numbered row is drawn under it: agy draws its approval
|
|
9
|
+
* dialogs IN PLACE of the composer, but `/feedback`'s category menu BELOW it
|
|
10
|
+
* (`antigravity-live-2364/dialog-feedback-category.txt`), so a numbered row
|
|
11
|
+
* under the composer is live and one above it is a quotation (#2845 / #2851).
|
|
12
|
+
* The Switch Model picker is drawn below it too (`picker-switch-model.txt`
|
|
13
|
+
* L43 rule, L44-L58 picker), so a `↑/↓ Navigate` row under the composer
|
|
14
|
+
* also means the composer is not the bottom.
|
|
15
|
+
* Measured: `antigravity-live-2364/idle-after-deny.txt` L41-L44.
|
|
16
|
+
* - **dialog top** — the row after the nearest boundary above the `↑/↓ Navigate`
|
|
17
|
+
* footer (`locateAntigravityDialogRegion`, #2364). Measured:
|
|
18
|
+
* `antigravity-live-2364/dialog-bash-oneline.txt` L27 / L38.
|
|
19
|
+
*
|
|
20
|
+
* Rows are read through `stripBoxDrawing`, the spelling the #2845 rule was
|
|
21
|
+
* measured on; it maps line for line, so indices are unchanged.
|
|
22
|
+
*
|
|
23
|
+
* @module lib/detection/tools/antigravity/live-region
|
|
24
|
+
*/
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.ANTIGRAVITY_LIVE_REGION = void 0;
|
|
27
|
+
const cli_patterns_1 = require("../../cli-patterns");
|
|
28
|
+
const live_region_1 = require("../live-region");
|
|
29
|
+
exports.ANTIGRAVITY_LIVE_REGION = {
|
|
30
|
+
composer: (0, live_region_1.bottomMostComposerRow)({
|
|
31
|
+
isComposerRow: row => cli_patterns_1.ANTIGRAVITY_PROMPT_PATTERN.test((0, cli_patterns_1.stripBoxDrawing)(row)),
|
|
32
|
+
atBottom: ({ contentLines }, composerRow) => !contentLines.slice(composerRow + 1).some(row => {
|
|
33
|
+
const text = (0, cli_patterns_1.stripBoxDrawing)(row);
|
|
34
|
+
return cli_patterns_1.ANTIGRAVITY_NUMBERED_OPTION_PATTERN.test(text) || cli_patterns_1.ANTIGRAVITY_SELECTION_LIST_PATTERN.test(text);
|
|
35
|
+
}),
|
|
36
|
+
}),
|
|
37
|
+
dialogTop: (0, live_region_1.dialogTopFrom)(lines => (0, cli_patterns_1.locateAntigravityDialogRegion)(lines)?.start ?? -1),
|
|
38
|
+
composerHidesDialogs: true,
|
|
39
|
+
};
|
|
@@ -17,6 +17,7 @@ const prompt_detect_multiple_choice_1 = require("../../prompt-detect-multiple-ch
|
|
|
17
17
|
const status_reason_1 = require("../../status-reason");
|
|
18
18
|
const prompt_1 = require("./prompt");
|
|
19
19
|
const frame_1 = require("../frame");
|
|
20
|
+
const live_region_1 = require("./live-region");
|
|
20
21
|
const run_detection_1 = require("../run-detection");
|
|
21
22
|
const patterns_1 = require("./patterns");
|
|
22
23
|
/**
|
|
@@ -112,15 +113,19 @@ function readIdleEvidence(frame) {
|
|
|
112
113
|
* this rule cannot disagree with them about where the conversation ends.
|
|
113
114
|
*/
|
|
114
115
|
function selectionFooterRows(frame) {
|
|
115
|
-
|
|
116
|
-
|
|
116
|
+
// Issue #3183: the input box is the live region's composer marker
|
|
117
|
+
// (`./live-region.ts`, the same `findClaudeInputBox`), located once per frame.
|
|
118
|
+
const region = (0, frame_1.liveRegionOf)(frame, 'claude');
|
|
119
|
+
if (region.anchor !== 'composer')
|
|
117
120
|
return frame.lastLines;
|
|
118
121
|
const tailStart = frame.contentLines.length - frame_1.STATUS_CHECK_LINE_COUNT;
|
|
119
|
-
return frame.contentLines.slice(Math.max(
|
|
122
|
+
return frame.contentLines.slice(Math.max(region.startRow, tailStart)).join('\n');
|
|
120
123
|
}
|
|
121
124
|
exports.claudeStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
122
125
|
tool: 'claude',
|
|
123
126
|
verifiedAgainst: patterns_1.VERIFIED_AGAINST,
|
|
127
|
+
// Issue #3183: where the live part of the frame begins (`./live-region.ts`).
|
|
128
|
+
liveRegion: live_region_1.CLAUDE_LIVE_REGION,
|
|
124
129
|
afterPrompt(frame) {
|
|
125
130
|
// 1.5. Claude CLI selection list detection
|
|
126
131
|
// Claude CLI's multi-select/checkbox prompts (e.g., AskUserQuestion with checkboxes)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Claude's live region (Issue #3183; design doc §7 "claude").
|
|
4
|
+
*
|
|
5
|
+
* - **composer** — the input box: closing rule within 4 rows of the bottom, an
|
|
6
|
+
* opening rule within 40 rows above it, and a `>`/`❯` row right under the
|
|
7
|
+
* opening rule (`findClaudeInputBox`, the finder #2847 / the idle rule / the
|
|
8
|
+
* dialog rule already share). Measured: `tui-frame-footer-2776/
|
|
9
|
+
* claude-2.1.278-idle-quoted-footers.txt` L997-L1000.
|
|
10
|
+
* - **dialog top** — the rule above the first option of the dialog that closes
|
|
11
|
+
* with Claude's footer (`claude-2.1.278-bash-approval.txt` L12 / L20 / L25,
|
|
12
|
+
* `claude-2.1.278-askuserquestion-picker.txt` L17 / L22 / L30, whose inner
|
|
13
|
+
* rule L27 is why the search starts at the option).
|
|
14
|
+
*
|
|
15
|
+
* @module lib/detection/tools/claude/live-region
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.CLAUDE_LIVE_REGION = void 0;
|
|
19
|
+
const composer_text_1 = require("../../composer-text");
|
|
20
|
+
const tui_detection_frame_1 = require("../../tui-detection-frame");
|
|
21
|
+
const live_region_1 = require("../live-region");
|
|
22
|
+
exports.CLAUDE_LIVE_REGION = {
|
|
23
|
+
composer: (0, live_region_1.fencedComposer)(lines => (0, composer_text_1.findClaudeInputBox)(lines)?.openingSeparator ?? -1),
|
|
24
|
+
dialogTop: (0, live_region_1.ruleAboveOptionRun)({ footer: tui_detection_frame_1.isClaudeFooter, rule: /^─{10,}$/, maxRows: 120 }),
|
|
25
|
+
composerHidesDialogs: true,
|
|
26
|
+
};
|
|
@@ -316,7 +316,7 @@ function readCodexGlyphRowKind(rawRow) {
|
|
|
316
316
|
* Find and classify the bottom-most `›` row of a raw capture.
|
|
317
317
|
*
|
|
318
318
|
* "Bottom-most" is the whole point, and it is the same rule `isCodexPromptReady`
|
|
319
|
-
* and `
|
|
319
|
+
* and `findCodexComposerRow` already apply for their own questions: codex
|
|
320
320
|
* draws on the normal screen, so a dialog the operator answered minutes ago is
|
|
321
321
|
* still in the frame with its options intact (Issue #1160). Only the LAST `›`
|
|
322
322
|
* row says what the pane is doing now — and when a turn is generating, that row
|