commandmate 0.49.2 → 0.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +476 -423
- package/.next/app-path-routes-manifest.json +28 -21
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +9 -9
- package/.next/react-loadable-manifest.json +1 -1
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +40 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/capabilities/route.js +1 -1
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route.js +1 -1
- package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js +1 -103
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +2 -2
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route.js +1 -1
- package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route.js +1 -1
- package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js +4 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/resolve/route.js +1 -0
- package/.next/server/app/api/relays/[relayId]/resolve/route.js.nft.json +1 -0
- package/.next/server/app/api/relays/[relayId]/resolve/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/relays/[relayId]/route.js +1 -1
- package/.next/server/app/api/relays/[relayId]/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/route.js +4 -1
- package/.next/server/app/api/relays/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/remote/pair/route.js +2 -2
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/role-defaults/route.js +1 -0
- package/.next/server/app/api/repositories/[id]/role-defaults/route.js.nft.json +1 -0
- package/.next/server/app/api/repositories/[id]/role-defaults/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/roles/[id]/route.js +1 -0
- package/.next/server/app/api/roles/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/roles/[id]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/roles/route.js +1 -0
- package/.next/server/app/api/roles/route.js.nft.json +1 -0
- package/.next/server/app/api/roles/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/settings/agent-role-defaults/route.js +1 -0
- package/.next/server/app/api/settings/agent-role-defaults/route.js.nft.json +1 -0
- package/.next/server/app/api/settings/agent-role-defaults/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/settings/default-agents/route.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route.js +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +3 -3
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/roles/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/instances/roles/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/instances/roles/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/instances/roles/settle/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/instances/roles/settle/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/instances/roles/settle/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -144
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +3 -104
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/tasks/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -103
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page.js +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page.js +2 -2
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.js +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +10 -10
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +28 -21
- package/.next/server/chunks/1184.js +5 -0
- package/.next/server/chunks/1501.js +5 -5
- package/.next/server/chunks/1656.js +2 -2
- package/.next/server/chunks/1957.js +2 -2
- package/.next/server/chunks/1990.js +103 -0
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2404.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2819.js +1 -0
- package/.next/server/chunks/2897.js +1 -1
- package/.next/server/chunks/3042.js +2 -0
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3294.js +3 -0
- package/.next/server/chunks/3417.js +1 -1
- package/.next/server/chunks/3480.js +1 -1
- package/.next/server/chunks/3505.js +2 -6
- package/.next/server/chunks/3543.js +1 -1
- package/.next/server/chunks/3801.js +7 -7
- package/.next/server/chunks/3945.js +1 -1
- package/.next/server/chunks/4207.js +1 -1
- package/.next/server/chunks/454.js +1 -0
- package/.next/server/chunks/4645.js +1 -0
- package/.next/server/chunks/4911.js +1 -1
- package/.next/server/chunks/5209.js +2 -2
- package/.next/server/chunks/5350.js +216 -0
- package/.next/server/chunks/5354.js +1 -1
- package/.next/server/chunks/5571.js +1 -1
- package/.next/server/chunks/6009.js +12 -0
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6285.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6486.js +2 -2
- package/.next/server/chunks/6569.js +1 -0
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/6793.js +4 -4
- package/.next/server/chunks/696.js +3 -0
- package/.next/server/chunks/7023.js +3 -3
- package/.next/server/chunks/7083.js +1 -0
- package/.next/server/chunks/741.js +1 -0
- package/.next/server/chunks/7662.js +1 -0
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/8143.js +33 -0
- package/.next/server/chunks/8581.js +6 -6
- package/.next/server/chunks/8728.js +2 -2
- package/.next/server/chunks/8782.js +1 -1
- package/.next/server/chunks/8807.js +181 -93
- package/.next/server/chunks/8918.js +3 -105
- package/.next/server/chunks/8955.js +1 -0
- package/.next/server/chunks/9169.js +1 -0
- package/.next/server/chunks/923.js +1 -0
- package/.next/server/chunks/9390.js +2 -2
- package/.next/server/chunks/9627.js +9 -9
- package/.next/server/chunks/973.js +1 -0
- package/.next/server/chunks/9731.js +3 -3
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/2314-2c9d587a27e8f731.js +1 -0
- package/.next/static/chunks/2407-ee881c99e218975b.js +1 -0
- package/.next/static/chunks/3931-24d7e245a93feb25.js +1 -0
- package/.next/static/chunks/4548-9afa02fd18afa6c7.js +1 -0
- package/.next/static/chunks/{5794-7975b8e51e731b19.js → 5794-38b3b504b3d97e04.js} +1 -1
- package/.next/static/chunks/{6966-d8dc6032410ffaba.js → 6966-dbfa4a43397f8c6d.js} +1 -1
- package/.next/static/chunks/7090-28e83f5a0efdb3b4.js +1 -0
- package/.next/static/chunks/7229.016d007c467a3600.js +1 -0
- package/.next/static/chunks/{8407-35bbfc84793d7004.js → 8407-dd6a8062fc449899.js} +1 -1
- package/.next/static/chunks/app/api/agents/update/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/agents/versions/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/app/release-notes/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/app/update/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/resolve/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/relays/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/remote/pair/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/role-defaults/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/roles/[id]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/roles/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/settings/agent-role-defaults/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/settings/default-agents/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/skills/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/templates/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/roles/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/roles/settle/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/layout-7bf800fcc5e025b1.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/more/{page-ff5af5ca48774c89.js → page-e8f5780f6e4fb657.js} +1 -1
- package/.next/static/chunks/app/{page-b4863bfe0452e09d.js → page-869f353a4ac4e15b.js} +1 -1
- package/.next/static/chunks/app/proxy/[...path]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/repositories/page-bedb505687010f18.js +1 -0
- package/.next/static/chunks/app/review/page-87c4a9b0de50fa80.js +1 -0
- package/.next/static/chunks/app/sessions/{page-c6eb7c02db2f4c80.js → page-82ca46793789fce4.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-570eb79fbbd1a934.js +1 -0
- package/.next/static/chunks/{webpack-838df0273b03af19.js → webpack-16b1a3143fa42ca0.js} +1 -1
- package/.next/static/css/d4f2c9522cf1b449.css +1 -0
- package/.next/static/z4d8-5MaLkoD-4EhueZwk/_buildManifest.js +1 -0
- package/.next/trace +14 -13
- package/.next/types/app/api/relays/[relayId]/resolve/route.ts +347 -0
- package/.next/types/app/api/repositories/[id]/role-defaults/route.ts +347 -0
- package/.next/types/app/api/roles/[id]/route.ts +347 -0
- package/.next/types/app/api/roles/route.ts +347 -0
- package/.next/types/app/api/settings/agent-role-defaults/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/instances/roles/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/instances/roles/settle/route.ts +347 -0
- package/.next/types/routes.d.ts +8 -1
- package/.next/types/validator.ts +63 -0
- package/dist/cli/commands/instances.d.ts +1 -0
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +290 -33
- package/dist/cli/commands/message-dispatch.d.ts +25 -3
- package/dist/cli/commands/message-dispatch.d.ts.map +1 -1
- package/dist/cli/commands/message-dispatch.js +26 -6
- package/dist/cli/commands/prompt.d.ts.map +1 -1
- package/dist/cli/commands/prompt.js +2 -1
- package/dist/cli/commands/relays.d.ts +7 -0
- package/dist/cli/commands/relays.d.ts.map +1 -1
- package/dist/cli/commands/relays.js +179 -6
- package/dist/cli/commands/report.d.ts +7 -2
- package/dist/cli/commands/report.d.ts.map +1 -1
- package/dist/cli/commands/report.js +19 -6
- package/dist/cli/commands/respond-strict.d.ts.map +1 -1
- package/dist/cli/commands/respond-strict.js +9 -2
- package/dist/cli/commands/roles.d.ts +11 -0
- package/dist/cli/commands/roles.d.ts.map +1 -0
- package/dist/cli/commands/roles.js +392 -0
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +526 -38
- package/dist/cli/commands/task.d.ts +22 -0
- package/dist/cli/commands/task.d.ts.map +1 -1
- package/dist/cli/commands/task.js +26 -18
- package/dist/cli/docs/agent-operations.d.ts +1 -1
- package/dist/cli/docs/agent-operations.d.ts.map +1 -1
- package/dist/cli/docs/agent-operations.js +91 -3
- package/dist/cli/index.d.ts +4 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +6 -0
- package/dist/cli/types/api-responses.d.ts +106 -0
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/index.d.ts +38 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/types/index.js +15 -1
- package/dist/cli/utils/agent-instances.d.ts +29 -1
- package/dist/cli/utils/agent-instances.d.ts.map +1 -1
- package/dist/cli/utils/agent-instances.js +67 -7
- package/dist/cli/utils/agent-roles.d.ts +75 -0
- package/dist/cli/utils/agent-roles.d.ts.map +1 -0
- package/dist/cli/utils/agent-roles.js +238 -0
- package/dist/cli/utils/api-client-deadline.d.ts +28 -0
- package/dist/cli/utils/api-client-deadline.d.ts.map +1 -0
- package/dist/cli/utils/api-client-deadline.js +46 -0
- package/dist/cli/utils/api-client-errors.d.ts +140 -0
- package/dist/cli/utils/api-client-errors.d.ts.map +1 -0
- package/dist/cli/utils/api-client-errors.js +222 -0
- package/dist/cli/utils/api-client.d.ts +9 -131
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +43 -258
- package/dist/cli/utils/role-failure.d.ts +31 -0
- package/dist/cli/utils/role-failure.d.ts.map +1 -0
- package/dist/cli/utils/role-failure.js +90 -0
- package/dist/cli/utils/role-input.d.ts +16 -0
- package/dist/cli/utils/role-input.d.ts.map +1 -0
- package/dist/cli/utils/role-input.js +78 -0
- package/dist/cli/utils/security-logger.d.ts +17 -0
- package/dist/cli/utils/security-logger.d.ts.map +1 -1
- package/dist/cli/utils/security-logger.js +44 -5
- package/dist/lib/cli-tools/types.d.ts +6 -0
- package/dist/lib/cli-tools/types.d.ts.map +1 -1
- package/dist/lib/detection/tools/verified-against.d.ts +16 -0
- package/dist/lib/detection/tools/verified-against.d.ts.map +1 -1
- package/dist/lib/detection/tools/verified-against.js +16 -0
- package/dist/lib/session/send-attempt-types.d.ts +4 -0
- package/dist/lib/session/send-attempt-types.d.ts.map +1 -1
- package/dist/lib/verification/verify-config.d.ts +22 -0
- package/dist/lib/verification/verify-config.d.ts.map +1 -1
- package/dist/lib/verification/verify-config.js +32 -2
- package/dist/server/locales/en/worktree.json +30 -4
- package/dist/server/locales/ja/worktree.json +30 -4
- package/dist/server/src/config/safe-directory.js +30 -0
- package/dist/server/src/lib/agent-roles/adapters.js +174 -0
- package/dist/server/src/lib/agent-roles/artifacts.js +638 -0
- package/dist/server/src/lib/agent-roles/composition.js +222 -0
- package/dist/server/src/lib/agent-roles/fingerprint.js +21 -0
- package/dist/server/src/lib/agent-roles/jsonc.js +85 -0
- package/dist/server/src/lib/agent-roles/launch-errors.js +58 -0
- package/dist/server/src/lib/agent-roles/pane-env.js +63 -0
- package/dist/server/src/lib/agent-roles/resolve.js +375 -0
- package/dist/server/src/lib/agent-roles/toml-basic.js +140 -0
- package/dist/server/src/lib/agent-roles/unicode.js +16 -0
- package/dist/server/src/lib/agent-roles/validation.js +61 -0
- package/dist/server/src/lib/cli-tools/antigravity.js +39 -6
- package/dist/server/src/lib/cli-tools/base.js +63 -5
- package/dist/server/src/lib/cli-tools/claude-auto-default-nudge.js +141 -0
- package/dist/server/src/lib/cli-tools/claude.js +15 -3
- package/dist/server/src/lib/cli-tools/codex.js +134 -21
- package/dist/server/src/lib/cli-tools/command-code.js +28 -13
- package/dist/server/src/lib/cli-tools/copilot.js +189 -31
- package/dist/server/src/lib/cli-tools/gemini.js +37 -3
- package/dist/server/src/lib/cli-tools/launch-answer-skips.js +76 -0
- package/dist/server/src/lib/cli-tools/opencode-v2.js +10 -0
- package/dist/server/src/lib/cli-tools/opencode.js +214 -12
- package/dist/server/src/lib/cli-tools/prompt-wait-dialog.js +115 -0
- package/dist/server/src/lib/cli-tools/submit-composer-read.js +65 -12
- package/dist/server/src/lib/cli-tools/submit-verified-sender-composer.js +78 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender-lock.js +116 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender-report.js +250 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender-shared.js +106 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender.js +94 -295
- package/dist/server/src/lib/cli-tools/vibe-local.js +111 -0
- package/dist/server/src/lib/db/agent-instances-db.js +53 -0
- package/dist/server/src/lib/db/agent-roles-db.js +409 -0
- package/dist/server/src/lib/db/agent-session-cost-sampler.js +3 -2
- package/dist/server/src/lib/db/chat-db.js +14 -1
- package/dist/server/src/lib/db/db-instance.js +84 -2
- package/dist/server/src/lib/db/migrations/index.js +6 -0
- package/dist/server/src/lib/db/migrations/runner.js +1 -1
- package/dist/server/src/lib/db/migrations/v63-session-relays-delivery-attempt.js +61 -0
- package/dist/server/src/lib/db/migrations/v64-agent-roles.js +123 -0
- package/dist/server/src/lib/db/migrations/v65-agent-instance-creation-keys.js +42 -0
- package/dist/server/src/lib/db/relay-bind-db-base.js +89 -0
- package/dist/server/src/lib/db/relay-bind-db-delivery.js +223 -0
- package/dist/server/src/lib/db/relay-bind-db-pending.js +183 -0
- package/dist/server/src/lib/db/relay-bind-db.js +88 -167
- package/dist/server/src/lib/db/relay-db-base.js +20 -0
- package/dist/server/src/lib/db/relay-db-count.js +49 -0
- package/dist/server/src/lib/db/relay-db-delivery.js +104 -0
- package/dist/server/src/lib/db/relay-db-hold.js +250 -0
- package/dist/server/src/lib/db/relay-db.js +68 -92
- package/dist/server/src/lib/detection/cli-patterns.js +13 -3
- package/dist/server/src/lib/detection/model-info-extractor.js +1 -1
- package/dist/server/src/lib/detection/tools/claude/patterns.js +76 -0
- package/dist/server/src/lib/detection/tools/codex/cli-patterns.js +5 -0
- package/dist/server/src/lib/detection/tools/codex/detect.js +5 -1
- package/dist/server/src/lib/detection/tools/codex/patterns.js +52 -2
- package/dist/server/src/lib/detection/tools/codex/prompt.js +23 -3
- package/dist/server/src/lib/detection/tools/opencode/composer-own-text.js +119 -0
- package/dist/server/src/lib/detection/tools/opencode/detect.js +30 -15
- package/dist/server/src/lib/detection/tools/opencode/patterns.js +268 -7
- package/dist/server/src/lib/detection/tools/opencode/readiness.js +71 -0
- package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +51 -15
- package/dist/server/src/lib/detection/tools/opencode-v2/patterns.js +195 -11
- package/dist/server/src/lib/detection/tools/run-detection.js +5 -2
- package/dist/server/src/lib/detection/tools/verified-against.js +16 -0
- package/dist/server/src/lib/detection/tools/vibe-local/readiness.js +92 -0
- package/dist/server/src/lib/git/git-common-dir.js +192 -0
- package/dist/server/src/lib/hooks/hook-settings-generator.js +8 -2
- package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +31 -1
- package/dist/server/src/lib/hooks/sources/launch-command.js +31 -8
- package/dist/server/src/lib/hooks/sources/opencode/client.js +20 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/client.js +24 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +208 -35
- package/dist/server/src/lib/hooks/sources/opencode-v2/secrets.js +7 -1
- package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +117 -2
- package/dist/server/src/lib/job-executor.js +18 -1
- package/dist/server/src/lib/polling/response-checker-extraction-steps.js +58 -4
- package/dist/server/src/lib/polling/response-checker.js +32 -7
- package/dist/server/src/lib/relay/relay-bound-reply.js +20 -9
- package/dist/server/src/lib/relay/relay-delivery-block.js +150 -0
- package/dist/server/src/lib/relay/relay-delivery.js +416 -79
- package/dist/server/src/lib/relay/relay-messages.js +13 -0
- package/dist/server/src/lib/relay/relay-system-line.js +28 -15
- package/dist/server/src/lib/relay/types.js +14 -2
- package/dist/server/src/lib/response-cleaner.js +13 -3
- package/dist/server/src/lib/response-extractor.js +38 -3
- package/dist/server/src/lib/session/agent-session-lifecycle.js +9 -1
- package/dist/server/src/lib/session/claude-executor.js +13 -1
- package/dist/server/src/lib/session/claude-session.js +113 -14
- package/dist/server/src/lib/session/current-output-builder.js +7 -5
- package/dist/server/src/lib/session/instance-input-lock.js +140 -6
- package/dist/server/src/lib/session/prompt-submit-receipt.js +87 -18
- package/dist/server/src/lib/session/prompt-waiting-guard.js +8 -2
- package/dist/server/src/lib/session/respond-target.js +82 -0
- package/dist/server/src/lib/session/role-launch.js +722 -0
- package/dist/server/src/lib/session/send-attempt-state.js +137 -3
- package/dist/server/src/lib/session/send-user-message.js +84 -7
- package/dist/server/src/lib/session/session-generation-archive.js +7 -8
- package/dist/server/src/lib/session/session-launch-flight.js +33 -1
- package/dist/server/src/lib/session/structured-prompt.js +12 -7
- package/dist/server/src/lib/session/worktree-session-reconcile.js +15 -0
- package/dist/server/src/lib/session-key-sender.js +6 -1
- package/dist/server/src/lib/test-run-detection.js +53 -0
- package/dist/server/src/lib/tmux/read-mode.js +4 -0
- package/dist/server/src/lib/tmux/session-hook-scripts.js +36 -4
- package/dist/server/src/lib/tui-accumulator.js +14 -5
- package/dist/server/src/lib/verification/env-clean-gate.js +117 -12
- package/dist/server/src/lib/verification/gate-runner.js +9 -8
- package/dist/server/src/lib/verification/verify-config.js +32 -2
- package/dist/server/src/types/agent-roles.js +56 -0
- package/dist/types/agent-roles.d.ts +351 -0
- package/dist/types/agent-roles.d.ts.map +1 -0
- package/dist/types/agent-roles.js +56 -0
- package/docs/en/user-guide/webapp-guide.md +16 -0
- package/package.json +2 -1
- package/release-notes/0.49.3.json +52 -0
- package/release-notes/0.50.0.json +113 -0
- package/.next/server/chunks/1062.js +0 -1
- package/.next/server/chunks/110.js +0 -1
- package/.next/server/chunks/2422.js +0 -1
- package/.next/server/chunks/3756.js +0 -1
- package/.next/server/chunks/4936.js +0 -1
- package/.next/server/chunks/5630.js +0 -1
- package/.next/server/chunks/610.js +0 -1
- package/.next/server/chunks/6119.js +0 -1
- package/.next/server/chunks/6808.js +0 -4
- package/.next/server/chunks/7491.js +0 -3
- package/.next/server/chunks/9198.js +0 -144
- package/.next/server/chunks/9360.js +0 -2
- package/.next/server/chunks/9584.js +0 -1
- package/.next/static/chunks/2407-07a237575e1ceb9e.js +0 -1
- package/.next/static/chunks/344-e1cefd00787060e4.js +0 -1
- package/.next/static/chunks/3931-61ad1a4fc0208d0e.js +0 -1
- package/.next/static/chunks/7229.7f0f5a7032b612b4.js +0 -1
- package/.next/static/chunks/8165-263172c17ae8e8c3.js +0 -1
- package/.next/static/chunks/app/api/agents/update/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/agents/versions/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/app/release-notes/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/capabilities/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/relays/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/remote/pair/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/settings/default-agents/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/skills/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/templates/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/layout-4f64316957b0a8e5.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/repositories/page-71f5a5ac29b0370d.js +0 -1
- package/.next/static/chunks/app/review/page-ff3efb96fdf9bb4b.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-a4f129c451de7859.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-33afc6aa96289fb0.js +0 -1
- package/.next/static/css/c1e307d05daf93b6.css +0 -1
- package/.next/static/yGatWDsS532awSs51kXyd/_buildManifest.js +0 -1
- /package/.next/static/{yGatWDsS532awSs51kXyd → z4d8-5MaLkoD-4EhueZwk}/_ssgManifest.js +0 -0
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* [SEC4-001].
|
|
18
18
|
*/
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.CopilotTool = exports.COPILOT_EXIT_COMMAND = void 0;
|
|
20
|
+
exports.CopilotTool = exports.COPILOT_EXIT_COMMAND = exports.COPILOT_DIALOG_CONFIRM_MS = void 0;
|
|
21
21
|
exports.isCopilotStartupLoading = isCopilotStartupLoading;
|
|
22
22
|
exports.readCopilotModelSwitchOutcomes = readCopilotModelSwitchOutcomes;
|
|
23
23
|
exports.judgeCopilotModelSwitch = judgeCopilotModelSwitch;
|
|
@@ -25,7 +25,10 @@ const base_1 = require("./base");
|
|
|
25
25
|
const tmux_1 = require("../tmux/tmux");
|
|
26
26
|
const submit_verified_sender_1 = require("./submit-verified-sender");
|
|
27
27
|
const composer_clear_1 = require("../../lib/session/composer-clear");
|
|
28
|
+
const send_attempt_types_1 = require("../../lib/session/send-attempt-types");
|
|
29
|
+
const prompt_wait_dialog_1 = require("./prompt-wait-dialog");
|
|
28
30
|
const tmux_capture_cache_1 = require("../tmux/tmux-capture-cache");
|
|
31
|
+
const status_detector_1 = require("../detection/status-detector");
|
|
29
32
|
const cli_patterns_1 = require("../detection/cli-patterns");
|
|
30
33
|
const copilot_executable_1 = require("./copilot-executable");
|
|
31
34
|
const copilot_constants_1 = require("../../config/copilot-constants");
|
|
@@ -35,6 +38,7 @@ const hook_settings_1 = require("../../lib/hooks/sources/copilot/hook-settings")
|
|
|
35
38
|
const tool_id_1 = require("../../lib/hooks/sources/copilot/tool-id");
|
|
36
39
|
const errors_1 = require("../../lib/errors");
|
|
37
40
|
const logger_1 = require("../../lib/logger");
|
|
41
|
+
const launch_answer_skips_1 = require("./launch-answer-skips");
|
|
38
42
|
const install_hints_1 = require("./install-hints");
|
|
39
43
|
const launch_window_1 = require("./launch-window");
|
|
40
44
|
const launch_screen_1 = require("../../lib/session/launch-screen");
|
|
@@ -46,6 +50,19 @@ const COPILOT_POLL_INTERVAL_MS = 1000;
|
|
|
46
50
|
const COPILOT_INIT_MAX_ATTEMPTS = 30;
|
|
47
51
|
/** Timeout for waiting for prompt before sending a message */
|
|
48
52
|
const COPILOT_PROMPT_WAIT_TIMEOUT_MS = 15000;
|
|
53
|
+
/**
|
|
54
|
+
* How long a dialog has to stay up in {@link CopilotTool.waitForPrompt} before
|
|
55
|
+
* the wait gives up on it (Issue #4067), on {@link PROMPT_WAIT_DIALOG_CONFIRM_READS}
|
|
56
|
+
* reads in a row.
|
|
57
|
+
*
|
|
58
|
+
* A dialog waits for a person, so waiting out the 15 s (or `/model`'s 30 s)
|
|
59
|
+
* window behind it only delays the refusal — and the picker and `/model` wait
|
|
60
|
+
* holding the instance's input lock, so Auto-Yes and other writers wait too.
|
|
61
|
+
* Both thresholds must hold, so a frame caught mid-paint that reads as a
|
|
62
|
+
* dialog once does not refuse a send. The count is shared with opencode's and
|
|
63
|
+
* vibe-local's waits (Issue #4084, {@link createDialogConfirmation}).
|
|
64
|
+
*/
|
|
65
|
+
exports.COPILOT_DIALOG_CONFIRM_MS = prompt_wait_dialog_1.PROMPT_WAIT_DIALOG_CONFIRM_MS;
|
|
49
66
|
/**
|
|
50
67
|
* Copilot CLI slash commands that open a picker.
|
|
51
68
|
*
|
|
@@ -263,6 +280,50 @@ function describeBottomRow(output) {
|
|
|
263
280
|
}
|
|
264
281
|
return 'an empty pane';
|
|
265
282
|
}
|
|
283
|
+
/**
|
|
284
|
+
* What held the pane when the wait for the composer ran out (Issue #4161), for the
|
|
285
|
+
* refusal `send` reports. Names the screen only: nothing captured goes into it, and
|
|
286
|
+
* `classifySendFailure` reads the result (see the refusals below).
|
|
287
|
+
*
|
|
288
|
+
* A dialog does not get here: the re-read before each refusal answers `prompt-waiting`.
|
|
289
|
+
*
|
|
290
|
+
* @param output - The last capture with ANSI stripped; empty when the last read failed
|
|
291
|
+
*/
|
|
292
|
+
function describeCopilotPaneHold(output) {
|
|
293
|
+
if (output === '')
|
|
294
|
+
return 'the pane could not be read';
|
|
295
|
+
return 'no composer on the pane: copilot may still be starting';
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Re-read the pane and throw `recheckComposerBeforeInput`'s `prompt-waiting`
|
|
299
|
+
* refusal when a dialog is open (Issue #4040). Any other outcome — no dialog,
|
|
300
|
+
* or a re-read that failed — returns, so the caller's own refusal stands.
|
|
301
|
+
*/
|
|
302
|
+
async function rethrowIfDialogOpen(sessionName) {
|
|
303
|
+
try {
|
|
304
|
+
await (0, composer_clear_1.recheckComposerBeforeInput)(sessionName, 'copilot');
|
|
305
|
+
}
|
|
306
|
+
catch (error) {
|
|
307
|
+
if (error.code === send_attempt_types_1.INPUT_RECHECK_PROMPT_WAITING_CODE)
|
|
308
|
+
throw error;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Refuse as `prompt-waiting` after {@link CopilotTool.waitForPrompt} saw a
|
|
313
|
+
* dialog stay up for {@link COPILOT_DIALOG_CONFIRM_MS} (Issue #4067), with the
|
|
314
|
+
* re-check's `code` and the wording `classifySendFailure` reads as
|
|
315
|
+
* `prompt-waiting`. Nothing has been typed.
|
|
316
|
+
*
|
|
317
|
+
* Refused on the wait's own reads, without reading the pane once more: those
|
|
318
|
+
* reads already confirmed the dialog, and another capture (tmux's own time-out
|
|
319
|
+
* is 5 s) would keep the picker and `/model` holding the instance's input lock
|
|
320
|
+
* past the confirmation time (review of #4067).
|
|
321
|
+
*/
|
|
322
|
+
function refuseConfirmedDialog(sessionName) {
|
|
323
|
+
logger.warn('input-recheck-prompt-waiting', { sessionName, cliToolId: 'copilot', confirmedMs: exports.COPILOT_DIALOG_CONFIRM_MS });
|
|
324
|
+
throw Object.assign(new Error(`A prompt dialog stayed open in session ${sessionName} for ${exports.COPILOT_DIALOG_CONFIRM_MS}ms ` +
|
|
325
|
+
'while the copilot composer was awaited (re-checked under the input lock); nothing was typed (Issue #4067).'), { code: send_attempt_types_1.INPUT_RECHECK_PROMPT_WAITING_CODE });
|
|
326
|
+
}
|
|
266
327
|
/**
|
|
267
328
|
* Copilot CLI tool implementation
|
|
268
329
|
* Manages GitHub Copilot interactive sessions using tmux
|
|
@@ -435,15 +496,21 @@ class CopilotTool extends base_1.BaseCLITool {
|
|
|
435
496
|
* @param sessionName - tmux session name
|
|
436
497
|
* @param output - ANSI-stripped pane capture
|
|
437
498
|
* @param readMark - {@link instanceInputReadMark} taken before `output` was read
|
|
499
|
+
* @param skips - The calling wait's record of answers that did not go out (Issue #4161)
|
|
438
500
|
* @returns True when the dialog was found and answered
|
|
439
501
|
*/
|
|
440
|
-
async answerFolderTrustDialog(sessionName, output, readMark) {
|
|
502
|
+
async answerFolderTrustDialog(sessionName, output, readMark, skips) {
|
|
441
503
|
if (!(0, cli_patterns_1.isCopilotFolderTrustDialog)(output)) {
|
|
442
504
|
return false;
|
|
443
505
|
}
|
|
444
|
-
|
|
506
|
+
// Issue #4189: the session's life before the answer's await; a decline of an older life writes no record for the new one.
|
|
507
|
+
const answerLife = (0, instance_input_lock_1.instanceInputAnswerSkipLife)(sessionName);
|
|
508
|
+
const outcome = await (0, instance_input_lock_1.answerUnderInstanceInputLock)(sessionName, readMark, async () => (0, cli_patterns_1.isCopilotFolderTrustDialog)((0, cli_patterns_1.stripAnsi)(await (0, tmux_1.capturePane)(sessionName, 50))), () => (0, tmux_1.sendKeys)(sessionName, cli_patterns_1.COPILOT_FOLDER_TRUST_ANSWER_KEY, false),
|
|
509
|
+
// Issue #4189: the lock's warn of a decline, once per streak in the calling wait.
|
|
510
|
+
{ repeatScope: skips });
|
|
445
511
|
if (!outcome.answered) {
|
|
446
|
-
|
|
512
|
+
// Issue #4189: the session, so a decline after it was made again is a new one.
|
|
513
|
+
(0, launch_answer_skips_1.noteLaunchAnswerSkipped)(logger, skips, 'copilot-folder-trust-answer-skipped', { sessionName, reason: outcome.reason }, answerLife);
|
|
447
514
|
return false;
|
|
448
515
|
}
|
|
449
516
|
(0, launch_window_1.recordLaunchDialogPress)(sessionName);
|
|
@@ -515,6 +582,7 @@ class CopilotTool extends base_1.BaseCLITool {
|
|
|
515
582
|
*/
|
|
516
583
|
async waitForReady(sessionName) {
|
|
517
584
|
let trustDialogHandled = false;
|
|
585
|
+
const answerSkips = (0, launch_answer_skips_1.newLaunchAnswerSkips)();
|
|
518
586
|
for (let i = 0; i < COPILOT_INIT_MAX_ATTEMPTS; i++) {
|
|
519
587
|
try {
|
|
520
588
|
const readMark = (0, instance_input_lock_1.instanceInputReadMark)();
|
|
@@ -525,7 +593,7 @@ class CopilotTool extends base_1.BaseCLITool {
|
|
|
525
593
|
logger.info('copilot-prompt-detected');
|
|
526
594
|
return;
|
|
527
595
|
}
|
|
528
|
-
if (!trustDialogHandled && (await this.answerFolderTrustDialog(sessionName, output, readMark))) {
|
|
596
|
+
if (!trustDialogHandled && (await this.answerFolderTrustDialog(sessionName, output, readMark, answerSkips))) {
|
|
529
597
|
trustDialogHandled = true;
|
|
530
598
|
}
|
|
531
599
|
}
|
|
@@ -548,17 +616,18 @@ class CopilotTool extends base_1.BaseCLITool {
|
|
|
548
616
|
* `❯` at column 0 while it is Working, the loop captures BEFORE its first
|
|
549
617
|
* sleep, and `COPILOT_PROMPT_PATTERN` matches immediately. A whole
|
|
550
618
|
* `sendMessage` measured 338 ms end to end, verification included.
|
|
551
|
-
* - **Composer gone — a dialog is up: the full 15 s
|
|
552
|
-
*
|
|
553
|
-
* the
|
|
554
|
-
* which is single-line, so a four-line message arrived as
|
|
555
|
-
* `ping oneping twoping three…`.
|
|
619
|
+
* - **Composer gone — a dialog is up: the full 15 s.** Measured against a
|
|
620
|
+
* session parked on copilot's own `Asked user …` question: until Issue #4040
|
|
621
|
+
* the send then went ahead, and the body was typed into the QUESTION's input
|
|
622
|
+
* line, which is single-line, so a four-line message arrived as
|
|
623
|
+
* `ping oneping twoping three…`. Now the window expiring refuses the send.
|
|
556
624
|
*
|
|
557
625
|
* That second case is #559's objection, and it is real — but it is not a
|
|
558
626
|
* reason to skip this method, because skipping it is what produced the same
|
|
559
|
-
* outcome in 0 ms instead of 15 s.
|
|
560
|
-
*
|
|
561
|
-
* `isPromptWaiting` (#1708/#1737) and
|
|
627
|
+
* outcome in 0 ms instead of 15 s. The layer above refuses most dialogs
|
|
628
|
+
* first: `sendUserMessage` and the terminal route both consult
|
|
629
|
+
* `isPromptWaiting` (#1708/#1737), and the shared sender re-reads the pane
|
|
630
|
+
* under the input lock (#3945).
|
|
562
631
|
*
|
|
563
632
|
* Issue #2623 adds a third case, measured on 1.0.85: **composer on screen,
|
|
564
633
|
* copilot still starting — until loading ends (3–4.5 s).** The composer is drawn
|
|
@@ -567,23 +636,49 @@ class CopilotTool extends base_1.BaseCLITool {
|
|
|
567
636
|
* used to end this wait in 0 ms right there, which is how `send --model` on a
|
|
568
637
|
* session it had just started typed a body that never ran.
|
|
569
638
|
*
|
|
570
|
-
* Timing out
|
|
571
|
-
*
|
|
639
|
+
* Timing out logs and returns `ready: false`; every caller reads it and types
|
|
640
|
+
* nothing then — the normal send since Issue #4040 (it used to drop the result
|
|
641
|
+
* and send anyway), the selection-list branch and {@link sendModelCommand}.
|
|
642
|
+
*
|
|
643
|
+
* Issue #4067: a dialog does not wait out the window. A frame the shared
|
|
644
|
+
* sender's re-check would refuse (`detectSessionStatus().hasActivePrompt`,
|
|
645
|
+
* {@link recheckComposerBeforeInput}) on {@link PROMPT_WAIT_DIALOG_CONFIRM_READS}
|
|
646
|
+
* reads in a row spanning {@link COPILOT_DIALOG_CONFIRM_MS} returns
|
|
647
|
+
* `ready: false, dialog: true`, and every caller refuses it as
|
|
648
|
+
* `prompt-waiting`. Not counted: the folder-trust dialog (answered above,
|
|
649
|
+
* #1886), and a frame with the composer drawn — `idle` waits through a
|
|
650
|
+
* Working turn, which keeps `❯` on screen, and that is not a dialog.
|
|
651
|
+
*
|
|
652
|
+
* Issue #4084: no capture is waited for past `timeoutMs` ({@link readBeforeDeadline}):
|
|
653
|
+
* one still running then, or one that answers after it, is not used.
|
|
572
654
|
*
|
|
573
655
|
* @param sessionName - tmux session name
|
|
574
656
|
* @param timeoutMs - Optional timeout in ms (default: COPILOT_PROMPT_WAIT_TIMEOUT_MS)
|
|
575
657
|
* @param until - What counts as ready (Issue #2623, default `composer`)
|
|
576
|
-
* @returns Whether the pane got there,
|
|
658
|
+
* @returns Whether the pane got there, the last frame read (ANSI stripped),
|
|
659
|
+
* and whether it gave up on a dialog (Issue #4067)
|
|
577
660
|
*/
|
|
578
661
|
async waitForPrompt(sessionName, timeoutMs = COPILOT_PROMPT_WAIT_TIMEOUT_MS, until = 'composer') {
|
|
579
|
-
|
|
662
|
+
// Issue #4084: one deadline for the whole wait — a capture still running at
|
|
663
|
+
// it is not waited for, and a frame it returns past it is not used.
|
|
664
|
+
const deadline = Date.now() + timeoutMs;
|
|
580
665
|
const pollInterval = 500;
|
|
581
666
|
let trustDialogHandled = false;
|
|
582
667
|
let output = '';
|
|
583
|
-
|
|
668
|
+
// Issue #4161: the last read failed, so `output` says nothing about the pane now.
|
|
669
|
+
let lastReadFailed = false;
|
|
670
|
+
const answerSkips = (0, launch_answer_skips_1.newLaunchAnswerSkips)();
|
|
671
|
+
// Issue #4067: the current run of reads that showed a dialog (counted by
|
|
672
|
+
// the helper opencode and vibe-local share, Issue #4084).
|
|
673
|
+
const dialog = (0, prompt_wait_dialog_1.createDialogConfirmation)();
|
|
674
|
+
while (Date.now() < deadline) {
|
|
584
675
|
try {
|
|
585
676
|
const readMark = (0, instance_input_lock_1.instanceInputReadMark)();
|
|
586
|
-
|
|
677
|
+
lastReadFailed = true;
|
|
678
|
+
const rawOutput = await (0, prompt_wait_dialog_1.readBeforeDeadline)(() => (0, tmux_1.capturePane)(sessionName, 50), deadline);
|
|
679
|
+
if (rawOutput === null)
|
|
680
|
+
break;
|
|
681
|
+
lastReadFailed = false;
|
|
587
682
|
output = (0, cli_patterns_1.stripAnsi)(rawOutput);
|
|
588
683
|
if (this.isReadyFor(until, output)) {
|
|
589
684
|
return { ready: true, output };
|
|
@@ -591,21 +686,31 @@ class CopilotTool extends base_1.BaseCLITool {
|
|
|
591
686
|
// Issue #1886: `startSession` returns early for a session that already
|
|
592
687
|
// exists, so a pane adopted from outside CommandMate -- or one whose
|
|
593
688
|
// trust dialog nobody answered -- arrives here still sitting on it.
|
|
594
|
-
//
|
|
595
|
-
//
|
|
596
|
-
//
|
|
597
|
-
//
|
|
598
|
-
//
|
|
599
|
-
//
|
|
600
|
-
if (!trustDialogHandled && (await this.answerFolderTrustDialog(sessionName, output, readMark))) {
|
|
689
|
+
// Until Issue #4040 the normal send went ahead on a timeout, which
|
|
690
|
+
// typed the message body INTO the dialog; the body's digits are option
|
|
691
|
+
// selections there, so a message containing `2` picks "Yes, and
|
|
692
|
+
// remember this folder" and writes the operator's machine-global
|
|
693
|
+
// ~/.copilot/config.json. The send now refuses instead, but answering
|
|
694
|
+
// it here (as the launch path does) is what lets that send go through.
|
|
695
|
+
if (!trustDialogHandled && (await this.answerFolderTrustDialog(sessionName, output, readMark, answerSkips))) {
|
|
601
696
|
trustDialogHandled = true;
|
|
602
697
|
}
|
|
698
|
+
if (dialog.observe(this.isRefusableDialog(rawOutput, output))) {
|
|
699
|
+
logger.info('copilot-prompt-wait-dialog', { until, reads: dialog.reads, bottomRow: describeBottomRow(output) });
|
|
700
|
+
return { ready: false, output, dialog: true };
|
|
701
|
+
}
|
|
603
702
|
}
|
|
604
703
|
catch {
|
|
605
|
-
// Capture may fail - continue polling
|
|
704
|
+
// Capture may fail - continue polling. Not a dialog read: the run restarts.
|
|
705
|
+
dialog.reset();
|
|
606
706
|
}
|
|
607
|
-
|
|
707
|
+
const remaining = deadline - Date.now();
|
|
708
|
+
if (remaining <= 0)
|
|
709
|
+
break;
|
|
710
|
+
await new Promise((resolve) => setTimeout(resolve, Math.min(pollInterval, remaining)));
|
|
608
711
|
}
|
|
712
|
+
if (lastReadFailed)
|
|
713
|
+
output = '';
|
|
609
714
|
logger.info('copilot-prompt-not-detected', { until, bottomRow: describeBottomRow(output) });
|
|
610
715
|
return { ready: false, output };
|
|
611
716
|
}
|
|
@@ -620,6 +725,32 @@ class CopilotTool extends base_1.BaseCLITool {
|
|
|
620
725
|
* @param until - What counts as ready
|
|
621
726
|
* @param output - ANSI-stripped pane capture
|
|
622
727
|
*/
|
|
728
|
+
/**
|
|
729
|
+
* {@link isReadyFor}`('composer')` for the shared sender's read under the
|
|
730
|
+
* input lock (Issue #4040). Not `idle`: copilot draws `❯` while Working and
|
|
731
|
+
* takes a body then, as it always has.
|
|
732
|
+
*/
|
|
733
|
+
inputReadiness = {
|
|
734
|
+
label: 'copilot',
|
|
735
|
+
isReady: (frame) => this.isReadyFor('composer', (0, cli_patterns_1.stripAnsi)(frame)),
|
|
736
|
+
};
|
|
737
|
+
/**
|
|
738
|
+
* Whether {@link waitForPrompt} counts this frame towards giving up on a
|
|
739
|
+
* dialog (Issue #4067): the shared sender's re-check would refuse it
|
|
740
|
+
* (`hasActivePrompt`), it is not the folder-trust dialog `waitForPrompt`
|
|
741
|
+
* answers itself (#1886), and no composer is drawn — a Working turn keeps
|
|
742
|
+
* `❯` up and is waited through, not refused.
|
|
743
|
+
*
|
|
744
|
+
* @param rawOutput - The capture as read (ANSI allowed), for the detector
|
|
745
|
+
* @param output - The same capture, ANSI stripped
|
|
746
|
+
*/
|
|
747
|
+
isRefusableDialog(rawOutput, output) {
|
|
748
|
+
if ((0, cli_patterns_1.isCopilotFolderTrustDialog)(output))
|
|
749
|
+
return false;
|
|
750
|
+
if (this.isReadyFor('composer', output))
|
|
751
|
+
return false;
|
|
752
|
+
return (0, status_detector_1.detectSessionStatus)(rawOutput, 'copilot').hasActivePrompt;
|
|
753
|
+
}
|
|
623
754
|
isReadyFor(until, output) {
|
|
624
755
|
if (!cli_patterns_1.COPILOT_PROMPT_PATTERN.test(output))
|
|
625
756
|
return false;
|
|
@@ -700,6 +831,10 @@ class CopilotTool extends base_1.BaseCLITool {
|
|
|
700
831
|
// then refuses on the same terms right before the keys: a dialog is
|
|
701
832
|
// `prompt-waiting`, a pane that cannot be read `recheck-failed`.
|
|
702
833
|
const prompt = await this.waitForPrompt(sessionName);
|
|
834
|
+
// Issue #4067: a dialog that stayed up is refused at once — the lock
|
|
835
|
+
// is not held for the rest of the window behind it.
|
|
836
|
+
if (prompt.dialog)
|
|
837
|
+
refuseConfirmedDialog(sessionName);
|
|
703
838
|
await (0, composer_clear_1.recheckComposerBeforeInput)(sessionName, 'copilot');
|
|
704
839
|
if (!prompt.ready) {
|
|
705
840
|
// review-3: neither the request nor the pane goes into the message.
|
|
@@ -711,7 +846,7 @@ class CopilotTool extends base_1.BaseCLITool {
|
|
|
711
846
|
bottomRow: describeBottomRow(prompt.output),
|
|
712
847
|
});
|
|
713
848
|
throw new Error(`copilot prompt not ready within ${COPILOT_PROMPT_WAIT_TIMEOUT_MS}ms, ` +
|
|
714
|
-
|
|
849
|
+
`so the selection-list command was not sent; nothing was typed (${describeCopilotPaneHold(prompt.output)})`);
|
|
715
850
|
}
|
|
716
851
|
assertCopilotInputOwner(ticket, 'the selection-list command');
|
|
717
852
|
// Issue #3953: the send's stamp, as the shared sender takes it.
|
|
@@ -723,8 +858,25 @@ class CopilotTool extends base_1.BaseCLITool {
|
|
|
723
858
|
logger.info('sent-selection-list-command-to-copilot', { command: slashCmd });
|
|
724
859
|
return;
|
|
725
860
|
}
|
|
726
|
-
// Verify Copilot is at prompt state before sending
|
|
727
|
-
|
|
861
|
+
// Verify Copilot is at prompt state before sending. Issue #4040: a
|
|
862
|
+
// composer that never came up is not typed into — refused as the
|
|
863
|
+
// selection-list branch refuses (review-3: neither the body nor the pane
|
|
864
|
+
// goes into the message, which `classifySendFailure` reads).
|
|
865
|
+
const prompt = await this.waitForPrompt(sessionName);
|
|
866
|
+
if (!prompt.ready) {
|
|
867
|
+
// Issue #4067: the wait gave up on a dialog after its confirmation time
|
|
868
|
+
// rather than the whole 15 s window.
|
|
869
|
+
if (prompt.dialog)
|
|
870
|
+
refuseConfirmedDialog(sessionName);
|
|
871
|
+
// A dialog that opened during the wait and is still up is refused as
|
|
872
|
+
// the shared sender's re-check refuses it — `prompt-waiting` (409
|
|
873
|
+
// PROMPT_WAITING), not `prompt-not-ready`. A re-read that fails is
|
|
874
|
+
// left to the refusal below.
|
|
875
|
+
await rethrowIfDialogOpen(sessionName);
|
|
876
|
+
logger.warn('copilot-message-not-sent:prompt-not-ready', { bottomRow: describeBottomRow(prompt.output) });
|
|
877
|
+
throw new Error(`copilot prompt not ready within ${COPILOT_PROMPT_WAIT_TIMEOUT_MS}ms, ` +
|
|
878
|
+
`so the message was not sent; nothing was typed (${describeCopilotPaneHold(prompt.output)})`);
|
|
879
|
+
}
|
|
728
880
|
// Issue #1471: Body/Enter separation + read-back submit verification via the
|
|
729
881
|
// shared helper (replaces the old type -> C-m -> `\n`-gated paste recovery).
|
|
730
882
|
// Copilot's own text-input / post-Enter delays are preserved. The selection
|
|
@@ -736,6 +888,8 @@ class CopilotTool extends base_1.BaseCLITool {
|
|
|
736
888
|
composer: this.describeComposer(),
|
|
737
889
|
textInputWaitMs: copilot_constants_1.COPILOT_TEXT_INPUT_DELAY_MS,
|
|
738
890
|
verifyDelayMs: copilot_constants_1.COPILOT_SEND_ENTER_DELAY_MS,
|
|
891
|
+
// Issue #4040: the same test, of the newest frame read under the lock.
|
|
892
|
+
readiness: this.inputReadiness,
|
|
739
893
|
});
|
|
740
894
|
// Invalidate cache after sending message
|
|
741
895
|
(0, tmux_capture_cache_1.invalidateCache)(sessionName);
|
|
@@ -822,6 +976,10 @@ class CopilotTool extends base_1.BaseCLITool {
|
|
|
822
976
|
await (0, instance_input_lock_1.waitOutCarriedPasteMark)(ticket);
|
|
823
977
|
const idle = await this.waitForPrompt(sessionName, copilot_constants_1.COPILOT_MODEL_SWITCH_TIMEOUT_MS, 'idle');
|
|
824
978
|
if (!idle.ready) {
|
|
979
|
+
// Issue #4067: a dialog is refused after its confirmation time, not after
|
|
980
|
+
// the 30 s window under the lock.
|
|
981
|
+
if (idle.dialog)
|
|
982
|
+
refuseConfirmedDialog(sessionName);
|
|
825
983
|
// The pane's text goes to the log, not the message: the message is read by
|
|
826
984
|
// `classifySendFailure`, which a screen quoting its keywords would steer (#3954).
|
|
827
985
|
logger.warn('copilot-model-switch-not-idle', { model: modelName, bottomRow: describeBottomRow(idle.output) });
|
|
@@ -20,10 +20,12 @@ const cli_patterns_1 = require("../detection/cli-patterns");
|
|
|
20
20
|
const sources_1 = require("../../lib/hooks/sources");
|
|
21
21
|
const agent_session_lifecycle_1 = require("../../lib/session/agent-session-lifecycle");
|
|
22
22
|
const logger_1 = require("../../lib/logger");
|
|
23
|
+
const launch_answer_skips_1 = require("./launch-answer-skips");
|
|
23
24
|
const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
|
|
24
25
|
const launch_screen_1 = require("../../lib/session/launch-screen");
|
|
25
26
|
const errors_1 = require("../../lib/errors");
|
|
26
27
|
const launch_dialog_1 = require("./launch-dialog");
|
|
28
|
+
const status_detector_1 = require("../detection/status-detector");
|
|
27
29
|
const launch_window_1 = require("./launch-window");
|
|
28
30
|
const instance_input_lock_1 = require("../../lib/session/instance-input-lock");
|
|
29
31
|
const logger = (0, logger_1.createLogger)('cli-tools/gemini');
|
|
@@ -42,6 +44,30 @@ const GEMINI_INIT_MAX_ATTEMPTS = 30;
|
|
|
42
44
|
const GEMINI_TRUST_SETTLE_MS = 5000;
|
|
43
45
|
/** Timeout for waiting for prompt before sending a message */
|
|
44
46
|
const GEMINI_PROMPT_WAIT_TIMEOUT_MS = 15000;
|
|
47
|
+
/** The sign-in picker a new HOME gets after the trust restart (`tests/fixtures/gemini-live-3776/after-enter-auth.txt`). */
|
|
48
|
+
const GEMINI_AUTH_PICKER_ROW = /^[\s│]*How would you like to authenticate\b/m;
|
|
49
|
+
/**
|
|
50
|
+
* What held the pane when the wait for the prompt ran out (Issue #4146), for the
|
|
51
|
+
* refusal `send` reports. Names the screen only: nothing captured goes into it.
|
|
52
|
+
*
|
|
53
|
+
* @param output - The last capture with ANSI stripped; null when the last read failed
|
|
54
|
+
*/
|
|
55
|
+
function describeGeminiPaneHold(output) {
|
|
56
|
+
if (output === null)
|
|
57
|
+
return 'the pane could not be read';
|
|
58
|
+
if ((0, launch_dialog_1.isLaunchDialogOpen)(launch_dialog_1.GEMINI_TRUST_LAUNCH_DIALOG, output)) {
|
|
59
|
+
return 'the folder-trust dialog is open: answer it in the terminal';
|
|
60
|
+
}
|
|
61
|
+
if (GEMINI_AUTH_PICKER_ROW.test(output)) {
|
|
62
|
+
return 'the sign-in picker is open: answer it in the terminal';
|
|
63
|
+
}
|
|
64
|
+
const status = (0, status_detector_1.detectSessionStatus)(output, 'gemini');
|
|
65
|
+
if (status.hasActivePrompt)
|
|
66
|
+
return 'a prompt dialog is open: answer it in the terminal';
|
|
67
|
+
if ((0, status_detector_1.isGeneratingStatus)(status))
|
|
68
|
+
return 'a turn is still being generated';
|
|
69
|
+
return 'no input prompt on the pane: gemini may still be starting';
|
|
70
|
+
}
|
|
45
71
|
/**
|
|
46
72
|
* Gemini CLI tool implementation
|
|
47
73
|
* Manages Gemini interactive sessions using tmux
|
|
@@ -143,6 +169,7 @@ class GeminiTool extends base_1.BaseCLITool {
|
|
|
143
169
|
let trustDialogHandled = false;
|
|
144
170
|
let trustPressedAt = null;
|
|
145
171
|
const loggedDecisions = new Set();
|
|
172
|
+
const answerSkips = (0, launch_answer_skips_1.newLaunchAnswerSkips)();
|
|
146
173
|
for (let i = 0; i < GEMINI_INIT_MAX_ATTEMPTS; i++) {
|
|
147
174
|
try {
|
|
148
175
|
// Issue #3975: taken before the read the trust Enter is decided on.
|
|
@@ -163,10 +190,14 @@ class GeminiTool extends base_1.BaseCLITool {
|
|
|
163
190
|
// Issue #3975: the Enter as an `exclusive` writer, so it never lands
|
|
164
191
|
// inside a send's body, paste or Enter; a send that came between
|
|
165
192
|
// the read and the lock makes the dialog be read again first.
|
|
193
|
+
// Issue #4189: the session's life before the answer's await; a decline of an older life writes no record for the new one.
|
|
194
|
+
const answerLife = (0, instance_input_lock_1.instanceInputAnswerSkipLife)(sessionName);
|
|
166
195
|
const pressed = await (0, instance_input_lock_1.answerUnderInstanceInputLock)(sessionName, readMark, async () => {
|
|
167
196
|
const again = (0, launch_dialog_1.decideLaunchDialog)(launch_dialog_1.GEMINI_TRUST_LAUNCH_DIALOG, (0, cli_patterns_1.stripAnsi)(await (0, tmux_1.capturePane)(sessionName, capture_spec_1.GEMINI_PANE_HEIGHT)));
|
|
168
197
|
return again.action === 'press' && again.key === decision.key;
|
|
169
|
-
}, () => (0, tmux_1.sendSpecialKey)(sessionName, decision.key),
|
|
198
|
+
}, () => (0, tmux_1.sendSpecialKey)(sessionName, decision.key),
|
|
199
|
+
// Issue #4189: the lock's warn of a decline, once per streak in this wait.
|
|
200
|
+
{ mode: 'exclusive', repeatScope: answerSkips });
|
|
170
201
|
if (pressed.answered) {
|
|
171
202
|
trustDialogHandled = true;
|
|
172
203
|
trustPressedAt = Date.now();
|
|
@@ -178,7 +209,7 @@ class GeminiTool extends base_1.BaseCLITool {
|
|
|
178
209
|
}
|
|
179
210
|
else {
|
|
180
211
|
// Not answered this poll; the next one reads the screen again.
|
|
181
|
-
|
|
212
|
+
(0, launch_answer_skips_1.noteLaunchAnswerSkipped)(logger, answerSkips, 'gemini-trust-answer-skipped', { sessionName, reason: pressed.reason }, answerLife);
|
|
182
213
|
}
|
|
183
214
|
}
|
|
184
215
|
else {
|
|
@@ -215,16 +246,19 @@ class GeminiTool extends base_1.BaseCLITool {
|
|
|
215
246
|
async waitForPrompt(sessionName) {
|
|
216
247
|
const startTime = Date.now();
|
|
217
248
|
const pollInterval = 500;
|
|
249
|
+
let lastOutput = null;
|
|
218
250
|
while (Date.now() - startTime < GEMINI_PROMPT_WAIT_TIMEOUT_MS) {
|
|
219
251
|
try {
|
|
220
252
|
const rawOutput = await (0, tmux_1.capturePane)(sessionName, capture_spec_1.GEMINI_PANE_HEIGHT);
|
|
221
253
|
const output = (0, cli_patterns_1.stripAnsi)(rawOutput);
|
|
254
|
+
lastOutput = output;
|
|
222
255
|
if (cli_patterns_1.GEMINI_PROMPT_PATTERN.test(output)) {
|
|
223
256
|
return;
|
|
224
257
|
}
|
|
225
258
|
}
|
|
226
259
|
catch (error) {
|
|
227
260
|
// Capture may fail - continue polling
|
|
261
|
+
lastOutput = null;
|
|
228
262
|
logger.debug('gemini-prompt-capture-failed', { sessionName, error: (0, errors_1.getErrorMessage)(error) });
|
|
229
263
|
}
|
|
230
264
|
await new Promise((resolve) => setTimeout(resolve, pollInterval));
|
|
@@ -232,7 +266,7 @@ class GeminiTool extends base_1.BaseCLITool {
|
|
|
232
266
|
// Issue #3981: give up without typing, as codex does. Sending anyway put the
|
|
233
267
|
// body into whatever held the pane (a dialog, a slow start, a shell).
|
|
234
268
|
logger.info('gemini-prompt-not-detected');
|
|
235
|
-
throw new Error(
|
|
269
|
+
throw new Error(`Gemini prompt not ready: timed out waiting for the input prompt before sending (${describeGeminiPaneHold(lastOutput)})`);
|
|
236
270
|
}
|
|
237
271
|
/**
|
|
238
272
|
* Send a message to Gemini interactive session
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Launch answers that did not go out (Issue #4161).
|
|
4
|
+
*
|
|
5
|
+
* The automatic answer to a launch screen goes through the instance input lock,
|
|
6
|
+
* which can decline it, and the screen is due again on every poll. The record of
|
|
7
|
+
* that is a warn, as the Claude trust dialog's is (#4149): at info a WARN- or
|
|
8
|
+
* ERROR-only setting left no trace of a start that sent nothing. It is written
|
|
9
|
+
* once while the same reason goes on, per event, per wait.
|
|
10
|
+
*
|
|
11
|
+
* @module lib/cli-tools/launch-answer-skips
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.newLaunchAnswerSkips = newLaunchAnswerSkips;
|
|
15
|
+
exports.noteLaunchAnswerSkipped = noteLaunchAnswerSkipped;
|
|
16
|
+
exports.forgetLaunchAnswerSkip = forgetLaunchAnswerSkip;
|
|
17
|
+
const instance_input_lock_1 = require("../../lib/session/instance-input-lock");
|
|
18
|
+
function newLaunchAnswerSkips() {
|
|
19
|
+
return { byEvent: new Map(), last: null, lastEvent: null, lifeByEvent: new Map() };
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Record a declined answer at warn, unless the same reason was the last under `event`
|
|
23
|
+
* in the same life of the session (Issue #4189: `fields.sessionName`; without it
|
|
24
|
+
* the life is not compared, as before).
|
|
25
|
+
*
|
|
26
|
+
* The life is the one the answer started in (`startedIn`, taken before its await),
|
|
27
|
+
* as the input lock judges its own warn: a decline of an older life — the session
|
|
28
|
+
* was made again while it waited or read the screen again — is written, but neither
|
|
29
|
+
* reads nor writes the record of the new life. Without `startedIn` the life at this
|
|
30
|
+
* call is used.
|
|
31
|
+
*
|
|
32
|
+
* @param logger - The caller's logger, so the record keeps its module
|
|
33
|
+
* @param skips - This wait's record
|
|
34
|
+
* @param event - The log event, one per kind of answer
|
|
35
|
+
* @param fields - The log fields; `reason` is an enum, nothing captured goes in
|
|
36
|
+
* @param startedIn - {@link instanceInputAnswerSkipLife} of `fields.sessionName`, taken before the answer
|
|
37
|
+
*/
|
|
38
|
+
function noteLaunchAnswerSkipped(logger, skips, event, fields, startedIn) {
|
|
39
|
+
const sessionName = typeof fields.sessionName === 'string' ? fields.sessionName : null;
|
|
40
|
+
if (sessionName !== null && startedIn !== undefined && !(0, instance_input_lock_1.isInstanceInputAnswerSkipLife)(sessionName, startedIn)) {
|
|
41
|
+
// An answer of an older life: its warn, and no record for the new one.
|
|
42
|
+
logger.warn(event, fields);
|
|
43
|
+
skips.last = fields.reason;
|
|
44
|
+
skips.lastEvent = event;
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const recorded = skips.lifeByEvent.get(event);
|
|
48
|
+
const sameLife = recorded === undefined ||
|
|
49
|
+
(recorded.sessionName === sessionName && (0, instance_input_lock_1.isInstanceInputAnswerSkipLife)(recorded.sessionName, recorded.life));
|
|
50
|
+
if (skips.byEvent.get(event) !== fields.reason || !sameLife)
|
|
51
|
+
logger.warn(event, fields);
|
|
52
|
+
skips.byEvent.set(event, fields.reason);
|
|
53
|
+
if (sessionName === null)
|
|
54
|
+
skips.lifeByEvent.delete(event);
|
|
55
|
+
else
|
|
56
|
+
skips.lifeByEvent.set(event, { sessionName, life: startedIn ?? (0, instance_input_lock_1.instanceInputAnswerSkipLife)(sessionName) });
|
|
57
|
+
skips.last = fields.reason;
|
|
58
|
+
skips.lastEvent = event;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Forget what was declined under `event`: the answer went through, or the screen it
|
|
62
|
+
* was for has gone. The record describes a key that has not gone out, so a refusal
|
|
63
|
+
* must not repeat it after that, and a later decline is a new one to report, even
|
|
64
|
+
* for the same reason. Other events' records are theirs.
|
|
65
|
+
*
|
|
66
|
+
* @param skips - This wait's record
|
|
67
|
+
* @param event - The log event the answer belongs to
|
|
68
|
+
*/
|
|
69
|
+
function forgetLaunchAnswerSkip(skips, event) {
|
|
70
|
+
skips.byEvent.delete(event);
|
|
71
|
+
skips.lifeByEvent.delete(event);
|
|
72
|
+
if (skips.lastEvent === event) {
|
|
73
|
+
skips.last = null;
|
|
74
|
+
skips.lastEvent = null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -51,6 +51,7 @@ const errors_1 = require("../../lib/errors");
|
|
|
51
51
|
const agent_session_lifecycle_1 = require("../../lib/session/agent-session-lifecycle");
|
|
52
52
|
const runtime_1 = require("../../lib/hooks/sources/opencode-v2/runtime");
|
|
53
53
|
const client_1 = require("../../lib/hooks/sources/opencode-v2/client");
|
|
54
|
+
const secrets_1 = require("../../lib/hooks/sources/opencode-v2/secrets");
|
|
54
55
|
const ports_1 = require("../../lib/hooks/sources/opencode-v2/ports");
|
|
55
56
|
const subscription_1 = require("../../lib/hooks/sources/opencode-v2/subscription");
|
|
56
57
|
const tool_id_1 = require("../../lib/hooks/sources/opencode-v2/tool-id");
|
|
@@ -247,6 +248,15 @@ class OpenCodeV2Tool extends base_1.BaseCLITool {
|
|
|
247
248
|
throw new Error(`Failed to start OpenCode V2 session: ${(0, errors_1.getErrorMessage)(error)}`);
|
|
248
249
|
}
|
|
249
250
|
}
|
|
251
|
+
/** Issue #4115: `GET /api/config`, the evidence that the server read the role (§14). */
|
|
252
|
+
async readServerConfig(worktreeId, worktreePath, instanceId) {
|
|
253
|
+
const target = (0, runtime_1.opencodeV2Target)(worktreeId, instanceId);
|
|
254
|
+
const port = (0, ports_1.getAssignedOpencodeV2Port)(target);
|
|
255
|
+
const password = (0, secrets_1.readOpencodeV2Password)(target);
|
|
256
|
+
if (port === null || password === null)
|
|
257
|
+
return null;
|
|
258
|
+
return (0, client_1.fetchOpencodeV2Config)(port, password, worktreePath);
|
|
259
|
+
}
|
|
250
260
|
/** Poll until the composer is on screen (or give up quietly). */
|
|
251
261
|
async waitForReady(sessionName) {
|
|
252
262
|
for (let attempt = 0; attempt < exports.OPENCODE_V2_READY_MAX_ATTEMPTS; attempt++) {
|