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
|
@@ -5,20 +5,59 @@
|
|
|
5
5
|
* SF-SEC-2: Security event logging for CLI commands
|
|
6
6
|
*/
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.getSecurityLogPath = getSecurityLogPath;
|
|
8
9
|
exports.logSecurityEvent = logSecurityEvent;
|
|
9
10
|
exports.maskSensitiveData = maskSensitiveData;
|
|
10
11
|
const fs_1 = require("fs");
|
|
11
12
|
const path_1 = require("path");
|
|
12
13
|
const os_1 = require("os");
|
|
14
|
+
// Relative, not '@/': `tsconfig.cli.json` has no path aliases, so nothing the
|
|
15
|
+
// CLI build compiles may reach an '@/' import. That is also why this does not
|
|
16
|
+
// call `getLogDir()` (config/log-config → lib/env → lib/db/db-path-resolver,
|
|
17
|
+
// all '@/'); `system-directories` is the guard `getLogDir()` itself ends in.
|
|
18
|
+
const system_directories_1 = require("../../config/system-directories");
|
|
13
19
|
/**
|
|
14
20
|
* Get security log file path
|
|
21
|
+
*
|
|
22
|
+
* Issue #4210: `CM_LOG_DIR` is judged the way `getLogDir()`
|
|
23
|
+
* (`config/log-config.ts`) judges it for every other log writer. A value inside
|
|
24
|
+
* `/proc`, `/sys` or `/dev` — literally, through a symlink, or as the absolute
|
|
25
|
+
* form of a relative value — is refused and the default file is used. A
|
|
26
|
+
* relative value is otherwise kept as given and so resolved against this
|
|
27
|
+
* process's cwd, which is also what `getLogDir()` does: the file is only ever
|
|
28
|
+
* opened by the process that resolved it, so nothing else has to agree on it.
|
|
29
|
+
*
|
|
30
|
+
* The default stays `~/.commandmate-security.log` rather than `getLogDir()`'s
|
|
31
|
+
* `<cwd>/data/logs`: a CLI run from an arbitrary directory has no `data/logs`.
|
|
32
|
+
*
|
|
33
|
+
* @returns The file security events are appended to
|
|
15
34
|
*/
|
|
16
|
-
function
|
|
35
|
+
function getSecurityLogPath() {
|
|
36
|
+
const fallback = (0, path_1.join)((0, os_1.homedir)(), '.commandmate-security.log');
|
|
17
37
|
const logDir = process.env.CM_LOG_DIR;
|
|
18
|
-
if (logDir) {
|
|
19
|
-
return
|
|
38
|
+
if (!logDir || isRefusedLogDir(logDir)) {
|
|
39
|
+
return fallback;
|
|
40
|
+
}
|
|
41
|
+
return (0, path_1.join)(logDir, 'security.log');
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Whether `logDir` is one `getLogDir()` would refuse.
|
|
45
|
+
*
|
|
46
|
+
* An exception from the check itself keeps the configured value. Nothing here
|
|
47
|
+
* creates a directory — `appendFileSync` has no recursive mkdir, which is what
|
|
48
|
+
* hangs under `/proc` (Issue #1774) — so the worst a kept value can do is fail
|
|
49
|
+
* the append, which `logSecurityEvent` already ignores. Refusing on an
|
|
50
|
+
* exception would instead move events away from the directory that was asked
|
|
51
|
+
* for whenever the filesystem layer misbehaves (a test's `vi.mock('fs')` is
|
|
52
|
+
* one: `realpathSync` then answers `undefined`).
|
|
53
|
+
*/
|
|
54
|
+
function isRefusedLogDir(logDir) {
|
|
55
|
+
try {
|
|
56
|
+
return (0, system_directories_1.isVirtualFilesystemPath)(logDir);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return false;
|
|
20
60
|
}
|
|
21
|
-
return (0, path_1.join)((0, os_1.homedir)(), '.commandmate-security.log');
|
|
22
61
|
}
|
|
23
62
|
/**
|
|
24
63
|
* Log a security event
|
|
@@ -26,7 +65,7 @@ function getLogPath() {
|
|
|
26
65
|
*/
|
|
27
66
|
function logSecurityEvent(event) {
|
|
28
67
|
try {
|
|
29
|
-
const logPath =
|
|
68
|
+
const logPath = getSecurityLogPath();
|
|
30
69
|
const maskedDetails = maskSensitiveData(event.details);
|
|
31
70
|
const logLine = `${event.timestamp} [${event.action.toUpperCase()}] ${event.command}: ${maskedDetails || ''}\n`;
|
|
32
71
|
(0, fs_1.appendFileSync)(logPath, logLine, { mode: 0o600 });
|
|
@@ -258,6 +258,22 @@ export interface VerifiedAgainstStamp {
|
|
|
258
258
|
/**
|
|
259
259
|
* Tool id → the build its rules were measured against.
|
|
260
260
|
*
|
|
261
|
+
* ## Reviewed by Issue #4146: no stamp moved
|
|
262
|
+
*
|
|
263
|
+
* Newer builds have been captured since, but only part of a screen set, and a
|
|
264
|
+
* stamp moves when the set is re-captured and read (see #2818, #2868, #2773).
|
|
265
|
+
*
|
|
266
|
+
* - codex 0.166.0 (`tests/fixtures/codex-dialogs-0166/`): launch screens and the
|
|
267
|
+
* idle composer. 未確認: the command approval, `/model`, and a running turn.
|
|
268
|
+
* - opencode 1.18.35 (`tests/fixtures/opencode-live-4134/`): one finished turn.
|
|
269
|
+
* 未確認: the other four states the canary covers.
|
|
270
|
+
* - claude 2.1.318 (`tests/fixtures/claude-auto-default-nudge-4134/`): one dialog.
|
|
271
|
+
* 未確認: everything else on that build.
|
|
272
|
+
* - gemini and vibe-local have measured frames (a trust dialog; four readiness
|
|
273
|
+
* screens) but no status rules read off them, so they stay `unmeasured`.
|
|
274
|
+
*
|
|
275
|
+
* `tests/unit/detection/tools/verified-against-4146.test.ts` keeps this list honest.
|
|
276
|
+
*
|
|
261
277
|
* Keyed by the catalog / `CLIToolType` id, not by executable name: antigravity's
|
|
262
278
|
* binary is `agy` (DR2-023), and that mapping belongs to the probe table, not
|
|
263
279
|
* here.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verified-against.d.ts","sourceRoot":"","sources":["../../../../src/lib/detection/tools/verified-against.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,iEAAiE;AACjE,eAAO,MAAM,uBAAuB;;;;CAI1B,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,eAAO,MAAM,sBAAsB;;;;CAIzB,CAAC;AAEX;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wBAAwB;;;;CAI3B,CAAC;AAEX;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,yBAAyB;;;;CAI5B,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,4BAA4B;;;;CAI/B,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6EG;AACH,eAAO,MAAM,6BAA6B;;;;CAIhC,CAAC;AAEX;;;;;;;;;GASG;AACH,eAAO,MAAM,4BAA4B;;;;CAI/B,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B;;;;CAI9B,CAAC;AAEX,iFAAiF;AACjF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED
|
|
1
|
+
{"version":3,"file":"verified-against.d.ts","sourceRoot":"","sources":["../../../../src/lib/detection/tools/verified-against.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,iEAAiE;AACjE,eAAO,MAAM,uBAAuB;;;;CAI1B,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,eAAO,MAAM,sBAAsB;;;;CAIzB,CAAC;AAEX;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wBAAwB;;;;CAI3B,CAAC;AAEX;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,yBAAyB;;;;CAI5B,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,4BAA4B;;;;CAI/B,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6EG;AACH,eAAO,MAAM,6BAA6B;;;;CAIhC,CAAC;AAEX;;;;;;;;;GASG;AACH,eAAO,MAAM,4BAA4B;;;;CAI/B,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B;;;;CAI9B,CAAC;AAEX,iFAAiF;AACjF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAUpF,CAAC"}
|
|
@@ -255,6 +255,22 @@ exports.UNMEASURED_VERIFIED_AGAINST = {
|
|
|
255
255
|
/**
|
|
256
256
|
* Tool id → the build its rules were measured against.
|
|
257
257
|
*
|
|
258
|
+
* ## Reviewed by Issue #4146: no stamp moved
|
|
259
|
+
*
|
|
260
|
+
* Newer builds have been captured since, but only part of a screen set, and a
|
|
261
|
+
* stamp moves when the set is re-captured and read (see #2818, #2868, #2773).
|
|
262
|
+
*
|
|
263
|
+
* - codex 0.166.0 (`tests/fixtures/codex-dialogs-0166/`): launch screens and the
|
|
264
|
+
* idle composer. 未確認: the command approval, `/model`, and a running turn.
|
|
265
|
+
* - opencode 1.18.35 (`tests/fixtures/opencode-live-4134/`): one finished turn.
|
|
266
|
+
* 未確認: the other four states the canary covers.
|
|
267
|
+
* - claude 2.1.318 (`tests/fixtures/claude-auto-default-nudge-4134/`): one dialog.
|
|
268
|
+
* 未確認: everything else on that build.
|
|
269
|
+
* - gemini and vibe-local have measured frames (a trust dialog; four readiness
|
|
270
|
+
* screens) but no status rules read off them, so they stay `unmeasured`.
|
|
271
|
+
*
|
|
272
|
+
* `tests/unit/detection/tools/verified-against-4146.test.ts` keeps this list honest.
|
|
273
|
+
*
|
|
258
274
|
* Keyed by the catalog / `CLIToolType` id, not by executable name: antigravity's
|
|
259
275
|
* binary is `agy` (DR2-023), and that mapping belongs to the probe table, not
|
|
260
276
|
* here.
|
|
@@ -52,6 +52,10 @@ export type SendAttemptReason =
|
|
|
52
52
|
* input-boundary hook refused it and nothing was typed or dispatched (#3957/#3992).
|
|
53
53
|
*/
|
|
54
54
|
| 'relay-reservation-lost'
|
|
55
|
+
/** `not-sent`: the role this launch resolved cannot be applied, so nothing was started or typed (#4115). */
|
|
56
|
+
| 'role-launch-refused'
|
|
57
|
+
/** `not-sent`: the role this send was conditional on does not hold right before the body (#4115). */
|
|
58
|
+
| 'role-condition-failed'
|
|
55
59
|
/** `not-sent`: the pane could not be re-read under the input lock, so nothing was typed (#3945). */
|
|
56
60
|
| 'recheck-failed'
|
|
57
61
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send-attempt-types.d.ts","sourceRoot":"","sources":["../../../src/lib/session/send-attempt-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,MAAM,GAAG,eAAe,CAAC;AAErE,MAAM,MAAM,iBAAiB;AAC3B,wCAAwC;AACtC,WAAW;AACb,2EAA2E;GACzE,kBAAkB;AACpB,mEAAmE;GACjE,kBAAkB;AACpB,oDAAoD;GAClD,sBAAsB;AACxB,8GAA8G;GAC5G,gBAAgB;AAClB,sEAAsE;GACpE,iBAAiB;AACnB,oEAAoE;GAClE,qBAAqB;AACvB,4EAA4E;GAC1E,oBAAoB;AACtB,qGAAqG;GACnG,aAAa;AACf,gGAAgG;GAC9F,oBAAoB;AACtB,sGAAsG;GACpG,kBAAkB;AACpB,+FAA+F;GAC7F,iBAAiB;AACnB;;;;GAIG;GACD,wBAAwB;AAC1B,oGAAoG;GAClG,gBAAgB;AAClB;;;;GAIG;GACD,mBAAmB;AACrB,kHAAkH;GAChH,iBAAiB;AACnB,sGAAsG;GACpG,wBAAwB;AAC1B,sGAAsG;GACpG,oBAAoB;AACtB,sFAAsF;GACpF,kBAAkB;AACpB;;;GAGG;GACD,mBAAmB;AACrB;;;GAGG;GACD,mBAAmB;AACrB,yEAAyE;GACvE,YAAY,CAAC;AAEjB,0EAA0E;AAC1E,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,gBAAgB,CAAC;IACxB,8FAA8F;IAC9F,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAAC;CACpC;AAED;;;GAGG;AACH,eAAO,MAAM,6BAA6B,6BAA6B,CAAC;AAExE;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,sBAAsB,CAAC;AAE1D;;;;;GAKG;AACH,eAAO,MAAM,iCAAiC,iCAAiC,CAAC;AAChF,eAAO,MAAM,yBAAyB,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"send-attempt-types.d.ts","sourceRoot":"","sources":["../../../src/lib/session/send-attempt-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,MAAM,GAAG,eAAe,CAAC;AAErE,MAAM,MAAM,iBAAiB;AAC3B,wCAAwC;AACtC,WAAW;AACb,2EAA2E;GACzE,kBAAkB;AACpB,mEAAmE;GACjE,kBAAkB;AACpB,oDAAoD;GAClD,sBAAsB;AACxB,8GAA8G;GAC5G,gBAAgB;AAClB,sEAAsE;GACpE,iBAAiB;AACnB,oEAAoE;GAClE,qBAAqB;AACvB,4EAA4E;GAC1E,oBAAoB;AACtB,qGAAqG;GACnG,aAAa;AACf,gGAAgG;GAC9F,oBAAoB;AACtB,sGAAsG;GACpG,kBAAkB;AACpB,+FAA+F;GAC7F,iBAAiB;AACnB;;;;GAIG;GACD,wBAAwB;AAC1B,4GAA4G;GAC1G,qBAAqB;AACvB,qGAAqG;GACnG,uBAAuB;AACzB,oGAAoG;GAClG,gBAAgB;AAClB;;;;GAIG;GACD,mBAAmB;AACrB,kHAAkH;GAChH,iBAAiB;AACnB,sGAAsG;GACpG,wBAAwB;AAC1B,sGAAsG;GACpG,oBAAoB;AACtB,sFAAsF;GACpF,kBAAkB;AACpB;;;GAGG;GACD,mBAAmB;AACrB;;;GAGG;GACD,mBAAmB;AACrB,yEAAyE;GACvE,YAAY,CAAC;AAEjB,0EAA0E;AAC1E,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,gBAAgB,CAAC;IACxB,8FAA8F;IAC9F,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAAC;CACpC;AAED;;;GAGG;AACH,eAAO,MAAM,6BAA6B,6BAA6B,CAAC;AAExE;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,sBAAsB,CAAC;AAE1D;;;;;GAKG;AACH,eAAO,MAAM,iCAAiC,iCAAiC,CAAC;AAChF,eAAO,MAAM,yBAAyB,yBAAyB,CAAC"}
|
|
@@ -25,6 +25,20 @@ export interface VerifyGate {
|
|
|
25
25
|
* key — and `undefined` is the honest reading of that.
|
|
26
26
|
*/
|
|
27
27
|
mutex?: string;
|
|
28
|
+
/**
|
|
29
|
+
* How long this gate may wait for its {@link VerifyGate.mutex}, separately
|
|
30
|
+
* from how long its command may run (Issue #4162). Absent means `timeoutSec`,
|
|
31
|
+
* the single budget every gate had before this field existed.
|
|
32
|
+
*
|
|
33
|
+
* The two answer different questions: `timeoutSec` is "when is this command
|
|
34
|
+
* hung", and the wait is "how long is the queue on this machine". Sharing one
|
|
35
|
+
* number meant a longer queue could only be bought by also taking longer to
|
|
36
|
+
* notice a hang. Valid only beside a `mutex`: without a lock there is no wait.
|
|
37
|
+
*
|
|
38
|
+
* Optional for the same reason `mutex` is: contract rows are stored as JSON
|
|
39
|
+
* and read back without re-validating.
|
|
40
|
+
*/
|
|
41
|
+
mutexWaitSec?: number;
|
|
28
42
|
/**
|
|
29
43
|
* Re-run this gate once, in the same tree, when its command exits non-zero
|
|
30
44
|
* (Issue #1772). `1` opts in; `0` (the default) is the behaviour every gate
|
|
@@ -191,6 +205,14 @@ export declare const MAX_RETRY_ON_FAIL = 1;
|
|
|
191
205
|
* this long is already a repository papering over a machine it should fix.
|
|
192
206
|
*/
|
|
193
207
|
export declare const MAX_ENV_CLEAN_IGNORE_HOME_ENTRIES = 32;
|
|
208
|
+
/**
|
|
209
|
+
* Longest `mutexWaitSec` a gate may declare (Issue #4162): above `timeoutSec`'s
|
|
210
|
+
* ceiling on purpose, because a queue of several slow gates is longer than any
|
|
211
|
+
* one of them. A day is past any queue worth waiting behind.
|
|
212
|
+
*/
|
|
213
|
+
export declare const MAX_MUTEX_WAIT_SEC = 86400;
|
|
214
|
+
/** The lock-wait budget of a gate, in seconds: `mutexWaitSec`, or `timeoutSec` when absent (Issue #4162). */
|
|
215
|
+
export declare function mutexWaitBudgetSec(gate: Pick<VerifyGate, 'timeoutSec' | 'mutexWaitSec'>): number;
|
|
194
216
|
export declare class VerifyConfigError extends Error {
|
|
195
217
|
readonly issues: string[];
|
|
196
218
|
constructor(issues: string[]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-config.d.ts","sourceRoot":"","sources":["../../../src/lib/verification/verify-config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;;;;;;;;OAcG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;;;;;;;;OAcG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,0EAA0E;IAC1E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB;;;;;;;;;;OAUG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB;;;;;;;;;;OAUG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB;;;;;;;;;;;;;;OAcG;IACH,yBAAyB,CAAC,EAAE,MAAM,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,CAAC;IACX,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,OAAO,EAAE,aAAa,CAAC;CACxB;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,kBAAkB,CAAC;AAErD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,UAAU,CAAC;AAErC;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,cAAc,CAAC;AAE7C,oFAAoF;AACpF,eAAO,MAAM,iBAAiB,kDAIpB,CAAC;AAEX,eAAO,MAAM,2BAA2B,6BAA6B,CAAC;AAEtE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,EACpB,aAAa,GAAE,SAAS,UAAU,EAAO,GACxC,MAAM,EAAE,CAWV;AAED,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAM/C;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,QAA8B,CAAC;AAE3D;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,QAAsB,CAAC;AAEtD,qEAAqE;AACrE,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC;;;GAGG;AACH,eAAO,MAAM,iCAAiC,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"verify-config.d.ts","sourceRoot":"","sources":["../../../src/lib/verification/verify-config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;;;;;;OAYG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;;;;;OAcG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;;;;;;;;OAcG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,0EAA0E;IAC1E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB;;;;;;;;;;OAUG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB;;;;;;;;;;OAUG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB;;;;;;;;;;;;;;OAcG;IACH,yBAAyB,CAAC,EAAE,MAAM,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,CAAC;IACX,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,OAAO,EAAE,aAAa,CAAC;CACxB;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,kBAAkB,CAAC;AAErD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,UAAU,CAAC;AAErC;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,cAAc,CAAC;AAE7C,oFAAoF;AACpF,eAAO,MAAM,iBAAiB,kDAIpB,CAAC;AAEX,eAAO,MAAM,2BAA2B,6BAA6B,CAAC;AAEtE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,EACpB,aAAa,GAAE,SAAS,UAAU,EAAO,GACxC,MAAM,EAAE,CAWV;AAED,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAM/C;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,QAA8B,CAAC;AAE3D;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,QAAsB,CAAC;AAEtD,qEAAqE;AACrE,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC;;;GAGG;AACH,eAAO,MAAM,iCAAiC,KAAK,CAAC;AAEpD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AAExC,6GAA6G;AAC7G,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,YAAY,GAAG,cAAc,CAAC,GAAG,MAAM,CAEhG;AAaD,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBAEd,MAAM,EAAE,MAAM,EAAE;CAK7B;AA6CD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,CAe9F;AAgTD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAYtE"}
|
|
@@ -8,8 +8,9 @@
|
|
|
8
8
|
* Server-only: reads from disk, so import this from API routes / CLI only.
|
|
9
9
|
*/
|
|
10
10
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
-
exports.VerifyConfigError = exports.MAX_ENV_CLEAN_IGNORE_HOME_ENTRIES = exports.MAX_RETRY_ON_FAIL = exports.MAX_GATE_MUTEX_LENGTH = exports.GATE_MUTEX_PATTERN = exports.GATE_ID_PATTERN = exports.DEFAULT_MAX_LOG_TAIL_BYTES = exports.DEFAULT_TIMEOUT_SEC = exports.VERIFY_CONFIG_RELATIVE_PATH = exports.RESERVED_GATE_IDS = exports.ENV_CLEAN_GATE_ID = exports.SCOPE_GATE_ID = exports.WORK_EVIDENCE_GATE_ID = void 0;
|
|
11
|
+
exports.VerifyConfigError = exports.MAX_MUTEX_WAIT_SEC = exports.MAX_ENV_CLEAN_IGNORE_HOME_ENTRIES = exports.MAX_RETRY_ON_FAIL = exports.MAX_GATE_MUTEX_LENGTH = exports.GATE_MUTEX_PATTERN = exports.GATE_ID_PATTERN = exports.DEFAULT_MAX_LOG_TAIL_BYTES = exports.DEFAULT_TIMEOUT_SEC = exports.VERIFY_CONFIG_RELATIVE_PATH = exports.RESERVED_GATE_IDS = exports.ENV_CLEAN_GATE_ID = exports.SCOPE_GATE_ID = exports.WORK_EVIDENCE_GATE_ID = void 0;
|
|
12
12
|
exports.defaultPlannedGateIds = defaultPlannedGateIds;
|
|
13
|
+
exports.mutexWaitBudgetSec = mutexWaitBudgetSec;
|
|
13
14
|
exports.validateGateEntries = validateGateEntries;
|
|
14
15
|
exports.loadVerifyConfig = loadVerifyConfig;
|
|
15
16
|
const fs_1 = require("fs");
|
|
@@ -115,8 +116,18 @@ exports.MAX_RETRY_ON_FAIL = 1;
|
|
|
115
116
|
* this long is already a repository papering over a machine it should fix.
|
|
116
117
|
*/
|
|
117
118
|
exports.MAX_ENV_CLEAN_IGNORE_HOME_ENTRIES = 32;
|
|
119
|
+
/**
|
|
120
|
+
* Longest `mutexWaitSec` a gate may declare (Issue #4162): above `timeoutSec`'s
|
|
121
|
+
* ceiling on purpose, because a queue of several slow gates is longer than any
|
|
122
|
+
* one of them. A day is past any queue worth waiting behind.
|
|
123
|
+
*/
|
|
124
|
+
exports.MAX_MUTEX_WAIT_SEC = 86400;
|
|
125
|
+
/** The lock-wait budget of a gate, in seconds: `mutexWaitSec`, or `timeoutSec` when absent (Issue #4162). */
|
|
126
|
+
function mutexWaitBudgetSec(gate) {
|
|
127
|
+
return gate.mutexWaitSec ?? gate.timeoutSec;
|
|
128
|
+
}
|
|
118
129
|
const TOP_LEVEL_KEYS = ['version', 'gates', 'options'];
|
|
119
|
-
const GATE_KEYS = ['id', 'command', 'timeoutSec', 'mutex', 'retryOnFail', 'flakyIsPass'];
|
|
130
|
+
const GATE_KEYS = ['id', 'command', 'timeoutSec', 'mutex', 'mutexWaitSec', 'retryOnFail', 'flakyIsPass'];
|
|
120
131
|
const OPTION_KEYS = [
|
|
121
132
|
'baseRef',
|
|
122
133
|
'skipInPrimaryCheckout',
|
|
@@ -261,6 +272,23 @@ function validateGateEntry(entry, at, seenIds, gates, issues) {
|
|
|
261
272
|
mutex = entry.mutex;
|
|
262
273
|
}
|
|
263
274
|
}
|
|
275
|
+
let mutexWaitSec;
|
|
276
|
+
if (entry.mutexWaitSec !== undefined) {
|
|
277
|
+
const parsed = asInteger(entry.mutexWaitSec);
|
|
278
|
+
if (parsed === null) {
|
|
279
|
+
issues.push(`${at}.mutexWaitSec: must be an integer (got ${describe(entry.mutexWaitSec)})`);
|
|
280
|
+
}
|
|
281
|
+
else if (parsed < MIN_TIMEOUT_SEC || parsed > exports.MAX_MUTEX_WAIT_SEC) {
|
|
282
|
+
issues.push(`${at}.mutexWaitSec: must be ${MIN_TIMEOUT_SEC}..${exports.MAX_MUTEX_WAIT_SEC} (got ${parsed})`);
|
|
283
|
+
}
|
|
284
|
+
else if (entry.mutex === undefined) {
|
|
285
|
+
// A knob that can never fire is a config bug, as with flakyIsPass below.
|
|
286
|
+
issues.push(`${at}.mutexWaitSec: requires mutex (without a lock there is no wait)`);
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
mutexWaitSec = parsed;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
264
292
|
let retryOnFail;
|
|
265
293
|
if (entry.retryOnFail !== undefined) {
|
|
266
294
|
const parsed = asInteger(entry.retryOnFail);
|
|
@@ -304,6 +332,8 @@ function validateGateEntry(entry, at, seenIds, gates, issues) {
|
|
|
304
332
|
// absence has to keep meaning "this gate runs exactly once".
|
|
305
333
|
if (mutex !== undefined)
|
|
306
334
|
gate.mutex = mutex;
|
|
335
|
+
if (mutexWaitSec !== undefined)
|
|
336
|
+
gate.mutexWaitSec = mutexWaitSec;
|
|
307
337
|
if (retryOnFail !== undefined)
|
|
308
338
|
gate.retryOnFail = retryOnFail;
|
|
309
339
|
if (flakyIsPass !== undefined)
|
|
@@ -1278,21 +1278,31 @@
|
|
|
1278
1278
|
"badgeOwedMany": "Replies due ({count})",
|
|
1279
1279
|
"badgeAwaiting": "Waiting on {alias}",
|
|
1280
1280
|
"badgeAwaitingMany": "Waiting on {count} replies",
|
|
1281
|
-
"badgePrompt": "
|
|
1281
|
+
"badgePrompt": "Worker confirmation recorded",
|
|
1282
1282
|
"owedTitle": "This session owes a delegated reply. It is delivered automatically when the turn ends.",
|
|
1283
1283
|
"awaitingTitle": "This session is waiting for a delegated reply. It arrives in the composer as a relay message.",
|
|
1284
|
-
"promptTitle": "
|
|
1284
|
+
"promptTitle": "A record that the other session stopped on a confirmation. It does not say the session is still waiting: it stays until this relay closes, also after the confirmation is answered and the reply takes the notice's place. A notice to the requester was queued for delivery; this badge does not say whether it arrived (check with commandmate relays --id).",
|
|
1285
1285
|
"stripAwaiting": "Delegated to {alias}; waiting for the reply.",
|
|
1286
1286
|
"stripAwaitingMany": "Waiting for {count} delegated replies.",
|
|
1287
|
-
"stripPrompt": "{alias}
|
|
1287
|
+
"stripPrompt": "{alias} stopped on a confirmation earlier (recorded; it may have been answered since).",
|
|
1288
1288
|
"stripOwed": "Owed to {alias}: this session's reply is delivered when the turn ends.",
|
|
1289
|
-
"badgeHeld": "
|
|
1290
|
-
"badgeHeldMany": "
|
|
1289
|
+
"badgeHeld": "Unconfirmed: {alias}",
|
|
1290
|
+
"badgeHeldMany": "{count} unconfirmed",
|
|
1291
1291
|
"heldTitle": "Whether a relay delivery to this session (a reply, a confirmation notice or an expiry notice) arrived is not known. It is not resent automatically. Check this pane, then settle it with commandmate relays resolve.",
|
|
1292
1292
|
"stripHeld": "Delivery from {alias} unconfirmed: check this pane, then settle it with relays resolve.",
|
|
1293
|
+
"badgeBlockedByPrompt": "Delivery from {alias} stopped by this pane's dialog",
|
|
1294
|
+
"badgeBlockedByPromptMany": "{count} deliveries stopped by this pane's dialog",
|
|
1295
|
+
"blockedByPromptTitle": "At the last delivery attempt this session (the requester) showed a confirmation dialog, so the relay delivery was stopped (nothing was typed). Answer the dialog and it is delivered on the next delivery pass (about every 15 s). Left alone, it is replaced by the expiry notice at the deadline. This is what the last attempt observed; commandmate relays --id shows when.",
|
|
1296
|
+
"stripBlockedByPrompt": "Delivery from {alias} is stopped by this pane's confirmation dialog (as of the last attempt). Answer it and the delivery goes through.",
|
|
1297
|
+
"stripBlockedByPromptMany": "{count} deliveries are stopped by this pane's confirmation dialog (as of the last attempt). Answer it and they go through.",
|
|
1293
1298
|
"stripHeldMany": "{count} unconfirmed deliveries: check this pane, then settle them with relays resolve.",
|
|
1294
1299
|
"unplacedHeldHeading": "Unconfirmed deliveries to sessions not in the roster",
|
|
1295
1300
|
"unplacedHeldLine": "{requester} ← {alias} (relay {relayId})",
|
|
1301
|
+
"blockedByPromptClosedTitle": "At the last delivery attempt this session (the requester) showed a confirmation dialog, so the expiry notice of a relay closed by its deadline was stopped (nothing was typed). Answer the dialog and it is delivered on the next delivery pass (about every 15 s). The notice stays until it is delivered; nothing replaces it. This is what the last attempt observed; commandmate relays --id shows when.",
|
|
1302
|
+
"blockedByPromptMixedTitle": "At the last delivery attempt this session (the requester) showed a confirmation dialog, so the relay deliveries were stopped (nothing was typed). Answer the dialog and they are delivered on the next delivery pass (about every 15 s). Left alone, a reply of an open relay is replaced by the expiry notice at the deadline; the expiry notice of a relay closed by its deadline stays until it is delivered. This is what the last attempt observed; commandmate relays --id shows when.",
|
|
1303
|
+
"unplacedBlockedHeading": "Expiry notices to sessions not in the roster (delivery stopped)",
|
|
1304
|
+
"unplacedBlockedTitle": "The expiry notice of a relay closed by its deadline has not reached a session (the requester) that is not in the roster. The reason is what the last delivery attempt observed (prompt_waiting = that pane shows a confirmation dialog). It goes away once delivered; commandmate relays shows it.",
|
|
1305
|
+
"unplacedBlockedLine": "{requester} ← {alias} (relay {relayId}): stopped by {reason}",
|
|
1296
1306
|
"historyBadge": "relay",
|
|
1297
1307
|
"historyBadgeTitle": "Delivered by another agent session (Issue #2377 relay).",
|
|
1298
1308
|
"historyCount": "{count} relayed message(s) in view"
|
|
@@ -1728,6 +1738,15 @@
|
|
|
1728
1738
|
"submit": "Add",
|
|
1729
1739
|
"cancel": "Cancel",
|
|
1730
1740
|
"saveError": "Could not add the agent.",
|
|
1731
|
-
"maxReached": "Up to {max} agents per branch"
|
|
1741
|
+
"maxReached": "Up to {max} agents per branch",
|
|
1742
|
+
"role": "Role",
|
|
1743
|
+
"roleUnsupported": "Roles do not apply to this agent.",
|
|
1744
|
+
"roleUnavailable": "The role information could not be read, so this is added with the default role.",
|
|
1745
|
+
"roleMissing": "The chosen role no longer exists. Reopen this and choose again.",
|
|
1746
|
+
"rosterChanged": "The roster kept changing elsewhere, so this was not added. Try again.",
|
|
1747
|
+
"rosterUnreadable": "The current roster could not be read, so this was not added, to avoid erasing other changes. Check the connection and try again.",
|
|
1748
|
+
"savedUnverified": "The session was added, but the latest roster could not be read back. Do not add it again; reload the page.",
|
|
1749
|
+
"outcomeUnknown": "Whether the session was added could not be confirmed. Do not add it again; reload the page and check the roster.",
|
|
1750
|
+
"removedElsewhere": "The session was added, but it was removed elsewhere right after, so it was not opened. Add it again if you still need it."
|
|
1732
1751
|
}
|
|
1733
1752
|
}
|
|
@@ -1278,21 +1278,31 @@
|
|
|
1278
1278
|
"badgeOwedMany": "返信予定 {count} 件",
|
|
1279
1279
|
"badgeAwaiting": "{alias} の返信待ち",
|
|
1280
1280
|
"badgeAwaitingMany": "返信待ち {count} 件",
|
|
1281
|
-
"badgePrompt": "
|
|
1281
|
+
"badgePrompt": "相手の確認待ちを記録",
|
|
1282
1282
|
"owedTitle": "このセッションは委任された返信を抱えています。ターン完了時に自動で届きます。",
|
|
1283
1283
|
"awaitingTitle": "このセッションは委任した返信を待っています。届くとコンポーザーに relay メッセージとして入ります。",
|
|
1284
|
-
"promptTitle": "
|
|
1284
|
+
"promptTitle": "相手セッションが確認待ちで止まったことの記録です。相手が今も確認待ちかどうかは表しません(相手が確認を終えて返信が知らせを置き換えた後も、この relay が閉じるまで残ります)。依頼元への知らせは配送の待ち行列に入れました(届いたかどうかはこの表示では分かりません。commandmate relays --id で確かめられます)。",
|
|
1285
1285
|
"stripAwaiting": "{alias} へ委任、返信待ち",
|
|
1286
1286
|
"stripAwaitingMany": "返信待ち {count} 件",
|
|
1287
|
-
"stripPrompt": "{alias}
|
|
1287
|
+
"stripPrompt": "{alias} の確認待ちを記録(今も確認待ちとは限りません)",
|
|
1288
1288
|
"stripOwed": "{alias} へ返信予定: ターン完了時に届きます",
|
|
1289
|
-
"badgeHeld": "{alias}
|
|
1290
|
-
"badgeHeldMany": "
|
|
1289
|
+
"badgeHeld": "配送が未確認: {alias}",
|
|
1290
|
+
"badgeHeldMany": "{count} 件の配送が未確認",
|
|
1291
1291
|
"heldTitle": "このセッションへの relay の配送(返信・確認待ちの通知・期限切れの通知)が届いたか分かりません。自動では再送しません。この画面を確かめてから commandmate relays resolve で片付けてください。",
|
|
1292
1292
|
"stripHeld": "{alias} からの配送が未確認: 画面を確かめて relays resolve で片付けてください",
|
|
1293
|
+
"badgeBlockedByPrompt": "{alias} からの配送: この画面の確認で停止",
|
|
1294
|
+
"badgeBlockedByPromptMany": "{count} 件の配送: この画面の確認で停止",
|
|
1295
|
+
"blockedByPromptTitle": "最後の配送の試行のとき、このセッション(依頼元)の画面に確認の案内が出ていたため、relay の配送を止めました(何も打鍵していません)。案内に答えると、次の配送の周回(約 15 秒ごと)で届きます。放置すると期限で時間切れの知らせに置き換わります。最後の試行の時点の観測です。観測時刻は commandmate relays --id で確かめられます。",
|
|
1296
|
+
"stripBlockedByPrompt": "{alias} からの配送が、この画面の確認の案内で止まっています(最後の試行の時点)。案内に答えると届きます",
|
|
1297
|
+
"stripBlockedByPromptMany": "{count} 件の配送が、この画面の確認の案内で止まっています(最後の試行の時点)。案内に答えると届きます",
|
|
1293
1298
|
"stripHeldMany": "配送未確認 {count} 件: 画面を確かめて relays resolve で片付けてください",
|
|
1294
1299
|
"unplacedHeldHeading": "名簿に無いセッションへの配送未確認",
|
|
1295
1300
|
"unplacedHeldLine": "{requester} ← {alias}(relay {relayId})",
|
|
1301
|
+
"blockedByPromptClosedTitle": "期限切れで閉じた relay の時間切れの知らせを、最後の配送の試行のとき、このセッション(依頼元)の画面に確認の案内が出ていたため止めました(何も打鍵していません)。案内に答えると、次の配送の周回(約 15 秒ごと)で届きます。この知らせは届くまで残り、別の知らせに置き換わることはありません。最後の試行の時点の観測です。観測時刻は commandmate relays --id で確かめられます。",
|
|
1302
|
+
"blockedByPromptMixedTitle": "最後の配送の試行のとき、このセッション(依頼元)の画面に確認の案内が出ていたため、relay の配送を止めました(何も打鍵していません)。案内に答えると、次の配送の周回(約 15 秒ごと)で届きます。開いている relay の返答は、放置すると期限で時間切れの知らせに置き換わります。期限切れで閉じた relay の時間切れの知らせは、届くまで残ります。最後の試行の時点の観測です。観測時刻は commandmate relays --id で確かめられます。",
|
|
1303
|
+
"unplacedBlockedHeading": "名簿に無いセッションへの時間切れの知らせ(配送が停止中)",
|
|
1304
|
+
"unplacedBlockedTitle": "期限切れで閉じた relay の時間切れの知らせが、名簿に無いセッション(依頼元)へ届かず止まっています。理由は最後の配送の試行の時点の観測です(prompt_waiting = その画面に確認の案内)。届くと消えます。commandmate relays で確かめられます。",
|
|
1305
|
+
"unplacedBlockedLine": "{requester} ← {alias}(relay {relayId}): 停止の理由 {reason}",
|
|
1296
1306
|
"historyBadge": "relay",
|
|
1297
1307
|
"historyBadgeTitle": "別のエージェントセッションから届いたメッセージです(Issue #2377 relay)。",
|
|
1298
1308
|
"historyCount": "表示範囲に relay メッセージが {count} 件"
|
|
@@ -1728,6 +1738,15 @@
|
|
|
1728
1738
|
"submit": "追加",
|
|
1729
1739
|
"cancel": "キャンセル",
|
|
1730
1740
|
"saveError": "エージェントを追加できませんでした。",
|
|
1731
|
-
"maxReached": "1 つのブランチに追加できるのは {max} 件までです"
|
|
1741
|
+
"maxReached": "1 つのブランチに追加できるのは {max} 件までです",
|
|
1742
|
+
"role": "ロール",
|
|
1743
|
+
"roleUnsupported": "このエージェントはロールの対象外です。",
|
|
1744
|
+
"roleUnavailable": "ロールの情報を読めなかったため、既定のロールを引き継いで追加します。",
|
|
1745
|
+
"roleMissing": "選んだロールが見つかりません。開き直して選び直してください。",
|
|
1746
|
+
"rosterChanged": "名簿が別の場所で変更され続けたため、追加できませんでした。もう一度お試しください。",
|
|
1747
|
+
"rosterUnreadable": "今の名簿を読めなかったため、追加しませんでした。他の変更を消さないためです。接続を確かめてもう一度お試しください。",
|
|
1748
|
+
"savedUnverified": "追加は保存しましたが、最新の名簿を読み直せませんでした。もう一度追加せず、ページを再読み込みしてください。",
|
|
1749
|
+
"outcomeUnknown": "追加できたか確かめられませんでした。もう一度追加せず、ページを再読み込みして名簿を確かめてください。",
|
|
1750
|
+
"removedElsewhere": "追加しましたが、その直後に別の場所で削除されたため開いていません。必要ならもう一度追加してください。"
|
|
1732
1751
|
}
|
|
1733
1752
|
}
|
|
@@ -42,6 +42,8 @@
|
|
|
42
42
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
43
|
exports.resetSafeDirectoryWarnings = resetSafeDirectoryWarnings;
|
|
44
44
|
exports.resolveSafeDirectory = resolveSafeDirectory;
|
|
45
|
+
exports.resolveSafeAbsoluteDirectory = resolveSafeAbsoluteDirectory;
|
|
46
|
+
const path_1 = require("path");
|
|
45
47
|
const logger_1 = require("../lib/logger");
|
|
46
48
|
const system_directories_1 = require("./system-directories");
|
|
47
49
|
const logger = (0, logger_1.createLogger)('safe-directory');
|
|
@@ -101,3 +103,31 @@ function resolveSafeDirectory(candidate, fallback, source) {
|
|
|
101
103
|
}
|
|
102
104
|
return fallback;
|
|
103
105
|
}
|
|
106
|
+
/**
|
|
107
|
+
* {@link resolveSafeDirectory} for a value that another process will be handed
|
|
108
|
+
* (Issue #4191): a relative candidate is made absolute against this process's
|
|
109
|
+
* working directory first, and the `/proc` check runs on that absolute form.
|
|
110
|
+
*
|
|
111
|
+
* `resolveSafeDirectory` returns a relative value as it was given, which is
|
|
112
|
+
* right for a directory only this process opens — `fs` resolves it against the
|
|
113
|
+
* same cwd every time. It is wrong for a path written into a command line, a
|
|
114
|
+
* tmux hook or a child's environment: the child resolves it against ITS cwd.
|
|
115
|
+
* Measured for `CM_AGENT_HOOKS_DIR`: the daemon runs from the package root
|
|
116
|
+
* (`src/cli/utils/daemon.ts`, `cwd: packageRoot`) and writes the settings file
|
|
117
|
+
* there, while claude is started in the worktree (`claude-session.ts`,
|
|
118
|
+
* `createSession({ workingDirectory: worktreePath })`) and reads
|
|
119
|
+
* `--settings <relative>` from there — another file, or none, and no events.
|
|
120
|
+
*
|
|
121
|
+
* Opt-in rather than a change to `resolveSafeDirectory`, whose other callers
|
|
122
|
+
* keep their values verbatim (`tests/unit/config/safe-directory.test.ts` pins
|
|
123
|
+
* that); each of them has to be judged on whether its value leaves the process.
|
|
124
|
+
*
|
|
125
|
+
* @param candidate - The configured path. Empty or undefined means "unset"
|
|
126
|
+
* @param fallback - The built-in default, already absolute
|
|
127
|
+
* @param source - What supplied the candidate, for the warning
|
|
128
|
+
* @returns The absolute form of `candidate`, or `fallback` when it is unset or
|
|
129
|
+
* inside `/proc`, `/sys` or `/dev`
|
|
130
|
+
*/
|
|
131
|
+
function resolveSafeAbsoluteDirectory(candidate, fallback, source) {
|
|
132
|
+
return resolveSafeDirectory(candidate ? (0, path_1.resolve)(candidate) : undefined, fallback, source);
|
|
133
|
+
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OPENCODE_CONFIG_CONTENT_ENV_VAR = exports.OPENCODE_V2_COMMON_INSTRUCTIONS = exports.ROLE_WRAPPER_TEXT = exports.OPENCODE_V2_WRAPPER_VERSION = exports.ROLE_WRAPPER_VERSION = void 0;
|
|
4
|
+
exports.roleWrapperVersion = roleWrapperVersion;
|
|
5
|
+
exports.computeRoleInjection = computeRoleInjection;
|
|
6
|
+
exports.buildRoleLaunchArguments = buildRoleLaunchArguments;
|
|
7
|
+
exports.splitRoleEnv = splitRoleEnv;
|
|
8
|
+
exports.renderSecretEnvAssignment = renderSecretEnvAssignment;
|
|
9
|
+
exports.renderRoleFlags = renderRoleFlags;
|
|
10
|
+
/**
|
|
11
|
+
* The transform from a resolved role to what each CLI is handed (§5–§7 of
|
|
12
|
+
* `docs/design/agent-roles-adapters.md`). Pure: no database, no filesystem, no
|
|
13
|
+
* tmux. What the user's settings say arrives as {@link RoleComposition}, read
|
|
14
|
+
* once by `./composition`, so the same inputs always give the same fingerprint.
|
|
15
|
+
*
|
|
16
|
+
* ## The injection fingerprint
|
|
17
|
+
*
|
|
18
|
+
* It says what the process would actually be told, and it decides everything that
|
|
19
|
+
* compares roles: restart pending, whether two launches may join, and the file name.
|
|
20
|
+
* In: the adapter and its version, the wrapper version, the body fingerprint, and
|
|
21
|
+
* the composition inputs (Codex's `developer_instructions`, V2's effective agent, an
|
|
22
|
+
* explicit agent). Out: the role's name and id, where it was inherited from, paths,
|
|
23
|
+
* and the other keys of the user's env. So a rename or another level holding the
|
|
24
|
+
* same text is not a restart, and a change in `config.toml` is.
|
|
25
|
+
*
|
|
26
|
+
* @module lib/agent-roles/adapters
|
|
27
|
+
*/
|
|
28
|
+
const path_1 = require("path");
|
|
29
|
+
const hook_settings_generator_1 = require("../../lib/hooks/hook-settings-generator");
|
|
30
|
+
const fingerprint_1 = require("./fingerprint");
|
|
31
|
+
/** Moves when what an adapter generates for the same input changes. */
|
|
32
|
+
const ADAPTER_VERSION = '1';
|
|
33
|
+
/** The wrapper every adapter puts around a body. Moves with its text. */
|
|
34
|
+
exports.ROLE_WRAPPER_VERSION = '1';
|
|
35
|
+
/** V2's wrapper: the shared one plus {@link OPENCODE_V2_COMMON_INSTRUCTIONS}. */
|
|
36
|
+
exports.OPENCODE_V2_WRAPPER_VERSION = '1+common-1';
|
|
37
|
+
/**
|
|
38
|
+
* Says that the request and the contract outrank the role. It is a request to the
|
|
39
|
+
* model and guarantees nothing (§5): the gates still judge by evidence.
|
|
40
|
+
*/
|
|
41
|
+
exports.ROLE_WRAPPER_TEXT = 'CommandMate started you with the role below. Keep following the current request, ' +
|
|
42
|
+
'any execution contract and the project instructions (AGENTS.md, CLAUDE.md and the like); ' +
|
|
43
|
+
'where they conflict with the role, they win. The role does not relax a contract, ' +
|
|
44
|
+
'a verification step or a permission rule.';
|
|
45
|
+
/**
|
|
46
|
+
* For OpenCode V2 only, whose `system` replaces the provider's base prompt (§7.2).
|
|
47
|
+
* A precaution for the guidance that replacement drops, not a measured improvement.
|
|
48
|
+
* The API says "replaces the default instructions" beside it.
|
|
49
|
+
*/
|
|
50
|
+
exports.OPENCODE_V2_COMMON_INSTRUCTIONS = [
|
|
51
|
+
'You are an AI agent running in OpenCode, a coding agent harness. Help the user accomplish their goals using the tools you have available.',
|
|
52
|
+
'Prefer dedicated tools over shell commands; fall back to the shell when a tool cannot do what you need.',
|
|
53
|
+
'Keep changes consistent with the structure, naming, style, and patterns of the surrounding code.',
|
|
54
|
+
'Treat unfamiliar files or changes as potential user work and investigate before deleting or overwriting them.',
|
|
55
|
+
].join('\n');
|
|
56
|
+
function roleWrapperVersion(adapter) {
|
|
57
|
+
return adapter === 'opencode-v2' ? exports.OPENCODE_V2_WRAPPER_VERSION : exports.ROLE_WRAPPER_VERSION;
|
|
58
|
+
}
|
|
59
|
+
function buildInstructions(adapter, body, composition) {
|
|
60
|
+
const wrapped = `${exports.ROLE_WRAPPER_TEXT}\n\n${body}`;
|
|
61
|
+
if (adapter === 'opencode-v2')
|
|
62
|
+
return `${exports.OPENCODE_V2_COMMON_INSTRUCTIONS}\n\n${wrapped}`;
|
|
63
|
+
const existing = composition.codexDeveloperInstructions;
|
|
64
|
+
if (adapter === 'codex' && existing)
|
|
65
|
+
return `${existing}\n\n${wrapped}`;
|
|
66
|
+
return wrapped;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Fingerprint and text for one role through one adapter.
|
|
70
|
+
*
|
|
71
|
+
* @param role - Only the body fingerprint and body are read; the name and id are not inputs
|
|
72
|
+
*/
|
|
73
|
+
function computeRoleInjection(adapter, role, composition) {
|
|
74
|
+
const wrapperVersion = roleWrapperVersion(adapter);
|
|
75
|
+
const codexSource = adapter === 'codex' && composition.codexDeveloperInstructions
|
|
76
|
+
? (0, fingerprint_1.computeBodyFingerprint)(composition.codexDeveloperInstructions)
|
|
77
|
+
: null;
|
|
78
|
+
const effectiveAgent = adapter === 'opencode-v2' ? (composition.opencodeV2EffectiveAgent ?? null) : null;
|
|
79
|
+
const explicitAgent = composition.explicitAgent ?? null;
|
|
80
|
+
const canonical = JSON.stringify({
|
|
81
|
+
adapter,
|
|
82
|
+
adapterVersion: ADAPTER_VERSION,
|
|
83
|
+
wrapperVersion,
|
|
84
|
+
bodyFingerprint: role.bodyFingerprint,
|
|
85
|
+
codexDeveloperInstructions: codexSource,
|
|
86
|
+
effectiveAgent,
|
|
87
|
+
explicitAgent,
|
|
88
|
+
});
|
|
89
|
+
return {
|
|
90
|
+
adapter,
|
|
91
|
+
adapterVersion: ADAPTER_VERSION,
|
|
92
|
+
wrapperVersion,
|
|
93
|
+
injectionFingerprint: (0, fingerprint_1.computeFingerprint)(Buffer.from(canonical, 'utf8')),
|
|
94
|
+
instructions: buildInstructions(adapter, role.body, composition),
|
|
95
|
+
effectiveAgent,
|
|
96
|
+
compositionSourceFingerprint: codexSource,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
exports.OPENCODE_CONFIG_CONTENT_ENV_VAR = 'OPENCODE_CONFIG_CONTENT';
|
|
100
|
+
const CODEX_HOME_ENV_VAR = 'CODEX_HOME';
|
|
101
|
+
const COPILOT_HOME_ENV_VAR = 'COPILOT_HOME';
|
|
102
|
+
/** V1: appended to `instructions`, and nothing else touched (#2053's lesson). */
|
|
103
|
+
function composeOpencodeV1Content(user, path) {
|
|
104
|
+
const existing = user?.instructions;
|
|
105
|
+
return { ...user, instructions: [...(Array.isArray(existing) ? existing : []), path] };
|
|
106
|
+
}
|
|
107
|
+
/** V2: `agents.<effective>.system` only. `model`, `providers`, `default_agent` stay. */
|
|
108
|
+
function composeOpencodeV2Content(user, agent, path) {
|
|
109
|
+
const agents = (user?.agents ?? {});
|
|
110
|
+
const current = (agents[agent] ?? {});
|
|
111
|
+
return { ...user, agents: { ...agents, [agent]: { ...current, system: `{file:${path}}` } } };
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* The arguments and environment that hand one generated file to its CLI.
|
|
115
|
+
*
|
|
116
|
+
* @param artifact - The name and path `writeRoleArtifact` answered
|
|
117
|
+
*/
|
|
118
|
+
function buildRoleLaunchArguments(injection, artifact, composition) {
|
|
119
|
+
const flag = (args, headlessPosition, env = {}) => ({
|
|
120
|
+
args,
|
|
121
|
+
headlessPosition,
|
|
122
|
+
env,
|
|
123
|
+
envCarriesUserValues: false,
|
|
124
|
+
});
|
|
125
|
+
const content = (value) => ({
|
|
126
|
+
args: [],
|
|
127
|
+
headlessPosition: 'trailing',
|
|
128
|
+
env: { [exports.OPENCODE_CONFIG_CONTENT_ENV_VAR]: JSON.stringify(value) },
|
|
129
|
+
envCarriesUserValues: composition.opencodeUserContent != null,
|
|
130
|
+
});
|
|
131
|
+
const { adapter } = injection;
|
|
132
|
+
switch (adapter) {
|
|
133
|
+
case 'claude':
|
|
134
|
+
return flag(['--append-system-prompt-file', artifact.path], 'trailing');
|
|
135
|
+
case 'codex':
|
|
136
|
+
// Codex finds a profile by name in its home, and a pane has the tmux server's
|
|
137
|
+
// environment, not this process's. The home is stated so that the file just
|
|
138
|
+
// inspected is the one it finds, with hooks on or off.
|
|
139
|
+
return flag(['-p', artifact.name], 'leading', { [CODEX_HOME_ENV_VAR]: (0, path_1.dirname)(artifact.path) });
|
|
140
|
+
case 'command-code':
|
|
141
|
+
return flag(['--mod', artifact.path], 'trailing');
|
|
142
|
+
case 'copilot':
|
|
143
|
+
// The same for Copilot, whose definitions are in `<home>/agents/`.
|
|
144
|
+
return flag(['--agent', artifact.name], 'leading', { [COPILOT_HOME_ENV_VAR]: (0, path_1.dirname)((0, path_1.dirname)(artifact.path)) });
|
|
145
|
+
case 'antigravity':
|
|
146
|
+
return flag(['--agent', artifact.name], 'trailing');
|
|
147
|
+
case 'opencode':
|
|
148
|
+
return content(composeOpencodeV1Content(composition.opencodeUserContent, artifact.path));
|
|
149
|
+
case 'opencode-v2':
|
|
150
|
+
return content(composeOpencodeV2Content(composition.opencodeUserContent, injection.effectiveAgent ?? 'build', artifact.path));
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Which part of a role's environment may be written on a line.
|
|
155
|
+
*
|
|
156
|
+
* @returns `plain`, safe to spell (paths and names); `secret`, the value of the one
|
|
157
|
+
* variable that has to go through a private file, when it holds the user's values
|
|
158
|
+
*/
|
|
159
|
+
function splitRoleEnv(role) {
|
|
160
|
+
const { [exports.OPENCODE_CONFIG_CONTENT_ENV_VAR]: content, ...others } = role.env;
|
|
161
|
+
if (content === undefined)
|
|
162
|
+
return { plain: others, secret: null };
|
|
163
|
+
if (role.envCarriesUserValues)
|
|
164
|
+
return { plain: others, secret: content };
|
|
165
|
+
return { plain: { ...others, [exports.OPENCODE_CONFIG_CONTENT_ENV_VAR]: content }, secret: null };
|
|
166
|
+
}
|
|
167
|
+
/** The assignment that reads a composed config from its private file. */
|
|
168
|
+
function renderSecretEnvAssignment(file) {
|
|
169
|
+
return `${exports.OPENCODE_CONFIG_CONTENT_ENV_VAR}="$(cat ${(0, hook_settings_generator_1.shellQuote)(file)})" `;
|
|
170
|
+
}
|
|
171
|
+
/** The arguments as they go on a shell line. */
|
|
172
|
+
function renderRoleFlags(args) {
|
|
173
|
+
return args.map((arg) => (/^[A-Za-z0-9_./=-]+$/.test(arg) ? arg : (0, hook_settings_generator_1.shellQuote)(arg))).join(' ');
|
|
174
|
+
}
|