commandmate 0.49.2 → 0.50.0
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 +476 -423
- package/.next/app-path-routes-manifest.json +28 -21
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +9 -9
- package/.next/react-loadable-manifest.json +1 -1
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +40 -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.js +1 -1
- package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_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 +1 -103
- 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.js.nft.json +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.js.nft.json +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 +4 -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]/resolve/route.js +1 -0
- package/.next/server/app/api/relays/[relayId]/resolve/route.js.nft.json +1 -0
- package/.next/server/app/api/relays/[relayId]/resolve/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/relays/[relayId]/route.js +1 -1
- package/.next/server/app/api/relays/[relayId]/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/route.js +4 -1
- package/.next/server/app/api/relays/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/remote/pair/route.js +2 -2
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/role-defaults/route.js +1 -0
- package/.next/server/app/api/repositories/[id]/role-defaults/route.js.nft.json +1 -0
- package/.next/server/app/api/repositories/[id]/role-defaults/route_client-reference-manifest.js +1 -0
- 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.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/roles/[id]/route.js +1 -0
- package/.next/server/app/api/roles/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/roles/[id]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/roles/route.js +1 -0
- package/.next/server/app/api/roles/route.js.nft.json +1 -0
- package/.next/server/app/api/roles/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/settings/agent-role-defaults/route.js +1 -0
- package/.next/server/app/api/settings/agent-role-defaults/route.js.nft.json +1 -0
- package/.next/server/app/api/settings/agent-role-defaults/route_client-reference-manifest.js +1 -0
- 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.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 +3 -3
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route.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 +2 -2
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_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 +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]/instances/roles/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/instances/roles/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/instances/roles/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/instances/roles/settle/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/instances/roles/settle/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/instances/roles/settle/route_client-reference-manifest.js +1 -0
- 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 +2 -2
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/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 +2 -2
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -144
- 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 -104
- 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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +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.js.nft.json +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 +2 -2
- package/.next/server/app/api/worktrees/[id]/tasks/route.js.nft.json +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 +1 -103
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +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.js.nft.json +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.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.js +2 -2
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.js +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +10 -10
- 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 +28 -21
- package/.next/server/chunks/1184.js +5 -0
- package/.next/server/chunks/1501.js +5 -5
- package/.next/server/chunks/1656.js +2 -2
- package/.next/server/chunks/1957.js +2 -2
- package/.next/server/chunks/1990.js +103 -0
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2404.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2819.js +1 -0
- package/.next/server/chunks/2897.js +1 -1
- package/.next/server/chunks/3042.js +2 -0
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3294.js +3 -0
- package/.next/server/chunks/3417.js +1 -1
- package/.next/server/chunks/3480.js +1 -1
- package/.next/server/chunks/3505.js +2 -6
- package/.next/server/chunks/3543.js +1 -1
- package/.next/server/chunks/3801.js +7 -7
- package/.next/server/chunks/3945.js +1 -1
- package/.next/server/chunks/4207.js +1 -1
- package/.next/server/chunks/454.js +1 -0
- package/.next/server/chunks/4645.js +1 -0
- package/.next/server/chunks/4911.js +1 -1
- package/.next/server/chunks/5209.js +2 -2
- package/.next/server/chunks/5350.js +216 -0
- package/.next/server/chunks/5354.js +1 -1
- package/.next/server/chunks/5571.js +1 -1
- package/.next/server/chunks/6009.js +12 -0
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6285.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6486.js +2 -2
- package/.next/server/chunks/6569.js +1 -0
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/6793.js +4 -4
- package/.next/server/chunks/696.js +3 -0
- package/.next/server/chunks/7023.js +3 -3
- package/.next/server/chunks/7083.js +1 -0
- package/.next/server/chunks/741.js +1 -0
- package/.next/server/chunks/7662.js +1 -0
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/8143.js +33 -0
- package/.next/server/chunks/8581.js +6 -6
- package/.next/server/chunks/8728.js +2 -2
- package/.next/server/chunks/8782.js +1 -1
- package/.next/server/chunks/8807.js +181 -93
- package/.next/server/chunks/8918.js +3 -105
- package/.next/server/chunks/8955.js +1 -0
- package/.next/server/chunks/9169.js +1 -0
- package/.next/server/chunks/923.js +1 -0
- package/.next/server/chunks/9390.js +2 -2
- package/.next/server/chunks/9627.js +9 -9
- package/.next/server/chunks/973.js +1 -0
- package/.next/server/chunks/9731.js +3 -3
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/2314-2c9d587a27e8f731.js +1 -0
- package/.next/static/chunks/2407-ee881c99e218975b.js +1 -0
- package/.next/static/chunks/3931-24d7e245a93feb25.js +1 -0
- package/.next/static/chunks/4548-9afa02fd18afa6c7.js +1 -0
- package/.next/static/chunks/{5794-7975b8e51e731b19.js → 5794-38b3b504b3d97e04.js} +1 -1
- package/.next/static/chunks/{6966-d8dc6032410ffaba.js → 6966-dbfa4a43397f8c6d.js} +1 -1
- package/.next/static/chunks/7090-28e83f5a0efdb3b4.js +1 -0
- package/.next/static/chunks/7229.016d007c467a3600.js +1 -0
- package/.next/static/chunks/{8407-35bbfc84793d7004.js → 8407-dd6a8062fc449899.js} +1 -1
- package/.next/static/chunks/app/api/agents/update/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/agents/versions/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/app/release-notes/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/app/update/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/resolve/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/relays/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/remote/pair/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/role-defaults/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/roles/[id]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/roles/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/settings/agent-role-defaults/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/settings/default-agents/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/skills/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/templates/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/roles/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/roles/settle/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/layout-7bf800fcc5e025b1.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/more/{page-ff5af5ca48774c89.js → page-e8f5780f6e4fb657.js} +1 -1
- package/.next/static/chunks/app/{page-b4863bfe0452e09d.js → page-869f353a4ac4e15b.js} +1 -1
- package/.next/static/chunks/app/proxy/[...path]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/repositories/page-bedb505687010f18.js +1 -0
- package/.next/static/chunks/app/review/page-87c4a9b0de50fa80.js +1 -0
- package/.next/static/chunks/app/sessions/{page-c6eb7c02db2f4c80.js → page-82ca46793789fce4.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-570eb79fbbd1a934.js +1 -0
- package/.next/static/chunks/{webpack-838df0273b03af19.js → webpack-16b1a3143fa42ca0.js} +1 -1
- package/.next/static/css/d4f2c9522cf1b449.css +1 -0
- package/.next/static/z4d8-5MaLkoD-4EhueZwk/_buildManifest.js +1 -0
- package/.next/trace +14 -13
- package/.next/types/app/api/relays/[relayId]/resolve/route.ts +347 -0
- package/.next/types/app/api/repositories/[id]/role-defaults/route.ts +347 -0
- package/.next/types/app/api/roles/[id]/route.ts +347 -0
- package/.next/types/app/api/roles/route.ts +347 -0
- package/.next/types/app/api/settings/agent-role-defaults/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/instances/roles/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/instances/roles/settle/route.ts +347 -0
- package/.next/types/routes.d.ts +8 -1
- package/.next/types/validator.ts +63 -0
- package/dist/cli/commands/instances.d.ts +1 -0
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +290 -33
- package/dist/cli/commands/message-dispatch.d.ts +25 -3
- package/dist/cli/commands/message-dispatch.d.ts.map +1 -1
- package/dist/cli/commands/message-dispatch.js +26 -6
- package/dist/cli/commands/prompt.d.ts.map +1 -1
- package/dist/cli/commands/prompt.js +2 -1
- package/dist/cli/commands/relays.d.ts +7 -0
- package/dist/cli/commands/relays.d.ts.map +1 -1
- package/dist/cli/commands/relays.js +179 -6
- package/dist/cli/commands/report.d.ts +7 -2
- package/dist/cli/commands/report.d.ts.map +1 -1
- package/dist/cli/commands/report.js +19 -6
- package/dist/cli/commands/respond-strict.d.ts.map +1 -1
- package/dist/cli/commands/respond-strict.js +9 -2
- package/dist/cli/commands/roles.d.ts +11 -0
- package/dist/cli/commands/roles.d.ts.map +1 -0
- package/dist/cli/commands/roles.js +392 -0
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +526 -38
- package/dist/cli/commands/task.d.ts +22 -0
- package/dist/cli/commands/task.d.ts.map +1 -1
- package/dist/cli/commands/task.js +26 -18
- package/dist/cli/docs/agent-operations.d.ts +1 -1
- package/dist/cli/docs/agent-operations.d.ts.map +1 -1
- package/dist/cli/docs/agent-operations.js +91 -3
- package/dist/cli/index.d.ts +4 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +6 -0
- package/dist/cli/types/api-responses.d.ts +106 -0
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/index.d.ts +38 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/types/index.js +15 -1
- package/dist/cli/utils/agent-instances.d.ts +29 -1
- package/dist/cli/utils/agent-instances.d.ts.map +1 -1
- package/dist/cli/utils/agent-instances.js +67 -7
- package/dist/cli/utils/agent-roles.d.ts +75 -0
- package/dist/cli/utils/agent-roles.d.ts.map +1 -0
- package/dist/cli/utils/agent-roles.js +238 -0
- package/dist/cli/utils/api-client-deadline.d.ts +28 -0
- package/dist/cli/utils/api-client-deadline.d.ts.map +1 -0
- package/dist/cli/utils/api-client-deadline.js +46 -0
- package/dist/cli/utils/api-client-errors.d.ts +140 -0
- package/dist/cli/utils/api-client-errors.d.ts.map +1 -0
- package/dist/cli/utils/api-client-errors.js +222 -0
- package/dist/cli/utils/api-client.d.ts +9 -131
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +43 -258
- package/dist/cli/utils/role-failure.d.ts +31 -0
- package/dist/cli/utils/role-failure.d.ts.map +1 -0
- package/dist/cli/utils/role-failure.js +90 -0
- package/dist/cli/utils/role-input.d.ts +16 -0
- package/dist/cli/utils/role-input.d.ts.map +1 -0
- package/dist/cli/utils/role-input.js +78 -0
- package/dist/cli/utils/security-logger.d.ts +17 -0
- package/dist/cli/utils/security-logger.d.ts.map +1 -1
- package/dist/cli/utils/security-logger.js +44 -5
- package/dist/lib/cli-tools/types.d.ts +6 -0
- package/dist/lib/cli-tools/types.d.ts.map +1 -1
- package/dist/lib/detection/tools/verified-against.d.ts +16 -0
- package/dist/lib/detection/tools/verified-against.d.ts.map +1 -1
- package/dist/lib/detection/tools/verified-against.js +16 -0
- package/dist/lib/session/send-attempt-types.d.ts +4 -0
- package/dist/lib/session/send-attempt-types.d.ts.map +1 -1
- package/dist/lib/verification/verify-config.d.ts +22 -0
- package/dist/lib/verification/verify-config.d.ts.map +1 -1
- package/dist/lib/verification/verify-config.js +32 -2
- package/dist/server/locales/en/worktree.json +30 -4
- package/dist/server/locales/ja/worktree.json +30 -4
- package/dist/server/src/config/safe-directory.js +30 -0
- package/dist/server/src/lib/agent-roles/adapters.js +174 -0
- package/dist/server/src/lib/agent-roles/artifacts.js +638 -0
- package/dist/server/src/lib/agent-roles/composition.js +222 -0
- package/dist/server/src/lib/agent-roles/fingerprint.js +21 -0
- package/dist/server/src/lib/agent-roles/jsonc.js +85 -0
- package/dist/server/src/lib/agent-roles/launch-errors.js +58 -0
- package/dist/server/src/lib/agent-roles/pane-env.js +63 -0
- package/dist/server/src/lib/agent-roles/resolve.js +375 -0
- package/dist/server/src/lib/agent-roles/toml-basic.js +140 -0
- package/dist/server/src/lib/agent-roles/unicode.js +16 -0
- package/dist/server/src/lib/agent-roles/validation.js +61 -0
- package/dist/server/src/lib/cli-tools/antigravity.js +39 -6
- package/dist/server/src/lib/cli-tools/base.js +63 -5
- package/dist/server/src/lib/cli-tools/claude-auto-default-nudge.js +141 -0
- package/dist/server/src/lib/cli-tools/claude.js +15 -3
- package/dist/server/src/lib/cli-tools/codex.js +134 -21
- package/dist/server/src/lib/cli-tools/command-code.js +28 -13
- package/dist/server/src/lib/cli-tools/copilot.js +189 -31
- package/dist/server/src/lib/cli-tools/gemini.js +37 -3
- package/dist/server/src/lib/cli-tools/launch-answer-skips.js +76 -0
- package/dist/server/src/lib/cli-tools/opencode-v2.js +10 -0
- package/dist/server/src/lib/cli-tools/opencode.js +214 -12
- package/dist/server/src/lib/cli-tools/prompt-wait-dialog.js +115 -0
- package/dist/server/src/lib/cli-tools/submit-composer-read.js +65 -12
- package/dist/server/src/lib/cli-tools/submit-verified-sender-composer.js +78 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender-lock.js +116 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender-report.js +250 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender-shared.js +106 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender.js +94 -295
- package/dist/server/src/lib/cli-tools/vibe-local.js +111 -0
- package/dist/server/src/lib/db/agent-instances-db.js +53 -0
- package/dist/server/src/lib/db/agent-roles-db.js +409 -0
- package/dist/server/src/lib/db/agent-session-cost-sampler.js +3 -2
- package/dist/server/src/lib/db/chat-db.js +14 -1
- package/dist/server/src/lib/db/db-instance.js +84 -2
- package/dist/server/src/lib/db/migrations/index.js +6 -0
- package/dist/server/src/lib/db/migrations/runner.js +1 -1
- package/dist/server/src/lib/db/migrations/v63-session-relays-delivery-attempt.js +61 -0
- package/dist/server/src/lib/db/migrations/v64-agent-roles.js +123 -0
- package/dist/server/src/lib/db/migrations/v65-agent-instance-creation-keys.js +42 -0
- package/dist/server/src/lib/db/relay-bind-db-base.js +89 -0
- package/dist/server/src/lib/db/relay-bind-db-delivery.js +223 -0
- package/dist/server/src/lib/db/relay-bind-db-pending.js +183 -0
- package/dist/server/src/lib/db/relay-bind-db.js +88 -167
- package/dist/server/src/lib/db/relay-db-base.js +20 -0
- package/dist/server/src/lib/db/relay-db-count.js +49 -0
- package/dist/server/src/lib/db/relay-db-delivery.js +104 -0
- package/dist/server/src/lib/db/relay-db-hold.js +250 -0
- package/dist/server/src/lib/db/relay-db.js +68 -92
- package/dist/server/src/lib/detection/cli-patterns.js +13 -3
- package/dist/server/src/lib/detection/model-info-extractor.js +1 -1
- package/dist/server/src/lib/detection/tools/claude/patterns.js +76 -0
- package/dist/server/src/lib/detection/tools/codex/cli-patterns.js +5 -0
- package/dist/server/src/lib/detection/tools/codex/detect.js +5 -1
- package/dist/server/src/lib/detection/tools/codex/patterns.js +52 -2
- package/dist/server/src/lib/detection/tools/codex/prompt.js +23 -3
- package/dist/server/src/lib/detection/tools/opencode/composer-own-text.js +119 -0
- package/dist/server/src/lib/detection/tools/opencode/detect.js +30 -15
- package/dist/server/src/lib/detection/tools/opencode/patterns.js +268 -7
- package/dist/server/src/lib/detection/tools/opencode/readiness.js +71 -0
- package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +51 -15
- package/dist/server/src/lib/detection/tools/opencode-v2/patterns.js +195 -11
- package/dist/server/src/lib/detection/tools/run-detection.js +5 -2
- package/dist/server/src/lib/detection/tools/verified-against.js +16 -0
- package/dist/server/src/lib/detection/tools/vibe-local/readiness.js +92 -0
- package/dist/server/src/lib/git/git-common-dir.js +192 -0
- package/dist/server/src/lib/hooks/hook-settings-generator.js +8 -2
- package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +31 -1
- package/dist/server/src/lib/hooks/sources/launch-command.js +31 -8
- package/dist/server/src/lib/hooks/sources/opencode/client.js +20 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/client.js +24 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +208 -35
- package/dist/server/src/lib/hooks/sources/opencode-v2/secrets.js +7 -1
- package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +117 -2
- package/dist/server/src/lib/job-executor.js +18 -1
- package/dist/server/src/lib/polling/response-checker-extraction-steps.js +58 -4
- package/dist/server/src/lib/polling/response-checker.js +32 -7
- package/dist/server/src/lib/relay/relay-bound-reply.js +20 -9
- package/dist/server/src/lib/relay/relay-delivery-block.js +150 -0
- package/dist/server/src/lib/relay/relay-delivery.js +416 -79
- package/dist/server/src/lib/relay/relay-messages.js +13 -0
- package/dist/server/src/lib/relay/relay-system-line.js +28 -15
- package/dist/server/src/lib/relay/types.js +14 -2
- package/dist/server/src/lib/response-cleaner.js +13 -3
- package/dist/server/src/lib/response-extractor.js +38 -3
- package/dist/server/src/lib/session/agent-session-lifecycle.js +9 -1
- package/dist/server/src/lib/session/claude-executor.js +13 -1
- package/dist/server/src/lib/session/claude-session.js +113 -14
- package/dist/server/src/lib/session/current-output-builder.js +7 -5
- package/dist/server/src/lib/session/instance-input-lock.js +140 -6
- package/dist/server/src/lib/session/prompt-submit-receipt.js +87 -18
- package/dist/server/src/lib/session/prompt-waiting-guard.js +8 -2
- package/dist/server/src/lib/session/respond-target.js +82 -0
- package/dist/server/src/lib/session/role-launch.js +722 -0
- package/dist/server/src/lib/session/send-attempt-state.js +137 -3
- package/dist/server/src/lib/session/send-user-message.js +84 -7
- package/dist/server/src/lib/session/session-generation-archive.js +7 -8
- package/dist/server/src/lib/session/session-launch-flight.js +33 -1
- package/dist/server/src/lib/session/structured-prompt.js +12 -7
- package/dist/server/src/lib/session/worktree-session-reconcile.js +15 -0
- package/dist/server/src/lib/session-key-sender.js +6 -1
- package/dist/server/src/lib/test-run-detection.js +53 -0
- package/dist/server/src/lib/tmux/read-mode.js +4 -0
- package/dist/server/src/lib/tmux/session-hook-scripts.js +36 -4
- package/dist/server/src/lib/tui-accumulator.js +14 -5
- package/dist/server/src/lib/verification/env-clean-gate.js +117 -12
- package/dist/server/src/lib/verification/gate-runner.js +9 -8
- package/dist/server/src/lib/verification/verify-config.js +32 -2
- package/dist/server/src/types/agent-roles.js +56 -0
- package/dist/types/agent-roles.d.ts +351 -0
- package/dist/types/agent-roles.d.ts.map +1 -0
- package/dist/types/agent-roles.js +56 -0
- package/docs/en/user-guide/webapp-guide.md +16 -0
- package/package.json +2 -1
- package/release-notes/0.49.3.json +52 -0
- package/release-notes/0.50.0.json +113 -0
- package/.next/server/chunks/1062.js +0 -1
- package/.next/server/chunks/110.js +0 -1
- package/.next/server/chunks/2422.js +0 -1
- package/.next/server/chunks/3756.js +0 -1
- package/.next/server/chunks/4936.js +0 -1
- package/.next/server/chunks/5630.js +0 -1
- package/.next/server/chunks/610.js +0 -1
- package/.next/server/chunks/6119.js +0 -1
- package/.next/server/chunks/6808.js +0 -4
- package/.next/server/chunks/7491.js +0 -3
- package/.next/server/chunks/9198.js +0 -144
- package/.next/server/chunks/9360.js +0 -2
- package/.next/server/chunks/9584.js +0 -1
- package/.next/static/chunks/2407-07a237575e1ceb9e.js +0 -1
- package/.next/static/chunks/344-e1cefd00787060e4.js +0 -1
- package/.next/static/chunks/3931-61ad1a4fc0208d0e.js +0 -1
- package/.next/static/chunks/7229.7f0f5a7032b612b4.js +0 -1
- package/.next/static/chunks/8165-263172c17ae8e8c3.js +0 -1
- package/.next/static/chunks/app/api/agents/update/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/agents/versions/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/app/release-notes/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/capabilities/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/relays/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/remote/pair/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/settings/default-agents/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/templates/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/layout-4f64316957b0a8e5.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/repositories/page-71f5a5ac29b0370d.js +0 -1
- package/.next/static/chunks/app/review/page-ff3efb96fdf9bb4b.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-33afc6aa96289fb0.js +0 -1
- package/.next/static/css/c1e307d05daf93b6.css +0 -1
- package/.next/static/yGatWDsS532awSs51kXyd/_buildManifest.js +0 -1
- /package/.next/static/{yGatWDsS532awSs51kXyd → z4d8-5MaLkoD-4EhueZwk}/_ssgManifest.js +0 -0
|
@@ -4,7 +4,12 @@
|
|
|
4
4
|
* (Issue #3217 I-3). `cli-patterns.ts` re-exports every public name.
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.OPENCODE_SKIP_PATTERNS = exports.OPENCODE_SEPARATOR_PATTERN = exports.OPENCODE_SELECTION_LIST_PATTERN = exports.OPENCODE_FOOTER_STATUS_PATTERN = exports.OPENCODE_USER_ECHO_PATTERN = exports.OPENCODE_GUTTER_ROW_PATTERN = exports.OPENCODE_COMPOSER_BOTTOM_BORDER = exports.OPENCODE_PROCESSING_INDICATOR = exports.OPENCODE_PERMISSION_PATTERN = exports.OPENCODE_TURN_COMPLETE_PATTERN = exports.OPENCODE_RESPONSE_COMPLETE = exports.OPENCODE_LOADING_PATTERN = exports.OPENCODE_THINKING_PATTERN = exports.OPENCODE_PROMPT_AFTER_RESPONSE = exports.OPENCODE_IDLE_COMPOSER_PATTERN = exports.OPENCODE_PROMPT_PATTERN = void 0;
|
|
7
|
+
exports.OPENCODE_TRANSCRIPT_SKIP_PATTERNS = exports.OPENCODE_CHROME_ROW_PATTERNS = exports.OPENCODE_SKIP_PATTERNS = exports.OPENCODE_MODEL_ROW_PATTERN = exports.OPENCODE_SEPARATOR_PATTERN = exports.OPENCODE_SELECTION_LIST_PATTERN = exports.OPENCODE_FOOTER_STATUS_PATTERN = exports.OPENCODE_USER_ECHO_PATTERN = exports.OPENCODE_GUTTER_ROW_PATTERN = exports.OPENCODE_COMPOSER_BOTTOM_BORDER = exports.OPENCODE_PROCESSING_INDICATOR = exports.OPENCODE_PERMISSION_PATTERN = exports.OPENCODE_TURN_COMPLETE_PATTERN = exports.OPENCODE_RESPONSE_COMPLETE = exports.OPENCODE_LOADING_PATTERN = exports.OPENCODE_THINKING_PROGRESS_ROW = exports.OPENCODE_THINKING_PATTERN = exports.OPENCODE_PROMPT_AFTER_RESPONSE = exports.OPENCODE_IDLE_COMPOSER_PATTERN = exports.OPENCODE_PROMPT_PATTERN = void 0;
|
|
8
|
+
exports.findOpenCodeIdleComposer = findOpenCodeIdleComposer;
|
|
9
|
+
exports.isOpencodeProcessingFooter = isOpencodeProcessingFooter;
|
|
10
|
+
exports.isOpenCodeThinkingBelowComposer = isOpenCodeThinkingBelowComposer;
|
|
11
|
+
exports.isOpenCodeProgressBelowComposer = isOpenCodeProgressBelowComposer;
|
|
12
|
+
exports.isOpenCodeThinkingInOpenTurn = isOpenCodeThinkingInOpenTurn;
|
|
8
13
|
exports.findOpenCodeChromeStart = findOpenCodeChromeStart;
|
|
9
14
|
exports.findOpenCodeUserEchoEnd = findOpenCodeUserEchoEnd;
|
|
10
15
|
exports.findOpenCodeComposerRows = findOpenCodeComposerRows;
|
|
@@ -47,8 +52,88 @@ exports.OPENCODE_PROMPT_PATTERN = /Ask anything(?:\.\.\.|\u2026)/;
|
|
|
47
52
|
*
|
|
48
53
|
* opencode 1.18.31 以降は見本文を U+2026(`…`)で描く。ASCII の `...` も実行ファイルに
|
|
49
54
|
* 残っているので両方を受け付ける(Issue #2915、2026-09-28 に実行ファイルから確認)。
|
|
55
|
+
*
|
|
56
|
+
* Read by position (Issue #4209): the placeholder row, then only gutter rows (the
|
|
57
|
+
* blank rows and the agent/model row), then the composer's bottom border `╹▀▀▀…` —
|
|
58
|
+
* the box as every V1 frame under `tests/fixtures/opencode*` and
|
|
59
|
+
* `tests/unit/lib/detection/fixtures/opencode-live-*` that draws the placeholder
|
|
60
|
+
* draws it. The gutter alone does not say "composer": the transcript echoes each
|
|
61
|
+
* sent message in the same `┃` box, and at 200 columns the echo's blank gutter row
|
|
62
|
+
* carries the sidebar's session title, so a title holding the phrase put an empty
|
|
63
|
+
* composer on the pane (`opencode-live-2047/w200/{phrase-in-response,
|
|
64
|
+
* numbered-answer,sidebar-title-phrase}.txt`). V2's pattern had the same defect
|
|
65
|
+
* (#4188). The echo block ends in a non-gutter row, never the border.
|
|
66
|
+
*
|
|
67
|
+
* Kept a `RegExp` (a subclass whose `exec` is {@link findOpenCodeIdleComposer})
|
|
68
|
+
* because liveness's `alivePatterns` takes regular expressions; the send path's
|
|
69
|
+
* readiness wait and the status detector call the function directly.
|
|
70
|
+
* **Guaranteed**: `test`, `exec`, and the string methods that go through `exec` on
|
|
71
|
+
* a non-global pattern (`String.prototype.match` / `search` / `replace`). Rows are
|
|
72
|
+
* split on LF only. **Not guaranteed**: `split` and `matchAll` (they construct
|
|
73
|
+
* `Symbol.species`, the native `RegExp`), and a copy built from `source` and
|
|
74
|
+
* `flags` — native `^` under the `m` flag also starts a line after U+2028 / U+2029 /
|
|
75
|
+
* CR, and the copy retries from every gutter row. `source` still spells the rule.
|
|
76
|
+
*/
|
|
77
|
+
exports.OPENCODE_IDLE_COMPOSER_PATTERN = new (class OpencodeIdleComposerPattern extends RegExp {
|
|
78
|
+
static get [Symbol.species]() {
|
|
79
|
+
return RegExp;
|
|
80
|
+
}
|
|
81
|
+
constructor() {
|
|
82
|
+
super('^[^\\S\\n]*[\\u2502\\u2503][^\\S\\n]*Ask anything(?:\\.\\.\\.|\\u2026)[^\\n]*\\n(?:[^\\S\\n]*[\\u2502\\u2503][^\\n]*\\n)*[^\\S\\n]*\\u2579\\u2580{4,}', 'm');
|
|
83
|
+
}
|
|
84
|
+
exec(text) {
|
|
85
|
+
const found = findOpenCodeIdleComposer(text);
|
|
86
|
+
if (!found)
|
|
87
|
+
return null;
|
|
88
|
+
const match = [text.slice(found.start, found.end)];
|
|
89
|
+
match.index = found.start;
|
|
90
|
+
match.input = text;
|
|
91
|
+
return match;
|
|
92
|
+
}
|
|
93
|
+
})();
|
|
94
|
+
/** The placeholder at the start of a gutter row (Issue #1883). */
|
|
95
|
+
const IDLE_COMPOSER_PLACEHOLDER_ROW = /^[^\S\n]*[\u2502\u2503][^\S\n]*Ask anything(?:\.\.\.|\u2026)/;
|
|
96
|
+
/** A row of one of the `┃` boxes. */
|
|
97
|
+
const IDLE_COMPOSER_GUTTER_ROW = /^[^\S\n]*[\u2502\u2503]/;
|
|
98
|
+
/** The composer's bottom border, as the match ends on it. */
|
|
99
|
+
const IDLE_COMPOSER_BORDER_ROW = /^[^\S\n]*\u2579\u2580{4,}/;
|
|
100
|
+
/**
|
|
101
|
+
* The empty composer of {@link OPENCODE_IDLE_COMPOSER_PATTERN}, by position, in one
|
|
102
|
+
* pass (Issue #4209, the shape of V2's `findOpencodeV2IdleComposer` from #4188): the
|
|
103
|
+
* first placeholder row whose gutter run reaches a bottom border `╹▀▀▀…`, as
|
|
104
|
+
* character offsets from the placeholder row's start to the end of the border's
|
|
105
|
+
* `▀` run; or null.
|
|
106
|
+
*
|
|
107
|
+
* Each border walks up its own run of gutter rows once, and the runs do not
|
|
108
|
+
* overlap (a border row is not a gutter row), so the work is linear in the rows.
|
|
109
|
+
* Rows are split on LF only.
|
|
110
|
+
*
|
|
111
|
+
* @param text - ANSI-stripped capture, box drawing intact
|
|
112
|
+
* @returns The match's `[start, end)` in `text`, or null
|
|
50
113
|
*/
|
|
51
|
-
|
|
114
|
+
function findOpenCodeIdleComposer(text) {
|
|
115
|
+
const rows = text.split('\n');
|
|
116
|
+
const offsets = new Array(rows.length);
|
|
117
|
+
let offset = 0;
|
|
118
|
+
for (let i = 0; i < rows.length; i++) {
|
|
119
|
+
offsets[i] = offset;
|
|
120
|
+
offset += rows[i].length + 1;
|
|
121
|
+
}
|
|
122
|
+
for (let border = 1; border < rows.length; border++) {
|
|
123
|
+
const borderMatch = IDLE_COMPOSER_BORDER_ROW.exec(rows[border]);
|
|
124
|
+
if (!borderMatch)
|
|
125
|
+
continue;
|
|
126
|
+
let placeholder = -1;
|
|
127
|
+
for (let j = border - 1; j >= 0 && IDLE_COMPOSER_GUTTER_ROW.test(rows[j]); j--) {
|
|
128
|
+
if (IDLE_COMPOSER_PLACEHOLDER_ROW.test(rows[j]))
|
|
129
|
+
placeholder = j;
|
|
130
|
+
}
|
|
131
|
+
if (placeholder >= 0) {
|
|
132
|
+
return { start: offsets[placeholder], end: offsets[border] + borderMatch[0].length };
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
52
137
|
/**
|
|
53
138
|
* OpenCode prompt pattern after response completion (Issue #379)
|
|
54
139
|
* Shows "tab agents ctrl+p commands" in the TUI status bar after a response finishes.
|
|
@@ -61,6 +146,18 @@ exports.OPENCODE_PROMPT_AFTER_RESPONSE = /tab agents\s+ctrl\+p commands/;
|
|
|
61
146
|
* Used by detectThinking() to determine if the tool is actively processing.
|
|
62
147
|
*/
|
|
63
148
|
exports.OPENCODE_THINKING_PATTERN = /Thinking:/;
|
|
149
|
+
/**
|
|
150
|
+
* OpenCode's progress row drawn under the composer's bottom border while a turn
|
|
151
|
+
* runs, read as a whole row (Issue #4188): a spinner run (braille `⠦`, or the
|
|
152
|
+
* `⬝■` run of the busy footer), then `Thinking:` — e.g. ` ⠦ Thinking: Crafting…`.
|
|
153
|
+
*
|
|
154
|
+
* Only for the rows below the border, where the footer also draws the cwd
|
|
155
|
+
* (`/private/tmp/…/repo`, wrapped over several rows). {@link OPENCODE_THINKING_PATTERN}
|
|
156
|
+
* matches the word anywhere, so a cwd such as `/tmp/Thinking:demo` read there as a
|
|
157
|
+
* running turn. A row opening with the spinner is never a path, nor a path's
|
|
158
|
+
* wrapped continuation (which opens with the path's next character).
|
|
159
|
+
*/
|
|
160
|
+
exports.OPENCODE_THINKING_PROGRESS_ROW = /^[^\S\n]*[\u2800-\u28FF\u2B1D\u25A0]+[^\S\n]+Thinking:/m;
|
|
64
161
|
/**
|
|
65
162
|
* OpenCode loading indicator pattern (Issue #379)
|
|
66
163
|
* Shows a series of 4+ filled square characters (U+2B1D) during initial loading/model warm-up.
|
|
@@ -119,10 +216,15 @@ exports.OPENCODE_RESPONSE_COMPLETE = /\u25A3\s+\w+\s+·\s+\S+(?:\s+·\s+(?:[\d]+
|
|
|
119
216
|
* quantifier -- ReDoS safe), and `.`/`[^·\n]` never cross a line without the
|
|
120
217
|
* `m` flag, so the duration has to be on the marker's own row.
|
|
121
218
|
*
|
|
122
|
-
* Durations
|
|
123
|
-
*
|
|
219
|
+
* Durations, as opencode formats them (Issue #4134, its `duration` function in
|
|
220
|
+
* the 1.18.35 executable): `836ms` under a second, `5.2s` under a minute, `1m 5s`
|
|
221
|
+
* under an hour, `1h 5m` under a day, `2d 3h` beyond. Reading only the second and
|
|
222
|
+
* third forms left a turn under a second, or over an hour, with no positive
|
|
223
|
+
* evidence: `running` / `unknown_frame` for good, so `wait` ended in exit 124
|
|
224
|
+
* (`tests/fixtures/opencode-live-4134/turn-done-subsecond.txt`). `\b` keeps a
|
|
225
|
+
* following word from passing for a unit.
|
|
124
226
|
*/
|
|
125
|
-
exports.OPENCODE_TURN_COMPLETE_PATTERN = /\u25A3\s+\w+\s+·\s+[^·\n]+·\s+(?:\d+h\s*)?(?:\d+m\s*)?[\d.]+s/;
|
|
227
|
+
exports.OPENCODE_TURN_COMPLETE_PATTERN = /\u25A3\s+\w+\s+·\s+[^·\n]+·\s+(?:\d+ms|(?:\d+h\s*)?(?:\d+m\s*)?[\d.]+s|\d+h\s+\d+m|\d+d\s+\d+h)\b/;
|
|
126
228
|
/**
|
|
127
229
|
* OpenCode's permission dialog, anchored on its button row (Issue #1893).
|
|
128
230
|
*
|
|
@@ -204,8 +306,122 @@ exports.OPENCODE_PERMISSION_PATTERN = /^[^\S\n]*[\u2502\u2503][^\S\n]*Allow once
|
|
|
204
306
|
* Filtered from response extraction via OPENCODE_SKIP_PATTERNS, which shares
|
|
205
307
|
* this constant: the widened row is dropped from a saved answer for the same
|
|
206
308
|
* reason the narrow one was.
|
|
309
|
+
*
|
|
310
|
+
* Issue #4175: matched as a whole row, not as words anywhere. The hint opens its row
|
|
311
|
+
* (after the spinner run `⬝■` when there is one) and the row ends there or goes on
|
|
312
|
+
* after two spaces with the footer's columns — the shape of every measured row
|
|
313
|
+
* (`opencode-live-1894/`, `opencode-live-2047/w80|w120|w200/`, the canary capture).
|
|
314
|
+
* A sentence of a reply with the words in it (`The footer reads esc interrupt while…`)
|
|
315
|
+
* read as a running turn before, in the status reader, in `isOpenCodeComplete` and
|
|
316
|
+
* in this list. A row that is the hint and nothing else still matches: tests outside
|
|
317
|
+
* this Issue pin `'esc interrupt'` and the label alone as matches, and the status
|
|
318
|
+
* reader adds the position on top ({@link isOpencodeProcessingFooter}).
|
|
319
|
+
*
|
|
320
|
+
* Issue #4188: the completion check (`isOpenCodeComplete`) reads it by position
|
|
321
|
+
* too, and the poller's extraction of a frame whose chrome it located skips it no
|
|
322
|
+
* more ({@link OPENCODE_TRANSCRIPT_SKIP_PATTERNS}): a reply quoting the hint row
|
|
323
|
+
* whole above the composer completes, and keeps the row.
|
|
324
|
+
*/
|
|
325
|
+
exports.OPENCODE_PROCESSING_INDICATOR = /(?:^|\n)[^\S\n]*(?:[\u2B1D\u25A0]+[^\S\n]+)?esc (?:again to )?interrupt(?:[^\S\n]{2}[^\n]*)?[^\S\n]*(?=\n|$)/;
|
|
326
|
+
/**
|
|
327
|
+
* Whether the busy footer is on the frame, by position (Issue #4175): an
|
|
328
|
+
* {@link OPENCODE_PROCESSING_INDICATOR} row BELOW the composer's bottom border when
|
|
329
|
+
* the text holds one — every measured running frame draws the hint on the row right
|
|
330
|
+
* under it — and anywhere in the text when it holds none (a window cut above the
|
|
331
|
+
* border; the rule as it was). A reply quoting the hint row whole sits above the
|
|
332
|
+
* border and is not read.
|
|
333
|
+
*
|
|
334
|
+
* @param text - ANSI-stripped rows, box drawing intact (the status reader's `lastLines`)
|
|
335
|
+
*/
|
|
336
|
+
function isOpencodeProcessingFooter(text) {
|
|
337
|
+
const rows = text.split('\n');
|
|
338
|
+
let border = -1;
|
|
339
|
+
for (let i = rows.length - 1; i >= 0; i--) {
|
|
340
|
+
if (exports.OPENCODE_COMPOSER_BOTTOM_BORDER.test(rows[i])) {
|
|
341
|
+
border = i;
|
|
342
|
+
break;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
return exports.OPENCODE_PROCESSING_INDICATOR.test(rows.slice(border + 1).join('\n'));
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* The rows under the composer's bottom border `╹▀▀▀…`, joined, or null when no
|
|
349
|
+
* border is at or below `from` (Issue #4209).
|
|
350
|
+
*/
|
|
351
|
+
function rowsBelowComposerBorder(lines, from) {
|
|
352
|
+
for (let i = lines.length - 1; i >= Math.max(0, from); i--) {
|
|
353
|
+
if (exports.OPENCODE_COMPOSER_BOTTOM_BORDER.test(lines[i]))
|
|
354
|
+
return lines.slice(i + 1).join('\n');
|
|
355
|
+
}
|
|
356
|
+
return null;
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Whether the spinner's `Thinking:` row ({@link OPENCODE_THINKING_PROGRESS_ROW}) is
|
|
360
|
+
* drawn under the composer's bottom border (Issue #4209). The thinking half of
|
|
361
|
+
* {@link isOpenCodeProgressBelowComposer}; the status detector reads the busy hint
|
|
362
|
+
* half in its own branch ({@link isOpencodeProcessingFooter}), which keeps its own
|
|
363
|
+
* reason code. `false` when there is no border.
|
|
364
|
+
*
|
|
365
|
+
* @param lines - ANSI-stripped rows, box drawing intact
|
|
366
|
+
* @param from - The first row the border may be on (default 0)
|
|
367
|
+
*/
|
|
368
|
+
function isOpenCodeThinkingBelowComposer(lines, from = 0) {
|
|
369
|
+
const below = rowsBelowComposerBorder(lines, from);
|
|
370
|
+
return below !== null && exports.OPENCODE_THINKING_PROGRESS_ROW.test(below);
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Whether an opencode frame shows a turn still running under the composer's
|
|
374
|
+
* bottom border `╹▀▀▀…` (Issue #4188, shared by Issue #4209): a progress row there,
|
|
375
|
+
* read whole — the spinner's `Thinking:` row ({@link OPENCODE_THINKING_PROGRESS_ROW})
|
|
376
|
+
* or the busy hint ({@link OPENCODE_PROCESSING_INDICATOR}). The footer's cwd also
|
|
377
|
+
* sits there, so the bare word is not read: a cwd of `/tmp/Thinking:demo` is not a
|
|
378
|
+
* running turn. `false` when the frame has no border (the permission dialog drawn
|
|
379
|
+
* in the composer's place runs to the last row).
|
|
380
|
+
*
|
|
381
|
+
* The rule the poller's save (`extractCompletedResponse`) reads. Lives here, beside
|
|
382
|
+
* the patterns it combines, so the status detector (`./detect.ts` and the thinking
|
|
383
|
+
* step of `../run-detection.ts`) reads the same rule rather than a copy: before
|
|
384
|
+
* #4209 the save read this while the status read the word in the last five rows,
|
|
385
|
+
* so a finished reply was saved while the session showed `running`.
|
|
386
|
+
*
|
|
387
|
+
* @param lines - ANSI-stripped rows, box drawing intact
|
|
388
|
+
* @param from - The first row the border may be on (the chrome's start; default 0)
|
|
389
|
+
*/
|
|
390
|
+
function isOpenCodeProgressBelowComposer(lines, from = 0) {
|
|
391
|
+
const below = rowsBelowComposerBorder(lines, from);
|
|
392
|
+
return below !== null && (exports.OPENCODE_THINKING_PROGRESS_ROW.test(below) || exports.OPENCODE_PROCESSING_INDICATOR.test(below));
|
|
393
|
+
}
|
|
394
|
+
/** A `Thinking:` row read whole: the word opens the row, after the spinner when there is one. */
|
|
395
|
+
const OPENCODE_THINKING_ROW = /^[^\S\n]*(?:[\u2800-\u28FF\u2B1D\u25A0]+[^\S\n]+)?Thinking:/;
|
|
396
|
+
/**
|
|
397
|
+
* Whether the current turn, still open, ends on a `Thinking:` row (Issue #4209): one
|
|
398
|
+
* of the last `tailRows` non-blank rows of the turn region (below the newest echoed
|
|
399
|
+
* prompt, above the chrome — {@link findOpenCodeUserEchoEnd},
|
|
400
|
+
* {@link findOpenCodeChromeStart}) opens with the word, and the region holds no
|
|
401
|
+
* finished-turn marker ({@link OPENCODE_TURN_COMPLETE_PATTERN}).
|
|
402
|
+
*
|
|
403
|
+
* The status detector's reading of the progress row opencode draws in the
|
|
404
|
+
* transcript (`opencode-live-1894/esc-again-after-marker.txt`: `⠦ Thinking:
|
|
405
|
+
* Preparing an essay` under the echo). Never true on a frame the poller saves:
|
|
406
|
+
* that needs the marker in the same region (`isOpenCodeComplete`), so there the
|
|
407
|
+
* status reads only {@link isOpenCodeProgressBelowComposer}, as the save does. A
|
|
408
|
+
* reply quoting the word in a finished turn, or the footer's cwd, is not read.
|
|
409
|
+
*
|
|
410
|
+
* @param lines - ANSI-stripped rows, box drawing intact
|
|
411
|
+
* @param tailRows - How many non-blank rows from the region's end to read
|
|
207
412
|
*/
|
|
208
|
-
|
|
413
|
+
function isOpenCodeThinkingInOpenTurn(lines, tailRows) {
|
|
414
|
+
const rows = [...lines];
|
|
415
|
+
const chromeStart = findOpenCodeChromeStart(rows);
|
|
416
|
+
const echoEnd = findOpenCodeUserEchoEnd(rows, chromeStart);
|
|
417
|
+
const region = rows.slice(echoEnd + 1, chromeStart >= 0 ? chromeStart : rows.length);
|
|
418
|
+
if (region.some((row) => exports.OPENCODE_TURN_COMPLETE_PATTERN.test(row)))
|
|
419
|
+
return false;
|
|
420
|
+
return region
|
|
421
|
+
.filter((row) => row.trim() !== '')
|
|
422
|
+
.slice(-tailRows)
|
|
423
|
+
.some((row) => OPENCODE_THINKING_ROW.test(row));
|
|
424
|
+
}
|
|
209
425
|
/**
|
|
210
426
|
* OpenCode's composer bottom border: ` ╹▀▀▀▀▀▀…` (Issue #1911).
|
|
211
427
|
*
|
|
@@ -489,6 +705,17 @@ exports.OPENCODE_SELECTION_LIST_PATTERN = /^[^\S\n]*(?:Select[^\S\n]+(?:model|pr
|
|
|
489
705
|
* Covers: vertical lines (U+2503), box corners, horizontal lines, and other TUI elements.
|
|
490
706
|
*/
|
|
491
707
|
exports.OPENCODE_SEPARATOR_PATTERN = /^[\u2503\u2579\u25A3\u2580\u2500\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C]+$/;
|
|
708
|
+
/**
|
|
709
|
+
* The composer's agent/model row once its gutter is stripped
|
|
710
|
+
* (`Build · GPT-5.6 Luna GitHub Copilot`; Issue #379, named by Issue #4209).
|
|
711
|
+
*
|
|
712
|
+
* Matched as a word at the row's start, so a reply's row opening with "Build "
|
|
713
|
+
* matches too: read only where the rows carry no position
|
|
714
|
+
* ({@link OPENCODE_CHROME_ROW_PATTERNS}). On every measured V1 frame no row of the
|
|
715
|
+
* turn region above the chrome opens with it (the turn's own marker opens with
|
|
716
|
+
* `▣`).
|
|
717
|
+
*/
|
|
718
|
+
exports.OPENCODE_MODEL_ROW_PATTERN = /^Build\s+/;
|
|
492
719
|
/**
|
|
493
720
|
* OpenCode skip patterns for response cleaning (Issue #379)
|
|
494
721
|
* Lines matching any of these patterns are filtered from extracted responses.
|
|
@@ -499,10 +726,44 @@ exports.OPENCODE_SEPARATOR_PATTERN = /^[\u2503\u2579\u25A3\u2580\u2500\u250C\u25
|
|
|
499
726
|
exports.OPENCODE_SKIP_PATTERNS = [
|
|
500
727
|
exports.OPENCODE_SEPARATOR_PATTERN,
|
|
501
728
|
exports.OPENCODE_LOADING_PATTERN,
|
|
502
|
-
|
|
729
|
+
exports.OPENCODE_MODEL_ROW_PATTERN,
|
|
503
730
|
exports.OPENCODE_PROMPT_AFTER_RESPONSE,
|
|
504
731
|
exports.OPENCODE_PROCESSING_INDICATOR,
|
|
505
732
|
exports.OPENCODE_PROMPT_PATTERN,
|
|
506
733
|
exports.OPENCODE_FOOTER_STATUS_PATTERN,
|
|
507
734
|
pasted_text_1.PASTED_TEXT_PATTERN,
|
|
508
735
|
];
|
|
736
|
+
/**
|
|
737
|
+
* Rows only opencode's bottom chrome draws (Issue #4188): the spinner run, the
|
|
738
|
+
* first-idle footer (`tab agents ctrl+p commands`), the busy hint
|
|
739
|
+
* (`esc interrupt`) and the placeholder (`Ask anything...`). Issue #4209 added the
|
|
740
|
+
* composer's agent/model row ({@link OPENCODE_MODEL_ROW_PATTERN}) and the footer's
|
|
741
|
+
* status cell ({@link OPENCODE_FOOTER_STATUS_PATTERN}): a reply's row opening with
|
|
742
|
+
* "Build " or quoting `8.5K (1%) · $` was dropped from the save.
|
|
743
|
+
*
|
|
744
|
+
* Matched as words, so one row cannot tell them from a reply quoting them. On
|
|
745
|
+
* every measured frame under `tests/fixtures/opencode*` and
|
|
746
|
+
* `tests/unit/lib/detection/fixtures/opencode-live-*` a row these match sits in
|
|
747
|
+
* the chrome {@link findOpenCodeChromeStart} locates — or is a reply's row above
|
|
748
|
+
* it (`phrase-in-response.txt`: `Ask anything... is the placeholder`). So a reader
|
|
749
|
+
* that already holds only the rows above the chrome must not skip them.
|
|
750
|
+
*/
|
|
751
|
+
exports.OPENCODE_CHROME_ROW_PATTERNS = [
|
|
752
|
+
exports.OPENCODE_LOADING_PATTERN,
|
|
753
|
+
exports.OPENCODE_PROMPT_AFTER_RESPONSE,
|
|
754
|
+
exports.OPENCODE_PROCESSING_INDICATOR,
|
|
755
|
+
exports.OPENCODE_PROMPT_PATTERN,
|
|
756
|
+
exports.OPENCODE_MODEL_ROW_PATTERN,
|
|
757
|
+
exports.OPENCODE_FOOTER_STATUS_PATTERN,
|
|
758
|
+
];
|
|
759
|
+
/**
|
|
760
|
+
* {@link OPENCODE_SKIP_PATTERNS} less {@link OPENCODE_CHROME_ROW_PATTERNS}, for rows
|
|
761
|
+
* known to lie above the located chrome (Issue #4188): the turn region of a frame
|
|
762
|
+
* whose chrome `response-checker` found, the reply it extracted from it, and the
|
|
763
|
+
* Layer-2 accumulator's rows cut from such a frame (`sliceOpenCodeTurnWithSkip`).
|
|
764
|
+
* The whole list stays for a frame with no chrome boundary, where the words are
|
|
765
|
+
* the only reading left (the fallback {@link isOpencodeProcessingFooter} takes on a
|
|
766
|
+
* text with no border), and for the per-row readers that are handed no position
|
|
767
|
+
* (the default of `cleanOpenCodeResponse` / `extractTuiContentLines`).
|
|
768
|
+
*/
|
|
769
|
+
exports.OPENCODE_TRANSCRIPT_SKIP_PATTERNS = exports.OPENCODE_SKIP_PATTERNS.filter((pattern) => !exports.OPENCODE_CHROME_ROW_PATTERNS.includes(pattern));
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Whether an opencode (v1) pane is ready to take a typed message body
|
|
4
|
+
* (Issue #4040).
|
|
5
|
+
*
|
|
6
|
+
* The launch wait (`OpenCodeTool.waitForReady`) is not this test: it accepts
|
|
7
|
+
* the `Connect a provider` overlay so a launch does not burn its window there,
|
|
8
|
+
* and `OPENCODE_IDLE_COMPOSER_PATTERN` only anchors the placeholder's row in the
|
|
9
|
+
* box over its bottom border (#4209) —
|
|
10
|
+
* it does not say the rest of the input box is empty, and opencode stops
|
|
11
|
+
* painting the placeholder once a session has answered a turn (every
|
|
12
|
+
* post-turn frame in `tests/fixtures/opencode-live-2047/w80/` has an input box
|
|
13
|
+
* of blank gutter rows and no `Ask anything`).
|
|
14
|
+
*
|
|
15
|
+
* Ready means, on the WHOLE frame (the box is centred under the banner until
|
|
16
|
+
* the first turn, ~100 rows above the bottom):
|
|
17
|
+
*
|
|
18
|
+
* - no dialog or overlay — the detector's `waiting` (permission strip, picker,
|
|
19
|
+
* palette, `Connect a provider`) and the picker header itself;
|
|
20
|
+
* - the input box is on screen (`findOpenCodeComposerRows`: its bottom border
|
|
21
|
+
* and gutter);
|
|
22
|
+
* - every buffer row of it is empty: blank, or the placeholder (optionally with
|
|
23
|
+
* its quoted suggestion) and nothing else. A row holding any other text —
|
|
24
|
+
* a previous body, a typed character — is not ready.
|
|
25
|
+
*
|
|
26
|
+
* A turn being generated keeps the empty box on screen (`turn-running.txt`),
|
|
27
|
+
* so it is ready by the same rule; no generation exception is needed.
|
|
28
|
+
*
|
|
29
|
+
* Text right of the box is not read as the row's own: the sidebar
|
|
30
|
+
* (#2047/#2095) shares rows with the input box, beyond the right end of the
|
|
31
|
+
* box's bottom border (`╹▀…▀`, measured in `opencode-live-2047/w200/`: border
|
|
32
|
+
* to column 156, sidebar from 160). Text inside the box is the buffer however
|
|
33
|
+
* far it is indented (`┃ old` is not empty), as `submit-composer-read`'s
|
|
34
|
+
* `opencode-box` reader reads it — both through `composer-own-text` (#4067).
|
|
35
|
+
*
|
|
36
|
+
* @module lib/detection/tools/opencode/readiness
|
|
37
|
+
*/
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.readOpenCodeNotReadyScreen = readOpenCodeNotReadyScreen;
|
|
40
|
+
exports.isOpenCodeComposerReady = isOpenCodeComposerReady;
|
|
41
|
+
const ansi_1 = require("../../ansi");
|
|
42
|
+
const status_detector_1 = require("../../status-detector");
|
|
43
|
+
const patterns_1 = require("./patterns");
|
|
44
|
+
const composer_own_text_1 = require("./composer-own-text");
|
|
45
|
+
/** The placeholder opencode paints in an empty buffer, with its quoted suggestion. */
|
|
46
|
+
const PLACEHOLDER = /^Ask anything(?:\.\.\.|…)(?:[^\S\n]+"[^"\n]*")?$/;
|
|
47
|
+
/**
|
|
48
|
+
* @param output - Raw `capture-pane` output of the whole pane (ANSI allowed)
|
|
49
|
+
* @returns What keeps the pane from being ready; null when it is ready
|
|
50
|
+
*/
|
|
51
|
+
function readOpenCodeNotReadyScreen(output) {
|
|
52
|
+
const text = (0, ansi_1.stripAnsi)(output);
|
|
53
|
+
if (patterns_1.OPENCODE_SELECTION_LIST_PATTERN.test(text))
|
|
54
|
+
return 'dialog';
|
|
55
|
+
const status = (0, status_detector_1.detectSessionStatus)(output, 'opencode');
|
|
56
|
+
if (status.hasActivePrompt || status.status === 'waiting')
|
|
57
|
+
return 'dialog';
|
|
58
|
+
// Each row's own text, cut at the box's right edge (Issue #4067: the same
|
|
59
|
+
// cut the submit read-back uses — `composer-own-text`).
|
|
60
|
+
const rows = (0, composer_own_text_1.readOpenCodeComposerOwnRows)(text.split('\n'));
|
|
61
|
+
if (rows === null || rows.length === 0)
|
|
62
|
+
return 'no-input-box';
|
|
63
|
+
return rows.every((own) => own === '' || PLACEHOLDER.test(own)) ? null : 'input-box-holds-text';
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* @param output - Raw `capture-pane` output of the whole pane (ANSI allowed)
|
|
67
|
+
* @returns true when the input box is on screen, empty, and nothing covers it
|
|
68
|
+
*/
|
|
69
|
+
function isOpenCodeComposerReady(output) {
|
|
70
|
+
return readOpenCodeNotReadyScreen(output) === null;
|
|
71
|
+
}
|
|
@@ -15,8 +15,9 @@
|
|
|
15
15
|
* pickers, Commands, Sessions, Select agent) anywhere on the pane
|
|
16
16
|
* → `waiting` (Issue #2971);
|
|
17
17
|
* - the footer's `esc interrupt` hint → `running`;
|
|
18
|
-
* - the completion row (`Build · <model> · 3.5s · 11.2 tok/s
|
|
19
|
-
* transcript row → `ready` (Issue #2965
|
|
18
|
+
* - the completion row (`Build · <model> · 3.5s · 11.2 tok/s`, or the same row
|
|
19
|
+
* ending in `· interrupted`) as the last transcript row → `ready` (Issue #2965,
|
|
20
|
+
* #4161);
|
|
20
21
|
* - the gutter-anchored empty composer (`┃ Ask anything…`) → `ready`;
|
|
21
22
|
* - otherwise the footer without that hint (`… 8.6K (1%) ctrl+p commands`,
|
|
22
23
|
* the frame after a turn, whose composer is a bare gutter) → `ready`.
|
|
@@ -45,8 +46,10 @@
|
|
|
45
46
|
*/
|
|
46
47
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
48
|
exports.opencodeV2StatusDetector = exports.OPENCODE_V2_PERMISSION_OPTIONS = exports.OPENCODE_V2_TURN_COMPLETE_PATTERN = exports.OPENCODE_V2_QUESTION_PATTERN = exports.OPENCODE_V2_PERMISSION_PATTERN = exports.VERIFIED_AGAINST = void 0;
|
|
49
|
+
exports.findOpencodeV2LastTranscriptRow = findOpencodeV2LastTranscriptRow;
|
|
48
50
|
exports.endsWithTurnComplete = endsWithTurnComplete;
|
|
49
51
|
const cli_patterns_1 = require("../../cli-patterns");
|
|
52
|
+
const patterns_1 = require("./patterns");
|
|
50
53
|
const verdicts_1 = require("../verdicts");
|
|
51
54
|
const status_reason_1 = require("../../status-reason");
|
|
52
55
|
const live_region_1 = require("./live-region");
|
|
@@ -73,8 +76,22 @@ exports.OPENCODE_V2_QUESTION_PATTERN = /^[^\S\n]*[│┃][^\S\n]*↑↓ select[^
|
|
|
73
76
|
* (`┃ Build · <model> OpenCode Zen`) does and has no duration, so neither it
|
|
74
77
|
* nor v1's `▣` row matches. A duration is required — the row without one is not
|
|
75
78
|
* a completion (the lesson v1's #1893 learned).
|
|
79
|
+
*
|
|
80
|
+
* Durations, as V1's `OPENCODE_TURN_COMPLETE_PATTERN` reads them (Issue #4146):
|
|
81
|
+
* `836ms`, `5.2s`, `1m 5s`, `1h 5m`, `2d 3h`. Read off the 2.0.18 executable, whose
|
|
82
|
+
* `FR` draws this row's duration, the same five forms as V1's formatter. 未測定:
|
|
83
|
+
* no captured frame has a turn of an hour or more, so those two forms come from
|
|
84
|
+
* that function and not from a screen.
|
|
85
|
+
*
|
|
86
|
+
* An interrupted turn closes on the same row with ` · interrupted` last (Issue #4161):
|
|
87
|
+
* `Build · <model> · 4.5s · interrupted` after a second Esc on 2.0.18, and
|
|
88
|
+
* `· 41.6s · 13.4 tok/s · interrupted` after a declined tool call
|
|
89
|
+
* (`tests/fixtures/opencode-v2-dialogs-2984/question-under-quoted-dialog.txt`). The
|
|
90
|
+
* turn is over, as the event stream says (`session.execution.interrupted` is a
|
|
91
|
+
* `stop`), and the footer has lost its hint. Only the last transcript row is read
|
|
92
|
+
* ({@link endsWithTurnComplete}), so a later turn or a question below it is not this.
|
|
76
93
|
*/
|
|
77
|
-
exports.OPENCODE_V2_TURN_COMPLETE_PATTERN = /^[^\S\n│┃]*[A-Za-z][\w-]*(?: [\w-]+)* · [^\n]+? ·
|
|
94
|
+
exports.OPENCODE_V2_TURN_COMPLETE_PATTERN = /^[^\S\n│┃]*[A-Za-z][\w-]*(?: [\w-]+)* · [^\n]+? · (?:\d+(?:\.\d+)?(?:ms|s|m(?: \d+s)?)|\d+h \d+m|\d+d \d+h)(?: · [\d.]+ tok\/s)?(?: · interrupted)?[^\S\n]*$/;
|
|
78
95
|
/** The approval strip's buttons, in the order it draws them (2.0.18). */
|
|
79
96
|
exports.OPENCODE_V2_PERMISSION_OPTIONS = ['Allow once', 'Always allow', 'Reject'];
|
|
80
97
|
/** A row of the composer's gutter (`┃ …`). The question form is drawn entirely on it. */
|
|
@@ -115,30 +132,46 @@ function readQuestionDialog(frame) {
|
|
|
115
132
|
return null;
|
|
116
133
|
return { kind: 'question', options, answerMode: 'numbered', submitMode: 'answer_only' };
|
|
117
134
|
}
|
|
118
|
-
/**
|
|
119
|
-
|
|
135
|
+
/**
|
|
136
|
+
* Rows below the transcript that are chrome: gutter padding, the model bar, the rule,
|
|
137
|
+
* the footer, the version.
|
|
138
|
+
*
|
|
139
|
+
* Issue #4175: the footer by its position (the row under the composer's border,
|
|
140
|
+
* {@link isOpencodeV2FooterRowAt}), not by `ctrl+p commands` anywhere in the row — a
|
|
141
|
+
* reply's last row saying those words was stepped over as chrome, and the row above
|
|
142
|
+
* it read as the last transcript row.
|
|
143
|
+
*/
|
|
144
|
+
function isChromeRow(lines, index) {
|
|
145
|
+
const line = lines[index];
|
|
120
146
|
if (/^[\s│┃╹▀]*$/.test(line))
|
|
121
147
|
return true;
|
|
122
148
|
// The composer's model bar: gutter, then `<Agent> · <model> <provider>` with no second `·`.
|
|
123
149
|
if (/^[^\S\n]*[│┃][^\S\n]*[A-Za-z][\w-]* · [^·\n]+$/.test(line))
|
|
124
150
|
return true;
|
|
125
|
-
if (
|
|
151
|
+
if ((0, patterns_1.isOpencodeV2FooterRowAt)(lines, index))
|
|
126
152
|
return true;
|
|
127
153
|
return /^\s*\d+\.\d+\.\d+\s*$/.test(line);
|
|
128
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* The index of the last transcript row — the first row above the composer's
|
|
157
|
+
* chrome — or -1. `lines` are ANSI-stripped, box drawing intact.
|
|
158
|
+
*/
|
|
159
|
+
function findOpencodeV2LastTranscriptRow(lines) {
|
|
160
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
161
|
+
if (isChromeRow(lines, i))
|
|
162
|
+
continue;
|
|
163
|
+
return i;
|
|
164
|
+
}
|
|
165
|
+
return -1;
|
|
166
|
+
}
|
|
129
167
|
/**
|
|
130
168
|
* Whether the last transcript row — the first row above the composer's chrome —
|
|
131
169
|
* is the completion row. Only the LAST row counts: the completion row of an
|
|
132
170
|
* earlier turn stays on the pane behind the next turn and behind a dialog.
|
|
133
171
|
*/
|
|
134
172
|
function endsWithTurnComplete(frame) {
|
|
135
|
-
const
|
|
136
|
-
|
|
137
|
-
if (isChromeRow(lines[i]))
|
|
138
|
-
continue;
|
|
139
|
-
return exports.OPENCODE_V2_TURN_COMPLETE_PATTERN.test(lines[i]);
|
|
140
|
-
}
|
|
141
|
-
return false;
|
|
173
|
+
const last = findOpencodeV2LastTranscriptRow(frame.contentLines);
|
|
174
|
+
return last >= 0 && exports.OPENCODE_V2_TURN_COMPLETE_PATTERN.test(frame.contentLines[last]);
|
|
142
175
|
}
|
|
143
176
|
exports.opencodeV2StatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
144
177
|
tool: 'opencode-v2',
|
|
@@ -190,8 +223,11 @@ exports.opencodeV2StatusDetector = (0, run_detection_1.createToolStatusDetector)
|
|
|
190
223
|
}
|
|
191
224
|
// The placeholder against the ANSI-stripped frame with its box drawing
|
|
192
225
|
// intact (the pattern anchors on the `┃` gutter). The footer is on every
|
|
193
|
-
// frame, and the running hint was ruled out just above.
|
|
194
|
-
|
|
226
|
+
// frame, and the running hint was ruled out just above. Issue #4175: the
|
|
227
|
+
// footer under the composer's border, not its words in a reply. Issue #4188:
|
|
228
|
+
// the placeholder inside the box over that border, not a transcript echo,
|
|
229
|
+
// read in one pass over the rows (`OPENCODE_V2_IDLE_COMPOSER_PATTERN`'s reader).
|
|
230
|
+
if ((0, patterns_1.findOpencodeV2IdleComposer)((0, cli_patterns_1.stripAnsi)(frame.raw)) !== null ||
|
|
195
231
|
cli_patterns_1.OPENCODE_V2_FOOTER_PATTERN.test(frame.lastLines)) {
|
|
196
232
|
return (0, verdicts_1.positiveVerdict)('ready', status_reason_1.STATUS_REASON.INPUT_PROMPT);
|
|
197
233
|
}
|