commandmate 0.49.3 → 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 +454 -408
- package/.next/app-path-routes-manifest.json +19 -13
- 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 +32 -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 +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/resolve/route.js +1 -1
- package/.next/server/app/api/relays/[relayId]/resolve/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/resolve/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/route.js +1 -1
- package/.next/server/app/api/relays/[relayId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/route.js +1 -1
- package/.next/server/app/api/relays/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/remote/pair/route.js +2 -2
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/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 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +3 -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 +11 -11
- 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 +19 -13
- 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 +2 -2
- 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/5350.js +6 -2
- 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/{9702.js → 7083.js} +1 -1
- 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 +97 -10
- package/.next/server/chunks/8918.js +3 -105
- package/.next/server/chunks/8955.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 +5 -5
- 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/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 +7 -1
- package/.next/types/validator.ts +54 -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/relays.d.ts +5 -0
- package/dist/cli/commands/relays.d.ts.map +1 -1
- package/dist/cli/commands/relays.js +37 -1
- 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/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 +54 -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-errors.d.ts +23 -1
- package/dist/cli/utils/api-client-errors.d.ts.map +1 -1
- package/dist/cli/utils/api-client-errors.js +14 -2
- package/dist/cli/utils/api-client.d.ts +8 -0
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +13 -1
- 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/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 +25 -6
- package/dist/server/locales/ja/worktree.json +25 -6
- 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 +7 -1
- package/dist/server/src/lib/cli-tools/codex.js +134 -21
- package/dist/server/src/lib/cli-tools/command-code.js +24 -1
- package/dist/server/src/lib/cli-tools/copilot.js +36 -7
- 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 +58 -7
- package/dist/server/src/lib/cli-tools/submit-composer-read.js +24 -4
- package/dist/server/src/lib/cli-tools/vibe-local.js +25 -1
- 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/db-instance.js +7 -37
- package/dist/server/src/lib/db/migrations/index.js +4 -0
- package/dist/server/src/lib/db/migrations/runner.js +1 -1
- 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-db.js +35 -0
- 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/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 +16 -7
- 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 +22 -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-delivery-block.js +150 -0
- package/dist/server/src/lib/relay/relay-delivery.js +59 -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 +109 -13
- package/dist/server/src/lib/session/instance-input-lock.js +93 -4
- package/dist/server/src/lib/session/role-launch.js +722 -0
- package/dist/server/src/lib/session/send-attempt-state.js +7 -0
- package/dist/server/src/lib/session/send-user-message.js +6 -0
- 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/worktree-session-reconcile.js +5 -0
- 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.50.0.json +113 -0
- package/.next/server/chunks/1308.js +0 -1
- package/.next/server/chunks/4490.js +0 -1
- package/.next/server/chunks/4936.js +0 -1
- package/.next/server/chunks/610.js +0 -1
- package/.next/server/chunks/6119.js +0 -1
- package/.next/server/chunks/7491.js +0 -3
- package/.next/server/chunks/7926.js +0 -1
- package/.next/server/chunks/9360.js +0 -2
- package/.next/server/chunks/9584.js +0 -1
- package/.next/static/LNfVZiq6FZwKsV7L9Mi6M/_buildManifest.js +0 -1
- package/.next/static/chunks/2407-87ec01332344ec2b.js +0 -1
- package/.next/static/chunks/344-e1cefd00787060e4.js +0 -1
- package/.next/static/chunks/3931-3ef48b8d97357282.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-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/agents/versions/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/app/release-notes/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/capabilities/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/resolve/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/relays/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/remote/pair/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/settings/default-agents/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/skills/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/templates/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/layout-b9d8aef70e4f17b2.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-96fc12d400b49b13.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-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-f6a151304860b549.js +0 -1
- package/.next/static/css/c1e307d05daf93b6.css +0 -1
- /package/.next/static/{LNfVZiq6FZwKsV7L9Mi6M → z4d8-5MaLkoD-4EhueZwk}/_ssgManifest.js +0 -0
|
@@ -10,6 +10,7 @@ exports.isTurnComplete = isTurnComplete;
|
|
|
10
10
|
exports.extractCompletedResponse = extractCompletedResponse;
|
|
11
11
|
exports.extractPartialResponse = extractPartialResponse;
|
|
12
12
|
const cli_patterns_1 = require("../../lib/detection/cli-patterns");
|
|
13
|
+
const patterns_1 = require("../../lib/detection/tools/opencode-v2/patterns");
|
|
13
14
|
const logger_1 = require("../../lib/logger");
|
|
14
15
|
const thinking_constants_1 = require("../../config/thinking-constants");
|
|
15
16
|
const logger = (0, logger_1.createLogger)('response-poller');
|
|
@@ -59,6 +60,20 @@ function findChromeStart(cliToolId, lines, openCodeCleanLines) {
|
|
|
59
60
|
// that one row. `findCodexChromeStart` reads the composer by its SGR
|
|
60
61
|
// attributes (#2310) rather than by its placeholder wording, which is what the
|
|
61
62
|
// previous guard did and why it stopped working at codex 0.15x.
|
|
63
|
+
//
|
|
64
|
+
// Issue #4175: opencode-v2 is the sixth. It draws V1's box — `┃` gutter rows
|
|
65
|
+
// over a `╹▀▀▀` border, the footer under it — and had no boundary: the
|
|
66
|
+
// composer's rows went into every reply, and the footer was kept out only by
|
|
67
|
+
// its column in the skip list (#4161), which a reply drawn further left would
|
|
68
|
+
// lose and a footer drawn further right would beat. opencode-v2 has no rule in
|
|
69
|
+
// `isTurnComplete`, so today this boundary reaches only the partial reading,
|
|
70
|
+
// which the poller does not save. Issue #4187 made that the design: V2's
|
|
71
|
+
// replies are never saved from the screen — the event stream's turn end and,
|
|
72
|
+
// for a stream that was down, the recovery sync on reconnect write them from
|
|
73
|
+
// the server's document (`lib/hooks/sources/opencode-v2/history`).
|
|
74
|
+
if (cliToolId === 'opencode-v2') {
|
|
75
|
+
return (0, patterns_1.findOpencodeV2ChromeStart)(lines.map(cli_patterns_1.stripAnsi));
|
|
76
|
+
}
|
|
62
77
|
return cliToolId === 'claude'
|
|
63
78
|
? (0, cli_patterns_1.findClaudeChromeStart)(lines)
|
|
64
79
|
: cliToolId === 'copilot'
|
|
@@ -532,6 +547,13 @@ function collectCompletedResponse(ctx) {
|
|
|
532
547
|
// real content on the following poll. So the cursor stops where the content
|
|
533
548
|
// stops, which is what it did before.
|
|
534
549
|
let endIndex = cliToolId === 'codex' ? contentEnd : totalLines;
|
|
550
|
+
// Issue #4188: the opencode fallback cut below, by position. A completed turn
|
|
551
|
+
// ends on its `▣ Build · … · 2.5s` row and the chrome is drawn under it, so a
|
|
552
|
+
// row ABOVE the newest finished-turn row is the reply's, whatever words it
|
|
553
|
+
// holds. -1 (no such row in the window) leaves every row eligible, as before.
|
|
554
|
+
const openCodeTurnCompleteRow = cliToolId === 'opencode' && chromeStart < 0
|
|
555
|
+
? findLastOpenCodeTurnCompleteRow(lines, startIndex, contentEnd)
|
|
556
|
+
: -1;
|
|
535
557
|
for (let i = startIndex; i < contentEnd; i++) {
|
|
536
558
|
const line = lines[i];
|
|
537
559
|
const cleanLine = (0, cli_patterns_1.stripAnsi)(line);
|
|
@@ -556,7 +578,11 @@ function collectCompletedResponse(ctx) {
|
|
|
556
578
|
// one boundary available — and #1883 measured that a REPLY can contain
|
|
557
579
|
// `Ask anything...`, so cutting the turn on it is a last resort, not the
|
|
558
580
|
// primary rule.
|
|
559
|
-
|
|
581
|
+
//
|
|
582
|
+
// Issue #4188: and only below the turn's finished-turn row. Both patterns are
|
|
583
|
+
// words matched anywhere in the row, so a reply row quoting them (`Ask
|
|
584
|
+
// anything... is the placeholder`) above that row cut the reply short there.
|
|
585
|
+
if (cliToolId === 'opencode' && chromeStart < 0 && i > openCodeTurnCompleteRow) {
|
|
560
586
|
if (cli_patterns_1.OPENCODE_PROMPT_PATTERN.test(cleanLine) || cli_patterns_1.OPENCODE_PROMPT_AFTER_RESPONSE.test(cleanLine)) {
|
|
561
587
|
endIndex = i;
|
|
562
588
|
break;
|
|
@@ -571,6 +597,22 @@ function collectCompletedResponse(ctx) {
|
|
|
571
597
|
const response = responseLines.join('\n').trim();
|
|
572
598
|
return { response, endIndex };
|
|
573
599
|
}
|
|
600
|
+
/**
|
|
601
|
+
* The newest opencode finished-turn row (`▣ Build · <model> · 2.5s`) in
|
|
602
|
+
* `[from, to)`, or -1 (Issue #4188).
|
|
603
|
+
*
|
|
604
|
+
* @param lines - The trimmed tmux buffer lines (ANSI intact)
|
|
605
|
+
* @param from - First row to search
|
|
606
|
+
* @param to - Exclusive end of the search
|
|
607
|
+
* @returns Index into `lines`, or -1
|
|
608
|
+
*/
|
|
609
|
+
function findLastOpenCodeTurnCompleteRow(lines, from, to) {
|
|
610
|
+
for (let i = to - 1; i >= from; i--) {
|
|
611
|
+
if (cli_patterns_1.OPENCODE_TURN_COMPLETE_PATTERN.test((0, cli_patterns_1.stripAnsi)(lines[i])))
|
|
612
|
+
return i;
|
|
613
|
+
}
|
|
614
|
+
return -1;
|
|
615
|
+
}
|
|
574
616
|
/**
|
|
575
617
|
* Build the result for a frame the completion rules accepted.
|
|
576
618
|
*
|
|
@@ -584,7 +626,7 @@ function collectCompletedResponse(ctx) {
|
|
|
584
626
|
* @returns What `extractResponse` returns for this frame
|
|
585
627
|
*/
|
|
586
628
|
function extractCompletedResponse(ctx) {
|
|
587
|
-
const { cliToolId, totalLines, openCodeCleanLines, bufferReset, captureWindowSaturated, thinkingPattern, skipPatterns, findRecentUserPromptIndex, } = ctx;
|
|
629
|
+
const { cliToolId, lines, totalLines, chromeStart, openCodeCleanLines, bufferReset, captureWindowSaturated, thinkingPattern, skipPatterns, findRecentUserPromptIndex, } = ctx;
|
|
588
630
|
const { response, endIndex } = collectCompletedResponse(ctx);
|
|
589
631
|
// DR-004: Check only the tail of the response for thinking indicators.
|
|
590
632
|
//
|
|
@@ -595,8 +637,20 @@ function extractCompletedResponse(ctx) {
|
|
|
595
637
|
// that never scrolls away. `COPILOT_THINKING_PATTERN`'s braille alternative
|
|
596
638
|
// matches any spinner glyph a reply happens to quote, and the turn would then
|
|
597
639
|
// be reported unfinished for the rest of the session.
|
|
598
|
-
|
|
599
|
-
|
|
640
|
+
//
|
|
641
|
+
// Issue #4188: not the reply's tail on an opencode frame whose chrome was
|
|
642
|
+
// located. Its reply keeps the rows quoting the chrome's words by position
|
|
643
|
+
// (`OPENCODE_TRANSCRIPT_SKIP_PATTERNS`), so a reply ending on `Ask anything...
|
|
644
|
+
// is the input box, Thinking: is the progress row` would be read here as a
|
|
645
|
+
// running turn and the finished reply never saved. There the progress is read
|
|
646
|
+
// where the TUI draws it while a turn runs: under the composer's bottom border,
|
|
647
|
+
// as `isOpenCodeComplete` reads the busy hint, and as whole progress rows: the
|
|
648
|
+
// footer there also draws the cwd, which may hold the word (`/tmp/Thinking:demo`).
|
|
649
|
+
const stillRunning = cliToolId === 'opencode' && chromeStart >= 0
|
|
650
|
+
? (0, cli_patterns_1.isOpenCodeProgressBelowComposer)(lines.slice(chromeStart).map(cli_patterns_1.stripAnsi))
|
|
651
|
+
: cliToolId !== 'copilot' &&
|
|
652
|
+
thinkingPattern.test(response.split('\n').slice(-thinking_constants_1.THINKING_TAIL_LINE_COUNT).join('\n'));
|
|
653
|
+
if (stillRunning) {
|
|
600
654
|
return (0, response_checker_extraction_result_1.incompleteResult)(totalLines);
|
|
601
655
|
}
|
|
602
656
|
// Startup-screen defenses, one per tool and in this order. Each answers only
|
|
@@ -407,7 +407,15 @@ function extractResponse(output, lastCapturedLine, cliToolId, captureWindowLines
|
|
|
407
407
|
? openCodeCleanLines.join('\n')
|
|
408
408
|
: linesToCheck.join('\n');
|
|
409
409
|
// Get tool-specific patterns from shared module
|
|
410
|
-
const { promptPattern, separatorPattern, thinkingPattern, skipPatterns } = (0, cli_patterns_1.getCliToolPatterns)(cliToolId);
|
|
410
|
+
const { promptPattern, separatorPattern, thinkingPattern, skipPatterns: toolSkipPatterns } = (0, cli_patterns_1.getCliToolPatterns)(cliToolId);
|
|
411
|
+
// Issue #4188: on an opencode frame whose chrome was located, `contentEnd` has
|
|
412
|
+
// already cut off the rows only the chrome draws (`esc interrupt`,
|
|
413
|
+
// `Ask anything...`, `tab agents ctrl+p commands`, the spinner run), so a row
|
|
414
|
+
// above it with those words is the reply's and is kept. With no boundary the
|
|
415
|
+
// words are the only reading left, and the whole list applies as before.
|
|
416
|
+
const skipPatterns = cliToolId === 'opencode' && chromeStart >= 0
|
|
417
|
+
? [...cli_patterns_1.OPENCODE_TRANSCRIPT_SKIP_PATTERNS]
|
|
418
|
+
: toolSkipPatterns;
|
|
411
419
|
const findRecentUserPromptIndex = (windowSize = 60) => (0, response_checker_extraction_steps_1.findRecentUserPromptIndexInFrame)(cliToolId, lines, openCodeCleanLines, chromeStart, contentEnd, windowSize);
|
|
412
420
|
// Early check for interactive prompts (before extraction logic)
|
|
413
421
|
//
|
|
@@ -560,14 +568,26 @@ function extractCompletedTurn(ctx, output, lastCapturedLine, owns) {
|
|
|
560
568
|
observeUpstreamFaultForPush(worktreeId, cliToolId, instanceId, output);
|
|
561
569
|
// Layer 2: Accumulate TUI content for full-screen TUI tools, so a turn that
|
|
562
570
|
// outgrows the alternate-screen pane keeps the head that has scrolled away.
|
|
571
|
+
// Issue #4187: not opencode-v2. The screen reading never completes a V2 turn
|
|
572
|
+
// (its replies are written from its server's document, including the turns a
|
|
573
|
+
// lost stream missed, on reconnect), so there is no save for the head to reach.
|
|
563
574
|
if (owns && (cliToolId === 'opencode' || cliToolId === 'copilot')) {
|
|
564
575
|
// Issue #1911: opencode is accumulated from the CURRENT TURN'S REGION
|
|
565
576
|
// rather than the whole frame. Feeding the raw pane seeded the accumulator
|
|
566
577
|
// with the previous turn's transcript, the echoed prompt and the bottom
|
|
567
578
|
// chrome on the very first poll, so the accumulated content could never be
|
|
568
579
|
// used as a response source without re-introducing defect 1.
|
|
569
|
-
|
|
570
|
-
|
|
580
|
+
//
|
|
581
|
+
// Issue #4188: with the skip list the slice's position allows — the rows only
|
|
582
|
+
// the chrome draws are kept when the slice ends above the located chrome, so a
|
|
583
|
+
// reply quoting them survives into the accumulator (and the save below).
|
|
584
|
+
if (cliToolId === 'opencode') {
|
|
585
|
+
const { turn, skipPatterns } = (0, response_extractor_1.sliceOpenCodeTurnWithSkip)(output);
|
|
586
|
+
(0, tui_accumulator_1.accumulateTuiContent)(pollerKey, turn, cliToolId, skipPatterns);
|
|
587
|
+
}
|
|
588
|
+
else {
|
|
589
|
+
(0, tui_accumulator_1.accumulateTuiContent)(pollerKey, output, cliToolId);
|
|
590
|
+
}
|
|
571
591
|
}
|
|
572
592
|
// Extract response
|
|
573
593
|
const result = extractResponse(output, lastCapturedLine, cliToolId, tmux_capture_cache_1.CACHE_MAX_CAPTURE_LINES);
|
|
@@ -873,11 +893,16 @@ function cleanCompletedResponse(cliToolId, result, pollerKey, owns) {
|
|
|
873
893
|
// `result.response` already holds exactly. When the echo is off screen the
|
|
874
894
|
// frame is missing content outright, and a possible duplicate beats a
|
|
875
895
|
// guaranteed truncation.
|
|
896
|
+
//
|
|
897
|
+
// Issue #4188: both sources are cleaned with `OPENCODE_TRANSCRIPT_SKIP_PATTERNS`,
|
|
898
|
+
// which keeps a reply's rows quoting the chrome's words (`esc interrupt`,
|
|
899
|
+
// `Ask anything...`). The extraction already left the chrome out by position
|
|
900
|
+
// (or, on a frame whose chrome it could not locate, skipped those rows with
|
|
901
|
+
// the whole list itself). The accumulator was filtered the same way when each
|
|
902
|
+
// frame was read (`sliceOpenCodeTurnWithSkip`): the shorter list only for
|
|
903
|
+
// rows cut above the located chrome, the whole list otherwise.
|
|
876
904
|
const accumulatedContent = (0, tui_accumulator_1.getAccumulatedContent)(pollerKey);
|
|
877
|
-
|
|
878
|
-
? accumulatedContent
|
|
879
|
-
: result.response;
|
|
880
|
-
cleanedResponse = (0, response_cleaner_1.cleanOpenCodeResponse)(sourceContent);
|
|
905
|
+
cleanedResponse = (0, response_cleaner_1.cleanOpenCodeResponse)(result.turnHeadTruncated && accumulatedContent ? accumulatedContent : result.response, cli_patterns_1.OPENCODE_TRANSCRIPT_SKIP_PATTERNS);
|
|
881
906
|
if (owns)
|
|
882
907
|
(0, tui_accumulator_1.clearTuiAccumulator)(pollerKey);
|
|
883
908
|
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Why the last delivery attempt of a relay payload stopped (Issue #4105).
|
|
4
|
+
*
|
|
5
|
+
* While the requester A shows a confirmation dialog, every pump tick refuses
|
|
6
|
+
* the delivery (`prompt_waiting`) and nothing in the ledger said so: the relay
|
|
7
|
+
* read the same as one that was simply queued. This module keeps, in the
|
|
8
|
+
* server process, the reason the LAST attempt stopped for — tied to the
|
|
9
|
+
* payload it was for and the time it was observed — and attaches it to the
|
|
10
|
+
* relay APIs' answers as `lastDeliveryBlock`.
|
|
11
|
+
*
|
|
12
|
+
* ## Rules
|
|
13
|
+
*
|
|
14
|
+
* - **One writer.** Only `deliverOne` (via the single-flight pump) records or
|
|
15
|
+
* clears an entry, so every entry point that ends in a pump — a turn
|
|
16
|
+
* completion, a prompt notice, the maintenance tick, a resolve — follows the
|
|
17
|
+
* same rule.
|
|
18
|
+
* - **Tied to the payload.** An entry is shown only while the slot still
|
|
19
|
+
* carries the same payload (kind, id, body) and no delivery hold. A payload
|
|
20
|
+
* replaced, delivered, cancelled, expired, held or taken answers `null`, and
|
|
21
|
+
* the stale entry is dropped.
|
|
22
|
+
* - **An observation, not a state.** `observedAt` is the attempt's time; the
|
|
23
|
+
* next attempt replaces or clears it. `null` means "no observation", never
|
|
24
|
+
* "deliverable" (a restart forgets every entry on purpose).
|
|
25
|
+
* - **Never in the database**, and never in `held` / `heldCount` /
|
|
26
|
+
* `holdReason` / `deliveryHold`.
|
|
27
|
+
* - **Never throws.** A failure here costs the label, never the delivery or
|
|
28
|
+
* the API answer that carries it.
|
|
29
|
+
*
|
|
30
|
+
* @module lib/relay/relay-delivery-block
|
|
31
|
+
*/
|
|
32
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
33
|
+
exports.resetRelayDeliveryBlocks = resetRelayDeliveryBlocks;
|
|
34
|
+
exports.noteRelayDeliveryAttempt = noteRelayDeliveryAttempt;
|
|
35
|
+
exports.pruneRelayDeliveryBlocks = pruneRelayDeliveryBlocks;
|
|
36
|
+
exports.readRelayLastDeliveryBlock = readRelayLastDeliveryBlock;
|
|
37
|
+
exports.withLastDeliveryBlock = withLastDeliveryBlock;
|
|
38
|
+
exports.withLastDeliveryBlocks = withLastDeliveryBlocks;
|
|
39
|
+
exports.listClosedBlockedRelays = listClosedBlockedRelays;
|
|
40
|
+
const relay_db_1 = require("../../lib/db/relay-db");
|
|
41
|
+
const logger_1 = require("../../lib/logger");
|
|
42
|
+
const global_state_1 = require("../global-state");
|
|
43
|
+
const logger = (0, logger_1.createLogger)('relay-delivery-block');
|
|
44
|
+
/** On `globalThis` for the reason the pump's own sets are (#1736). */
|
|
45
|
+
const blocks = (0, global_state_1.getOrInitGlobal)('__relayLastDeliveryBlocks', () => new Map());
|
|
46
|
+
/** Forget every observation (what a restart does). Test seam. */
|
|
47
|
+
function resetRelayDeliveryBlocks() {
|
|
48
|
+
blocks.clear();
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Record what the last attempt of `relayId` observed, or clear it (`null`:
|
|
52
|
+
* the attempt did not stop for one of the reasons — delivered, uncertain,
|
|
53
|
+
* superseded, failed for another reason).
|
|
54
|
+
*/
|
|
55
|
+
function noteRelayDeliveryAttempt(relayId, entry) {
|
|
56
|
+
try {
|
|
57
|
+
if (entry === null)
|
|
58
|
+
blocks.delete(relayId);
|
|
59
|
+
else
|
|
60
|
+
blocks.set(relayId, entry);
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
logger.warn('relay-delivery-block-note-failed', {
|
|
64
|
+
relayId,
|
|
65
|
+
error: error instanceof Error ? error.message : String(error),
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/** Drop the entries of relays the pump no longer lists (closed, held, emptied). */
|
|
70
|
+
function pruneRelayDeliveryBlocks(listed) {
|
|
71
|
+
try {
|
|
72
|
+
for (const relayId of [...blocks.keys()]) {
|
|
73
|
+
if (!listed.has(relayId))
|
|
74
|
+
blocks.delete(relayId);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// Best-effort: an entry left behind is still checked against the payload.
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The observation for the payload `relay` carries now, or `null`.
|
|
83
|
+
*
|
|
84
|
+
* Re-reads the slot rather than trusting the row the caller has: the entry
|
|
85
|
+
* must describe THIS payload. A mismatch drops the entry.
|
|
86
|
+
*/
|
|
87
|
+
function readRelayLastDeliveryBlock(db, relay) {
|
|
88
|
+
try {
|
|
89
|
+
const entry = blocks.get(relay.id);
|
|
90
|
+
if (!entry)
|
|
91
|
+
return null;
|
|
92
|
+
const current = (0, relay_db_1.getRelayPendingPayload)(db, relay.id);
|
|
93
|
+
if (!current ||
|
|
94
|
+
current.kind !== entry.kind ||
|
|
95
|
+
current.payloadId !== entry.payloadId ||
|
|
96
|
+
current.body !== entry.body) {
|
|
97
|
+
blocks.delete(relay.id);
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
// Under a delivery hold (`attempting` / `uncertain`) the hold is what
|
|
101
|
+
// describes the payload; the entry is kept in case the attempt is queued
|
|
102
|
+
// again, but not shown.
|
|
103
|
+
if (current.relay.deliveryHold !== null)
|
|
104
|
+
return null;
|
|
105
|
+
return {
|
|
106
|
+
reason: entry.reason,
|
|
107
|
+
kind: entry.kind,
|
|
108
|
+
payloadId: entry.payloadId,
|
|
109
|
+
observedAt: entry.observedAt,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
logger.warn('relay-delivery-block-read-failed', {
|
|
114
|
+
relayId: relay.id,
|
|
115
|
+
error: error instanceof Error ? error.message : String(error),
|
|
116
|
+
});
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/** `relay` with its {@link readRelayLastDeliveryBlock} attached. */
|
|
121
|
+
function withLastDeliveryBlock(db, relay) {
|
|
122
|
+
return { ...relay, lastDeliveryBlock: readRelayLastDeliveryBlock(db, relay) };
|
|
123
|
+
}
|
|
124
|
+
/** {@link withLastDeliveryBlock} over a list. */
|
|
125
|
+
function withLastDeliveryBlocks(db, relays) {
|
|
126
|
+
return relays.map((relay) => withLastDeliveryBlock(db, relay));
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Closed relays whose undelivered payload's last attempt stopped (Issue #4193).
|
|
130
|
+
*
|
|
131
|
+
* An expired relay keeps its expiry notice in the slot until it reaches the
|
|
132
|
+
* requester, and the pump records why that delivery stopped like any other —
|
|
133
|
+
* but the list's `open` / `awaiting` (rightly) leave closed relays out, so the
|
|
134
|
+
* reason was readable through `relays --id` only. This is the list of those
|
|
135
|
+
* relays, each with its `lastDeliveryBlock`; one that carries no observation
|
|
136
|
+
* (nothing stopped it, or this process has not tried) is not listed. Never
|
|
137
|
+
* counted in `counts` / `heldCount`, never added to `open` / `awaiting`, and
|
|
138
|
+
* never throws (an empty list costs the label only).
|
|
139
|
+
*/
|
|
140
|
+
function listClosedBlockedRelays(db, scope = {}) {
|
|
141
|
+
try {
|
|
142
|
+
return withLastDeliveryBlocks(db, (0, relay_db_1.listClosedRelaysWithPendingPayload)(db, scope)).filter((relay) => relay.lastDeliveryBlock != null);
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
logger.warn('relay-closed-blocked-list-failed', {
|
|
146
|
+
error: error instanceof Error ? error.message : String(error),
|
|
147
|
+
});
|
|
148
|
+
return [];
|
|
149
|
+
}
|
|
150
|
+
}
|
|
@@ -61,6 +61,7 @@ Object.defineProperty(exports, "findWorkerReply", { enumerable: true, get: funct
|
|
|
61
61
|
Object.defineProperty(exports, "recoverBoundRelays", { enumerable: true, get: function () { return relay_bound_reply_1.recoverBoundRelays; } });
|
|
62
62
|
const relay_policy_1 = require("../../lib/relay/relay-policy");
|
|
63
63
|
const relay_readiness_1 = require("../../lib/relay/relay-readiness");
|
|
64
|
+
const relay_delivery_block_1 = require("../../lib/relay/relay-delivery-block");
|
|
64
65
|
const relay_session_ref_1 = require("../../lib/relay/relay-session-ref");
|
|
65
66
|
const relay_system_line_1 = require("../../lib/relay/relay-system-line");
|
|
66
67
|
const relay_delivery_claims_1 = require("../../lib/relay/relay-delivery-claims");
|
|
@@ -96,6 +97,8 @@ const inFlight = (0, global_state_1.getOrInitGlobal)('__relayDeliveryInFlight',
|
|
|
96
97
|
function resetRelayDeliveryState() {
|
|
97
98
|
inFlight.clear();
|
|
98
99
|
(0, relay_delivery_claims_1.resetRelayDeliveryClaims)();
|
|
100
|
+
// Issue #4105: a restart forgets the last attempts' observations too.
|
|
101
|
+
(0, relay_delivery_block_1.resetRelayDeliveryBlocks)();
|
|
99
102
|
globalThis.__relayPumpRunning = false;
|
|
100
103
|
globalThis.__relayRecoveredBootId = undefined;
|
|
101
104
|
globalThis.__relayAttemptsRecoveredBootId = undefined;
|
|
@@ -426,7 +429,19 @@ function reasonForThrow(attempt) {
|
|
|
426
429
|
* that same synchronous stretch, so no cancel can slip in between the check
|
|
427
430
|
* and the send; from then on `withdrawRelay` answers `delivering`.
|
|
428
431
|
*/
|
|
429
|
-
|
|
432
|
+
function deliverOne(db, relayId, kind, body, listedPayloadId) {
|
|
433
|
+
// Issue #4105: what this attempt stopped for, recorded (or cleared) once it
|
|
434
|
+
// is over, whichever way it ended. Never touches the ledger. The attempt's
|
|
435
|
+
// own promise is returned as is — the note is a reaction registered before
|
|
436
|
+
// the caller's await, so it lands first and adds no tick to the pump.
|
|
437
|
+
const observed = { block: null };
|
|
438
|
+
const attempt = attemptDelivery(db, relayId, kind, body, listedPayloadId, observed);
|
|
439
|
+
const note = () => (0, relay_delivery_block_1.noteRelayDeliveryAttempt)(relayId, observed.block);
|
|
440
|
+
attempt.then(note, note);
|
|
441
|
+
return attempt;
|
|
442
|
+
}
|
|
443
|
+
/** {@link deliverOne}'s body; `observed.block` is set only for a stop worth showing (Issue #4105). */
|
|
444
|
+
async function attemptDelivery(db, relayId, kind, body, listedPayloadId, observed) {
|
|
430
445
|
const listed = (0, relay_db_1.getRelayById)(db, relayId);
|
|
431
446
|
if (!listed)
|
|
432
447
|
return 'skipped';
|
|
@@ -434,6 +449,12 @@ async function deliverOne(db, relayId, kind, body, listedPayloadId) {
|
|
|
434
449
|
const hold = await (0, relay_readiness_1.findRelayHoldReason)(listedRequester.worktreeId, listedRequester.cliToolId, listedRequester.instanceId, db);
|
|
435
450
|
if (hold) {
|
|
436
451
|
logger.debug('relay-delivery-held', { relayId, kind, reason: hold });
|
|
452
|
+
// Issue #4105: the readiness check awaited, and a cancel, an expiry or a
|
|
453
|
+
// replacement may have run meanwhile — only a payload the slot still
|
|
454
|
+
// carries gets the reason (#3732's re-read, without its claim).
|
|
455
|
+
if (stillCarriesPayload(db, relayId, kind, body, listedPayloadId)) {
|
|
456
|
+
observed.block = { reason: hold, kind, payloadId: listedPayloadId, body, observedAt: Date.now() };
|
|
457
|
+
}
|
|
437
458
|
return 'held';
|
|
438
459
|
}
|
|
439
460
|
// Synchronous from here to the send: re-read, then claim.
|
|
@@ -507,6 +528,18 @@ async function deliverOne(db, relayId, kind, body, listedPayloadId) {
|
|
|
507
528
|
if (!result.ok) {
|
|
508
529
|
const settled = settleUnsentResult(db, ref, relay, requester, kind, result.stage, attempt);
|
|
509
530
|
requeued = settled.requeued;
|
|
531
|
+
// Issue #4105: A's dialog refused it and the payload is queued again
|
|
532
|
+
// under the same id. A requeue that failed leaves it `attempting` (a
|
|
533
|
+
// hold), which must not read as "waiting for the dialog".
|
|
534
|
+
if (settled.outcome === 'held' && settled.requeued) {
|
|
535
|
+
observed.block = {
|
|
536
|
+
reason: 'prompt_waiting',
|
|
537
|
+
kind,
|
|
538
|
+
payloadId: ref.payloadId,
|
|
539
|
+
body,
|
|
540
|
+
observedAt: Date.now(),
|
|
541
|
+
};
|
|
542
|
+
}
|
|
510
543
|
return settled.outcome;
|
|
511
544
|
}
|
|
512
545
|
const now = Date.now();
|
|
@@ -562,6 +595,26 @@ function rereadDeliverablePayload(db, relayId, kind, body, listedPayloadId) {
|
|
|
562
595
|
}
|
|
563
596
|
return current;
|
|
564
597
|
}
|
|
598
|
+
/**
|
|
599
|
+
* Whether the slot still carries the listed payload, deliverable (Issue
|
|
600
|
+
* #4105): the same test as {@link rereadDeliverablePayload}, unlogged, plus
|
|
601
|
+
* no delivery hold. Never throws.
|
|
602
|
+
*/
|
|
603
|
+
function stillCarriesPayload(db, relayId, kind, body, listedPayloadId) {
|
|
604
|
+
try {
|
|
605
|
+
const current = (0, relay_db_1.getRelayPendingPayload)(db, relayId);
|
|
606
|
+
if (!current)
|
|
607
|
+
return false;
|
|
608
|
+
if (current.kind !== kind || current.body !== body || current.payloadId !== listedPayloadId)
|
|
609
|
+
return false;
|
|
610
|
+
if (current.relay.deliveryHold !== null)
|
|
611
|
+
return false;
|
|
612
|
+
return kind === 'expired' || (0, types_1.isOpenRelayState)(current.relay.state);
|
|
613
|
+
}
|
|
614
|
+
catch {
|
|
615
|
+
return false;
|
|
616
|
+
}
|
|
617
|
+
}
|
|
565
618
|
/**
|
|
566
619
|
* A send that returned `ok: false`: held as `uncertain`, or queued again when
|
|
567
620
|
* it is known not to have gone out (Issue #4064).
|
|
@@ -745,7 +798,11 @@ async function pumpRelayDeliveries() {
|
|
|
745
798
|
globalThis.__relayPumpAgain = false;
|
|
746
799
|
// Issue #4064: a payload under a delivery hold is not listed, so a pass
|
|
747
800
|
// (or the next pump) never types it again; other relays go on.
|
|
748
|
-
|
|
801
|
+
const listing = (0, relay_db_1.listDeliverableRelayPayloads)(db);
|
|
802
|
+
// Issue #4105: an observation of a relay no longer listed (delivered,
|
|
803
|
+
// closed, emptied, held) is dropped.
|
|
804
|
+
(0, relay_delivery_block_1.pruneRelayDeliveryBlocks)(new Set(listing.map((item) => item.relay.id)));
|
|
805
|
+
for (const item of listing) {
|
|
749
806
|
if (inFlight.has(item.relay.id))
|
|
750
807
|
continue;
|
|
751
808
|
inFlight.add(item.relay.id);
|
|
@@ -368,16 +368,26 @@ function cleanCopilotResponse(response) {
|
|
|
368
368
|
* with a Build marker. Without this trimming, savePendingAssistantResponse
|
|
369
369
|
* and Layer 2 accumulator would include previous Q&As in the response.
|
|
370
370
|
* 3. Skip empty lines
|
|
371
|
-
* 4. Skip lines matching any
|
|
371
|
+
* 4. Skip lines matching any of `skipPatterns` (TUI artifacts)
|
|
372
372
|
* 5. Skip Build summary line (OPENCODE_RESPONSE_COMPLETE, the completion indicator)
|
|
373
373
|
* 6. Join remaining lines
|
|
374
374
|
*
|
|
375
|
+
* Issue #4188: the skip list is the caller's. The default is the whole
|
|
376
|
+
* `OPENCODE_SKIP_PATTERNS`, which reads the rows only the chrome draws
|
|
377
|
+
* (`esc interrupt`, `Ask anything...`, `tab agents ctrl+p commands`, the spinner
|
|
378
|
+
* run) by their words, wherever they sit. A caller whose rows are known to lie
|
|
379
|
+
* above the located chrome — the poller's save of an extracted turn and of the
|
|
380
|
+
* Layer-2 accumulator — passes `OPENCODE_TRANSCRIPT_SKIP_PATTERNS`, so a reply
|
|
381
|
+
* quoting those rows keeps them. (This replaced `cleanOpenCodeTurnResponse`, a
|
|
382
|
+
* copy of this function that differed only in that list.)
|
|
383
|
+
*
|
|
375
384
|
* @param response - Raw OpenCode response (may contain TUI decoration)
|
|
385
|
+
* @param skipPatterns - Rows to drop; defaults to `OPENCODE_SKIP_PATTERNS`
|
|
376
386
|
* @returns Cleaned response with TUI artifacts removed
|
|
377
387
|
*
|
|
378
388
|
* @internal Exported for unit testing (response-poller-opencode.test.ts)
|
|
379
389
|
*/
|
|
380
|
-
function cleanOpenCodeResponse(response) {
|
|
390
|
+
function cleanOpenCodeResponse(response, skipPatterns = cli_patterns_1.OPENCODE_SKIP_PATTERNS) {
|
|
381
391
|
const lines = response.split('\n');
|
|
382
392
|
// Step 2: Trim to latest response by finding Build markers.
|
|
383
393
|
// Each Q&A exchange ends with "square Build . model . time".
|
|
@@ -401,7 +411,7 @@ function cleanOpenCodeResponse(response) {
|
|
|
401
411
|
if (!cleanLine)
|
|
402
412
|
continue;
|
|
403
413
|
// Skip lines matching any OpenCode skip pattern
|
|
404
|
-
const shouldSkip =
|
|
414
|
+
const shouldSkip = skipPatterns.some(pattern => pattern.test(cleanLine));
|
|
405
415
|
if (shouldSkip)
|
|
406
416
|
continue;
|
|
407
417
|
// Skip the Build summary line (completion indicator)
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.resolveOpenCodeTurnRegion = resolveOpenCodeTurnRegion;
|
|
11
11
|
exports.sliceOpenCodeTurn = sliceOpenCodeTurn;
|
|
12
|
+
exports.sliceOpenCodeTurnWithSkip = sliceOpenCodeTurnWithSkip;
|
|
12
13
|
exports.isOpenCodeComplete = isOpenCodeComplete;
|
|
13
14
|
exports.resolveExtractionStartIndex = resolveExtractionStartIndex;
|
|
14
15
|
const cli_patterns_1 = require("./detection/cli-patterns");
|
|
@@ -59,11 +60,35 @@ function resolveOpenCodeTurnRegion(lines) {
|
|
|
59
60
|
* on screen yet.
|
|
60
61
|
*/
|
|
61
62
|
function sliceOpenCodeTurn(output) {
|
|
63
|
+
return sliceOpenCodeTurnWithSkip(output).turn;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* {@link sliceOpenCodeTurn} plus the skip list its rows may be cleaned with
|
|
67
|
+
* (Issue #4188).
|
|
68
|
+
*
|
|
69
|
+
* When the chrome was located, the slice ends above it by position, so a row of
|
|
70
|
+
* the slice with the words only the chrome draws (`esc interrupt`,
|
|
71
|
+
* `Ask anything...`, `tab agents ctrl+p commands`, the spinner run) is a reply's
|
|
72
|
+
* row quoting them: {@link OPENCODE_TRANSCRIPT_SKIP_PATTERNS} keeps it. With no
|
|
73
|
+
* chrome boundary the slice runs to the end of the pane and the words are the
|
|
74
|
+
* only reading left: the whole {@link OPENCODE_SKIP_PATTERNS}.
|
|
75
|
+
*
|
|
76
|
+
* The Layer-2 accumulator is the caller: its rows reach the save
|
|
77
|
+
* (`turnHeadTruncated`) one at a time with no position, so the position has to
|
|
78
|
+
* be read here, where the frame still is.
|
|
79
|
+
*
|
|
80
|
+
* @param output - Raw `capture-pane` output.
|
|
81
|
+
* @returns The region's rows (`''` when none) and the skip list for them
|
|
82
|
+
*
|
|
83
|
+
* @internal Exported for unit testing
|
|
84
|
+
*/
|
|
85
|
+
function sliceOpenCodeTurnWithSkip(output) {
|
|
62
86
|
const rawLines = output.split('\n');
|
|
63
87
|
const region = resolveOpenCodeTurnRegion(rawLines.map(cli_patterns_1.stripAnsi));
|
|
88
|
+
const skipPatterns = region.chromeStart >= 0 ? cli_patterns_1.OPENCODE_TRANSCRIPT_SKIP_PATTERNS : cli_patterns_1.OPENCODE_SKIP_PATTERNS;
|
|
64
89
|
if (region.start >= region.end)
|
|
65
|
-
return '';
|
|
66
|
-
return rawLines.slice(region.start, region.end).join('\n');
|
|
90
|
+
return { turn: '', skipPatterns };
|
|
91
|
+
return { turn: rawLines.slice(region.start, region.end).join('\n'), skipPatterns };
|
|
67
92
|
}
|
|
68
93
|
/**
|
|
69
94
|
* Check if OpenCode has completed its response.
|
|
@@ -119,8 +144,13 @@ function isOpenCodeComplete(output) {
|
|
|
119
144
|
// processing, and must NOT be blocked on a permission dialog. The last two are
|
|
120
145
|
// read from the WHOLE frame: both live in the chrome the region excludes.
|
|
121
146
|
// The "esc interrupt" indicator appears in the TUI footer during model processing.
|
|
147
|
+
//
|
|
148
|
+
// Issue #4188: the hint by position — under the composer's bottom border, where
|
|
149
|
+
// every measured running frame draws it — as the status reader has read it since
|
|
150
|
+
// #4175. A reply quoting the hint row whole sits above the border, and kept its
|
|
151
|
+
// turn from ever completing.
|
|
122
152
|
return (cli_patterns_1.OPENCODE_TURN_COMPLETE_PATTERN.test(turnRegion) &&
|
|
123
|
-
!cli_patterns_1.
|
|
153
|
+
!(0, cli_patterns_1.isOpencodeProcessingFooter)(output) &&
|
|
124
154
|
!cli_patterns_1.OPENCODE_PERMISSION_PATTERN.test(output));
|
|
125
155
|
}
|
|
126
156
|
/**
|
|
@@ -173,6 +203,11 @@ function resolveExtractionStartIndex(lastCapturedLine, totalLines, bufferReset,
|
|
|
173
203
|
// doesn't grow -- it's always ~PANE_HEIGHT lines. bufferWasReset is often true because
|
|
174
204
|
// lastCapturedLine = totalLines. Must execute BEFORE Branch 1 to avoid Branch 1's small
|
|
175
205
|
// window (40 lines) which fails to find the second-to-last Build marker in a 200-line pane.
|
|
206
|
+
// Issue #4187: opencode-v2 is an alternate-screen TUI too, but it is not added here
|
|
207
|
+
// on purpose. The screen reading never saves a V2 reply (V2 has no rule in
|
|
208
|
+
// `isTurnComplete`; its replies are written from its own server's document,
|
|
209
|
+
// `lib/hooks/sources/opencode-v2/history`), so it never reaches a completed
|
|
210
|
+
// extraction that would read this start.
|
|
176
211
|
if (cliToolId === 'opencode' || cliToolId === 'copilot') {
|
|
177
212
|
const foundUserPrompt = findRecentUserPromptIndex(totalLines);
|
|
178
213
|
return foundUserPrompt >= 0 ? foundUserPrompt + 1 : 0;
|
|
@@ -47,6 +47,7 @@ const session_starting_state_1 = require("../../lib/session/session-starting-sta
|
|
|
47
47
|
const auto_yes_enter_fallback_state_1 = require("../../lib/polling/auto-yes-enter-fallback-state");
|
|
48
48
|
const instance_input_lock_1 = require("../../lib/session/instance-input-lock");
|
|
49
49
|
const prompt_submit_receipt_1 = require("../../lib/session/prompt-submit-receipt");
|
|
50
|
+
const role_launch_1 = require("../../lib/session/role-launch");
|
|
50
51
|
const session_name_1 = require("../../lib/cli-tools/session-name");
|
|
51
52
|
const logger_1 = require("../../lib/logger");
|
|
52
53
|
const logger = (0, logger_1.createLogger)('lib/session/agent-session-lifecycle');
|
|
@@ -81,6 +82,9 @@ function beginAgentSession(target, at = Date.now()) {
|
|
|
81
82
|
// its own. A second call from the same launch (codex's
|
|
82
83
|
// `relaunchIntoSamePane`) rewrites the same launch's record.
|
|
83
84
|
(0, session_starting_state_1.markSessionStarting)(target.worktreeId, target.cliToolId, target.instanceId, at);
|
|
85
|
+
// Issue #4115: a second call from one launch means its process was replaced,
|
|
86
|
+
// so the role's generation moves on with it. The role itself does not change.
|
|
87
|
+
(0, role_launch_1.noteLaunchProcessReplaced)(target);
|
|
84
88
|
const before = (0, agent_event_state_1.getAgentEventDropCounts)(target.worktreeId, target.cliToolId, target.instanceId).decisionEvicted;
|
|
85
89
|
(0, agent_event_state_1.beginAgentEventGeneration)(target.worktreeId, target.cliToolId, target.instanceId, at);
|
|
86
90
|
// Issue #3397: Auto-Yes's Enter belongs to the process whose screen it went
|
|
@@ -178,7 +182,11 @@ function prepareAgentLaunch(context) {
|
|
|
178
182
|
*
|
|
179
183
|
* @param context - The instance, its executable, and the worktree it runs in
|
|
180
184
|
* @returns `NAME='value' … command`, ready for `sendKeys`
|
|
185
|
+
* @throws {RoleLaunchRefusedError} This launch's role cannot be applied (Issue #4115)
|
|
181
186
|
*/
|
|
182
187
|
function buildAgentLaunchCommandLine(context) {
|
|
183
|
-
|
|
188
|
+
// Issue #4115: the role, when this runs inside a launch that has one. Applied
|
|
189
|
+
// here because every driver gets its line here, and outside `prepareLaunch`
|
|
190
|
+
// because that one fails open, and a role must not.
|
|
191
|
+
return (0, role_launch_1.renderLaunchCommandWithRole)(context, prepareAgentLaunch(context));
|
|
184
192
|
}
|
|
@@ -133,6 +133,16 @@ function truncateOutput(output) {
|
|
|
133
133
|
* @returns Array of CLI arguments
|
|
134
134
|
*/
|
|
135
135
|
function buildCliArgs(message, cliToolId, permission, options) {
|
|
136
|
+
const args = buildCliArgsWithoutRole(message, cliToolId, permission, options);
|
|
137
|
+
const role = options?.role;
|
|
138
|
+
if (!role || role.args.length === 0)
|
|
139
|
+
return args;
|
|
140
|
+
if (role.headlessPosition === 'trailing')
|
|
141
|
+
return [...args, ...role.args];
|
|
142
|
+
// `gh copilot` is the executable's first word, so the role goes after it.
|
|
143
|
+
return cliToolId === 'copilot' ? [args[0], ...role.args, ...args.slice(1)] : [...role.args, ...args];
|
|
144
|
+
}
|
|
145
|
+
function buildCliArgsWithoutRole(message, cliToolId, permission, options) {
|
|
136
146
|
switch (cliToolId) {
|
|
137
147
|
case 'codex':
|
|
138
148
|
return ['exec', message, '--sandbox', permission ?? 'workspace-write'];
|
|
@@ -872,9 +882,11 @@ async function executeClaudeCommand(message, cwd, cliToolId = 'claude', permissi
|
|
|
872
882
|
// `opencode.json` read was the one under `PWD`. `opencode2 run` has no `--dir`
|
|
873
883
|
// (v1 has), so the child's `PWD` is set to `cwd`. Other tools keep the
|
|
874
884
|
// environment they had.
|
|
875
|
-
const
|
|
885
|
+
const baseEnv = cliToolId === 'opencode-v2'
|
|
876
886
|
? { ...(0, env_sanitizer_1.sanitizeEnvForChildProcess)(), PWD: cwd }
|
|
877
887
|
: (0, env_sanitizer_1.sanitizeEnvForChildProcess)();
|
|
888
|
+
// Issue #4115: composed by the caller from this same sanitized environment.
|
|
889
|
+
const env = options?.role ? { ...baseEnv, ...options.role.env } : baseEnv;
|
|
878
890
|
return new Promise((resolve) => {
|
|
879
891
|
const child = (0, child_process_1.execFile)(command, args, {
|
|
880
892
|
cwd,
|