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
|
@@ -22,11 +22,46 @@
|
|
|
22
22
|
* Recording must never change a send's outcome: {@link recordSendAttempt}
|
|
23
23
|
* swallows its own failures.
|
|
24
24
|
*
|
|
25
|
+
* Issue #4065: which attempt is "the last" is decided by the input lock's
|
|
26
|
+
* grant order, not by which attempt finished last. Three kinds of record:
|
|
27
|
+
*
|
|
28
|
+
* - **granted** — the attempt held the body's input lock (`inputGeneration`,
|
|
29
|
+
* the ticket's generation g). Includes one refused after the grant before
|
|
30
|
+
* any key (g does not mean "typed"). Kept when g ≥ the instance's highest
|
|
31
|
+
* granted generation so far (maxG), dropped when g < maxG: a send granted
|
|
32
|
+
* later has already said how it went.
|
|
33
|
+
* - **refused** — `not-sent` before any lock was granted to it
|
|
34
|
+
* (`observedGeneration`, the generation counter o read once at the request's
|
|
35
|
+
* outermost entry). Kept when maxG ≤ o, dropped when maxG > o: a send granted
|
|
36
|
+
* after this request began has already said how it went. o is only ever
|
|
37
|
+
* compared with maxG — never with another o, nor with another instance's
|
|
38
|
+
* grants; o = 0 is a value like any other.
|
|
39
|
+
* - **excluded / unknown** — neither (copilot's selection-list commands and
|
|
40
|
+
* `/model`, opencode's HTTP delivery including its keyboard fallback after an
|
|
41
|
+
* `unknown` dispatch, a tool path that reports nothing). Kept in the order
|
|
42
|
+
* they finish, as before #4065, and they never move maxG.
|
|
43
|
+
*
|
|
44
|
+
* maxG is held beside the published record and only ever grows: a refused or
|
|
45
|
+
* excluded record, or a demotion ({@link markLastSendDiscarded}), never lowers
|
|
46
|
+
* it, so an older grant's late outcome cannot come back after them. Within one
|
|
47
|
+
* process the generation never goes back (a recreated session keeps counting);
|
|
48
|
+
* a restart forgets the records and maxG together. A worktree ID migration
|
|
49
|
+
* does not move them (the old ID's records are dropped). When more than
|
|
50
|
+
* {@link MAX_TRACKED_INSTANCES} instances are tracked the least recently sent
|
|
51
|
+
* to loses its record and its maxG together — a late outcome for it is then
|
|
52
|
+
* recorded as if it were the first.
|
|
53
|
+
*
|
|
54
|
+
* The published `lastSend` is still the three fields `at` / `state` /
|
|
55
|
+
* `reason`; neither g nor o is published, and `at` is not an order. It is the
|
|
56
|
+
* instance's last attempt by the rules above — not necessarily the reading
|
|
57
|
+
* request's own (that is `onAttempt` / `sendOutcome`).
|
|
58
|
+
*
|
|
25
59
|
* @module lib/session/send-attempt-state
|
|
26
60
|
*/
|
|
27
61
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
62
|
exports.sendMessageDigest = sendMessageDigest;
|
|
29
63
|
exports.recordSendAttempt = recordSendAttempt;
|
|
64
|
+
exports.forgetSendAttemptsForWorktree = forgetSendAttemptsForWorktree;
|
|
30
65
|
exports.getLastSendAttempt = getLastSendAttempt;
|
|
31
66
|
exports.markLastSendDiscarded = markLastSendDiscarded;
|
|
32
67
|
exports.clearSendAttempts = clearSendAttempts;
|
|
@@ -37,11 +72,19 @@ const crypto_1 = require("crypto");
|
|
|
37
72
|
const global_state_1 = require("../../lib/global-state");
|
|
38
73
|
const logger_1 = require("../../lib/logger");
|
|
39
74
|
const session_start_error_1 = require("../../lib/session/session-start-error");
|
|
75
|
+
const launch_errors_1 = require("../../lib/agent-roles/launch-errors");
|
|
40
76
|
const send_attempt_types_1 = require("./send-attempt-types");
|
|
41
77
|
const logger = (0, logger_1.createLogger)('session/send-attempt-state');
|
|
42
78
|
/** How many instances are tracked at once; the least recently sent to is forgotten first. */
|
|
43
79
|
const MAX_TRACKED_INSTANCES = 1024;
|
|
44
80
|
const records = (0, global_state_1.getOrInitGlobal)('__sendAttemptRecords', () => new Map());
|
|
81
|
+
/**
|
|
82
|
+
* Issue #4065: per instance, the highest input generation a granted record
|
|
83
|
+
* carried (maxG). Kept apart from the published record so that a refused or
|
|
84
|
+
* excluded record — or a demotion — that replaces it does not forget it.
|
|
85
|
+
* Evicted with the instance's record.
|
|
86
|
+
*/
|
|
87
|
+
const maxGenerations = (0, global_state_1.getOrInitGlobal)('__sendAttemptMaxGeneration', () => new Map());
|
|
45
88
|
function keyOf(instance) {
|
|
46
89
|
return JSON.stringify([instance.worktreeId, instance.cliToolId, instance.instanceId]);
|
|
47
90
|
}
|
|
@@ -52,27 +95,90 @@ function sendMessageDigest(content) {
|
|
|
52
95
|
/**
|
|
53
96
|
* Record how a send attempt ended. Never throws: a record that cannot be made
|
|
54
97
|
* leaves the send exactly as it was.
|
|
98
|
+
*
|
|
99
|
+
* Issue #4048: `typedContent` is the body the sender actually typed when it
|
|
100
|
+
* differs from `content`; `inputGeneration` is the input lock generation the
|
|
101
|
+
* attempt ran under.
|
|
102
|
+
*
|
|
103
|
+
* Issue #4065: `observedGeneration` is the generation counter the request read
|
|
104
|
+
* at its outermost entry (`instanceInputGenerationMark` in `instance-input-lock`), given for a
|
|
105
|
+
* `not-sent` refusal made before any lock was granted to it. Which record is
|
|
106
|
+
* kept is decided against the instance's maxG (see the module comment):
|
|
107
|
+
* granted g ≥ maxG is kept (and raises maxG), g < maxG dropped; a refusal is
|
|
108
|
+
* kept when maxG ≤ o; a record with neither is kept, in the order recorded.
|
|
109
|
+
* `inputGeneration` wins when both are given.
|
|
110
|
+
*
|
|
111
|
+
* @returns Whether the attempt became the instance's record. The request's own
|
|
112
|
+
* outcome is the caller's to report whatever this says (`onAttempt`).
|
|
55
113
|
*/
|
|
56
114
|
function recordSendAttempt(instance, attempt, now = Date.now()) {
|
|
57
115
|
try {
|
|
58
116
|
const key = keyOf(instance);
|
|
117
|
+
const maxGeneration = maxGenerations.get(key);
|
|
118
|
+
if (attempt.inputGeneration !== undefined) {
|
|
119
|
+
if (maxGeneration !== undefined && maxGeneration > attempt.inputGeneration) {
|
|
120
|
+
logger.info('send-attempt-record-skipped-stale-generation', {
|
|
121
|
+
generation: attempt.inputGeneration,
|
|
122
|
+
heldGeneration: maxGeneration,
|
|
123
|
+
});
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
else if (attempt.observedGeneration !== undefined) {
|
|
128
|
+
if (maxGeneration !== undefined && maxGeneration > attempt.observedGeneration) {
|
|
129
|
+
logger.info('send-attempt-record-skipped-refusal-before-newer-grant', {
|
|
130
|
+
observedGeneration: attempt.observedGeneration,
|
|
131
|
+
heldGeneration: maxGeneration,
|
|
132
|
+
});
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const messageDigest = sendMessageDigest(attempt.content);
|
|
137
|
+
const typedDigest = attempt.typedContent === undefined ? undefined : sendMessageDigest(attempt.typedContent);
|
|
59
138
|
// Re-inserted, so the map's order is least recently sent to first.
|
|
60
139
|
records.delete(key);
|
|
61
140
|
records.set(key, {
|
|
62
141
|
at: Math.floor(now),
|
|
63
142
|
state: attempt.state,
|
|
64
143
|
reason: attempt.reason,
|
|
65
|
-
messageDigest
|
|
144
|
+
messageDigest,
|
|
145
|
+
...(typedDigest !== undefined && typedDigest !== messageDigest ? { typedDigest } : {}),
|
|
146
|
+
...(attempt.inputGeneration !== undefined ? { inputGeneration: attempt.inputGeneration } : {}),
|
|
66
147
|
});
|
|
148
|
+
if (attempt.inputGeneration !== undefined) {
|
|
149
|
+
maxGenerations.set(key, Math.max(maxGeneration ?? attempt.inputGeneration, attempt.inputGeneration));
|
|
150
|
+
}
|
|
67
151
|
while (records.size > MAX_TRACKED_INSTANCES) {
|
|
68
152
|
const oldest = records.keys().next().value;
|
|
69
153
|
if (oldest === undefined)
|
|
70
154
|
break;
|
|
71
155
|
records.delete(oldest);
|
|
156
|
+
maxGenerations.delete(oldest);
|
|
72
157
|
}
|
|
158
|
+
return true;
|
|
73
159
|
}
|
|
74
160
|
catch (error) {
|
|
75
161
|
logger.warn('send-attempt-record-failed', { error: error instanceof Error ? error.message : String(error) });
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Forget the records — and their maxG — of every instance of `worktreeId`
|
|
167
|
+
* (Issue #4065): a worktree ID migration drops them rather than moving them,
|
|
168
|
+
* so the new ID starts with no record. Never throws.
|
|
169
|
+
*/
|
|
170
|
+
function forgetSendAttemptsForWorktree(worktreeId) {
|
|
171
|
+
try {
|
|
172
|
+
for (const key of [...records.keys(), ...maxGenerations.keys()]) {
|
|
173
|
+
const parsed = JSON.parse(key);
|
|
174
|
+
if (Array.isArray(parsed) && parsed[0] === worktreeId) {
|
|
175
|
+
records.delete(key);
|
|
176
|
+
maxGenerations.delete(key);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
logger.warn('send-attempt-forget-failed', { error: error instanceof Error ? error.message : String(error) });
|
|
76
182
|
}
|
|
77
183
|
}
|
|
78
184
|
/** The instance's last recorded attempt, or null when none is held. */
|
|
@@ -83,22 +189,35 @@ function getLastSendAttempt(instance) {
|
|
|
83
189
|
* Turn the instance's last `sent` record `indeterminate` (Issue #4035): the
|
|
84
190
|
* next send found that body still in the composer, so it never reached the
|
|
85
191
|
* agent. Any other record is left as it is. Never throws.
|
|
192
|
+
*
|
|
193
|
+
* `messageDigest` (Issue #4048) is the digest of the body that was found (the
|
|
194
|
+
* body typed, so it is matched against the record's `typedDigest` too): a
|
|
195
|
+
* record of another attempt — a later send, or one whose body differs — is
|
|
196
|
+
* left as it is. Omitted, the last `sent` record is demoted as before.
|
|
86
197
|
*/
|
|
87
|
-
function markLastSendDiscarded(instance, now = Date.now()) {
|
|
198
|
+
function markLastSendDiscarded(instance, now = Date.now(), messageDigest) {
|
|
88
199
|
try {
|
|
89
200
|
const key = keyOf(instance);
|
|
90
201
|
const record = records.get(key);
|
|
91
202
|
if (record === undefined || record.state !== 'sent')
|
|
92
203
|
return;
|
|
204
|
+
if (messageDigest !== undefined &&
|
|
205
|
+
record.messageDigest !== messageDigest &&
|
|
206
|
+
record.typedDigest !== messageDigest) {
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
// Issue #4065: the spread keeps the record's generation, and maxG is not
|
|
210
|
+
// touched — a demotion is not a newer attempt.
|
|
93
211
|
records.set(key, { ...record, at: Math.floor(now), state: 'indeterminate', reason: 'found-in-composer' });
|
|
94
212
|
}
|
|
95
213
|
catch (error) {
|
|
96
214
|
logger.warn('send-attempt-record-failed', { error: error instanceof Error ? error.message : String(error) });
|
|
97
215
|
}
|
|
98
216
|
}
|
|
99
|
-
/** Forget every record (tests). */
|
|
217
|
+
/** Forget every record and every maxG (tests). */
|
|
100
218
|
function clearSendAttempts() {
|
|
101
219
|
records.clear();
|
|
220
|
+
maxGenerations.clear();
|
|
102
221
|
}
|
|
103
222
|
/**
|
|
104
223
|
* The wordings of a failed tmux call that can carry the message body: `tmux.ts`
|
|
@@ -134,6 +253,21 @@ function carriesCode(error, code) {
|
|
|
134
253
|
* (`Failed to send message to <tool>: …`), so they are matched anywhere in it.
|
|
135
254
|
*/
|
|
136
255
|
function classifySendFailure(error) {
|
|
256
|
+
// #4040: opencode's keyboard fallback refused before any key (its cause says
|
|
257
|
+
// why — a code like `paste-not-started` included), but the server dispatch
|
|
258
|
+
// before it ended `unknown`: the message may already be there, so the attempt
|
|
259
|
+
// as a whole stays unknown, never "safe to resend". Read FIRST, before any
|
|
260
|
+
// code the cause carries.
|
|
261
|
+
if (error instanceof Error &&
|
|
262
|
+
/an earlier server dispatch may have delivered the message \(Issue #4040\)/.test(error.message)) {
|
|
263
|
+
return { state: 'indeterminate', reason: 'send-error' };
|
|
264
|
+
}
|
|
265
|
+
// #4115: refused before any key, whichever layer wrapped the message on the way out.
|
|
266
|
+
if ((0, launch_errors_1.isRoleConditionUnmet)(error))
|
|
267
|
+
return { state: 'not-sent', reason: 'role-condition-failed' };
|
|
268
|
+
if ((0, launch_errors_1.readRoleLaunchRefusal)(error) !== null || carriesCode(error, launch_errors_1.SESSION_LAUNCH_ROLE_MISMATCH_CODE)) {
|
|
269
|
+
return { state: 'not-sent', reason: 'role-launch-refused' };
|
|
270
|
+
}
|
|
137
271
|
if (typeof error === 'object' &&
|
|
138
272
|
error !== null &&
|
|
139
273
|
error.code === session_start_error_1.SESSION_STARTING_CODE) {
|
|
@@ -63,6 +63,7 @@ const session_start_error_1 = require("../../lib/session/session-start-error");
|
|
|
63
63
|
const cli_session_1 = require("../../lib/session/cli-session");
|
|
64
64
|
const send_attempt_state_1 = require("../../lib/session/send-attempt-state");
|
|
65
65
|
const send_attempt_types_1 = require("../../lib/session/send-attempt-types");
|
|
66
|
+
const launch_errors_1 = require("../../lib/agent-roles/launch-errors");
|
|
66
67
|
const composer_text_1 = require("../../lib/detection/composer-text");
|
|
67
68
|
const status_capture_config_1 = require("../../config/status-capture-config");
|
|
68
69
|
const instance_input_lock_1 = require("../../lib/session/instance-input-lock");
|
|
@@ -132,6 +133,18 @@ async function composerStillHolds(worktreeId, cliToolId, instanceId, content) {
|
|
|
132
133
|
return false;
|
|
133
134
|
}
|
|
134
135
|
}
|
|
136
|
+
/**
|
|
137
|
+
* The body the tool will actually type for `content` (Issue #4048): with an
|
|
138
|
+
* image, the image-capable tool's own body (`imageMessageBody`) or the path
|
|
139
|
+
* fallback; otherwise `content` itself. Must match what `sendToTool` sends.
|
|
140
|
+
*/
|
|
141
|
+
function typedBodyFor(cliTool, content, absoluteImagePath) {
|
|
142
|
+
if (!absoluteImagePath)
|
|
143
|
+
return content;
|
|
144
|
+
if ((0, types_1.isImageCapableCLITool)(cliTool))
|
|
145
|
+
return cliTool.imageMessageBody?.(content, absoluteImagePath) ?? content;
|
|
146
|
+
return (0, opencode_1.formatImagePathFallbackMessage)(content, absoluteImagePath);
|
|
147
|
+
}
|
|
135
148
|
/**
|
|
136
149
|
* Send a validated user message to the CLI tool and record it in history.
|
|
137
150
|
*
|
|
@@ -140,7 +153,11 @@ async function composerStillHolds(worktreeId, cliToolId, instanceId, content) {
|
|
|
140
153
|
* DB record failures throw (same as before the extraction).
|
|
141
154
|
*/
|
|
142
155
|
async function sendUserMessage(db, params) {
|
|
143
|
-
const { worktreeId, content, cliToolId, instanceId, absoluteImagePath, copilotModel } = params;
|
|
156
|
+
const { worktreeId, content, cliToolId, instanceId, absoluteImagePath, copilotModel, respondAgent } = params;
|
|
157
|
+
// Issue #4065: read once, before the first await — a send granted while this
|
|
158
|
+
// request waits (ownership, the prompt guard, `/model`, the lock) is newer
|
|
159
|
+
// than this request's refusal.
|
|
160
|
+
const observedGeneration = params.observedInputGeneration ?? (0, instance_input_lock_1.instanceInputGenerationMark)();
|
|
144
161
|
const messageType = params.messageType ?? 'normal';
|
|
145
162
|
/**
|
|
146
163
|
* The instance this send belongs to, resolved the way `createMessage` and
|
|
@@ -154,8 +171,47 @@ async function sendUserMessage(db, params) {
|
|
|
154
171
|
// Issue #3759: how this attempt left the message, kept for `lastSend` (and
|
|
155
172
|
// read back by the send route for its error). The result's shape is
|
|
156
173
|
// unchanged; recording never throws.
|
|
174
|
+
//
|
|
175
|
+
// Issue #4048: the record also carries the body actually typed (an image
|
|
176
|
+
// reference appended), which is what the composer and the first-prompt
|
|
177
|
+
// receipt know the attempt by, and the input lock generation the delivery
|
|
178
|
+
// ran under, so the late outcome of a send whose session was replaced does
|
|
179
|
+
// not overwrite the newer generation's record.
|
|
180
|
+
//
|
|
181
|
+
// Issue #4065: which record is the instance's last is decided by the lock's
|
|
182
|
+
// grant order (`send-attempt-state`). This send's record is one of:
|
|
183
|
+
// - granted: the body's lock was granted to it (`inputGeneration`) — the
|
|
184
|
+
// outer lock below for claude / codex, the shared sender's own lock for the
|
|
185
|
+
// others, told through `observeInputStart` as it is granted, so a send that
|
|
186
|
+
// throws after it keeps it. Refused after the grant, before any key, too.
|
|
187
|
+
// - refused: `not-sent` with no lock granted (ownership, the prompt guard,
|
|
188
|
+
// `/model`, the lock not admitted, a readiness wait before the sender's
|
|
189
|
+
// lock) — carries `observedGeneration`.
|
|
190
|
+
// - excluded: typed or dispatched outside the shared sender's lock —
|
|
191
|
+
// copilot's selection-list keys (input noted, no ticket), opencode's HTTP
|
|
192
|
+
// delivery and its keyboard fallback (a dispatch noted) — or anything else
|
|
193
|
+
// that reports neither; kept in the order attempts finish.
|
|
194
|
+
const typedContent = typedBodyFor(cliTool, content, absoluteImagePath);
|
|
195
|
+
let inputGeneration;
|
|
196
|
+
let inputNotedWithoutTicket = false;
|
|
197
|
+
let dispatched = false;
|
|
157
198
|
const settle = (state, reason) => {
|
|
158
|
-
|
|
199
|
+
const excluded = dispatched || (inputGeneration === undefined && inputNotedWithoutTicket);
|
|
200
|
+
const order = excluded
|
|
201
|
+
? {}
|
|
202
|
+
: inputGeneration !== undefined
|
|
203
|
+
? { inputGeneration }
|
|
204
|
+
: state === 'not-sent'
|
|
205
|
+
? { observedGeneration }
|
|
206
|
+
: {};
|
|
207
|
+
(0, send_attempt_state_1.recordSendAttempt)({ worktreeId, cliToolId, instanceId: resolvedInstanceId }, {
|
|
208
|
+
state,
|
|
209
|
+
reason,
|
|
210
|
+
content,
|
|
211
|
+
...(typedContent !== content ? { typedContent } : {}),
|
|
212
|
+
...order,
|
|
213
|
+
});
|
|
214
|
+
// Told whether or not the shared record took it: this is the request's own.
|
|
159
215
|
params.onAttempt?.({ state, reason });
|
|
160
216
|
};
|
|
161
217
|
// Issue #2865: the send route checks ownership itself, but the timer manager
|
|
@@ -215,7 +271,7 @@ async function sendUserMessage(db, params) {
|
|
|
215
271
|
return {
|
|
216
272
|
ok: false,
|
|
217
273
|
stage: 'prompt_waiting',
|
|
218
|
-
error: (0, prompt_waiting_guard_1.promptWaitingMessage)(worktreeId, promptGuard.blockedBy, instanceId),
|
|
274
|
+
error: (0, prompt_waiting_guard_1.promptWaitingMessage)(worktreeId, promptGuard.blockedBy, instanceId, respondAgent),
|
|
219
275
|
};
|
|
220
276
|
}
|
|
221
277
|
// 1. Issue #576: Send /model command before message if model is specified (copilot only).
|
|
@@ -248,7 +304,7 @@ async function sendUserMessage(db, params) {
|
|
|
248
304
|
const code = error?.code;
|
|
249
305
|
if (code === send_attempt_types_1.INPUT_RECHECK_PROMPT_WAITING_CODE) {
|
|
250
306
|
settle('not-sent', 'prompt-waiting');
|
|
251
|
-
return { ok: false, stage: 'prompt_waiting', error: (0, prompt_waiting_guard_1.promptWaitingMessage)(worktreeId, undefined, instanceId) };
|
|
307
|
+
return { ok: false, stage: 'prompt_waiting', error: (0, prompt_waiting_guard_1.promptWaitingMessage)(worktreeId, undefined, instanceId, respondAgent) };
|
|
252
308
|
}
|
|
253
309
|
settle('not-sent', code === send_attempt_types_1.INPUT_RECHECK_FAILED_CODE ? 'recheck-failed' : 'model-switch-failed');
|
|
254
310
|
return { ok: false, stage: 'model', error: getErrorMessage(error) };
|
|
@@ -347,11 +403,29 @@ async function sendUserMessage(db, params) {
|
|
|
347
403
|
// path that does not report it).
|
|
348
404
|
async function deliver() {
|
|
349
405
|
try {
|
|
350
|
-
const { inputStartedAt } = await (0, instance_input_lock_1.observeInputStart)(sendToTool,
|
|
406
|
+
const { inputStartedAt } = await (0, instance_input_lock_1.observeInputStart)(sendToTool, (at) => {
|
|
407
|
+
// Issue #4065: input noted before any body lock was told — copilot's
|
|
408
|
+
// selection-list keys, under its own lock.
|
|
409
|
+
if (inputGeneration === undefined)
|
|
410
|
+
inputNotedWithoutTicket = true;
|
|
411
|
+
params.onInputStart?.(at);
|
|
412
|
+
}, params.inputBoundary, {
|
|
413
|
+
onTicket: (generation) => {
|
|
414
|
+
inputGeneration = inputGeneration === undefined ? generation : Math.max(inputGeneration, generation);
|
|
415
|
+
},
|
|
416
|
+
onDispatch: () => {
|
|
417
|
+
dispatched = true;
|
|
418
|
+
},
|
|
419
|
+
});
|
|
351
420
|
return { sent: true, inputStartedAt };
|
|
352
421
|
}
|
|
353
422
|
catch (error) {
|
|
354
423
|
logger.error('failed-to-send-message-to:', { error: getErrorMessage(error) });
|
|
424
|
+
// Issue #4115: the role this send was conditional on, or the role a driver's
|
|
425
|
+
// relaunch resolved, refused it before the first key.
|
|
426
|
+
if ((0, launch_errors_1.isRoleConditionUnmet)(error) || (0, launch_errors_1.readRoleLaunchRefusal)(error) !== null) {
|
|
427
|
+
return { error, failure: (0, send_attempt_state_1.classifySendFailure)(error) };
|
|
428
|
+
}
|
|
355
429
|
// Issue #3957: the relay's boundary hook refused before the first key —
|
|
356
430
|
// nothing was typed because the reservation the body was going in under
|
|
357
431
|
// was gone. Issue #3992: its own reason, not `input-lock-lost`.
|
|
@@ -405,7 +479,10 @@ async function sendUserMessage(db, params) {
|
|
|
405
479
|
// the lock across it would stall a concurrent tmux send for nothing; their
|
|
406
480
|
// tmux path takes the lock inside the shared sender.
|
|
407
481
|
const delivery = composer_text_1.SUPPORTED_COMPOSER_TOOLS.has(cliToolId)
|
|
408
|
-
? await (0, instance_input_lock_1.withInstanceInputLock)(sessionName, () =>
|
|
482
|
+
? await (0, instance_input_lock_1.withInstanceInputLock)(sessionName, (ticket) => {
|
|
483
|
+
inputGeneration = ticket.generation;
|
|
484
|
+
return deliver();
|
|
485
|
+
}).catch((error) => ({
|
|
409
486
|
error,
|
|
410
487
|
failure: (0, send_attempt_state_1.classifySendFailure)(error),
|
|
411
488
|
}))
|
|
@@ -416,7 +493,7 @@ async function sendUserMessage(db, params) {
|
|
|
416
493
|
// Issue #3945: a dialog found by the re-check under the lock is the prompt
|
|
417
494
|
// guard's refusal, found late — answered as that refusal (relay holds it).
|
|
418
495
|
if (failure.reason === 'prompt-waiting') {
|
|
419
|
-
return { ok: false, stage: 'prompt_waiting', error: (0, prompt_waiting_guard_1.promptWaitingMessage)(worktreeId, undefined, instanceId) };
|
|
496
|
+
return { ok: false, stage: 'prompt_waiting', error: (0, prompt_waiting_guard_1.promptWaitingMessage)(worktreeId, undefined, instanceId, respondAgent) };
|
|
420
497
|
}
|
|
421
498
|
if ((0, session_start_error_1.isSessionStartTimeoutError)(error)) {
|
|
422
499
|
return { ok: false, stage: 'send', error: error.message, code: session_start_error_1.SESSION_STARTING_CODE };
|
|
@@ -88,6 +88,7 @@ const db_instance_1 = require("../../lib/db/db-instance");
|
|
|
88
88
|
const chat_db_1 = require("../../lib/db/chat-db");
|
|
89
89
|
const types_1 = require("../../lib/realtime/types");
|
|
90
90
|
const logger_1 = require("../../lib/logger");
|
|
91
|
+
const test_run_detection_1 = require("../../lib/test-run-detection");
|
|
91
92
|
const logger = (0, logger_1.createLogger)('lib/session/session-generation-archive');
|
|
92
93
|
/**
|
|
93
94
|
* The database this module archives through, or `null` when there is none to
|
|
@@ -102,16 +103,14 @@ const logger = (0, logger_1.createLogger)('lib/session/session-generation-archiv
|
|
|
102
103
|
* fabricate `<cwd>/data/cm.db` or — when the suite runs in a checkout that has
|
|
103
104
|
* one — hand those fixtures the developer's real chat history to write into.
|
|
104
105
|
*
|
|
105
|
-
* So
|
|
106
|
-
* explicitly (see {@link archiveSupersededSessionMessages}'s
|
|
107
|
-
* mocks `@/lib/db/db-instance`
|
|
108
|
-
* integration test drives the production branch.
|
|
109
|
-
*
|
|
110
|
-
* literal `'test'` at transform time, so a `NODE_ENV` check here would fold to
|
|
111
|
-
* a constant and no test could ever reach the other branch.
|
|
106
|
+
* So in a test run ({@link isUnderTest}) the answer is "no database" unless a
|
|
107
|
+
* test hands one in explicitly (see {@link archiveSupersededSessionMessages}'s
|
|
108
|
+
* `db` parameter) or mocks both `@/lib/db/db-instance` and `isUnderTest`, which
|
|
109
|
+
* is how the integration test drives the production branch. `VITEST` is not
|
|
110
|
+
* consulted: a production server can inherit it (Issue #4097).
|
|
112
111
|
*/
|
|
113
112
|
function resolveSessionArchiveDatabase() {
|
|
114
|
-
if (
|
|
113
|
+
if ((0, test_run_detection_1.isUnderTest)())
|
|
115
114
|
return null;
|
|
116
115
|
return (0, db_instance_1.getDbInstance)();
|
|
117
116
|
}
|
|
@@ -38,6 +38,8 @@
|
|
|
38
38
|
* a model the launch in progress is not starting with gets {@link
|
|
39
39
|
* SessionLaunchModelMismatchError}, as a `--model` to a running session
|
|
40
40
|
* gets a 400 (#989 / #2771), instead of joining and running on another model.
|
|
41
|
+
* - **Nor is a role** (Issue #4115): {@link SessionLaunchRoleMismatchError}, on
|
|
42
|
+
* the injection fingerprint.
|
|
41
43
|
*
|
|
42
44
|
* In memory and on `globalThis` for the reason the lock is: the routes that
|
|
43
45
|
* start sessions are separate bundles under `next dev`.
|
|
@@ -45,8 +47,9 @@
|
|
|
45
47
|
* @module lib/session/session-launch-flight
|
|
46
48
|
*/
|
|
47
49
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
-
exports.SessionLaunchModelMismatchError = exports.SESSION_LAUNCH_MODEL_MISMATCH_CODE = exports.SessionLaunchWaitTimeoutError = exports.SessionLaunchInFlightError = void 0;
|
|
50
|
+
exports.SessionLaunchRoleMismatchError = exports.SessionLaunchModelMismatchError = exports.SESSION_LAUNCH_MODEL_MISMATCH_CODE = exports.SessionLaunchWaitTimeoutError = exports.SessionLaunchInFlightError = void 0;
|
|
49
51
|
exports.isSessionLaunchModelMismatchError = isSessionLaunchModelMismatchError;
|
|
52
|
+
exports.isSessionLaunchRoleMismatchError = isSessionLaunchRoleMismatchError;
|
|
50
53
|
exports.isSessionLaunchInFlight = isSessionLaunchInFlight;
|
|
51
54
|
exports.runSessionLaunch = runSessionLaunch;
|
|
52
55
|
exports.forgetSessionLaunch = forgetSessionLaunch;
|
|
@@ -57,6 +60,7 @@ const logger_1 = require("../../lib/logger");
|
|
|
57
60
|
const session_starting_config_1 = require("../../config/session-starting-config");
|
|
58
61
|
const instance_input_lock_1 = require("../../lib/session/instance-input-lock");
|
|
59
62
|
const session_start_error_1 = require("../../lib/session/session-start-error");
|
|
63
|
+
const launch_errors_1 = require("../../lib/agent-roles/launch-errors");
|
|
60
64
|
const logger = (0, logger_1.createLogger)('session/session-launch-flight');
|
|
61
65
|
const flights = (0, global_state_1.getOrInitGlobal)('__sessionLaunchFlights', () => new Map());
|
|
62
66
|
/**
|
|
@@ -118,6 +122,26 @@ exports.SessionLaunchModelMismatchError = SessionLaunchModelMismatchError;
|
|
|
118
122
|
function isSessionLaunchModelMismatchError(error) {
|
|
119
123
|
return (error instanceof Error && error.code === exports.SESSION_LAUNCH_MODEL_MISMATCH_CODE);
|
|
120
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* A start resolved a different role from the launch of the session already in
|
|
127
|
+
* progress (Issue #4115). A role is fixed when the process starts, so joining
|
|
128
|
+
* would silently run the request under the other one. Nothing was typed. Compared
|
|
129
|
+
* by the injection fingerprint: another name for the same text is the same role.
|
|
130
|
+
*/
|
|
131
|
+
class SessionLaunchRoleMismatchError extends Error {
|
|
132
|
+
code = launch_errors_1.SESSION_LAUNCH_ROLE_MISMATCH_CODE;
|
|
133
|
+
constructor(toolName, sessionName) {
|
|
134
|
+
super(`${toolName} is being started by another request (tmux session '${sessionName}') with a different role. ` +
|
|
135
|
+
'A role is fixed when the process starts — the message was not delivered and nothing was typed. ' +
|
|
136
|
+
'Retry once that start has finished; the session will show which role it has.');
|
|
137
|
+
this.name = 'SessionLaunchRoleMismatchError';
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
exports.SessionLaunchRoleMismatchError = SessionLaunchRoleMismatchError;
|
|
141
|
+
/** Duck-typed on `code`, like the session-start errors (bundles do not share classes). */
|
|
142
|
+
function isSessionLaunchRoleMismatchError(error) {
|
|
143
|
+
return error instanceof Error && error.code === launch_errors_1.SESSION_LAUNCH_ROLE_MISMATCH_CODE;
|
|
144
|
+
}
|
|
121
145
|
/** How long a caller may wait for `flight`, counted from when it began. */
|
|
122
146
|
function launchWaitLimitMs(flight) {
|
|
123
147
|
return flight.cliToolId === undefined
|
|
@@ -160,6 +184,7 @@ function isSessionLaunchInFlight(sessionName) {
|
|
|
160
184
|
* synchronous step as the check, before `launch` reads anything (R4).
|
|
161
185
|
*
|
|
162
186
|
* @throws SessionLaunchModelMismatchError when another launch is in progress with another model
|
|
187
|
+
* @throws SessionLaunchRoleMismatchError when another launch is in progress with another role
|
|
163
188
|
* @throws SessionLaunchInFlightError when another launch is in progress and the caller holds the input lock
|
|
164
189
|
* @throws SessionLaunchWaitTimeoutError when the joined launch outlives its start budget
|
|
165
190
|
*/
|
|
@@ -170,6 +195,12 @@ function runSessionLaunch(sessionName, toolName, launch, options = {}) {
|
|
|
170
195
|
logger.info('session-launch-model-mismatch-refused', { sessionName });
|
|
171
196
|
return Promise.reject(new SessionLaunchModelMismatchError(toolName, sessionName, options.model, inFlight.model));
|
|
172
197
|
}
|
|
198
|
+
if (options.injectionFingerprint !== undefined &&
|
|
199
|
+
inFlight.injectionFingerprint !== undefined &&
|
|
200
|
+
options.injectionFingerprint !== inFlight.injectionFingerprint) {
|
|
201
|
+
logger.info('session-launch-role-mismatch-refused', { sessionName });
|
|
202
|
+
return Promise.reject(new SessionLaunchRoleMismatchError(toolName, sessionName));
|
|
203
|
+
}
|
|
173
204
|
if ((0, instance_input_lock_1.currentInstanceInputTicket)(sessionName) !== null) {
|
|
174
205
|
logger.info('session-launch-in-flight-refused', { sessionName });
|
|
175
206
|
return Promise.reject(new SessionLaunchInFlightError(toolName, sessionName));
|
|
@@ -187,6 +218,7 @@ function runSessionLaunch(sessionName, toolName, launch, options = {}) {
|
|
|
187
218
|
startedAt: Date.now(),
|
|
188
219
|
cliToolId: options.cliToolId,
|
|
189
220
|
model: options.model,
|
|
221
|
+
injectionFingerprint: options.injectionFingerprint,
|
|
190
222
|
};
|
|
191
223
|
flights.set(sessionName, flight);
|
|
192
224
|
const clear = () => {
|
|
@@ -43,6 +43,7 @@ exports.buildStructuredPromptData = buildStructuredPromptData;
|
|
|
43
43
|
exports.buildStructuredPromptHistoryRecord = buildStructuredPromptHistoryRecord;
|
|
44
44
|
exports.isStructuredPromptWaitingData = isStructuredPromptWaitingData;
|
|
45
45
|
const models_1 = require("../../types/models");
|
|
46
|
+
const respond_target_1 = require("../../lib/session/respond-target");
|
|
46
47
|
const decision_labels_1 = require("../../lib/hooks/sources/opencode-v2/decision-labels");
|
|
47
48
|
/**
|
|
48
49
|
* The three verdicts an approval dialog accepts, in the order `respond` numbers
|
|
@@ -157,10 +158,14 @@ const SOURCE_LABEL = {
|
|
|
157
158
|
* is the only guidance a caller of `wait` gets, so it has to say which form
|
|
158
159
|
* actually works.
|
|
159
160
|
*/
|
|
160
|
-
function buildStructuredPromptQuestion(worktreeId, facts, instanceId) {
|
|
161
|
+
function buildStructuredPromptQuestion(worktreeId, facts, instanceId, agent) {
|
|
161
162
|
// Issue #4031: the `respond` this names goes to the instance whose prompt it
|
|
162
|
-
// is.
|
|
163
|
-
|
|
163
|
+
// is. Issue #4063: `buildCurrentOutput` always passes one — the primary's is
|
|
164
|
+
// the tool's own id (`--instance <tool>`, `resolveSessionTarget`'s rule), on
|
|
165
|
+
// every path (HTTP, WS push, poller, history). Without one (a caller outside
|
|
166
|
+
// that builder) the sentence names no target.
|
|
167
|
+
// Issue #4049: or to the tool, when the caller names one (`respondAgentFor`).
|
|
168
|
+
const target = (0, respond_target_1.respondTargetFlags)(instanceId, agent);
|
|
164
169
|
const parts = [
|
|
165
170
|
`A dialog is open in ${worktreeId}: the agent reported it via ${SOURCE_LABEL[facts.source]}` +
|
|
166
171
|
`${facts.toolName ? ` for ${facts.toolName}` : ''}, but the detection layer published no ` +
|
|
@@ -215,11 +220,11 @@ function buildStructuredPromptQuestion(worktreeId, facts, instanceId) {
|
|
|
215
220
|
return parts.join(' ');
|
|
216
221
|
}
|
|
217
222
|
/** The live `promptData` for a structured prompt. */
|
|
218
|
-
function buildStructuredPromptData(worktreeId, facts, instanceId) {
|
|
223
|
+
function buildStructuredPromptData(worktreeId, facts, instanceId, agent) {
|
|
219
224
|
return {
|
|
220
225
|
type: models_1.UNCLASSIFIED_PROMPT_TYPE,
|
|
221
226
|
status: 'pending',
|
|
222
|
-
question: buildStructuredPromptQuestion(worktreeId, facts, instanceId),
|
|
227
|
+
question: buildStructuredPromptQuestion(worktreeId, facts, instanceId, agent),
|
|
223
228
|
options: [],
|
|
224
229
|
source: facts.source,
|
|
225
230
|
...(facts.message ? { message: facts.message } : {}),
|
|
@@ -241,11 +246,11 @@ function buildStructuredPromptData(worktreeId, facts, instanceId) {
|
|
|
241
246
|
};
|
|
242
247
|
}
|
|
243
248
|
/** The prompt-history row for a structured prompt the scraper never saw. */
|
|
244
|
-
function buildStructuredPromptHistoryRecord(worktreeId, facts, instanceId) {
|
|
249
|
+
function buildStructuredPromptHistoryRecord(worktreeId, facts, instanceId, agent) {
|
|
245
250
|
return {
|
|
246
251
|
type: models_1.UNCLASSIFIED_PROMPT_TYPE,
|
|
247
252
|
status: 'unclassified',
|
|
248
|
-
question: buildStructuredPromptQuestion(worktreeId, facts, instanceId),
|
|
253
|
+
question: buildStructuredPromptQuestion(worktreeId, facts, instanceId, agent),
|
|
249
254
|
options: [],
|
|
250
255
|
source: facts.source,
|
|
251
256
|
...(facts.message ? { message: facts.message } : {}),
|
|
@@ -72,6 +72,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
72
72
|
exports.__internal = void 0;
|
|
73
73
|
exports.reconcileWorktreeSessions = reconcileWorktreeSessions;
|
|
74
74
|
exports.reconcileWorktreeSessionsFromAliases = reconcileWorktreeSessionsFromAliases;
|
|
75
|
+
const role_launch_1 = require("../../lib/session/role-launch");
|
|
75
76
|
const manager_1 = require("../../lib/cli-tools/manager");
|
|
76
77
|
const types_1 = require("../../lib/cli-tools/types");
|
|
77
78
|
const agent_instances_db_1 = require("../../lib/db/agent-instances-db");
|
|
@@ -89,6 +90,7 @@ const response_poller_1 = require("../../lib/polling/response-poller");
|
|
|
89
90
|
const auto_yes_poller_state_1 = require("../../lib/polling/auto-yes-poller-state");
|
|
90
91
|
const auto_yes_enter_fallback_1 = require("../../lib/polling/auto-yes-enter-fallback");
|
|
91
92
|
const ws_server_1 = require("../../lib/ws-server");
|
|
93
|
+
const send_attempt_state_1 = require("./send-attempt-state");
|
|
92
94
|
const logger_1 = require("../../lib/logger");
|
|
93
95
|
const logger = (0, logger_1.createLogger)('worktree-session-reconcile');
|
|
94
96
|
/**
|
|
@@ -514,6 +516,10 @@ function moveAutoYesPartialAnswers(completed, sourceEpochs) {
|
|
|
514
516
|
* and leaving either behind is exactly the silent breakage this guards against.
|
|
515
517
|
*/
|
|
516
518
|
function migrateRuntimeState(db, renames, result) {
|
|
519
|
+
// --- Roles ----------------------------------------------------------------
|
|
520
|
+
// Issue #4115: the sessions were renamed and the processes are the same, so what
|
|
521
|
+
// this server knows about them follows. The records moved with the worktree row.
|
|
522
|
+
(0, role_launch_1.moveLaunchRoleEvidence)(renames);
|
|
517
523
|
// --- Auto-Yes -------------------------------------------------------------
|
|
518
524
|
// Snapshot which pollers are running BEFORE the state moves: startAutoYesPolling
|
|
519
525
|
// refuses to start when the state at its key is not enabled, so the state has
|
|
@@ -591,6 +597,15 @@ function migrateRuntimeState(db, renames, result) {
|
|
|
591
597
|
catch (error) {
|
|
592
598
|
result.errors.push(`websocket rooms: ${error instanceof Error ? error.message : String(error)}`);
|
|
593
599
|
}
|
|
600
|
+
// --- lastSend (Issue #4065) -------------------------------------------------
|
|
601
|
+
// Dropped, not moved: a record and its order (maxG) describe the sends made
|
|
602
|
+
// under the ID they were made under, and an old request that finishes late
|
|
603
|
+
// records under its own (old) ID. Both sides of every pair start with none.
|
|
604
|
+
// Never throws.
|
|
605
|
+
for (const rename of renames) {
|
|
606
|
+
(0, send_attempt_state_1.forgetSendAttemptsForWorktree)(rename.oldId);
|
|
607
|
+
(0, send_attempt_state_1.forgetSendAttemptsForWorktree)(rename.newId);
|
|
608
|
+
}
|
|
594
609
|
}
|
|
595
610
|
async function reconcileWorktreeSessions(db, renamesOrOldId, newIdOrOptions, maybeOptions) {
|
|
596
611
|
const requested = typeof renamesOrOldId === 'string'
|
|
@@ -70,9 +70,13 @@ async function waitForPrompt(sessionName, timeout) {
|
|
|
70
70
|
* @param message - Message content to send
|
|
71
71
|
* @param postPromptDelay - Stability delay after prompt detection (ms)
|
|
72
72
|
* @param promptWaitTimeout - Timeout for waiting for prompt state (ms)
|
|
73
|
+
* @param target - The instance the session runs (Issue #4048). The first
|
|
74
|
+
* prompt's hook check and the remembered body are then taken only from the
|
|
75
|
+
* entry both this and `sessionName` name; omitted, the name alone decides.
|
|
76
|
+
* Never registers or resets anything.
|
|
73
77
|
* @throws {Error} If session doesn't exist
|
|
74
78
|
*/
|
|
75
|
-
async function sendMessageToSession(sessionName, message, postPromptDelay, promptWaitTimeout) {
|
|
79
|
+
async function sendMessageToSession(sessionName, message, postPromptDelay, promptWaitTimeout, target) {
|
|
76
80
|
// Check if session exists
|
|
77
81
|
const exists = await (0, tmux_1.hasSession)(sessionName);
|
|
78
82
|
if (!exists) {
|
|
@@ -94,6 +98,7 @@ async function sendMessageToSession(sessionName, message, postPromptDelay, promp
|
|
|
94
98
|
sessionName,
|
|
95
99
|
message,
|
|
96
100
|
cliToolId: 'claude',
|
|
101
|
+
...(target !== undefined ? { target } : {}),
|
|
97
102
|
});
|
|
98
103
|
// Issue #405: Invalidate cache after sending message
|
|
99
104
|
(0, tmux_capture_cache_1.invalidateCache)(sessionName);
|