commandmate 0.48.0 → 0.49.1
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 +292 -285
- package/.next/app-path-routes-manifest.json +35 -34
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +9 -9
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +8 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route_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.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 +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route.js +1 -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/[relayId]/route.js +1 -0
- package/.next/server/app/api/relays/[relayId]/route.js.nft.json +1 -0
- package/.next/server/app/api/relays/[relayId]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/relays/route.js +1 -1
- package/.next/server/app/api/relays/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route.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.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.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.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 +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.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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_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.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.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.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.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.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.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.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.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.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.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.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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route.js +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.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.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 +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_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 +144 -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.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 +103 -1
- 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.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.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.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.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.js +1 -1
- package/.next/server/app/skills/[skillId]/page.js.nft.json +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.js +2 -2
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +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 -34
- package/.next/server/chunks/1601.js +2 -2
- package/.next/server/chunks/1656.js +2 -2
- package/.next/server/chunks/2069.js +1 -0
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2404.js +1 -1
- package/.next/server/chunks/2422.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2534.js +1 -1
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3773.js +1 -0
- package/.next/server/chunks/3801.js +31 -0
- package/.next/server/chunks/4243.js +1 -1
- package/.next/server/chunks/4248.js +1 -1
- package/.next/server/chunks/5209.js +1 -1
- package/.next/server/chunks/5354.js +1 -1
- package/.next/server/chunks/{9130.js → 5630.js} +1 -1
- package/.next/server/chunks/5775.js +1 -0
- package/.next/server/chunks/610.js +1 -0
- package/.next/server/chunks/6119.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6486.js +1 -1
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/6808.js +4 -0
- package/.next/server/chunks/7023.js +14 -0
- package/.next/server/chunks/7604.js +2 -2
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/8581.js +16 -16
- package/.next/server/chunks/8728.js +3 -3
- package/.next/server/chunks/8782.js +1 -1
- package/.next/server/chunks/8791.js +1 -1
- package/.next/server/chunks/8807.js +63 -53
- package/.next/server/chunks/8918.js +103 -1
- package/.next/server/chunks/9198.js +144 -0
- package/.next/server/chunks/9390.js +1 -1
- package/.next/server/chunks/9584.js +1 -1
- package/.next/server/chunks/9627.js +4 -4
- package/.next/server/chunks/9731.js +3 -3
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/1128-914c559913546bbc.js +1 -0
- package/.next/static/chunks/{2407-26139a8a2f1adbe8.js → 2407-675ba6b21844dc3b.js} +1 -1
- package/.next/static/chunks/{2619-a305ad4810f1393a.js → 2619-04bc32f026a0d946.js} +1 -1
- package/.next/static/chunks/{2863-f0121af1cbbedb3b.js → 2863-7173dc305dffc4f6.js} +1 -1
- package/.next/static/chunks/3931-1a1abab16248f14d.js +1 -0
- package/.next/static/chunks/6288-6fadbba6e84393b2.js +1 -0
- package/.next/static/chunks/7665-e9ef6e0a85b9fa49.js +1 -0
- package/.next/static/chunks/{8165-c68b3dc844210e6a.js → 8165-263172c17ae8e8c3.js} +1 -1
- package/.next/static/chunks/8606-ce17ffa77f39608e.js +1 -0
- package/.next/static/chunks/app/api/agents/update/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/agents/versions/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/app/release-notes/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/app/update/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/relays/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/remote/pair/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/settings/default-agents/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/skills/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/templates/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/layout-8bfac4724277b47f.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/proxy/[...path]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/sessions/page-890fd50ec9739973.js +1 -0
- package/.next/static/chunks/app/skills/[skillId]/{page-52ba58712faf3378.js → page-cb6e74fd9a6a571d.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/files/[...path]/page-704086656fb45699.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/layout-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-f6d3ab8185d93aae.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/terminal/{page-c601f3b3ece6557e.js → page-373ea37b16d930c7.js} +1 -1
- package/.next/static/css/c1e307d05daf93b6.css +1 -0
- package/.next/trace +13 -13
- package/.next/types/app/api/relays/[relayId]/route.ts +347 -0
- package/.next/types/routes.d.ts +2 -1
- package/.next/types/validator.ts +9 -0
- package/dist/cli/commands/ask.d.ts.map +1 -1
- package/dist/cli/commands/ask.js +178 -13
- package/dist/cli/commands/auto-yes.d.ts.map +1 -1
- package/dist/cli/commands/auto-yes.js +3 -5
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +5 -0
- package/dist/cli/commands/message-dispatch.d.ts +25 -5
- package/dist/cli/commands/message-dispatch.d.ts.map +1 -1
- package/dist/cli/commands/message-dispatch.js +92 -6
- package/dist/cli/commands/relays.d.ts +25 -2
- package/dist/cli/commands/relays.d.ts.map +1 -1
- package/dist/cli/commands/relays.js +69 -5
- package/dist/cli/commands/respond.d.ts +12 -0
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +63 -1
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +10 -10
- package/dist/cli/commands/verify.d.ts.map +1 -1
- package/dist/cli/commands/verify.js +8 -1
- package/dist/cli/commands/wait-hook-stop-settle.d.ts +66 -0
- package/dist/cli/commands/wait-hook-stop-settle.d.ts.map +1 -0
- package/dist/cli/commands/wait-hook-stop-settle.js +150 -0
- package/dist/cli/commands/wait-instance.d.ts +21 -0
- package/dist/cli/commands/wait-instance.d.ts.map +1 -0
- package/dist/cli/commands/wait-instance.js +41 -0
- package/dist/cli/commands/wait-notices.d.ts +87 -0
- package/dist/cli/commands/wait-notices.d.ts.map +1 -0
- package/dist/cli/commands/wait-notices.js +301 -0
- package/dist/cli/commands/wait-poll-bookkeeping.d.ts +15 -0
- package/dist/cli/commands/wait-poll-bookkeeping.d.ts.map +1 -0
- package/dist/cli/commands/wait-poll-bookkeeping.js +57 -0
- package/dist/cli/commands/wait-poll-state.d.ts +118 -0
- package/dist/cli/commands/wait-poll-state.d.ts.map +1 -0
- package/dist/cli/commands/wait-poll-state.js +6 -0
- package/dist/cli/commands/wait-timing.d.ts +46 -0
- package/dist/cli/commands/wait-timing.d.ts.map +1 -0
- package/dist/cli/commands/wait-timing.js +99 -0
- package/dist/cli/commands/wait-turn-boundary.d.ts +284 -0
- package/dist/cli/commands/wait-turn-boundary.d.ts.map +1 -0
- package/dist/cli/commands/wait-turn-boundary.js +427 -0
- package/dist/cli/commands/wait-verify.d.ts +50 -0
- package/dist/cli/commands/wait-verify.d.ts.map +1 -0
- package/dist/cli/commands/wait-verify.js +124 -0
- package/dist/cli/commands/wait.d.ts +6 -105
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +207 -959
- package/dist/cli/config/duration-constants.d.ts +16 -13
- package/dist/cli/config/duration-constants.d.ts.map +1 -1
- package/dist/cli/config/duration-constants.js +21 -21
- package/dist/cli/docs/agent-operations.d.ts +2 -2
- package/dist/cli/docs/agent-operations.d.ts.map +1 -1
- package/dist/cli/docs/agent-operations.js +25 -2
- package/dist/cli/types/api-responses.d.ts +76 -4
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/utils/api-client.d.ts +15 -1
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +7 -1
- package/dist/cli/utils/reply-ledger.d.ts +79 -0
- package/dist/cli/utils/reply-ledger.d.ts.map +1 -1
- package/dist/cli/utils/reply-ledger.js +141 -1
- package/dist/cli/utils/verify-runner.d.ts +24 -1
- package/dist/cli/utils/verify-runner.d.ts.map +1 -1
- package/dist/cli/utils/verify-runner.js +54 -1
- package/dist/config/auto-yes-duration.d.ts +56 -0
- package/dist/config/auto-yes-duration.d.ts.map +1 -0
- package/dist/config/auto-yes-duration.js +76 -0
- package/dist/lib/session/send-attempt-types.d.ts +23 -1
- package/dist/lib/session/send-attempt-types.d.ts.map +1 -1
- package/dist/lib/session/send-attempt-types.js +9 -1
- package/dist/server/locales/en/worktree.json +18 -3
- package/dist/server/locales/ja/worktree.json +18 -3
- package/dist/server/src/config/auto-yes-config.js +14 -19
- package/dist/server/src/config/auto-yes-duration.js +76 -0
- package/dist/server/src/lib/auto-yes-poller.js +49 -10
- package/dist/server/src/lib/auto-yes-state.js +9 -2
- package/dist/server/src/lib/cli-tools/antigravity.js +40 -7
- package/dist/server/src/lib/cli-tools/codex.js +60 -11
- package/dist/server/src/lib/cli-tools/command-code-plan-review.js +24 -2
- package/dist/server/src/lib/cli-tools/copilot.js +120 -30
- package/dist/server/src/lib/cli-tools/gemini.js +28 -9
- package/dist/server/src/lib/cli-tools/opencode.js +55 -13
- package/dist/server/src/lib/cli-tools/submit-composer-read.js +580 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender.js +374 -516
- package/dist/server/src/lib/db/migrations/index.js +2 -0
- package/dist/server/src/lib/db/migrations/pre-migration-backup.js +266 -0
- package/dist/server/src/lib/db/migrations/runner.js +37 -4
- package/dist/server/src/lib/db/migrations/v62-session-relays-bind.js +102 -0
- package/dist/server/src/lib/db/relay-bind-db.js +437 -0
- package/dist/server/src/lib/db/relay-db.js +59 -96
- package/dist/server/src/lib/detection/composer-text.js +215 -11
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice-chrome.js +193 -0
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +8 -191
- package/dist/server/src/lib/detection/upstream-faults.js +56 -5
- package/dist/server/src/lib/hooks/sources/opencode/client.js +12 -6
- package/dist/server/src/lib/hooks/structured-decision-response.js +1 -1
- package/dist/server/src/lib/polling/auto-yes-manual-answer.js +4 -2
- package/dist/server/src/lib/polling/response-checker.js +15 -16
- package/dist/server/src/lib/prompt-answer-errors.js +288 -0
- package/dist/server/src/lib/prompt-answer-sender.js +264 -288
- package/dist/server/src/lib/push/failure-episode-state.js +4 -1
- package/dist/server/src/lib/realtime/terminal-broadcast.js +1 -4
- package/dist/server/src/lib/realtime-snippet.js +54 -0
- package/dist/server/src/lib/relay/relay-bind.js +294 -0
- package/dist/server/src/lib/relay/relay-boot.js +51 -0
- package/dist/server/src/lib/relay/relay-bound-reply.js +519 -0
- package/dist/server/src/lib/relay/relay-delivery.js +134 -220
- package/dist/server/src/lib/relay/relay-messages.js +39 -4
- package/dist/server/src/lib/relay/relay-overlap.js +92 -0
- package/dist/server/src/lib/relay/relay-system-line.js +3 -2
- package/dist/server/src/lib/relay/types.js +12 -1
- package/dist/server/src/lib/session/agent-session-lifecycle.js +18 -0
- package/dist/server/src/lib/session/claude-session.js +41 -6
- package/dist/server/src/lib/session/composer-clear.js +109 -4
- package/dist/server/src/lib/session/current-output-builder.js +23 -6
- package/dist/server/src/lib/session/instance-input-lock.js +664 -0
- package/dist/server/src/lib/session/send-attempt-state.js +19 -1
- package/dist/server/src/lib/session/send-attempt-types.js +9 -1
- package/dist/server/src/lib/session/send-user-message.js +82 -13
- package/dist/server/src/lib/session/waiting-episode-state-ops.js +152 -0
- package/dist/server/src/lib/session/waiting-episode-state-store.js +202 -0
- package/dist/server/src/lib/session/waiting-episode-state-types.js +6 -0
- package/dist/server/src/lib/session/waiting-episode-state.js +26 -339
- package/dist/server/src/lib/tmux/tmux.js +25 -0
- package/dist/server/src/lib/verification/gate-runner.js +11 -4
- package/docs/en/user-guide/webapp-guide.md +15 -10
- package/package.json +1 -1
- package/release-notes/0.49.0.json +45 -0
- package/release-notes/0.49.1.json +66 -0
- package/.next/server/chunks/1210.js +0 -1
- package/.next/server/chunks/1945.js +0 -14
- package/.next/server/chunks/1990.js +0 -103
- package/.next/server/chunks/4194.js +0 -67
- package/.next/server/chunks/4280.js +0 -1
- package/.next/server/chunks/5845.js +0 -1
- package/.next/server/chunks/6722.js +0 -1
- package/.next/server/chunks/720.js +0 -103
- package/.next/server/chunks/936.js +0 -1
- package/.next/server/chunks/9540.js +0 -1
- package/.next/static/chunks/2099-c3e0ab70a1b95dd3.js +0 -1
- package/.next/static/chunks/5371-a549a0d2c2044d41.js +0 -1
- package/.next/static/chunks/6288-09feba367cc2c65e.js +0 -1
- package/.next/static/chunks/8606-cf6bdbff44a764cf.js +0 -1
- package/.next/static/chunks/9079-406b84d3cc891a87.js +0 -1
- package/.next/static/chunks/app/api/agents/update/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/agents/versions/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/app/release-notes/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/capabilities/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/relays/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/remote/pair/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/settings/default-agents/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/skills/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/templates/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/layout-46b4cbf07520d9b6.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/sessions/page-fb241bed579c67aa.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/files/[...path]/page-9cf1ecc59e36a004.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-cbc7749a33450cc5.js +0 -1
- package/.next/static/css/743f79ff19ab91e9.css +0 -1
- /package/.next/static/{PTlAswXLq8PAe2vUJ8dVP → fqfSDqQMweROeHUzOt_m1}/_buildManifest.js +0 -0
- /package/.next/static/{PTlAswXLq8PAe2vUJ8dVP → fqfSDqQMweROeHUzOt_m1}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/** Claude chrome (task panel, session-diff HUD, preview pane) split out of prompt-detect-multiple-choice.ts (Issue #3924). */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.SUMMARY_LINE_PATTERN = void 0;
|
|
5
|
+
exports.findClaudeTaskPanelLines = findClaudeTaskPanelLines;
|
|
6
|
+
exports.findClaudeChrome = findClaudeChrome;
|
|
7
|
+
exports.maskClaudeChrome = maskClaudeChrome;
|
|
8
|
+
const picker_chrome_1 = require("./tools/claude/picker-chrome");
|
|
9
|
+
/**
|
|
10
|
+
* [Issue #704] Pattern for Claude Code v2.1.142 prompt summary lines such as
|
|
11
|
+
* " … +1 pending"
|
|
12
|
+
* " +2 pending"
|
|
13
|
+
* " ↑3 more"
|
|
14
|
+
* " ↓1 more"
|
|
15
|
+
* These lines are rendered BELOW the real options when Claude collapses the
|
|
16
|
+
* remaining choices. They are not selectable options and must be skipped by
|
|
17
|
+
* Pass 2 — otherwise NORMAL_OPTION_PATTERN matches them as option N with
|
|
18
|
+
* label "pending"/"more", and the resulting (number, label) tuple poisons
|
|
19
|
+
* isValidPrecedingOption() so that the real 1./2./3. options above are all
|
|
20
|
+
* rejected (collectedOptions ends up with length 1 and Layer 4 returns
|
|
21
|
+
* no_prompt).
|
|
22
|
+
*
|
|
23
|
+
* Scope of the pattern (FP suppression is critical):
|
|
24
|
+
* - Anchored at line start (^) and requires the trailing keyword to be
|
|
25
|
+
* `pending` or `more` followed by a word boundary (\b). This intentionally
|
|
26
|
+
* prevents matching legitimate option labels that mention these words
|
|
27
|
+
* mid-sentence (e.g. `2. Postpone (will remain pending)`,
|
|
28
|
+
* `3. Show me more`) — those still flow through NORMAL_OPTION_PATTERN.
|
|
29
|
+
* - Optional leading ellipsis (… U+2026) and optional collapse direction
|
|
30
|
+
* marker (+ - ↑ ↓ ⏵ ⏷) accept the variants observed in the wild.
|
|
31
|
+
* - [Issue #1708] `completed` joined `pending`/`more` after a live capture
|
|
32
|
+
* (fixtures/claude-live-1708) showed the task panel collapsing FINISHED
|
|
33
|
+
* rows as `… +2 completed`. That wording was outside the #704 guard, so it
|
|
34
|
+
* reached Pass 2 and was collected as `option 2 / label='completed'` —
|
|
35
|
+
* poisoning isValidPrecedingOption() exactly as `… +1 pending` used to.
|
|
36
|
+
* - The pattern deliberately omits any free `(.+)` capture — it must
|
|
37
|
+
* short-circuit, not extract data.
|
|
38
|
+
*
|
|
39
|
+
* Pattern shape: linear regex with no nested quantifiers — ReDoS safe (S4-001).
|
|
40
|
+
*/
|
|
41
|
+
exports.SUMMARY_LINE_PATTERN = /^\s*[…]?\s*[+\-↑↓⏵⏷]?\s*\d+\s+(?:pending|more|completed)\b/i;
|
|
42
|
+
/**
|
|
43
|
+
* [Issue #1708] Header row of Claude Code's bottom-anchored task panel, e.g.
|
|
44
|
+
* " 7 tasks (0 done, 1 in progress, 6 open)"
|
|
45
|
+
*
|
|
46
|
+
* The panel is an overlay pinned to the LAST rows of the pane, structurally
|
|
47
|
+
* unrelated to whatever the agent is currently blocked on. In a production pane
|
|
48
|
+
* (200x1000, alternate screen) a prompt dialog therefore renders near the top and
|
|
49
|
+
* the panel ~880 blank rows below it — rows `compactBlankRows` collapses to one,
|
|
50
|
+
* putting the panel squarely inside Pass 2's 50-line reverse-scan window.
|
|
51
|
+
*
|
|
52
|
+
* That is only harmless while something trims it away. #704/#807 trim at a
|
|
53
|
+
* footer, but the AskUserQuestion *confirmation* step ("Ready to submit your
|
|
54
|
+
* answers?") renders NEITHER footer, so nothing trims and the panel is the first
|
|
55
|
+
* thing the reverse scan meets. Measured on the live capture in
|
|
56
|
+
* fixtures/claude-live-1708/askuserquestion-submit-taskpanel.txt, two of its rows
|
|
57
|
+
* match NORMAL_OPTION_PATTERN independently:
|
|
58
|
+
* - this header → option 7, label "tasks (2 done, 1 in progress, 4 open)"
|
|
59
|
+
* - "… +2 completed" → option 2, label "completed"
|
|
60
|
+
* Either one alone is enough to make isValidPrecedingOption() reject the real
|
|
61
|
+
* `❯ 1. Submit answers` / `2. Cancel` above it, so collectedOptions never reaches
|
|
62
|
+
* 2 and the frame is published as "no prompt" — Issue #1708's silent timeout.
|
|
63
|
+
*
|
|
64
|
+
* Anchored at line start and requires the literal `tasks (` + `<n> done`, which
|
|
65
|
+
* no option label produced by any supported CLI carries. ReDoS safe (S4-001):
|
|
66
|
+
* bounded repetition, no nesting.
|
|
67
|
+
*/
|
|
68
|
+
const CLAUDE_TASK_PANEL_HEADER_PATTERN = /^\s*\d{1,3}\s+tasks?\s+\(\d+\s+done\b/i;
|
|
69
|
+
/**
|
|
70
|
+
* [Issue #1708] A single task row of the panel described above, e.g. " ◼ Phase 3".
|
|
71
|
+
*
|
|
72
|
+
* Today these rows are inert — `isContinuationLine()` already absorbs them — but
|
|
73
|
+
* only because none of the observed titles begins with a digit. A title like
|
|
74
|
+
* "2. Fix the parser" would render as " ◻ 2. Fix the parser" and be collected as
|
|
75
|
+
* option 2, reintroducing the same poisoning from a direction no single-line
|
|
76
|
+
* guard anticipates. Skipping the whole panel block closes that off structurally
|
|
77
|
+
* instead of one wording at a time.
|
|
78
|
+
*
|
|
79
|
+
* The glyph set is exactly the two forms measured on a live pane — ◼ (in
|
|
80
|
+
* progress) and ◻ (open) — and nothing else. Every extra glyph is a line this
|
|
81
|
+
* guard can delete from the frame, so the set is an allowlist of things seen,
|
|
82
|
+
* not a guess at what the family might contain:
|
|
83
|
+
*
|
|
84
|
+
* - ❯ ● › are DEFAULT_OPTION_PATTERN's cursor indicators.
|
|
85
|
+
* - ⏺ ⎿ ✔ ✗ are the transcript markers TURN_BOUNDARY_PATTERN reads.
|
|
86
|
+
* - ☐ ☑ ☒ are the natural rendering of a MULTI-SELECT choice, and
|
|
87
|
+
* AskUserQuestion has a multiSelect mode. Measured: with those in the set,
|
|
88
|
+
* `☐ 1. Blue / ☑ 2. Green / ☐ 3. Red` under a panel header is claimed as
|
|
89
|
+
* panel content and the prompt above it disappears entirely
|
|
90
|
+
* (isPrompt=false, zero options) — Issue #1708's own failure, recreated by
|
|
91
|
+
* its fix. See the regression test.
|
|
92
|
+
*
|
|
93
|
+
* A completed row never appears (the panel collapses those into `… +N
|
|
94
|
+
* completed`, which SUMMARY_LINE_PATTERN handles), so no done-marker is needed.
|
|
95
|
+
* An unmatched glyph simply ends the block, which is the safe direction: those
|
|
96
|
+
* rows go back to being handled exactly as they were before this guard existed.
|
|
97
|
+
*
|
|
98
|
+
* To widen this, capture a live pane that actually renders the new glyph and add
|
|
99
|
+
* it as a fixture. Do not widen it from the shape of the character.
|
|
100
|
+
*/
|
|
101
|
+
const CLAUDE_TASK_PANEL_ROW_PATTERN = /^\s*[◼◻]\s/;
|
|
102
|
+
/**
|
|
103
|
+
* [Issue #2468] Claude Code 2.1.267's session-diff HUD row, in the two
|
|
104
|
+
* spellings measured on a live pane (tests/fixtures/claude-live-2468):
|
|
105
|
+
* "No changes this session"
|
|
106
|
+
* "+28 files edited before this session (show)"
|
|
107
|
+
*
|
|
108
|
+
* Chrome like the task panel, but a single row and RIGHT-aligned: on a
|
|
109
|
+
* 200-column pane it is ~110 columns of padding and then the text. It is
|
|
110
|
+
* therefore matched on the trimmed row — a reader that slices the row from the
|
|
111
|
+
* left sees nothing but blanks.
|
|
112
|
+
*
|
|
113
|
+
* It broke two readers. Pass 2 below parses `+2 files edited …` as option 2,
|
|
114
|
+
* which poisons the real `1. / 2.` above it the way `… +2 completed` did in
|
|
115
|
+
* #1708. And `findClaudeTranscriptTail` took it for the last transcript row, so
|
|
116
|
+
* `detectClaudeDialog` read it as the footer of the AskUserQuestion
|
|
117
|
+
* confirmation screen — a dialog that draws no footer — and refused a dialog
|
|
118
|
+
* that was open on screen: Auto-Yes, the UI's answer and `commandmate respond`
|
|
119
|
+
* all got `prompt_no_longer_active`.
|
|
120
|
+
*
|
|
121
|
+
* `files?` is the one spelling not seen on a pane: a one-file session was not
|
|
122
|
+
* captured, and the singular is accepted so that it is not the case that
|
|
123
|
+
* regresses. Everything else is literal, for the same reason the glyph set
|
|
124
|
+
* above is an allowlist. Anchored at both ends, no nested quantifiers — ReDoS
|
|
125
|
+
* safe (S4-001).
|
|
126
|
+
*/
|
|
127
|
+
const CLAUDE_SESSION_DIFF_HUD_PATTERN = /^(?:No changes this session|\+\d+ files? edited before this session \(show\))$/;
|
|
128
|
+
/**
|
|
129
|
+
* Line indices belonging to Claude's bottom-pinned panels within [start, end).
|
|
130
|
+
*
|
|
131
|
+
* Two panels, both chrome rather than transcript or prompt:
|
|
132
|
+
* - the task panel (#1708). Walks down from each header row for as long as
|
|
133
|
+
* rows keep looking like panel content (task rows or the collapsed `… +N …`
|
|
134
|
+
* summary). The first line that is neither ends the block, so a panel that
|
|
135
|
+
* abuts other content cannot swallow it.
|
|
136
|
+
* - the session-diff HUD (#2468), a single row claimed on its own.
|
|
137
|
+
*
|
|
138
|
+
* Pass 2 here, `findClaudeTranscriptTail` and `detectClaudeDialog`'s footer
|
|
139
|
+
* guard all read this one set — through {@link findClaudeChrome}, which adds an
|
|
140
|
+
* AskUserQuestion preview pane to it (Issue #2486) — so they cannot disagree
|
|
141
|
+
* about which rows are chrome.
|
|
142
|
+
*
|
|
143
|
+
* @param lines - Full frame, already ANSI/box stripped
|
|
144
|
+
* @param start - First index to consider (inclusive)
|
|
145
|
+
* @param end - Last index to consider (exclusive)
|
|
146
|
+
* @returns Indices Pass 2 must treat as metadata rather than options
|
|
147
|
+
*/
|
|
148
|
+
function findClaudeTaskPanelLines(lines, start, end) {
|
|
149
|
+
const panelLines = new Set();
|
|
150
|
+
for (let i = Math.max(0, start); i < Math.min(end, lines.length); i++) {
|
|
151
|
+
if (CLAUDE_SESSION_DIFF_HUD_PATTERN.test(lines[i].trim())) {
|
|
152
|
+
panelLines.add(i);
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
if (!CLAUDE_TASK_PANEL_HEADER_PATTERN.test(lines[i]))
|
|
156
|
+
continue;
|
|
157
|
+
panelLines.add(i);
|
|
158
|
+
for (let j = i + 1; j < Math.min(end, lines.length); j++) {
|
|
159
|
+
const row = lines[j];
|
|
160
|
+
if (!CLAUDE_TASK_PANEL_ROW_PATTERN.test(row) && !exports.SUMMARY_LINE_PATTERN.test(row))
|
|
161
|
+
break;
|
|
162
|
+
panelLines.add(j);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return panelLines;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Claude's chrome within [start, end). See {@link ClaudeChrome}.
|
|
169
|
+
*
|
|
170
|
+
* @param lines - Full frame, ANSI stripped; box drawing optional
|
|
171
|
+
* @param start - First index to consider (inclusive)
|
|
172
|
+
* @param end - Last index to consider (exclusive)
|
|
173
|
+
*/
|
|
174
|
+
function findClaudeChrome(lines, start, end) {
|
|
175
|
+
const rows = findClaudeTaskPanelLines(lines, start, end);
|
|
176
|
+
const panes = (0, picker_chrome_1.findClaudePreviewPanes)(lines, start, end);
|
|
177
|
+
for (const row of panes.rows)
|
|
178
|
+
rows.add(row);
|
|
179
|
+
return { rows, cuts: panes.cuts };
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* The frame with Claude's chrome taken out: chrome rows blank, rows shared with
|
|
183
|
+
* the preview pane cut back to the options column. Row indices are unchanged,
|
|
184
|
+
* so a reader of the result can report positions in the original frame.
|
|
185
|
+
*/
|
|
186
|
+
function maskClaudeChrome(lines, chrome) {
|
|
187
|
+
return lines.map((line, i) => {
|
|
188
|
+
if (chrome.rows.has(i))
|
|
189
|
+
return '';
|
|
190
|
+
const cut = chrome.cuts.get(i);
|
|
191
|
+
return cut === undefined ? line : line.slice(0, cut).trimEnd();
|
|
192
|
+
});
|
|
193
|
+
}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/** Multiple choice prompt detection logic extracted from prompt-detector.ts (Issue #575). */
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.joinApprovalTarget = exports.findApprovalContextStart = exports.findApprovalContextRange = exports.APPROVAL_TARGET_MAX_LOOKBACK = void 0;
|
|
5
|
-
exports.findClaudeTaskPanelLines = findClaudeTaskPanelLines;
|
|
6
|
-
exports.findClaudeChrome = findClaudeChrome;
|
|
7
|
-
exports.maskClaudeChrome = maskClaudeChrome;
|
|
4
|
+
exports.maskClaudeChrome = exports.findClaudeTaskPanelLines = exports.findClaudeChrome = exports.joinApprovalTarget = exports.findApprovalContextStart = exports.findApprovalContextRange = exports.APPROVAL_TARGET_MAX_LOOKBACK = void 0;
|
|
8
5
|
exports.isTypedTextFieldOption = isTypedTextFieldOption;
|
|
9
6
|
exports.buildMultipleChoiceResult = buildMultipleChoiceResult;
|
|
10
7
|
exports.detectMultipleChoicePrompt = detectMultipleChoicePrompt;
|
|
@@ -14,12 +11,17 @@ const patterns_1 = require("./tools/claude/patterns");
|
|
|
14
11
|
const prompt_view_1 = require("../../lib/session/prompt-view");
|
|
15
12
|
const option_recommendation_1 = require("./option-recommendation");
|
|
16
13
|
const picker_chrome_1 = require("./tools/claude/picker-chrome");
|
|
14
|
+
const prompt_detect_multiple_choice_chrome_1 = require("./prompt-detect-multiple-choice-chrome");
|
|
17
15
|
const prompt_detect_multiple_choice_approval_context_1 = require("./prompt-detect-multiple-choice-approval-context");
|
|
18
16
|
var prompt_detect_multiple_choice_approval_context_2 = require("./prompt-detect-multiple-choice-approval-context");
|
|
19
17
|
Object.defineProperty(exports, "APPROVAL_TARGET_MAX_LOOKBACK", { enumerable: true, get: function () { return prompt_detect_multiple_choice_approval_context_2.APPROVAL_TARGET_MAX_LOOKBACK; } });
|
|
20
18
|
Object.defineProperty(exports, "findApprovalContextRange", { enumerable: true, get: function () { return prompt_detect_multiple_choice_approval_context_2.findApprovalContextRange; } });
|
|
21
19
|
Object.defineProperty(exports, "findApprovalContextStart", { enumerable: true, get: function () { return prompt_detect_multiple_choice_approval_context_2.findApprovalContextStart; } });
|
|
22
20
|
Object.defineProperty(exports, "joinApprovalTarget", { enumerable: true, get: function () { return prompt_detect_multiple_choice_approval_context_2.joinApprovalTarget; } });
|
|
21
|
+
var prompt_detect_multiple_choice_chrome_2 = require("./prompt-detect-multiple-choice-chrome");
|
|
22
|
+
Object.defineProperty(exports, "findClaudeChrome", { enumerable: true, get: function () { return prompt_detect_multiple_choice_chrome_2.findClaudeChrome; } });
|
|
23
|
+
Object.defineProperty(exports, "findClaudeTaskPanelLines", { enumerable: true, get: function () { return prompt_detect_multiple_choice_chrome_2.findClaudeTaskPanelLines; } });
|
|
24
|
+
Object.defineProperty(exports, "maskClaudeChrome", { enumerable: true, get: function () { return prompt_detect_multiple_choice_chrome_2.maskClaudeChrome; } });
|
|
23
25
|
// ============================================================================
|
|
24
26
|
// Constants
|
|
25
27
|
// ============================================================================
|
|
@@ -64,158 +66,6 @@ const DEFAULT_OPTION_PATTERN = /^\s*[\u276F\u25CF\u203A][^\d]*(\d+)(?:\.(?!\d)|\
|
|
|
64
66
|
* Layer 4 (2+ options), and Layer 5 (SEC-001 question line validation).
|
|
65
67
|
*/
|
|
66
68
|
const NORMAL_OPTION_PATTERN = /^\s*[^\d]{0,3}(\d+)(?:\.(?!\d)|\s+)\s*(.+)$/;
|
|
67
|
-
/**
|
|
68
|
-
* [Issue #1708] Header row of Claude Code's bottom-anchored task panel, e.g.
|
|
69
|
-
* " 7 tasks (0 done, 1 in progress, 6 open)"
|
|
70
|
-
*
|
|
71
|
-
* The panel is an overlay pinned to the LAST rows of the pane, structurally
|
|
72
|
-
* unrelated to whatever the agent is currently blocked on. In a production pane
|
|
73
|
-
* (200x1000, alternate screen) a prompt dialog therefore renders near the top and
|
|
74
|
-
* the panel ~880 blank rows below it — rows `compactBlankRows` collapses to one,
|
|
75
|
-
* putting the panel squarely inside Pass 2's 50-line reverse-scan window.
|
|
76
|
-
*
|
|
77
|
-
* That is only harmless while something trims it away. #704/#807 trim at a
|
|
78
|
-
* footer, but the AskUserQuestion *confirmation* step ("Ready to submit your
|
|
79
|
-
* answers?") renders NEITHER footer, so nothing trims and the panel is the first
|
|
80
|
-
* thing the reverse scan meets. Measured on the live capture in
|
|
81
|
-
* fixtures/claude-live-1708/askuserquestion-submit-taskpanel.txt, two of its rows
|
|
82
|
-
* match NORMAL_OPTION_PATTERN independently:
|
|
83
|
-
* - this header → option 7, label "tasks (2 done, 1 in progress, 4 open)"
|
|
84
|
-
* - "… +2 completed" → option 2, label "completed"
|
|
85
|
-
* Either one alone is enough to make isValidPrecedingOption() reject the real
|
|
86
|
-
* `❯ 1. Submit answers` / `2. Cancel` above it, so collectedOptions never reaches
|
|
87
|
-
* 2 and the frame is published as "no prompt" — Issue #1708's silent timeout.
|
|
88
|
-
*
|
|
89
|
-
* Anchored at line start and requires the literal `tasks (` + `<n> done`, which
|
|
90
|
-
* no option label produced by any supported CLI carries. ReDoS safe (S4-001):
|
|
91
|
-
* bounded repetition, no nesting.
|
|
92
|
-
*/
|
|
93
|
-
const CLAUDE_TASK_PANEL_HEADER_PATTERN = /^\s*\d{1,3}\s+tasks?\s+\(\d+\s+done\b/i;
|
|
94
|
-
/**
|
|
95
|
-
* [Issue #1708] A single task row of the panel described above, e.g. " ◼ Phase 3".
|
|
96
|
-
*
|
|
97
|
-
* Today these rows are inert — `isContinuationLine()` already absorbs them — but
|
|
98
|
-
* only because none of the observed titles begins with a digit. A title like
|
|
99
|
-
* "2. Fix the parser" would render as " ◻ 2. Fix the parser" and be collected as
|
|
100
|
-
* option 2, reintroducing the same poisoning from a direction no single-line
|
|
101
|
-
* guard anticipates. Skipping the whole panel block closes that off structurally
|
|
102
|
-
* instead of one wording at a time.
|
|
103
|
-
*
|
|
104
|
-
* The glyph set is exactly the two forms measured on a live pane — ◼ (in
|
|
105
|
-
* progress) and ◻ (open) — and nothing else. Every extra glyph is a line this
|
|
106
|
-
* guard can delete from the frame, so the set is an allowlist of things seen,
|
|
107
|
-
* not a guess at what the family might contain:
|
|
108
|
-
*
|
|
109
|
-
* - ❯ ● › are DEFAULT_OPTION_PATTERN's cursor indicators.
|
|
110
|
-
* - ⏺ ⎿ ✔ ✗ are the transcript markers TURN_BOUNDARY_PATTERN reads.
|
|
111
|
-
* - ☐ ☑ ☒ are the natural rendering of a MULTI-SELECT choice, and
|
|
112
|
-
* AskUserQuestion has a multiSelect mode. Measured: with those in the set,
|
|
113
|
-
* `☐ 1. Blue / ☑ 2. Green / ☐ 3. Red` under a panel header is claimed as
|
|
114
|
-
* panel content and the prompt above it disappears entirely
|
|
115
|
-
* (isPrompt=false, zero options) — Issue #1708's own failure, recreated by
|
|
116
|
-
* its fix. See the regression test.
|
|
117
|
-
*
|
|
118
|
-
* A completed row never appears (the panel collapses those into `… +N
|
|
119
|
-
* completed`, which SUMMARY_LINE_PATTERN handles), so no done-marker is needed.
|
|
120
|
-
* An unmatched glyph simply ends the block, which is the safe direction: those
|
|
121
|
-
* rows go back to being handled exactly as they were before this guard existed.
|
|
122
|
-
*
|
|
123
|
-
* To widen this, capture a live pane that actually renders the new glyph and add
|
|
124
|
-
* it as a fixture. Do not widen it from the shape of the character.
|
|
125
|
-
*/
|
|
126
|
-
const CLAUDE_TASK_PANEL_ROW_PATTERN = /^\s*[◼◻]\s/;
|
|
127
|
-
/**
|
|
128
|
-
* [Issue #2468] Claude Code 2.1.267's session-diff HUD row, in the two
|
|
129
|
-
* spellings measured on a live pane (tests/fixtures/claude-live-2468):
|
|
130
|
-
* "No changes this session"
|
|
131
|
-
* "+28 files edited before this session (show)"
|
|
132
|
-
*
|
|
133
|
-
* Chrome like the task panel, but a single row and RIGHT-aligned: on a
|
|
134
|
-
* 200-column pane it is ~110 columns of padding and then the text. It is
|
|
135
|
-
* therefore matched on the trimmed row — a reader that slices the row from the
|
|
136
|
-
* left sees nothing but blanks.
|
|
137
|
-
*
|
|
138
|
-
* It broke two readers. Pass 2 below parses `+2 files edited …` as option 2,
|
|
139
|
-
* which poisons the real `1. / 2.` above it the way `… +2 completed` did in
|
|
140
|
-
* #1708. And `findClaudeTranscriptTail` took it for the last transcript row, so
|
|
141
|
-
* `detectClaudeDialog` read it as the footer of the AskUserQuestion
|
|
142
|
-
* confirmation screen — a dialog that draws no footer — and refused a dialog
|
|
143
|
-
* that was open on screen: Auto-Yes, the UI's answer and `commandmate respond`
|
|
144
|
-
* all got `prompt_no_longer_active`.
|
|
145
|
-
*
|
|
146
|
-
* `files?` is the one spelling not seen on a pane: a one-file session was not
|
|
147
|
-
* captured, and the singular is accepted so that it is not the case that
|
|
148
|
-
* regresses. Everything else is literal, for the same reason the glyph set
|
|
149
|
-
* above is an allowlist. Anchored at both ends, no nested quantifiers — ReDoS
|
|
150
|
-
* safe (S4-001).
|
|
151
|
-
*/
|
|
152
|
-
const CLAUDE_SESSION_DIFF_HUD_PATTERN = /^(?:No changes this session|\+\d+ files? edited before this session \(show\))$/;
|
|
153
|
-
/**
|
|
154
|
-
* Line indices belonging to Claude's bottom-pinned panels within [start, end).
|
|
155
|
-
*
|
|
156
|
-
* Two panels, both chrome rather than transcript or prompt:
|
|
157
|
-
* - the task panel (#1708). Walks down from each header row for as long as
|
|
158
|
-
* rows keep looking like panel content (task rows or the collapsed `… +N …`
|
|
159
|
-
* summary). The first line that is neither ends the block, so a panel that
|
|
160
|
-
* abuts other content cannot swallow it.
|
|
161
|
-
* - the session-diff HUD (#2468), a single row claimed on its own.
|
|
162
|
-
*
|
|
163
|
-
* Pass 2 here, `findClaudeTranscriptTail` and `detectClaudeDialog`'s footer
|
|
164
|
-
* guard all read this one set — through {@link findClaudeChrome}, which adds an
|
|
165
|
-
* AskUserQuestion preview pane to it (Issue #2486) — so they cannot disagree
|
|
166
|
-
* about which rows are chrome.
|
|
167
|
-
*
|
|
168
|
-
* @param lines - Full frame, already ANSI/box stripped
|
|
169
|
-
* @param start - First index to consider (inclusive)
|
|
170
|
-
* @param end - Last index to consider (exclusive)
|
|
171
|
-
* @returns Indices Pass 2 must treat as metadata rather than options
|
|
172
|
-
*/
|
|
173
|
-
function findClaudeTaskPanelLines(lines, start, end) {
|
|
174
|
-
const panelLines = new Set();
|
|
175
|
-
for (let i = Math.max(0, start); i < Math.min(end, lines.length); i++) {
|
|
176
|
-
if (CLAUDE_SESSION_DIFF_HUD_PATTERN.test(lines[i].trim())) {
|
|
177
|
-
panelLines.add(i);
|
|
178
|
-
continue;
|
|
179
|
-
}
|
|
180
|
-
if (!CLAUDE_TASK_PANEL_HEADER_PATTERN.test(lines[i]))
|
|
181
|
-
continue;
|
|
182
|
-
panelLines.add(i);
|
|
183
|
-
for (let j = i + 1; j < Math.min(end, lines.length); j++) {
|
|
184
|
-
const row = lines[j];
|
|
185
|
-
if (!CLAUDE_TASK_PANEL_ROW_PATTERN.test(row) && !SUMMARY_LINE_PATTERN.test(row))
|
|
186
|
-
break;
|
|
187
|
-
panelLines.add(j);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
return panelLines;
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Claude's chrome within [start, end). See {@link ClaudeChrome}.
|
|
194
|
-
*
|
|
195
|
-
* @param lines - Full frame, ANSI stripped; box drawing optional
|
|
196
|
-
* @param start - First index to consider (inclusive)
|
|
197
|
-
* @param end - Last index to consider (exclusive)
|
|
198
|
-
*/
|
|
199
|
-
function findClaudeChrome(lines, start, end) {
|
|
200
|
-
const rows = findClaudeTaskPanelLines(lines, start, end);
|
|
201
|
-
const panes = (0, picker_chrome_1.findClaudePreviewPanes)(lines, start, end);
|
|
202
|
-
for (const row of panes.rows)
|
|
203
|
-
rows.add(row);
|
|
204
|
-
return { rows, cuts: panes.cuts };
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* The frame with Claude's chrome taken out: chrome rows blank, rows shared with
|
|
208
|
-
* the preview pane cut back to the options column. Row indices are unchanged,
|
|
209
|
-
* so a reader of the result can report positions in the original frame.
|
|
210
|
-
*/
|
|
211
|
-
function maskClaudeChrome(lines, chrome) {
|
|
212
|
-
return lines.map((line, i) => {
|
|
213
|
-
if (chrome.rows.has(i))
|
|
214
|
-
return '';
|
|
215
|
-
const cut = chrome.cuts.get(i);
|
|
216
|
-
return cut === undefined ? line : line.slice(0, cut).trimEnd();
|
|
217
|
-
});
|
|
218
|
-
}
|
|
219
69
|
/**
|
|
220
70
|
* [Issue #2486] An indented row in the options column beside a preview pane.
|
|
221
71
|
*
|
|
@@ -240,39 +90,6 @@ const QUESTION_CONTEXT_LINES = 5;
|
|
|
240
90
|
* not selectable options and must not be parsed as numbered choices.
|
|
241
91
|
*/
|
|
242
92
|
const COLLAPSED_OUTPUT_PATTERN = /^\s*\[[^\]]*\d+\s+lines?\]/i;
|
|
243
|
-
/**
|
|
244
|
-
* [Issue #704] Pattern for Claude Code v2.1.142 prompt summary lines such as
|
|
245
|
-
* " … +1 pending"
|
|
246
|
-
* " +2 pending"
|
|
247
|
-
* " ↑3 more"
|
|
248
|
-
* " ↓1 more"
|
|
249
|
-
* These lines are rendered BELOW the real options when Claude collapses the
|
|
250
|
-
* remaining choices. They are not selectable options and must be skipped by
|
|
251
|
-
* Pass 2 — otherwise NORMAL_OPTION_PATTERN matches them as option N with
|
|
252
|
-
* label "pending"/"more", and the resulting (number, label) tuple poisons
|
|
253
|
-
* isValidPrecedingOption() so that the real 1./2./3. options above are all
|
|
254
|
-
* rejected (collectedOptions ends up with length 1 and Layer 4 returns
|
|
255
|
-
* no_prompt).
|
|
256
|
-
*
|
|
257
|
-
* Scope of the pattern (FP suppression is critical):
|
|
258
|
-
* - Anchored at line start (^) and requires the trailing keyword to be
|
|
259
|
-
* `pending` or `more` followed by a word boundary (\b). This intentionally
|
|
260
|
-
* prevents matching legitimate option labels that mention these words
|
|
261
|
-
* mid-sentence (e.g. `2. Postpone (will remain pending)`,
|
|
262
|
-
* `3. Show me more`) — those still flow through NORMAL_OPTION_PATTERN.
|
|
263
|
-
* - Optional leading ellipsis (… U+2026) and optional collapse direction
|
|
264
|
-
* marker (+ - ↑ ↓ ⏵ ⏷) accept the variants observed in the wild.
|
|
265
|
-
* - [Issue #1708] `completed` joined `pending`/`more` after a live capture
|
|
266
|
-
* (fixtures/claude-live-1708) showed the task panel collapsing FINISHED
|
|
267
|
-
* rows as `… +2 completed`. That wording was outside the #704 guard, so it
|
|
268
|
-
* reached Pass 2 and was collected as `option 2 / label='completed'` —
|
|
269
|
-
* poisoning isValidPrecedingOption() exactly as `… +1 pending` used to.
|
|
270
|
-
* - The pattern deliberately omits any free `(.+)` capture — it must
|
|
271
|
-
* short-circuit, not extract data.
|
|
272
|
-
*
|
|
273
|
-
* Pattern shape: linear regex with no nested quantifiers — ReDoS safe (S4-001).
|
|
274
|
-
*/
|
|
275
|
-
const SUMMARY_LINE_PATTERN = /^\s*[…]?\s*[+\-↑↓⏵⏷]?\s*\d+\s+(?:pending|more|completed)\b/i;
|
|
276
93
|
/**
|
|
277
94
|
* [Issue #704] Pattern for the Claude Code v2.1.142 prompt footer line.
|
|
278
95
|
* Example: " Esc to cancel · Tab to amend → · Herding…"
|
|
@@ -1060,7 +877,7 @@ function collectOptions(lines, scanStart, effectiveEnd) {
|
|
|
1060
877
|
// [Issue #2486] The same reading carries an AskUserQuestion preview pane, whose
|
|
1061
878
|
// rows the scan likewise meets before the top border that identifies it — and
|
|
1062
879
|
// some of which it shares with the options column.
|
|
1063
|
-
const chrome = findClaudeChrome(lines, scanStart, effectiveEnd);
|
|
880
|
+
const chrome = (0, prompt_detect_multiple_choice_chrome_1.findClaudeChrome)(lines, scanStart, effectiveEnd);
|
|
1064
881
|
for (let i = effectiveEnd - 1; i >= scanStart; i--) {
|
|
1065
882
|
// [Issue #1708] Chrome rows are metadata. Same handling as the
|
|
1066
883
|
// COLLAPSED_OUTPUT / SUMMARY guards below: skip without ending the scan, so
|
|
@@ -1139,7 +956,7 @@ function isMetadataRow(state, rawLine, line, paneCut) {
|
|
|
1139
956
|
// against future Claude renderings where the footer line text changes
|
|
1140
957
|
// (S1 still catches) or the summary line wording changes (S2 still
|
|
1141
958
|
// catches via footer trim).
|
|
1142
|
-
if (SUMMARY_LINE_PATTERN.test(line)) {
|
|
959
|
+
if (prompt_detect_multiple_choice_chrome_1.SUMMARY_LINE_PATTERN.test(line)) {
|
|
1143
960
|
state.continuationLineCount++;
|
|
1144
961
|
return true;
|
|
1145
962
|
}
|
|
@@ -25,8 +25,9 @@
|
|
|
25
25
|
* @module lib/detection/upstream-faults
|
|
26
26
|
*/
|
|
27
27
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
-
exports.UPSTREAM_FAULT_TRUNCATION_MARKER = exports.UPSTREAM_FAULT_EXCERPT_MAX_BYTES = exports.UPSTREAM_FAULTS = void 0;
|
|
28
|
+
exports.UPSTREAM_FAULT_TRUNCATION_MARKER = exports.UPSTREAM_FAULT_EXCERPT_MAX_BYTES = exports.CODEX_ERROR_ROW_FAULT_IDS = exports.UPSTREAM_FAULTS = void 0;
|
|
29
29
|
exports.matchUpstreamFault = matchUpstreamFault;
|
|
30
|
+
exports.matchCodexErrorRowFault = matchCodexErrorRowFault;
|
|
30
31
|
exports.findUpstreamFault = findUpstreamFault;
|
|
31
32
|
const ansi_1 = require("./ansi");
|
|
32
33
|
const excerpt_1 = require("./excerpt");
|
|
@@ -54,9 +55,47 @@ exports.UPSTREAM_FAULTS = [
|
|
|
54
55
|
pattern: /\bmaximum context length is \d+ tokens\b/i,
|
|
55
56
|
selfRetrying: false,
|
|
56
57
|
},
|
|
58
|
+
{
|
|
59
|
+
// codex ends the turn with `Selected model is at capacity` and does not
|
|
60
|
+
// answer (Issue #3936); the same model will not, so the cue is to switch
|
|
61
|
+
// instance or model. Anchored on the sentence, not on "at capacity": the
|
|
62
|
+
// 529 line above says "The API is at capacity" and is `overloaded`.
|
|
63
|
+
//
|
|
64
|
+
// And on codex's own error row, not on the sentence alone: `■ ` at column
|
|
65
|
+
// 0, the shape codex 0.160.0 draws its errors in (measured on
|
|
66
|
+
// `■ Conversation interrupted`). A reply that names or quotes the error —
|
|
67
|
+
// this Issue, its review — is indented (`• ` / ` `), and an input echo
|
|
68
|
+
// starts with `› `; matching those would fail a healthy turn with exit 11.
|
|
69
|
+
// The capacity row itself is unmeasured (the fixture is synthetic).
|
|
70
|
+
id: 'model-capacity',
|
|
71
|
+
pattern: /^■ Selected model is at capacity\b/im,
|
|
72
|
+
selfRetrying: false,
|
|
73
|
+
},
|
|
57
74
|
{ id: 'limit-reached', pattern: /\blimit reached\b/i, selfRetrying: false },
|
|
58
|
-
{
|
|
75
|
+
{
|
|
76
|
+
// Anchored to a line start (Issue #3946), like `model-capacity`: only the two
|
|
77
|
+
// shapes measured for the fault itself are accepted — claude's `⏺ API Error: …`
|
|
78
|
+
// row (Issue #1839) and a bare `API Error: …` at column 0. Unanchored, it
|
|
79
|
+
// matched a healthy codex reply that quoted `• API Error: 500` on an indented
|
|
80
|
+
// continuation line, and `ask` exited 11 — twice, because the quoting turn was
|
|
81
|
+
// still inside the 100-row window when the next turn ended. A codex `• ` row,
|
|
82
|
+
// an indented continuation and a `› ` input echo are not accepted.
|
|
83
|
+
//
|
|
84
|
+
// Known limit: a claude reply that itself begins with `⏺ API Error: …` is
|
|
85
|
+
// indistinguishable from the fault, because nothing here knows who wrote a row
|
|
86
|
+
// (reply, echo, tool error) — only its leading shape.
|
|
87
|
+
id: 'api-error',
|
|
88
|
+
pattern: /^(?:⏺ )?API Error(?::|\s+\d{3})/im,
|
|
89
|
+
selfRetrying: false,
|
|
90
|
+
},
|
|
59
91
|
];
|
|
92
|
+
/**
|
|
93
|
+
* The faults whose pattern is anchored to codex's own error row (`■ ` at column
|
|
94
|
+
* 0), and so the only ones safe to apply to a row outside `realtimeSnippet`
|
|
95
|
+
* (Issue #3946, {@link matchCodexErrorRowFault}). An unanchored pattern on such a
|
|
96
|
+
* row would read a quote in an old reply as a fault happening now.
|
|
97
|
+
*/
|
|
98
|
+
exports.CODEX_ERROR_ROW_FAULT_IDS = ['model-capacity'];
|
|
60
99
|
/**
|
|
61
100
|
* Bound on {@link UpstreamFaultMatch.matchedText}, in UTF-8 **bytes**.
|
|
62
101
|
*
|
|
@@ -87,11 +126,23 @@ function truncateExcerpt(text) {
|
|
|
87
126
|
* sequences on a live pane.
|
|
88
127
|
*/
|
|
89
128
|
function matchUpstreamFault(frame) {
|
|
129
|
+
return matchFaults(frame, exports.UPSTREAM_FAULTS);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* {@link matchUpstreamFault} restricted to {@link CODEX_ERROR_ROW_FAULT_IDS}
|
|
133
|
+
* (Issue #3946): for the one codex transcript row read from outside the window,
|
|
134
|
+
* where a quote must not count.
|
|
135
|
+
*/
|
|
136
|
+
function matchCodexErrorRowFault(row) {
|
|
137
|
+
return matchFaults(row, exports.UPSTREAM_FAULTS.filter((fault) => exports.CODEX_ERROR_ROW_FAULT_IDS.includes(fault.id)));
|
|
138
|
+
}
|
|
139
|
+
function matchFaults(frame, faults) {
|
|
90
140
|
const clean = (0, ansi_1.stripAnsi)(frame);
|
|
91
|
-
for (const fault of
|
|
141
|
+
for (const fault of faults) {
|
|
92
142
|
const match = fault.pattern.exec(clean);
|
|
93
|
-
// The patterns are
|
|
94
|
-
// a
|
|
143
|
+
// The patterns are stateless (no /g; `model-capacity` and `api-error` are
|
|
144
|
+
// anchored to a line start with /m), so `exec` cannot carry a lastIndex
|
|
145
|
+
// between calls — but reading `index` requires exec regardless.
|
|
95
146
|
if (!match)
|
|
96
147
|
continue;
|
|
97
148
|
const lineStart = clean.lastIndexOf('\n', match.index) + 1;
|
|
@@ -478,7 +478,7 @@ function promptSelectionBody(selection) {
|
|
|
478
478
|
* @param sessionId - `ses_…`, the session the message belongs to
|
|
479
479
|
* @param messageId - `msg_…`, from {@link newOpencodeMessageId}
|
|
480
480
|
* @param parts - The message body; at least one part
|
|
481
|
-
* @returns
|
|
481
|
+
* @returns How the POST ended ({@link OpencodePromptDispatch})
|
|
482
482
|
*/
|
|
483
483
|
async function sendOpencodePrompt(port, sessionId, messageId, parts, selection) {
|
|
484
484
|
const url = `${opencodeBaseUrl(port)}/session/${encodeURIComponent(sessionId)}/prompt_async`;
|
|
@@ -493,18 +493,24 @@ async function sendOpencodePrompt(port, sessionId, messageId, parts, selection)
|
|
|
493
493
|
}),
|
|
494
494
|
signal: AbortSignal.timeout(exports.OPENCODE_REQUEST_TIMEOUT_MS),
|
|
495
495
|
});
|
|
496
|
-
if (response.status
|
|
497
|
-
|
|
498
|
-
|
|
496
|
+
if (response.status === 204)
|
|
497
|
+
return 'accepted';
|
|
498
|
+
// Issue #3992: another 2xx may still have created the message (a JSON 200 /
|
|
499
|
+
// 201), so it stays unknown — except the web UI's SPA shell an unknown route
|
|
500
|
+
// answers (`200 text/html`, #1931), which never took the message.
|
|
501
|
+
if (response.status >= 200 && response.status < 300 && !hasContentType(response, 'text/html')) {
|
|
502
|
+
logger.warn('opencode-prompt-unexpected-success', { port, sessionId, status: response.status });
|
|
503
|
+
return 'unknown';
|
|
499
504
|
}
|
|
500
|
-
|
|
505
|
+
logger.warn('opencode-prompt-rejected', { port, sessionId, status: response.status });
|
|
506
|
+
return 'rejected';
|
|
501
507
|
}
|
|
502
508
|
catch (error) {
|
|
503
509
|
logger.debug('opencode-request-failed', {
|
|
504
510
|
url,
|
|
505
511
|
error: error instanceof Error ? error.message : String(error),
|
|
506
512
|
});
|
|
507
|
-
return
|
|
513
|
+
return 'unknown';
|
|
508
514
|
}
|
|
509
515
|
}
|
|
510
516
|
/**
|
|
@@ -465,5 +465,5 @@ async function answerStructuredDecision({ worktreeId, cliToolId, instanceId, ans
|
|
|
465
465
|
reply: option.reply,
|
|
466
466
|
delivered,
|
|
467
467
|
});
|
|
468
|
-
return { kind: 'answered', decisionId: decision.id, option, delivered };
|
|
468
|
+
return { kind: 'answered', decisionId: decision.id, option, delivered, receipt: delivery };
|
|
469
469
|
}
|
|
@@ -82,8 +82,10 @@ function noteManualSendStarting(ticket, promptData) {
|
|
|
82
82
|
* (the manual-answer sequence moves on): one that read no hold before its
|
|
83
83
|
* last wait does not type over this one.
|
|
84
84
|
*
|
|
85
|
-
* An end nobody reports (
|
|
86
|
-
* the
|
|
85
|
+
* An end nobody reports (a send that threw saying nothing of its keys, a
|
|
86
|
+
* verdict the agent's API gave no receipt for — both only abandoned; a
|
|
87
|
+
* structured verdict `/prompt-response` refused) leaves the hold as it was. A verdict delivered over the
|
|
88
|
+
* agent's API reports its receipt like a send (Issue #3925).
|
|
87
89
|
*/
|
|
88
90
|
function settleManualAnswer(ticket, outcome, at = Date.now()) {
|
|
89
91
|
const { compositeKey, attempt } = ticket;
|
|
@@ -62,7 +62,7 @@ const push_1 = require("../../lib/push");
|
|
|
62
62
|
const prompt_push_gate_1 = require("../../lib/push/prompt-push-gate");
|
|
63
63
|
// Issue #2000: deep path for the same reason as the two imports above.
|
|
64
64
|
const failure_push_notifier_1 = require("../../lib/push/failure-push-notifier");
|
|
65
|
-
const
|
|
65
|
+
const realtime_snippet_1 = require("../../lib/realtime-snippet");
|
|
66
66
|
const waiting_push_notifier_1 = require("../../lib/push/waiting-push-notifier");
|
|
67
67
|
const waiting_episode_binding_1 = require("../../lib/session/waiting-episode-binding");
|
|
68
68
|
const waiting_episode_state_1 = require("../../lib/session/waiting-episode-state");
|
|
@@ -71,19 +71,6 @@ const auto_yes_state_1 = require("../../lib/auto-yes-state");
|
|
|
71
71
|
const auto_yes_poller_state_1 = require("./auto-yes-poller-state");
|
|
72
72
|
const task_transition_service_1 = require("../../lib/tasks/task-transition-service");
|
|
73
73
|
const response_checker_blank_response_1 = require("./response-checker-blank-response");
|
|
74
|
-
/**
|
|
75
|
-
* How many rows from the bottom of a capture the upstream-fault check reads
|
|
76
|
-
* (Issue #2000).
|
|
77
|
-
*
|
|
78
|
-
* The same 100 as `current-output-builder`'s `realtimeSnippet`, and for the
|
|
79
|
-
* reason #1839 gives there: the wider capture keeps a banner from an hour ago
|
|
80
|
-
* in scope, and "is this happening now" is the only question worth ringing a
|
|
81
|
-
* phone about. Keeping the two windows equal also means the notification and
|
|
82
|
-
* the `upstreamFault` field an operator reads in `capture --json` are judging
|
|
83
|
-
* the same rows — a fault that rang but is invisible in the payload next to it
|
|
84
|
-
* is unverifiable.
|
|
85
|
-
*/
|
|
86
|
-
const UPSTREAM_FAULT_SCAN_ROWS = 100;
|
|
87
74
|
/**
|
|
88
75
|
* Raise a push notification when this frame shows a NEW upstream fault
|
|
89
76
|
* (Issue #2000).
|
|
@@ -100,8 +87,20 @@ const UPSTREAM_FAULT_SCAN_ROWS = 100;
|
|
|
100
87
|
* anything, so the level can be handed over on every poll.
|
|
101
88
|
*/
|
|
102
89
|
function observeUpstreamFaultForPush(worktreeId, cliToolId, instanceId, output) {
|
|
103
|
-
|
|
104
|
-
|
|
90
|
+
// The rows `current-output-builder` judges `upstreamFault` on (#1839: the rows
|
|
91
|
+
// it publishes as `realtimeSnippet`; #3946: plus codex's last transcript row
|
|
92
|
+
// above them on a split screen), read through the same entry
|
|
93
|
+
// (`matchPaneUpstreamFault`) rather than a copy of its window. The reason is #1839's: the wider capture keeps a banner from an
|
|
94
|
+
// hour ago in scope, and "is this happening now" is the only question worth
|
|
95
|
+
// ringing a phone about. Sharing the cut also means the notification and the
|
|
96
|
+
// `upstreamFault` an operator reads in `capture --json` judge the same rows —
|
|
97
|
+
// a fault that rang but is invisible in the payload next to it is
|
|
98
|
+
// unverifiable. Issue #3936: the plain last 100 rows (#2000) drifted from the
|
|
99
|
+
// snippet when #2768 anchored it to the last row with content, so an inline
|
|
100
|
+
// codex pane showed `model-capacity` in the capture and never rang.
|
|
101
|
+
// Issue #3946: one entry with current-output, which also reads codex's last
|
|
102
|
+
// transcript row above the window on a split screen.
|
|
103
|
+
const match = (0, realtime_snippet_1.matchPaneUpstreamFault)(output.split('\n'), cliToolId);
|
|
105
104
|
// Fire-and-forget, like every other push call in this file: the poller must
|
|
106
105
|
// not slow down or break because a notification could not be delivered.
|
|
107
106
|
void (0, failure_push_notifier_1.notifyUpstreamFaultPush)({
|