commandmate 0.49.3 → 0.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +454 -408
- package/.next/app-path-routes-manifest.json +19 -13
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +9 -9
- package/.next/react-loadable-manifest.json +1 -1
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +32 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/capabilities/route.js +1 -1
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route.js +1 -1
- package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js +1 -103
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +2 -2
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route.js +1 -1
- package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route.js +1 -1
- package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/resolve/route.js +1 -1
- package/.next/server/app/api/relays/[relayId]/resolve/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/resolve/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/route.js +1 -1
- package/.next/server/app/api/relays/[relayId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/route.js +1 -1
- package/.next/server/app/api/relays/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/remote/pair/route.js +2 -2
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/role-defaults/route.js +1 -0
- package/.next/server/app/api/repositories/[id]/role-defaults/route.js.nft.json +1 -0
- package/.next/server/app/api/repositories/[id]/role-defaults/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/roles/[id]/route.js +1 -0
- package/.next/server/app/api/roles/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/roles/[id]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/roles/route.js +1 -0
- package/.next/server/app/api/roles/route.js.nft.json +1 -0
- package/.next/server/app/api/roles/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/settings/agent-role-defaults/route.js +1 -0
- package/.next/server/app/api/settings/agent-role-defaults/route.js.nft.json +1 -0
- package/.next/server/app/api/settings/agent-role-defaults/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/settings/default-agents/route.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route.js +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +3 -3
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/roles/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/instances/roles/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/instances/roles/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/instances/roles/settle/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/instances/roles/settle/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/instances/roles/settle/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +3 -104
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/tasks/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -103
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page.js +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page.js +2 -2
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.js +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +11 -11
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +19 -13
- package/.next/server/chunks/1184.js +5 -0
- package/.next/server/chunks/1501.js +5 -5
- package/.next/server/chunks/1656.js +2 -2
- package/.next/server/chunks/1957.js +2 -2
- package/.next/server/chunks/1990.js +103 -0
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2404.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2819.js +1 -0
- package/.next/server/chunks/2897.js +1 -1
- package/.next/server/chunks/3042.js +2 -0
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3294.js +3 -0
- package/.next/server/chunks/3417.js +1 -1
- package/.next/server/chunks/3480.js +1 -1
- package/.next/server/chunks/3505.js +2 -6
- package/.next/server/chunks/3543.js +1 -1
- package/.next/server/chunks/3801.js +2 -2
- package/.next/server/chunks/3945.js +1 -1
- package/.next/server/chunks/4207.js +1 -1
- package/.next/server/chunks/454.js +1 -0
- package/.next/server/chunks/4645.js +1 -0
- package/.next/server/chunks/4911.js +1 -1
- package/.next/server/chunks/5350.js +6 -2
- package/.next/server/chunks/5354.js +1 -1
- package/.next/server/chunks/5571.js +1 -1
- package/.next/server/chunks/6009.js +12 -0
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6285.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6486.js +2 -2
- package/.next/server/chunks/6569.js +1 -0
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/6793.js +4 -4
- package/.next/server/chunks/696.js +3 -0
- package/.next/server/chunks/7023.js +3 -3
- package/.next/server/chunks/{9702.js → 7083.js} +1 -1
- package/.next/server/chunks/741.js +1 -0
- package/.next/server/chunks/7662.js +1 -0
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/8143.js +33 -0
- package/.next/server/chunks/8581.js +6 -6
- package/.next/server/chunks/8728.js +2 -2
- package/.next/server/chunks/8782.js +1 -1
- package/.next/server/chunks/8807.js +97 -10
- package/.next/server/chunks/8918.js +3 -105
- package/.next/server/chunks/8955.js +1 -0
- package/.next/server/chunks/923.js +1 -0
- package/.next/server/chunks/9390.js +2 -2
- package/.next/server/chunks/9627.js +5 -5
- package/.next/server/chunks/973.js +1 -0
- package/.next/server/chunks/9731.js +3 -3
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/2314-2c9d587a27e8f731.js +1 -0
- package/.next/static/chunks/2407-ee881c99e218975b.js +1 -0
- package/.next/static/chunks/3931-24d7e245a93feb25.js +1 -0
- package/.next/static/chunks/4548-9afa02fd18afa6c7.js +1 -0
- package/.next/static/chunks/{5794-7975b8e51e731b19.js → 5794-38b3b504b3d97e04.js} +1 -1
- package/.next/static/chunks/{6966-d8dc6032410ffaba.js → 6966-dbfa4a43397f8c6d.js} +1 -1
- package/.next/static/chunks/7090-28e83f5a0efdb3b4.js +1 -0
- package/.next/static/chunks/7229.016d007c467a3600.js +1 -0
- package/.next/static/chunks/{8407-35bbfc84793d7004.js → 8407-dd6a8062fc449899.js} +1 -1
- package/.next/static/chunks/app/api/agents/update/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/agents/versions/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/app/release-notes/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/app/update/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/resolve/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/relays/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/remote/pair/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/role-defaults/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/roles/[id]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/roles/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/settings/agent-role-defaults/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/settings/default-agents/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/skills/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/templates/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/roles/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/roles/settle/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/layout-7bf800fcc5e025b1.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/more/{page-ff5af5ca48774c89.js → page-e8f5780f6e4fb657.js} +1 -1
- package/.next/static/chunks/app/{page-b4863bfe0452e09d.js → page-869f353a4ac4e15b.js} +1 -1
- package/.next/static/chunks/app/proxy/[...path]/route-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/repositories/page-bedb505687010f18.js +1 -0
- package/.next/static/chunks/app/review/page-87c4a9b0de50fa80.js +1 -0
- package/.next/static/chunks/app/sessions/{page-c6eb7c02db2f4c80.js → page-82ca46793789fce4.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-476063c3571b81dd.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-570eb79fbbd1a934.js +1 -0
- package/.next/static/chunks/{webpack-838df0273b03af19.js → webpack-16b1a3143fa42ca0.js} +1 -1
- package/.next/static/css/d4f2c9522cf1b449.css +1 -0
- package/.next/static/z4d8-5MaLkoD-4EhueZwk/_buildManifest.js +1 -0
- package/.next/trace +14 -13
- package/.next/types/app/api/repositories/[id]/role-defaults/route.ts +347 -0
- package/.next/types/app/api/roles/[id]/route.ts +347 -0
- package/.next/types/app/api/roles/route.ts +347 -0
- package/.next/types/app/api/settings/agent-role-defaults/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/instances/roles/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/instances/roles/settle/route.ts +347 -0
- package/.next/types/routes.d.ts +7 -1
- package/.next/types/validator.ts +54 -0
- package/dist/cli/commands/instances.d.ts +1 -0
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +290 -33
- package/dist/cli/commands/message-dispatch.d.ts +25 -3
- package/dist/cli/commands/message-dispatch.d.ts.map +1 -1
- package/dist/cli/commands/message-dispatch.js +26 -6
- package/dist/cli/commands/relays.d.ts +5 -0
- package/dist/cli/commands/relays.d.ts.map +1 -1
- package/dist/cli/commands/relays.js +37 -1
- package/dist/cli/commands/roles.d.ts +11 -0
- package/dist/cli/commands/roles.d.ts.map +1 -0
- package/dist/cli/commands/roles.js +392 -0
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +526 -38
- package/dist/cli/docs/agent-operations.d.ts +1 -1
- package/dist/cli/docs/agent-operations.d.ts.map +1 -1
- package/dist/cli/docs/agent-operations.js +91 -3
- package/dist/cli/index.d.ts +4 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +6 -0
- package/dist/cli/types/api-responses.d.ts +54 -0
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/index.d.ts +38 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/types/index.js +15 -1
- package/dist/cli/utils/agent-instances.d.ts +29 -1
- package/dist/cli/utils/agent-instances.d.ts.map +1 -1
- package/dist/cli/utils/agent-instances.js +67 -7
- package/dist/cli/utils/agent-roles.d.ts +75 -0
- package/dist/cli/utils/agent-roles.d.ts.map +1 -0
- package/dist/cli/utils/agent-roles.js +238 -0
- package/dist/cli/utils/api-client-errors.d.ts +23 -1
- package/dist/cli/utils/api-client-errors.d.ts.map +1 -1
- package/dist/cli/utils/api-client-errors.js +14 -2
- package/dist/cli/utils/api-client.d.ts +8 -0
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +13 -1
- package/dist/cli/utils/role-failure.d.ts +31 -0
- package/dist/cli/utils/role-failure.d.ts.map +1 -0
- package/dist/cli/utils/role-failure.js +90 -0
- package/dist/cli/utils/role-input.d.ts +16 -0
- package/dist/cli/utils/role-input.d.ts.map +1 -0
- package/dist/cli/utils/role-input.js +78 -0
- package/dist/cli/utils/security-logger.d.ts +17 -0
- package/dist/cli/utils/security-logger.d.ts.map +1 -1
- package/dist/cli/utils/security-logger.js +44 -5
- package/dist/lib/detection/tools/verified-against.d.ts +16 -0
- package/dist/lib/detection/tools/verified-against.d.ts.map +1 -1
- package/dist/lib/detection/tools/verified-against.js +16 -0
- package/dist/lib/session/send-attempt-types.d.ts +4 -0
- package/dist/lib/session/send-attempt-types.d.ts.map +1 -1
- package/dist/lib/verification/verify-config.d.ts +22 -0
- package/dist/lib/verification/verify-config.d.ts.map +1 -1
- package/dist/lib/verification/verify-config.js +32 -2
- package/dist/server/locales/en/worktree.json +25 -6
- package/dist/server/locales/ja/worktree.json +25 -6
- package/dist/server/src/config/safe-directory.js +30 -0
- package/dist/server/src/lib/agent-roles/adapters.js +174 -0
- package/dist/server/src/lib/agent-roles/artifacts.js +638 -0
- package/dist/server/src/lib/agent-roles/composition.js +222 -0
- package/dist/server/src/lib/agent-roles/fingerprint.js +21 -0
- package/dist/server/src/lib/agent-roles/jsonc.js +85 -0
- package/dist/server/src/lib/agent-roles/launch-errors.js +58 -0
- package/dist/server/src/lib/agent-roles/pane-env.js +63 -0
- package/dist/server/src/lib/agent-roles/resolve.js +375 -0
- package/dist/server/src/lib/agent-roles/toml-basic.js +140 -0
- package/dist/server/src/lib/agent-roles/unicode.js +16 -0
- package/dist/server/src/lib/agent-roles/validation.js +61 -0
- package/dist/server/src/lib/cli-tools/antigravity.js +39 -6
- package/dist/server/src/lib/cli-tools/base.js +63 -5
- package/dist/server/src/lib/cli-tools/claude-auto-default-nudge.js +141 -0
- package/dist/server/src/lib/cli-tools/claude.js +7 -1
- package/dist/server/src/lib/cli-tools/codex.js +134 -21
- package/dist/server/src/lib/cli-tools/command-code.js +24 -1
- package/dist/server/src/lib/cli-tools/copilot.js +36 -7
- package/dist/server/src/lib/cli-tools/gemini.js +37 -3
- package/dist/server/src/lib/cli-tools/launch-answer-skips.js +76 -0
- package/dist/server/src/lib/cli-tools/opencode-v2.js +10 -0
- package/dist/server/src/lib/cli-tools/opencode.js +58 -7
- package/dist/server/src/lib/cli-tools/submit-composer-read.js +24 -4
- package/dist/server/src/lib/cli-tools/vibe-local.js +25 -1
- package/dist/server/src/lib/db/agent-instances-db.js +53 -0
- package/dist/server/src/lib/db/agent-roles-db.js +409 -0
- package/dist/server/src/lib/db/agent-session-cost-sampler.js +3 -2
- package/dist/server/src/lib/db/db-instance.js +7 -37
- package/dist/server/src/lib/db/migrations/index.js +4 -0
- package/dist/server/src/lib/db/migrations/runner.js +1 -1
- package/dist/server/src/lib/db/migrations/v64-agent-roles.js +123 -0
- package/dist/server/src/lib/db/migrations/v65-agent-instance-creation-keys.js +42 -0
- package/dist/server/src/lib/db/relay-db.js +35 -0
- package/dist/server/src/lib/detection/cli-patterns.js +13 -3
- package/dist/server/src/lib/detection/model-info-extractor.js +1 -1
- package/dist/server/src/lib/detection/tools/claude/patterns.js +76 -0
- package/dist/server/src/lib/detection/tools/codex/cli-patterns.js +5 -0
- package/dist/server/src/lib/detection/tools/codex/detect.js +5 -1
- package/dist/server/src/lib/detection/tools/codex/patterns.js +52 -2
- package/dist/server/src/lib/detection/tools/codex/prompt.js +23 -3
- package/dist/server/src/lib/detection/tools/opencode/detect.js +30 -15
- package/dist/server/src/lib/detection/tools/opencode/patterns.js +268 -7
- package/dist/server/src/lib/detection/tools/opencode/readiness.js +16 -7
- package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +51 -15
- package/dist/server/src/lib/detection/tools/opencode-v2/patterns.js +195 -11
- package/dist/server/src/lib/detection/tools/run-detection.js +5 -2
- package/dist/server/src/lib/detection/tools/verified-against.js +16 -0
- package/dist/server/src/lib/detection/tools/vibe-local/readiness.js +22 -0
- package/dist/server/src/lib/git/git-common-dir.js +192 -0
- package/dist/server/src/lib/hooks/hook-settings-generator.js +8 -2
- package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +31 -1
- package/dist/server/src/lib/hooks/sources/launch-command.js +31 -8
- package/dist/server/src/lib/hooks/sources/opencode/client.js +20 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/client.js +24 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +208 -35
- package/dist/server/src/lib/hooks/sources/opencode-v2/secrets.js +7 -1
- package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +117 -2
- package/dist/server/src/lib/job-executor.js +18 -1
- package/dist/server/src/lib/polling/response-checker-extraction-steps.js +58 -4
- package/dist/server/src/lib/polling/response-checker.js +32 -7
- package/dist/server/src/lib/relay/relay-delivery-block.js +150 -0
- package/dist/server/src/lib/relay/relay-delivery.js +59 -2
- package/dist/server/src/lib/response-cleaner.js +13 -3
- package/dist/server/src/lib/response-extractor.js +38 -3
- package/dist/server/src/lib/session/agent-session-lifecycle.js +9 -1
- package/dist/server/src/lib/session/claude-executor.js +13 -1
- package/dist/server/src/lib/session/claude-session.js +109 -13
- package/dist/server/src/lib/session/instance-input-lock.js +93 -4
- package/dist/server/src/lib/session/role-launch.js +722 -0
- package/dist/server/src/lib/session/send-attempt-state.js +7 -0
- package/dist/server/src/lib/session/send-user-message.js +6 -0
- package/dist/server/src/lib/session/session-generation-archive.js +7 -8
- package/dist/server/src/lib/session/session-launch-flight.js +33 -1
- package/dist/server/src/lib/session/worktree-session-reconcile.js +5 -0
- package/dist/server/src/lib/test-run-detection.js +53 -0
- package/dist/server/src/lib/tmux/read-mode.js +4 -0
- package/dist/server/src/lib/tmux/session-hook-scripts.js +36 -4
- package/dist/server/src/lib/tui-accumulator.js +14 -5
- package/dist/server/src/lib/verification/env-clean-gate.js +117 -12
- package/dist/server/src/lib/verification/gate-runner.js +9 -8
- package/dist/server/src/lib/verification/verify-config.js +32 -2
- package/dist/server/src/types/agent-roles.js +56 -0
- package/dist/types/agent-roles.d.ts +351 -0
- package/dist/types/agent-roles.d.ts.map +1 -0
- package/dist/types/agent-roles.js +56 -0
- package/docs/en/user-guide/webapp-guide.md +16 -0
- package/package.json +2 -1
- package/release-notes/0.50.0.json +113 -0
- package/.next/server/chunks/1308.js +0 -1
- package/.next/server/chunks/4490.js +0 -1
- package/.next/server/chunks/4936.js +0 -1
- package/.next/server/chunks/610.js +0 -1
- package/.next/server/chunks/6119.js +0 -1
- package/.next/server/chunks/7491.js +0 -3
- package/.next/server/chunks/7926.js +0 -1
- package/.next/server/chunks/9360.js +0 -2
- package/.next/server/chunks/9584.js +0 -1
- package/.next/static/LNfVZiq6FZwKsV7L9Mi6M/_buildManifest.js +0 -1
- package/.next/static/chunks/2407-87ec01332344ec2b.js +0 -1
- package/.next/static/chunks/344-e1cefd00787060e4.js +0 -1
- package/.next/static/chunks/3931-3ef48b8d97357282.js +0 -1
- package/.next/static/chunks/7229.7f0f5a7032b612b4.js +0 -1
- package/.next/static/chunks/8165-263172c17ae8e8c3.js +0 -1
- package/.next/static/chunks/app/api/agents/update/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/agents/versions/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/app/release-notes/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/capabilities/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/resolve/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/relays/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/remote/pair/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/settings/default-agents/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/skills/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/templates/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/layout-b9d8aef70e4f17b2.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/repositories/page-71f5a5ac29b0370d.js +0 -1
- package/.next/static/chunks/app/review/page-ff3efb96fdf9bb4b.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-96fc12d400b49b13.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-f6a151304860b549.js +0 -1
- package/.next/static/css/c1e307d05daf93b6.css +0 -1
- /package/.next/static/{LNfVZiq6FZwKsV7L9Mi6M → z4d8-5MaLkoD-4EhueZwk}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.INSTANCE_CREATION_KEY_TTL_MS = exports.AgentRoleInUseError = exports.AgentRoleNameChangedError = exports.AgentRoleVersionConflictError = exports.AgentRoleNameConflictError = exports.AgentRoleNotFoundError = exports.AgentRoleValidationError = void 0;
|
|
4
|
+
exports.listAgentRoles = listAgentRoles;
|
|
5
|
+
exports.getAgentRole = getAgentRole;
|
|
6
|
+
exports.createAgentRole = createAgentRole;
|
|
7
|
+
exports.getAgentRoleReferences = getAgentRoleReferences;
|
|
8
|
+
exports.updateAgentRole = updateAgentRole;
|
|
9
|
+
exports.deleteAgentRole = deleteAgentRole;
|
|
10
|
+
exports.getSystemRoleDefaults = getSystemRoleDefaults;
|
|
11
|
+
exports.setSystemRoleDefault = setSystemRoleDefault;
|
|
12
|
+
exports.getRepositoryRoleStates = getRepositoryRoleStates;
|
|
13
|
+
exports.setRepositoryRoleState = setRepositoryRoleState;
|
|
14
|
+
exports.getInstanceRoleState = getInstanceRoleState;
|
|
15
|
+
exports.setInstanceRoleState = setInstanceRoleState;
|
|
16
|
+
exports.hasAnyRoleSetting = hasAnyRoleSetting;
|
|
17
|
+
exports.getInstanceCreationKey = getInstanceCreationKey;
|
|
18
|
+
exports.recordInstanceCreationKey = recordInstanceCreationKey;
|
|
19
|
+
exports.settleInstanceCreationKey = settleInstanceCreationKey;
|
|
20
|
+
exports.recordRoleLaunch = recordRoleLaunch;
|
|
21
|
+
exports.getLatestRoleLaunchRecords = getLatestRoleLaunchRecords;
|
|
22
|
+
/**
|
|
23
|
+
* Role tables (Issue #4114, migration v64).
|
|
24
|
+
*
|
|
25
|
+
* Every write that could leave a reference half done runs in a transaction. The
|
|
26
|
+
* body is never logged and never placed in an error message.
|
|
27
|
+
*
|
|
28
|
+
* @module lib/db/agent-roles-db
|
|
29
|
+
*/
|
|
30
|
+
const crypto_1 = require("crypto");
|
|
31
|
+
const fingerprint_1 = require("../../lib/agent-roles/fingerprint");
|
|
32
|
+
const validation_1 = require("../../lib/agent-roles/validation");
|
|
33
|
+
class AgentRoleValidationError extends Error {
|
|
34
|
+
constructor(message) {
|
|
35
|
+
super(message);
|
|
36
|
+
this.name = 'AgentRoleValidationError';
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.AgentRoleValidationError = AgentRoleValidationError;
|
|
40
|
+
class AgentRoleNotFoundError extends Error {
|
|
41
|
+
roleId;
|
|
42
|
+
constructor(roleId) {
|
|
43
|
+
super(`Role not found: ${roleId}`);
|
|
44
|
+
this.roleId = roleId;
|
|
45
|
+
this.name = 'AgentRoleNotFoundError';
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.AgentRoleNotFoundError = AgentRoleNotFoundError;
|
|
49
|
+
class AgentRoleNameConflictError extends Error {
|
|
50
|
+
constructor(name) {
|
|
51
|
+
super(`A role named "${name}" already exists`);
|
|
52
|
+
this.name = 'AgentRoleNameConflictError';
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.AgentRoleNameConflictError = AgentRoleNameConflictError;
|
|
56
|
+
class AgentRoleVersionConflictError extends Error {
|
|
57
|
+
currentBodyVersion;
|
|
58
|
+
constructor(currentBodyVersion) {
|
|
59
|
+
super(`The role is at body version ${currentBodyVersion}`);
|
|
60
|
+
this.currentBodyVersion = currentBodyVersion;
|
|
61
|
+
this.name = 'AgentRoleVersionConflictError';
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.AgentRoleVersionConflictError = AgentRoleVersionConflictError;
|
|
65
|
+
class AgentRoleNameChangedError extends Error {
|
|
66
|
+
currentName;
|
|
67
|
+
constructor(currentName) {
|
|
68
|
+
super('The role was renamed since it was read');
|
|
69
|
+
this.currentName = currentName;
|
|
70
|
+
this.name = 'AgentRoleNameChangedError';
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.AgentRoleNameChangedError = AgentRoleNameChangedError;
|
|
74
|
+
class AgentRoleInUseError extends Error {
|
|
75
|
+
references;
|
|
76
|
+
constructor(references) {
|
|
77
|
+
super('The role is in use');
|
|
78
|
+
this.references = references;
|
|
79
|
+
this.name = 'AgentRoleInUseError';
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.AgentRoleInUseError = AgentRoleInUseError;
|
|
83
|
+
function mapRole(row) {
|
|
84
|
+
return {
|
|
85
|
+
id: row.id,
|
|
86
|
+
name: row.name,
|
|
87
|
+
body: row.body,
|
|
88
|
+
bodyVersion: row.body_version,
|
|
89
|
+
bodyFingerprint: (0, fingerprint_1.computeBodyFingerprint)(row.body),
|
|
90
|
+
bodyBytes: Buffer.byteLength(row.body, 'utf8'),
|
|
91
|
+
createdAt: row.created_at,
|
|
92
|
+
updatedAt: row.updated_at,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function isUniqueNameViolation(error) {
|
|
96
|
+
return error instanceof Error && error.message.includes('UNIQUE constraint failed: agent_roles.name');
|
|
97
|
+
}
|
|
98
|
+
function validatedName(name) {
|
|
99
|
+
const normalized = (0, validation_1.normalizeRoleName)(name);
|
|
100
|
+
if (!normalized.ok)
|
|
101
|
+
throw new AgentRoleValidationError(normalized.problem);
|
|
102
|
+
return normalized.name;
|
|
103
|
+
}
|
|
104
|
+
function assertBody(body) {
|
|
105
|
+
const problem = (0, validation_1.roleBodyProblem)(body);
|
|
106
|
+
if (problem)
|
|
107
|
+
throw new AgentRoleValidationError(problem);
|
|
108
|
+
}
|
|
109
|
+
// ---------------------------------------------------------------------------
|
|
110
|
+
// Roles
|
|
111
|
+
// ---------------------------------------------------------------------------
|
|
112
|
+
/** Every role, by name. */
|
|
113
|
+
function listAgentRoles(db) {
|
|
114
|
+
const rows = db.prepare('SELECT * FROM agent_roles ORDER BY name ASC').all();
|
|
115
|
+
return rows.map(mapRole);
|
|
116
|
+
}
|
|
117
|
+
function getAgentRole(db, id) {
|
|
118
|
+
const row = db.prepare('SELECT * FROM agent_roles WHERE id = ?').get(id);
|
|
119
|
+
return row ? mapRole(row) : null;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* @throws {AgentRoleValidationError} The name or body is not acceptable
|
|
123
|
+
* @throws {AgentRoleNameConflictError} The name is taken
|
|
124
|
+
*/
|
|
125
|
+
function createAgentRole(db, input) {
|
|
126
|
+
const name = validatedName(input.name);
|
|
127
|
+
assertBody(input.body);
|
|
128
|
+
// Short and hex: it becomes part of a generated file name.
|
|
129
|
+
const id = (0, crypto_1.randomBytes)(8).toString('hex');
|
|
130
|
+
const now = Date.now();
|
|
131
|
+
try {
|
|
132
|
+
db.prepare(`INSERT INTO agent_roles (id, name, body, body_version, created_at, updated_at) VALUES (?, ?, ?, 1, ?, ?)`).run(id, name, input.body, now, now);
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
if (isUniqueNameViolation(error))
|
|
136
|
+
throw new AgentRoleNameConflictError(name);
|
|
137
|
+
throw error;
|
|
138
|
+
}
|
|
139
|
+
return getAgentRole(db, id);
|
|
140
|
+
}
|
|
141
|
+
/** What points directly at this role. */
|
|
142
|
+
function getAgentRoleReferences(db, roleId) {
|
|
143
|
+
const instances = db
|
|
144
|
+
.prepare(`SELECT worktree_id AS worktreeId, instance_id AS instanceId FROM agent_instance_roles
|
|
145
|
+
WHERE role_id = ? ORDER BY worktree_id, instance_id`)
|
|
146
|
+
.all(roleId);
|
|
147
|
+
const repositories = db
|
|
148
|
+
.prepare(`SELECT d.repository_id AS repositoryId, r.path AS repositoryPath, d.cli_tool_id AS cliToolId
|
|
149
|
+
FROM agent_role_repository_defaults d JOIN repositories r ON r.id = d.repository_id
|
|
150
|
+
WHERE d.role_id = ? ORDER BY r.path, d.cli_tool_id`)
|
|
151
|
+
.all(roleId);
|
|
152
|
+
const system = db
|
|
153
|
+
.prepare(`SELECT cli_tool_id AS cliToolId FROM agent_role_system_defaults WHERE role_id = ? ORDER BY cli_tool_id`)
|
|
154
|
+
.all(roleId);
|
|
155
|
+
return { instances, repositories, system };
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Edit a role. The body version moves only when the bytes change, so a rename is
|
|
159
|
+
* not a new version of the text.
|
|
160
|
+
*
|
|
161
|
+
* @param input.expectedBodyVersion - When given, the edit applies only at this version
|
|
162
|
+
* @param input.expectedName - When given, the edit applies only under this name, or
|
|
163
|
+
* when the role already has the name asked for
|
|
164
|
+
* @throws {AgentRoleNotFoundError}
|
|
165
|
+
* @throws {AgentRoleVersionConflictError} Someone else got there first; nothing changed
|
|
166
|
+
* @throws {AgentRoleNameChangedError} Someone else renamed it first; nothing changed
|
|
167
|
+
* @throws {AgentRoleValidationError}
|
|
168
|
+
* @throws {AgentRoleNameConflictError}
|
|
169
|
+
*/
|
|
170
|
+
function updateAgentRole(db, id, input) {
|
|
171
|
+
const name = input.name === undefined ? undefined : validatedName(input.name);
|
|
172
|
+
if (input.body !== undefined)
|
|
173
|
+
assertBody(input.body);
|
|
174
|
+
const newBody = input.body;
|
|
175
|
+
return db.transaction(() => {
|
|
176
|
+
const before = getAgentRole(db, id);
|
|
177
|
+
if (!before)
|
|
178
|
+
throw new AgentRoleNotFoundError(id);
|
|
179
|
+
if (input.expectedBodyVersion !== undefined && input.expectedBodyVersion !== before.bodyVersion) {
|
|
180
|
+
throw new AgentRoleVersionConflictError(before.bodyVersion);
|
|
181
|
+
}
|
|
182
|
+
if (input.expectedName !== undefined && input.expectedName !== before.name && name !== before.name) {
|
|
183
|
+
throw new AgentRoleNameChangedError(before.name);
|
|
184
|
+
}
|
|
185
|
+
const bodyChanged = newBody !== undefined && newBody !== before.body;
|
|
186
|
+
try {
|
|
187
|
+
db.prepare(`UPDATE agent_roles SET name = ?, body = ?, body_version = ?, updated_at = ? WHERE id = ?`).run(name ?? before.name, newBody ?? before.body, bodyChanged ? before.bodyVersion + 1 : before.bodyVersion, Date.now(), id);
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
if (isUniqueNameViolation(error))
|
|
191
|
+
throw new AgentRoleNameConflictError(name ?? before.name);
|
|
192
|
+
throw error;
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
before,
|
|
196
|
+
after: getAgentRole(db, id),
|
|
197
|
+
affected: getAgentRoleReferences(db, id),
|
|
198
|
+
};
|
|
199
|
+
})();
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Delete a role. With `force`, the settings pointing at it go in the same
|
|
203
|
+
* transaction, so they read as "inherit" afterwards and not as an explicit none.
|
|
204
|
+
* Launch records and generated files stay.
|
|
205
|
+
*
|
|
206
|
+
* @throws {AgentRoleNotFoundError}
|
|
207
|
+
* @throws {AgentRoleInUseError} It has references and `force` was not given
|
|
208
|
+
*/
|
|
209
|
+
function deleteAgentRole(db, id, options = {}) {
|
|
210
|
+
return db.transaction(() => {
|
|
211
|
+
const role = getAgentRole(db, id);
|
|
212
|
+
if (!role)
|
|
213
|
+
throw new AgentRoleNotFoundError(id);
|
|
214
|
+
const affected = getAgentRoleReferences(db, id);
|
|
215
|
+
const inUse = affected.instances.length + affected.repositories.length + affected.system.length > 0;
|
|
216
|
+
if (inUse && !options.force)
|
|
217
|
+
throw new AgentRoleInUseError(affected);
|
|
218
|
+
db.prepare('DELETE FROM agent_instance_roles WHERE role_id = ?').run(id);
|
|
219
|
+
db.prepare('DELETE FROM agent_role_repository_defaults WHERE role_id = ?').run(id);
|
|
220
|
+
db.prepare('DELETE FROM agent_role_system_defaults WHERE role_id = ?').run(id);
|
|
221
|
+
db.prepare('DELETE FROM agent_roles WHERE id = ?').run(id);
|
|
222
|
+
return { role, affected };
|
|
223
|
+
})();
|
|
224
|
+
}
|
|
225
|
+
function assertRoleExists(db, roleId) {
|
|
226
|
+
if (!db.prepare('SELECT 1 FROM agent_roles WHERE id = ?').get(roleId)) {
|
|
227
|
+
throw new AgentRoleNotFoundError(roleId);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
// ---------------------------------------------------------------------------
|
|
231
|
+
// Settings
|
|
232
|
+
// ---------------------------------------------------------------------------
|
|
233
|
+
function toStoredState(row) {
|
|
234
|
+
if (!row)
|
|
235
|
+
return { state: 'inherit' };
|
|
236
|
+
if (row.role_id === null)
|
|
237
|
+
return { state: 'none' };
|
|
238
|
+
return { state: 'role', roleId: row.role_id, roleName: row.role_name };
|
|
239
|
+
}
|
|
240
|
+
/** @returns The tools with a system default. A missing key means unset. */
|
|
241
|
+
function getSystemRoleDefaults(db) {
|
|
242
|
+
const rows = db
|
|
243
|
+
.prepare(`SELECT d.cli_tool_id, d.role_id, r.name AS role_name
|
|
244
|
+
FROM agent_role_system_defaults d JOIN agent_roles r ON r.id = d.role_id`)
|
|
245
|
+
.all();
|
|
246
|
+
return Object.fromEntries(rows.map((row) => [row.cli_tool_id, { roleId: row.role_id, roleName: row.role_name }]));
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* @param roleId - The role, or null for unset (no row)
|
|
250
|
+
* @throws {AgentRoleNotFoundError}
|
|
251
|
+
*/
|
|
252
|
+
function setSystemRoleDefault(db, cliToolId, roleId) {
|
|
253
|
+
if (roleId === null) {
|
|
254
|
+
db.prepare('DELETE FROM agent_role_system_defaults WHERE cli_tool_id = ?').run(cliToolId);
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
assertRoleExists(db, roleId);
|
|
258
|
+
db.prepare(`INSERT INTO agent_role_system_defaults (cli_tool_id, role_id, updated_at) VALUES (?, ?, ?)
|
|
259
|
+
ON CONFLICT(cli_tool_id) DO UPDATE SET role_id = excluded.role_id, updated_at = excluded.updated_at`).run(cliToolId, roleId, Date.now());
|
|
260
|
+
}
|
|
261
|
+
/** @returns The tools with a row for this root. A missing key means inherit. */
|
|
262
|
+
function getRepositoryRoleStates(db, repositoryId) {
|
|
263
|
+
const rows = db
|
|
264
|
+
.prepare(`SELECT d.cli_tool_id, d.role_id, r.name AS role_name
|
|
265
|
+
FROM agent_role_repository_defaults d LEFT JOIN agent_roles r ON r.id = d.role_id
|
|
266
|
+
WHERE d.repository_id = ?`)
|
|
267
|
+
.all(repositoryId);
|
|
268
|
+
return Object.fromEntries(rows.map((row) => [row.cli_tool_id, toStoredState(row)]));
|
|
269
|
+
}
|
|
270
|
+
/** @throws {AgentRoleNotFoundError} */
|
|
271
|
+
function setRepositoryRoleState(db, repositoryId, cliToolId, input) {
|
|
272
|
+
if (input.state === 'inherit') {
|
|
273
|
+
db.prepare('DELETE FROM agent_role_repository_defaults WHERE repository_id = ? AND cli_tool_id = ?').run(repositoryId, cliToolId);
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
const roleId = input.state === 'role' ? input.roleId : null;
|
|
277
|
+
if (roleId !== null)
|
|
278
|
+
assertRoleExists(db, roleId);
|
|
279
|
+
db.prepare(`INSERT INTO agent_role_repository_defaults (repository_id, cli_tool_id, role_id, updated_at) VALUES (?, ?, ?, ?)
|
|
280
|
+
ON CONFLICT(repository_id, cli_tool_id) DO UPDATE SET role_id = excluded.role_id, updated_at = excluded.updated_at`).run(repositoryId, cliToolId, roleId, Date.now());
|
|
281
|
+
}
|
|
282
|
+
function getInstanceRoleState(db, worktreeId, instanceId) {
|
|
283
|
+
const row = db
|
|
284
|
+
.prepare(`SELECT i.role_id, r.name AS role_name
|
|
285
|
+
FROM agent_instance_roles i LEFT JOIN agent_roles r ON r.id = i.role_id
|
|
286
|
+
WHERE i.worktree_id = ? AND i.instance_id = ?`)
|
|
287
|
+
.get(worktreeId, instanceId);
|
|
288
|
+
return toStoredState(row);
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Whether the target may hold a setting is for the caller to decide
|
|
292
|
+
* (`agent-roles/management.ts`): this writes what it is told.
|
|
293
|
+
*
|
|
294
|
+
* @throws {AgentRoleNotFoundError}
|
|
295
|
+
*/
|
|
296
|
+
function setInstanceRoleState(db, worktreeId, instanceId, input) {
|
|
297
|
+
if (input.state === 'inherit') {
|
|
298
|
+
db.prepare('DELETE FROM agent_instance_roles WHERE worktree_id = ? AND instance_id = ?').run(worktreeId, instanceId);
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
const roleId = input.state === 'role' ? input.roleId : null;
|
|
302
|
+
if (roleId !== null)
|
|
303
|
+
assertRoleExists(db, roleId);
|
|
304
|
+
db.prepare(`INSERT INTO agent_instance_roles (worktree_id, instance_id, role_id, updated_at) VALUES (?, ?, ?, ?)
|
|
305
|
+
ON CONFLICT(worktree_id, instance_id) DO UPDATE SET role_id = excluded.role_id, updated_at = excluded.updated_at`).run(worktreeId, instanceId, roleId, Date.now());
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Whether any level holds a setting. With none, every instance of every tool
|
|
309
|
+
* resolves to no role, so a launch need not run git to find that out (#4115).
|
|
310
|
+
*/
|
|
311
|
+
function hasAnyRoleSetting(db) {
|
|
312
|
+
const row = db
|
|
313
|
+
.prepare(`SELECT (EXISTS (SELECT 1 FROM agent_instance_roles)
|
|
314
|
+
OR EXISTS (SELECT 1 FROM agent_role_repository_defaults)
|
|
315
|
+
OR EXISTS (SELECT 1 FROM agent_role_system_defaults)) AS present`)
|
|
316
|
+
.get();
|
|
317
|
+
return row?.present === 1;
|
|
318
|
+
}
|
|
319
|
+
// ---------------------------------------------------------------------------
|
|
320
|
+
// Creation keys (#4132, migration v65)
|
|
321
|
+
// ---------------------------------------------------------------------------
|
|
322
|
+
/** How long a key is remembered. A request's deadline is seconds, so a late one is well inside it. */
|
|
323
|
+
exports.INSTANCE_CREATION_KEY_TTL_MS = 24 * 60 * 60 * 1000;
|
|
324
|
+
function getInstanceCreationKey(db, worktreeId, key) {
|
|
325
|
+
const row = db
|
|
326
|
+
.prepare(`SELECT instance_id, request_fingerprint FROM agent_instance_creation_keys
|
|
327
|
+
WHERE worktree_id = ? AND idempotency_key = ?`)
|
|
328
|
+
.get(worktreeId, key);
|
|
329
|
+
return row ? { instanceId: row.instance_id, requestFingerprint: row.request_fingerprint } : null;
|
|
330
|
+
}
|
|
331
|
+
function writeInstanceCreationKey(db, worktreeId, key, record) {
|
|
332
|
+
const now = Date.now();
|
|
333
|
+
db.prepare('DELETE FROM agent_instance_creation_keys WHERE created_at < ?').run(now - exports.INSTANCE_CREATION_KEY_TTL_MS);
|
|
334
|
+
db.prepare(`INSERT INTO agent_instance_creation_keys (worktree_id, idempotency_key, instance_id, request_fingerprint, created_at)
|
|
335
|
+
VALUES (?, ?, ?, ?, ?)`).run(worktreeId, key, record.instanceId, record.requestFingerprint, now);
|
|
336
|
+
}
|
|
337
|
+
/** Written in the transaction that creates the row, so one never exists without the other. */
|
|
338
|
+
function recordInstanceCreationKey(db, worktreeId, key, instanceId, requestFingerprint) {
|
|
339
|
+
writeInstanceCreationKey(db, worktreeId, key, { instanceId, requestFingerprint });
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* What a key came to. One that has made nothing is marked given up on here, so a request
|
|
343
|
+
* still on its way with it makes nothing either: the answer holds from now on.
|
|
344
|
+
*
|
|
345
|
+
* @returns The instance it made, or null when it made none and never will
|
|
346
|
+
*/
|
|
347
|
+
function settleInstanceCreationKey(db, worktreeId, key) {
|
|
348
|
+
return db.transaction(() => {
|
|
349
|
+
const existing = getInstanceCreationKey(db, worktreeId, key);
|
|
350
|
+
if (existing)
|
|
351
|
+
return existing.instanceId;
|
|
352
|
+
writeInstanceCreationKey(db, worktreeId, key, { instanceId: null, requestFingerprint: null });
|
|
353
|
+
return null;
|
|
354
|
+
})();
|
|
355
|
+
}
|
|
356
|
+
function mapLaunchRecord(row) {
|
|
357
|
+
return {
|
|
358
|
+
id: row.id,
|
|
359
|
+
worktreeId: row.worktree_id,
|
|
360
|
+
instanceId: row.instance_id,
|
|
361
|
+
cliToolId: row.cli_tool_id,
|
|
362
|
+
phase: row.phase,
|
|
363
|
+
sessionGeneration: row.session_generation,
|
|
364
|
+
source: row.source,
|
|
365
|
+
repositoryId: row.repository_id,
|
|
366
|
+
roleId: row.role_id,
|
|
367
|
+
roleName: row.role_name,
|
|
368
|
+
bodyVersion: row.body_version,
|
|
369
|
+
bodyFingerprint: row.body_fingerprint,
|
|
370
|
+
injectionFingerprint: row.injection_fingerprint,
|
|
371
|
+
artifactFingerprint: row.artifact_fingerprint,
|
|
372
|
+
adapterId: row.adapter_id,
|
|
373
|
+
adapterVersion: row.adapter_version,
|
|
374
|
+
wrapperVersion: row.wrapper_version,
|
|
375
|
+
artifactPath: row.artifact_path,
|
|
376
|
+
effectiveAgent: row.effective_agent,
|
|
377
|
+
compositionSourceFingerprint: row.composition_source_fingerprint,
|
|
378
|
+
noRoleReason: row.no_role_reason,
|
|
379
|
+
recordedAt: row.recorded_at,
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Add one line of evidence. There is no function that changes one.
|
|
384
|
+
*
|
|
385
|
+
* @throws When this generation already has a record of this phase
|
|
386
|
+
*/
|
|
387
|
+
function recordRoleLaunch(db, record) {
|
|
388
|
+
const id = (0, crypto_1.randomUUID)();
|
|
389
|
+
db.prepare(`INSERT INTO agent_role_launch_records (
|
|
390
|
+
id, worktree_id, instance_id, cli_tool_id, phase, session_generation, source,
|
|
391
|
+
repository_id, role_id, role_name, body_version, body_fingerprint,
|
|
392
|
+
injection_fingerprint, artifact_fingerprint, adapter_id, adapter_version,
|
|
393
|
+
wrapper_version, artifact_path, effective_agent, composition_source_fingerprint,
|
|
394
|
+
no_role_reason, recorded_at
|
|
395
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(id, record.worktreeId, record.instanceId, record.cliToolId, record.phase, record.sessionGeneration, record.source, record.repositoryId, record.roleId, record.roleName, record.bodyVersion, record.bodyFingerprint, record.injectionFingerprint, record.artifactFingerprint, record.adapterId, record.adapterVersion, record.wrapperVersion, record.artifactPath, record.effectiveAgent, record.compositionSourceFingerprint, record.noRoleReason, Date.now());
|
|
396
|
+
return id;
|
|
397
|
+
}
|
|
398
|
+
/** The latest record of each phase for one instance. Ties on the clock go to the later insert. */
|
|
399
|
+
function getLatestRoleLaunchRecords(db, worktreeId, instanceId) {
|
|
400
|
+
const latest = (phase) => {
|
|
401
|
+
const row = db
|
|
402
|
+
.prepare(`SELECT * FROM agent_role_launch_records
|
|
403
|
+
WHERE worktree_id = ? AND instance_id = ? AND phase = ?
|
|
404
|
+
ORDER BY recorded_at DESC, rowid DESC LIMIT 1`)
|
|
405
|
+
.get(worktreeId, instanceId, phase);
|
|
406
|
+
return row ? mapLaunchRecord(row) : null;
|
|
407
|
+
};
|
|
408
|
+
return { requested: latest('requested'), launched: latest('launched') };
|
|
409
|
+
}
|
|
@@ -41,6 +41,7 @@ exports.stopAgentSessionCostSampler = stopAgentSessionCostSampler;
|
|
|
41
41
|
const agent_session_telemetry_1 = require("../../lib/hooks/agent-session-telemetry");
|
|
42
42
|
const types_1 = require("../../lib/cli-tools/types");
|
|
43
43
|
const logger_1 = require("../../lib/logger");
|
|
44
|
+
const test_run_detection_1 = require("../../lib/test-run-detection");
|
|
44
45
|
const agent_session_cost_db_1 = require("./agent-session-cost-db");
|
|
45
46
|
const logger = (0, logger_1.createLogger)('agent-session-cost-sampler');
|
|
46
47
|
/**
|
|
@@ -160,7 +161,7 @@ function sampleAgentSessionCosts(db, now = Date.now()) {
|
|
|
160
161
|
* needing to know which kind of process it is in.
|
|
161
162
|
*
|
|
162
163
|
* The timer is `unref()`d so it never keeps Node alive, and skipped outright
|
|
163
|
-
*
|
|
164
|
+
* in a test run ({@link isUnderTest}): a suite that opens a database should not acquire a background
|
|
164
165
|
* writer to a file it is about to delete.
|
|
165
166
|
*
|
|
166
167
|
* @param db - Database instance to write into
|
|
@@ -169,7 +170,7 @@ function sampleAgentSessionCosts(db, now = Date.now()) {
|
|
|
169
170
|
function startAgentSessionCostSampler(db) {
|
|
170
171
|
if (globalThis.__agentSessionCostSampler)
|
|
171
172
|
return false;
|
|
172
|
-
if (
|
|
173
|
+
if ((0, test_run_detection_1.isUnderTest)())
|
|
173
174
|
return false;
|
|
174
175
|
const timer = setInterval(() => {
|
|
175
176
|
try {
|
|
@@ -10,8 +10,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
10
10
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.TEST_DB_ROOT_ENV = void 0;
|
|
14
|
-
exports.isInsideVitestWorker = isInsideVitestWorker;
|
|
13
|
+
exports.TEST_DB_ROOT_ENV = exports.isInsideVitestWorker = void 0;
|
|
15
14
|
exports.assertTestDatabasePathIsolated = assertTestDatabasePathIsolated;
|
|
16
15
|
exports.getDbInstance = getDbInstance;
|
|
17
16
|
exports.closeDbInstance = closeDbInstance;
|
|
@@ -21,6 +20,8 @@ const abi_recovery_1 = require("./abi-recovery");
|
|
|
21
20
|
const agent_session_cost_sampler_1 = require("./agent-session-cost-sampler");
|
|
22
21
|
const env_1 = require("../../lib/env");
|
|
23
22
|
const system_directories_1 = require("../../config/system-directories");
|
|
23
|
+
const test_run_detection_1 = require("../../lib/test-run-detection");
|
|
24
|
+
Object.defineProperty(exports, "isInsideVitestWorker", { enumerable: true, get: function () { return test_run_detection_1.isInsideVitestWorker; } });
|
|
24
25
|
let dbInstance = null;
|
|
25
26
|
/**
|
|
26
27
|
* `fs` / `os` are required lazily, as getDbInstance() always did for `fs`: a
|
|
@@ -35,36 +36,6 @@ function nodeTmpdir() {
|
|
|
35
36
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
36
37
|
return require('os').tmpdir();
|
|
37
38
|
}
|
|
38
|
-
/**
|
|
39
|
-
* Issue #4086: is this code running inside a Vitest worker?
|
|
40
|
-
*
|
|
41
|
-
* Read off the worker state Vitest itself installs on `globalThis` (its
|
|
42
|
-
* `getWorkerState()` reads the same `__vitest_worker__` global, in the forks
|
|
43
|
-
* and threads pools alike), not off environment variables: the environment is
|
|
44
|
-
* both inherited and editable. A test may swap `NODE_ENV` to `production`
|
|
45
|
-
* mid-run (tests/unit/pwa/ServiceWorkerRegistrar.test.tsx does) and must stay
|
|
46
|
-
* guarded, while a child process started outside Vitest inherits `VITEST` and
|
|
47
|
-
* must not be taken for a test run.
|
|
48
|
-
*/
|
|
49
|
-
function isInsideVitestWorker() {
|
|
50
|
-
const state = globalThis.__vitest_worker__;
|
|
51
|
-
return typeof state === 'object' && state !== null;
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Issue #4086: is this a test run (the guard's on-switch)?
|
|
55
|
-
*
|
|
56
|
-
* Inside a Vitest worker: always, whatever `NODE_ENV` says right now.
|
|
57
|
-
* Outside one: only with `NODE_ENV=test` (a test's own child process, which
|
|
58
|
-
* also inherits the per-process CM_DB_PATH). `VITEST` alone never counts —
|
|
59
|
-
* the daemon spreads `process.env` into the server it starts
|
|
60
|
-
* (src/cli/utils/daemon.ts buildChildEnv), so a `NODE_ENV=production` server
|
|
61
|
-
* started from a shell where `VITEST` was left behind opens its real database.
|
|
62
|
-
*/
|
|
63
|
-
function isUnderTest(env, inVitestWorker) {
|
|
64
|
-
if (inVitestWorker)
|
|
65
|
-
return true;
|
|
66
|
-
return (env.NODE_ENV ?? '').trim() === 'test';
|
|
67
|
-
}
|
|
68
39
|
/** realpath of the nearest existing ancestor, with the missing tail re-joined. */
|
|
69
40
|
function physicalPath(target) {
|
|
70
41
|
const fs = nodeFs();
|
|
@@ -101,8 +72,7 @@ exports.TEST_DB_ROOT_ENV = 'CM_TEST_DB_ROOT';
|
|
|
101
72
|
* databases tests/setup.ts hands out — not under the temp dir, because
|
|
102
73
|
* `validateDbPath` rejects /tmp and /var, where every OS temp dir lives). Not
|
|
103
74
|
* only the one setup path, so tests that name their own database keep working.
|
|
104
|
-
* Active
|
|
105
|
-
* in a process with `NODE_ENV=test`; a no-op otherwise, so a real server is
|
|
75
|
+
* Active when {@link isUnderTest} says so; a no-op otherwise, so a real server is
|
|
106
76
|
* never affected — including one that inherited `VITEST` but runs with
|
|
107
77
|
* `NODE_ENV=production`.
|
|
108
78
|
*
|
|
@@ -110,8 +80,8 @@ exports.TEST_DB_ROOT_ENV = 'CM_TEST_DB_ROOT';
|
|
|
110
80
|
* passes `false` to ask how a process outside Vitest would be judged
|
|
111
81
|
* @throws Error when under test and `dbPath` is in neither directory
|
|
112
82
|
*/
|
|
113
|
-
function assertTestDatabasePathIsolated(dbPath, env = process.env, tmpRoot = nodeTmpdir(), inVitestWorker = isInsideVitestWorker()) {
|
|
114
|
-
if (!isUnderTest(env, inVitestWorker))
|
|
83
|
+
function assertTestDatabasePathIsolated(dbPath, env = process.env, tmpRoot = nodeTmpdir(), inVitestWorker = (0, test_run_detection_1.isInsideVitestWorker)()) {
|
|
84
|
+
if (!(0, test_run_detection_1.isUnderTest)(env, inVitestWorker))
|
|
115
85
|
return;
|
|
116
86
|
const resolved = path_1.default.resolve(dbPath);
|
|
117
87
|
const roots = [tmpRoot, env[exports.TEST_DB_ROOT_ENV]]
|
|
@@ -179,7 +149,7 @@ function getDbInstance() {
|
|
|
179
149
|
throw error;
|
|
180
150
|
}
|
|
181
151
|
dbInstance = db;
|
|
182
|
-
if (
|
|
152
|
+
if ((0, test_run_detection_1.isUnderTest)()) {
|
|
183
153
|
(globalThis.__commandmateTestDbClosers ??= new Set()).add(closeDbInstance);
|
|
184
154
|
}
|
|
185
155
|
// Issue #2044: the agent cost ledger needs somebody to copy the in-memory
|
|
@@ -47,6 +47,8 @@ const v60_session_relays_1 = require("./v60-session-relays");
|
|
|
47
47
|
const v61_session_notes_1 = require("./v61-session-notes");
|
|
48
48
|
const v62_session_relays_bind_1 = require("./v62-session-relays-bind");
|
|
49
49
|
const v63_session_relays_delivery_attempt_1 = require("./v63-session-relays-delivery-attempt");
|
|
50
|
+
const v64_agent_roles_1 = require("./v64-agent-roles");
|
|
51
|
+
const v65_agent_instance_creation_keys_1 = require("./v65-agent-instance-creation-keys");
|
|
50
52
|
/**
|
|
51
53
|
* Complete ordered list of all migrations.
|
|
52
54
|
* Used internally by the barrel file (db-migrations.ts); NOT exported from the barrel (DR2-004).
|
|
@@ -97,4 +99,6 @@ exports.migrations = [
|
|
|
97
99
|
...v61_session_notes_1.v61_migrations,
|
|
98
100
|
...v62_session_relays_bind_1.v62_migrations,
|
|
99
101
|
...v63_session_relays_delivery_attempt_1.v63_migrations,
|
|
102
|
+
...v64_agent_roles_1.v64_migrations,
|
|
103
|
+
...v65_agent_instance_creation_keys_1.v65_migrations,
|
|
100
104
|
];
|
|
@@ -18,7 +18,7 @@ const pre_migration_backup_1 = require("./pre-migration-backup");
|
|
|
18
18
|
* Current schema version
|
|
19
19
|
* Increment this when adding new migrations
|
|
20
20
|
*/
|
|
21
|
-
exports.CURRENT_SCHEMA_VERSION =
|
|
21
|
+
exports.CURRENT_SCHEMA_VERSION = 65;
|
|
22
22
|
/**
|
|
23
23
|
* Get current schema version from database
|
|
24
24
|
*/
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Migration v64: roles (Epic #4112, Issue #4114).
|
|
4
|
+
*
|
|
5
|
+
* ## The three states of a setting
|
|
6
|
+
*
|
|
7
|
+
* A level holds a role, an explicit "no role", or nothing, in which case the next
|
|
8
|
+
* level decides. No row is "nothing" and a NULL `role_id` is the explicit none.
|
|
9
|
+
* The system level has no explicit none (`role_id NOT NULL`): it is the last level.
|
|
10
|
+
*
|
|
11
|
+
* ## Why no reference to `agent_roles` is `ON DELETE SET NULL`
|
|
12
|
+
*
|
|
13
|
+
* NULL means "explicitly none", so a deleted role would quietly become a decision
|
|
14
|
+
* nobody made. They are `RESTRICT`, and `deleteAgentRole` with `force` removes the
|
|
15
|
+
* rows in one transaction, which reads as "inherit".
|
|
16
|
+
*
|
|
17
|
+
* ## Why `agent_instance_roles` is its own table
|
|
18
|
+
*
|
|
19
|
+
* `setAgentInstances` deletes and re-inserts every roster row, so a column on
|
|
20
|
+
* `agent_instances` would be wiped by each rename and reorder (the same reason as
|
|
21
|
+
* v59). It has no foreign key to `agent_instances` for the same reason: the
|
|
22
|
+
* replace would cascade into it. `pruneAgentInstanceRoles` removes the ids that
|
|
23
|
+
* really left. `worktree_id` follows the convention `getWorktreeChildTables()`
|
|
24
|
+
* looks for, so a row follows a worktree id rename and goes with its worktree.
|
|
25
|
+
*
|
|
26
|
+
* ## The launch record
|
|
27
|
+
*
|
|
28
|
+
* A snapshot of what was resolved, kept as evidence, so `repository_id` and
|
|
29
|
+
* `role_id` are deliberately not foreign keys: a deleted role or repository
|
|
30
|
+
* must neither take the evidence along nor block a `force` delete. There is no
|
|
31
|
+
* body and no secret column. Nothing updates a row, but there is deliberately no
|
|
32
|
+
* `RAISE(ABORT)` trigger enforcing that: `getWriteGuardedTables` reads one as
|
|
33
|
+
* "append-only ledger" and the row would no longer follow a worktree id rename.
|
|
34
|
+
*
|
|
35
|
+
* The rollback drops the five tables, which is the whole of what this adds.
|
|
36
|
+
*/
|
|
37
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
exports.v64_migrations = exports.V64_AGENT_ROLE_TABLES = void 0;
|
|
39
|
+
/** In dependency order. The rollback drops them from the end. */
|
|
40
|
+
exports.V64_AGENT_ROLE_TABLES = [
|
|
41
|
+
'agent_roles',
|
|
42
|
+
'agent_role_system_defaults',
|
|
43
|
+
'agent_role_repository_defaults',
|
|
44
|
+
'agent_instance_roles',
|
|
45
|
+
'agent_role_launch_records',
|
|
46
|
+
];
|
|
47
|
+
exports.v64_migrations = [
|
|
48
|
+
{
|
|
49
|
+
version: 64,
|
|
50
|
+
name: 'agent-roles',
|
|
51
|
+
up: (db) => {
|
|
52
|
+
db.exec(`
|
|
53
|
+
CREATE TABLE agent_roles (
|
|
54
|
+
id TEXT PRIMARY KEY,
|
|
55
|
+
name TEXT NOT NULL COLLATE NOCASE UNIQUE,
|
|
56
|
+
body TEXT NOT NULL,
|
|
57
|
+
body_version INTEGER NOT NULL,
|
|
58
|
+
created_at INTEGER NOT NULL,
|
|
59
|
+
updated_at INTEGER NOT NULL
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
CREATE TABLE agent_role_system_defaults (
|
|
63
|
+
cli_tool_id TEXT PRIMARY KEY,
|
|
64
|
+
role_id TEXT NOT NULL REFERENCES agent_roles(id) ON DELETE RESTRICT,
|
|
65
|
+
updated_at INTEGER NOT NULL
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
CREATE TABLE agent_role_repository_defaults (
|
|
69
|
+
repository_id TEXT NOT NULL REFERENCES repositories(id) ON DELETE CASCADE,
|
|
70
|
+
cli_tool_id TEXT NOT NULL,
|
|
71
|
+
role_id TEXT REFERENCES agent_roles(id) ON DELETE RESTRICT,
|
|
72
|
+
updated_at INTEGER NOT NULL,
|
|
73
|
+
PRIMARY KEY (repository_id, cli_tool_id)
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
CREATE TABLE agent_instance_roles (
|
|
77
|
+
worktree_id TEXT NOT NULL REFERENCES worktrees(id) ON DELETE CASCADE,
|
|
78
|
+
instance_id TEXT NOT NULL,
|
|
79
|
+
role_id TEXT REFERENCES agent_roles(id) ON DELETE RESTRICT,
|
|
80
|
+
updated_at INTEGER NOT NULL,
|
|
81
|
+
PRIMARY KEY (worktree_id, instance_id)
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
CREATE TABLE agent_role_launch_records (
|
|
85
|
+
id TEXT PRIMARY KEY,
|
|
86
|
+
worktree_id TEXT NOT NULL REFERENCES worktrees(id) ON DELETE CASCADE,
|
|
87
|
+
instance_id TEXT NOT NULL,
|
|
88
|
+
cli_tool_id TEXT NOT NULL,
|
|
89
|
+
phase TEXT NOT NULL CHECK (phase IN ('requested','launched')),
|
|
90
|
+
session_generation TEXT NOT NULL,
|
|
91
|
+
source TEXT NOT NULL,
|
|
92
|
+
repository_id TEXT,
|
|
93
|
+
role_id TEXT,
|
|
94
|
+
role_name TEXT,
|
|
95
|
+
body_version INTEGER,
|
|
96
|
+
body_fingerprint TEXT,
|
|
97
|
+
injection_fingerprint TEXT,
|
|
98
|
+
artifact_fingerprint TEXT,
|
|
99
|
+
adapter_id TEXT,
|
|
100
|
+
adapter_version TEXT,
|
|
101
|
+
wrapper_version TEXT,
|
|
102
|
+
artifact_path TEXT,
|
|
103
|
+
effective_agent TEXT,
|
|
104
|
+
composition_source_fingerprint TEXT,
|
|
105
|
+
no_role_reason TEXT,
|
|
106
|
+
recorded_at INTEGER NOT NULL,
|
|
107
|
+
UNIQUE (worktree_id, instance_id, session_generation, phase)
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
CREATE INDEX idx_agent_role_repository_defaults_role ON agent_role_repository_defaults(role_id);
|
|
111
|
+
CREATE INDEX idx_agent_instance_roles_role ON agent_instance_roles(role_id);
|
|
112
|
+
CREATE INDEX idx_agent_role_system_defaults_role ON agent_role_system_defaults(role_id);
|
|
113
|
+
CREATE INDEX idx_agent_role_launch_records_latest
|
|
114
|
+
ON agent_role_launch_records(worktree_id, instance_id, phase, recorded_at);
|
|
115
|
+
`);
|
|
116
|
+
},
|
|
117
|
+
down: (db) => {
|
|
118
|
+
for (const table of [...exports.V64_AGENT_ROLE_TABLES].reverse()) {
|
|
119
|
+
db.exec(`DROP TABLE IF EXISTS ${table}`);
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
];
|