commandmate 0.29.1 → 0.30.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 +468 -417
- package/.next/app-path-routes-manifest.json +30 -23
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +15 -15
- package/.next/react-loadable-manifest.json +3 -3
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +25 -8
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/update/route.js +2 -0
- package/.next/server/app/api/agents/update/route.js.nft.json +1 -0
- package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/agents/versions/route.js +1 -0
- package/.next/server/app/api/agents/versions/route.js.nft.json +1 -0
- package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route.js +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/session/route.js +1 -1
- package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/start/route.js +18 -18
- package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/terminal/route.js +19 -19
- package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/tools/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.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/external-apps/route.js.nft.json +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route.js +1 -7
- package/.next/server/app/api/fs/browse/route.js.nft.json +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.js +1 -7
- package/.next/server/app/api/fs/recent-paths/route.js.nft.json +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 -1
- 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.js +2 -2
- package/.next/server/app/api/metrics/vibe/route.js.nft.json +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 +7 -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.js.nft.json +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 +7 -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/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/[id]/todos/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.js +1 -1
- package/.next/server/app/api/repositories/excluded/route.js.nft.json +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.js.nft.json +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js +1 -0
- package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -0
- package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/settings/default-surface-mode/route.js +1 -0
- package/.next/server/app/api/settings/default-surface-mode/route.js.nft.json +1 -0
- package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/sidebar/group-order/route.js +1 -7
- package/.next/server/app/api/sidebar/group-order/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/skills/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route.js +2 -2
- package/.next/server/app/api/skills/installations/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route.js +2 -2
- package/.next/server/app/api/skills/operations/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route.js +1 -1
- package/.next/server/app/api/skills/reindex/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route.js +1 -1
- package/.next/server/app/api/skills/route.js.nft.json +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.js.nft.json +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.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route.js.nft.json +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.js.nft.json +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route.js +2 -2
- package/.next/server/app/api/templates/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route.js +2 -2
- package/.next/server/app/api/templates/route.js.nft.json +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/todos/route.js +1 -1
- package/.next/server/app/api/todos/route.js.nft.json +1 -1
- package/.next/server/app/api/todos/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.js.nft.json +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.js.nft.json +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 -0
- package/.next/server/app/api/worktrees/[id]/cli-reference/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/{start-polling → 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.js.nft.json +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 +2 -2
- 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 -2
- 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]/env/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route.js.nft.json +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.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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/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]/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 +1 -1
- 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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +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.js +2 -2
- package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +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 +3 -3
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js.nft.json +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]/resolve-target/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js.nft.json +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 +1 -1
- 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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +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 -7
- 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 +1 -1
- 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.js.nft.json +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 +1 -1
- 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 -1
- 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.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +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 +2 -0
- package/.next/server/app/api/worktrees/[id]/verify/config/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -0
- 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 -0
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -0
- 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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js +1 -0
- package/.next/server/app/api/worktrees/apply-default-agents/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -0
- 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/chat/page.js +2 -2
- package/.next/server/app/chat/page.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page.js +2 -2
- package/.next/server/app/login/page.js.nft.json +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 +2 -2
- package/.next/server/app/more/page.js.nft.json +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page.js.nft.json +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page.js +1 -1
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route.js +1 -1
- package/.next/server/app/proxy/[...path]/route.js.nft.json +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.js.nft.json +1 -1
- 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.js.nft.json +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.js.nft.json +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page.js +2 -2
- package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page.js +2 -2
- package/.next/server/app/skills/installed/page.js.nft.json +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page.js +2 -2
- package/.next/server/app/skills/page.js.nft.json +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +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 +12 -12
- package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page.js +3 -3
- package/.next/server/app/worktrees/[id]/terminal/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +30 -23
- package/.next/server/chunks/1058.js +1 -1
- package/.next/server/chunks/1068.js +1 -1
- package/.next/server/chunks/1191.js +1 -1
- package/.next/server/chunks/1341.js +1 -0
- package/.next/server/chunks/1501.js +5 -0
- package/.next/server/chunks/1886.js +3 -4
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/261.js +1 -0
- package/.next/server/chunks/2739.js +1 -0
- package/.next/server/chunks/2816.js +1 -1
- package/.next/server/chunks/2827.js +29 -0
- package/.next/server/chunks/3123.js +1 -0
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3543.js +1 -1
- package/.next/server/chunks/3707.js +15 -0
- package/.next/server/chunks/3722.js +25 -1
- package/.next/server/chunks/3869.js +1 -0
- package/.next/server/chunks/3945.js +1 -1
- package/.next/server/chunks/4299.js +1 -1
- package/.next/server/chunks/4325.js +1 -0
- package/.next/server/chunks/4390.js +1 -0
- package/.next/server/chunks/4393.js +1 -1
- package/.next/server/chunks/4443.js +6 -0
- package/.next/server/chunks/5017.js +1 -1
- package/.next/server/chunks/5120.js +1 -0
- package/.next/server/chunks/5164.js +1 -1
- package/.next/server/chunks/5571.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6285.js +1 -1
- package/.next/server/chunks/6337.js +1 -1
- package/.next/server/chunks/663.js +1 -1
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/6894.js +8 -0
- package/.next/server/chunks/7366.js +5 -0
- package/.next/server/chunks/7685.js +1 -1
- package/.next/server/chunks/7824.js +1 -1
- package/.next/server/chunks/7836.js +1 -0
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/8118.js +1 -0
- package/.next/server/chunks/8356.js +1 -1
- package/.next/server/chunks/848.js +1 -1
- package/.next/server/chunks/880.js +3 -3
- package/.next/server/chunks/8800.js +3 -0
- package/.next/server/chunks/8807.js +1 -1
- package/.next/server/chunks/9123.js +2 -2
- package/.next/server/chunks/9130.js +3 -3
- package/.next/server/chunks/9627.js +71 -43
- package/.next/server/chunks/9696.js +3 -0
- package/.next/server/chunks/9798.js +1 -1
- 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/server/src/middleware.js +1 -1
- package/.next/server/src/middleware.js.map +1 -1
- package/.next/static/7K0XXFu_ty4wRSkl4X21E/_buildManifest.js +1 -0
- package/.next/static/chunks/{2053-c0e931eb4391baa1.js → 2053-3f299a7a2c7d6767.js} +1 -1
- package/.next/static/chunks/{3968-8d8ca15657748bfb.js → 3916-0e929d089282dc5d.js} +1 -1
- package/.next/static/chunks/3922.9c1ec01fff819c88.js +1 -0
- package/.next/static/chunks/5229-6c89475b61bd2c8b.js +1 -0
- package/.next/static/chunks/6022-7a7d1760fc9814c7.js +1 -0
- package/.next/static/chunks/6381-28d0e95620aa018e.js +1 -0
- package/.next/static/chunks/8019-f8e73c1fb5f6f0d3.js +1 -0
- package/.next/static/chunks/{1188-8567ee5ecfef02ee.js → 8593-fa0eb2802e0ce68a.js} +1 -1
- package/.next/static/chunks/app/api/agents/update/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/agents/versions/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/app/update/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/assistant/conversation/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/assistant/current-output/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/assistant/messages/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/assistant/session/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/assistant/start/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/assistant/terminal/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/assistant/tools/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/remote/pair/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/settings/default-agents/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/skills/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/templates/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/todos/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/chat/{page-231df45127e876c2.js → page-9aa2011410895b0d.js} +1 -1
- package/.next/static/chunks/app/login/{page-03659dded846ef1d.js → page-af7241bb4c4a8e59.js} +1 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/more/page-333bba1c8bbc9c11.js +1 -0
- package/.next/static/chunks/app/{page-0305431f43195431.js → page-214f7ffa13a0cf10.js} +1 -1
- package/.next/static/chunks/app/proxy/[...path]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/repositories/{page-ae8fa55749976f79.js → page-4951cac905e50224.js} +1 -1
- package/.next/static/chunks/app/review/page-a0899b2d285318c3.js +1 -0
- package/.next/static/chunks/app/sessions/page-fb36145ec732092a.js +1 -0
- package/.next/static/chunks/app/skills/[skillId]/{page-aaf0bcb1dfb558b9.js → page-9099e26b60442873.js} +1 -1
- package/.next/static/chunks/app/skills/installed/{page-dafc486410e839b7.js → page-182e32368696d824.js} +1 -1
- package/.next/static/chunks/app/skills/{page-9e3c91da31514893.js → page-d3fdc88239ebe0ab.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/files/[...path]/{page-90f96977c741bbf8.js → page-f3361237420719b4.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-d48b95ed554bcd13.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/terminal/page-2631bc5c4b0a9fb8.js +1 -0
- package/.next/static/chunks/{webpack-7e79064bfce988d7.js → webpack-9f75198882fdaf08.js} +1 -1
- package/.next/static/css/61e10d4b1b11b193.css +1 -0
- package/.next/trace +13 -13
- package/.next/types/app/api/agents/update/route.ts +347 -0
- package/.next/types/app/api/agents/versions/route.ts +347 -0
- package/.next/types/app/api/settings/default-agents/route.ts +347 -0
- package/.next/types/app/api/settings/default-surface-mode/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/{start-polling → cli-reference}/route.ts +3 -3
- package/.next/types/app/api/worktrees/[id]/verify/config/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.ts +347 -0
- package/.next/types/app/api/worktrees/apply-default-agents/route.ts +347 -0
- package/.next/types/routes.d.ts +9 -2
- package/.next/types/validator.ts +72 -9
- package/dist/cli/commands/agents.d.ts +35 -0
- package/dist/cli/commands/agents.d.ts.map +1 -0
- package/dist/cli/commands/agents.js +212 -0
- package/dist/cli/commands/ls.d.ts.map +1 -1
- package/dist/cli/commands/ls.js +18 -0
- package/dist/cli/commands/verify.d.ts.map +1 -1
- package/dist/cli/commands/verify.js +111 -0
- package/dist/cli/config/cli-dependencies.d.ts.map +1 -1
- package/dist/cli/config/cli-dependencies.js +11 -0
- 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 +30 -0
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +6 -0
- package/dist/cli/types/api-responses.d.ts +58 -0
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/index.d.ts +8 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/utils/preflight.d.ts.map +1 -1
- package/dist/cli/utils/preflight.js +6 -0
- package/dist/config/system-directories.d.ts +101 -0
- package/dist/config/system-directories.d.ts.map +1 -0
- package/dist/config/system-directories.js +211 -0
- package/dist/lib/cli-tools/types.d.ts +15 -1
- package/dist/lib/cli-tools/types.d.ts.map +1 -1
- package/dist/lib/detection/status-reason.d.ts +92 -0
- package/dist/lib/detection/status-reason.d.ts.map +1 -0
- package/dist/lib/detection/status-reason.js +94 -0
- package/dist/lib/updates/agent-updater.d.ts +247 -0
- package/dist/lib/updates/agent-updater.d.ts.map +1 -0
- package/dist/lib/updates/agent-updater.js +373 -0
- package/dist/lib/updates/agent-versions.d.ts +77 -0
- package/dist/lib/updates/agent-versions.d.ts.map +1 -0
- package/dist/lib/updates/agent-versions.js +138 -0
- package/dist/lib/updates/codex-version.d.ts +184 -0
- package/dist/lib/updates/codex-version.d.ts.map +1 -0
- package/dist/lib/updates/codex-version.js +215 -0
- package/dist/lib/verification/verify-config.d.ts +202 -0
- package/dist/lib/verification/verify-config.d.ts.map +1 -0
- package/dist/lib/verification/verify-config.js +429 -0
- package/dist/lib/verification/verify-draft.d.ts +182 -0
- package/dist/lib/verification/verify-draft.d.ts.map +1 -0
- package/dist/lib/verification/verify-draft.js +570 -0
- package/dist/server/server.js +58 -0
- package/dist/server/src/cli/types/api-responses.js +9 -0
- package/dist/server/src/config/cli-tool-timing-config.js +15 -1
- package/dist/server/src/config/codex-update-dialog-config.js +154 -0
- package/dist/server/src/config/default-agents.js +138 -0
- package/dist/server/src/lib/claude-output.js +1 -0
- package/dist/server/src/lib/cli-tools/antigravity.js +36 -12
- package/dist/server/src/lib/cli-tools/base.js +131 -0
- package/dist/server/src/lib/cli-tools/codex.js +350 -100
- package/dist/server/src/lib/cli-tools/copilot.js +34 -10
- package/dist/server/src/lib/cli-tools/gemini.js +34 -10
- package/dist/server/src/lib/cli-tools/liveness-spec.js +214 -0
- package/dist/server/src/lib/cli-tools/opencode.js +72 -19
- package/dist/server/src/lib/cli-tools/session-liveness.js +64 -0
- package/dist/server/src/lib/cli-tools/vibe-local.js +30 -10
- package/dist/server/src/lib/db/app-settings-db.js +202 -0
- package/dist/server/src/lib/db/chat-db.js +120 -7
- package/dist/server/src/lib/db/worktree-db.js +178 -3
- package/dist/server/src/lib/detection/status-detector.js +3 -2
- package/dist/server/src/lib/detection/status-reason.js +17 -0
- package/dist/server/src/lib/detection/tool-liveness.js +233 -0
- package/dist/server/src/lib/detection/version-probes.js +290 -0
- package/dist/server/src/lib/env.js +122 -0
- package/dist/server/src/lib/git/worktrees.js +164 -0
- package/dist/server/src/lib/history/transcript-tail.js +80 -0
- package/dist/server/src/lib/history/user-turn-recorder.js +247 -0
- package/dist/server/src/lib/hooks/permission-decision-service.js +85 -1
- package/dist/server/src/lib/hooks/sources/antigravity/history.js +519 -0
- package/dist/server/src/lib/hooks/sources/antigravity/source.js +7 -0
- package/dist/server/src/lib/hooks/sources/antigravity/transcript.js +407 -0
- package/dist/server/src/lib/hooks/sources/claude/history.js +654 -0
- package/dist/server/src/lib/hooks/sources/claude/source.js +4 -0
- package/dist/server/src/lib/hooks/sources/claude/transcript.js +518 -0
- package/dist/server/src/lib/hooks/sources/codex/history.js +576 -0
- package/dist/server/src/lib/hooks/sources/codex/source.js +4 -0
- package/dist/server/src/lib/hooks/sources/codex/transcript.js +448 -0
- package/dist/server/src/lib/hooks/sources/copilot/source.js +2 -0
- package/dist/server/src/lib/hooks/sources/gemini/source.js +2 -0
- package/dist/server/src/lib/hooks/sources/legacy-relay.js +3 -0
- package/dist/server/src/lib/hooks/sources/opencode/history.js +57 -0
- package/dist/server/src/lib/hooks/sources/opencode/source.js +4 -0
- package/dist/server/src/lib/hooks/sources/opencode/transcript.js +10 -28
- package/dist/server/src/lib/hooks/sources/turn-body.js +118 -0
- package/dist/server/src/lib/polling/prompt-dedup.js +2 -4
- package/dist/server/src/lib/polling/response-checker.js +44 -3
- package/dist/server/src/lib/polling/response-dedup.js +2 -4
- package/dist/server/src/lib/polling/response-poller-core.js +191 -29
- package/dist/server/src/lib/polling/structured-history-gate.js +147 -16
- package/dist/server/src/lib/push/push-sender.js +21 -1
- package/dist/server/src/lib/push/waiting-push-notifier.js +126 -8
- package/dist/server/src/lib/realtime/publisher-registry.js +171 -0
- package/dist/server/src/lib/realtime/terminal-broadcast.js +14 -1
- package/dist/server/src/lib/realtime/types.js +96 -1
- package/dist/server/src/lib/repo-config/agents-config.js +298 -0
- package/dist/server/src/lib/selected-agents-validator.js +93 -23
- package/dist/server/src/lib/session/claude-session.js +39 -108
- package/dist/server/src/lib/session/current-output-builder.js +263 -4
- package/dist/server/src/lib/session/send-user-message.js +90 -2
- package/dist/server/src/lib/tmux/tmux.js +29 -0
- package/dist/server/src/lib/tui-accumulator.js +2 -8
- package/dist/server/src/lib/updates/agent-updater.js +373 -0
- package/dist/server/src/lib/updates/agent-versions.js +138 -0
- package/dist/server/src/lib/updates/codex-version.js +215 -0
- package/dist/server/src/lib/updates/index.js +42 -0
- package/dist/server/src/lib/verification/gate-runner.js +298 -37
- package/dist/server/src/lib/verification/machine-lock.js +11 -0
- package/dist/server/src/lib/verification/run-verdict-vocabulary.js +151 -0
- package/dist/server/src/lib/verification/verify-config.js +33 -0
- package/dist/server/src/lib/ws-server.js +143 -6
- package/dist/server/src/types/agent-transcript.js +241 -5
- package/dist/server/src/types/sidebar.js +40 -9
- package/dist/server/src/types/ui-state.js +24 -1
- package/dist/types/cli-tool-contracts.d.ts +119 -0
- package/dist/types/cli-tool-contracts.d.ts.map +1 -1
- package/package.json +1 -1
- package/public/sw.js +15 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js +0 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +0 -1
- package/.next/server/chunks/1601.js +0 -7
- package/.next/server/chunks/1714.js +0 -7
- package/.next/server/chunks/221.js +0 -19
- package/.next/server/chunks/222.js +0 -1
- package/.next/server/chunks/2366.js +0 -1
- package/.next/server/chunks/2759.js +0 -8
- package/.next/server/chunks/3558.js +0 -1
- package/.next/server/chunks/4689.js +0 -25
- package/.next/server/chunks/5089.js +0 -1
- package/.next/server/chunks/6274.js +0 -14
- package/.next/server/chunks/9067.js +0 -1
- package/.next/server/chunks/9373.js +0 -9
- package/.next/server/chunks/9508.js +0 -1
- package/.next/static/Dvfs4ZThl5vBhJGP-ZQuJ/_buildManifest.js +0 -1
- package/.next/static/chunks/3361-aa1b6e7c1d7eeeb4.js +0 -1
- package/.next/static/chunks/3922.0d2e64daf9f187da.js +0 -1
- package/.next/static/chunks/5229-580b581fce5aeb52.js +0 -1
- package/.next/static/chunks/6381-9a929249196a0e77.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/assistant/conversation/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/assistant/current-output/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/assistant/messages/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/assistant/session/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/assistant/start/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/assistant/terminal/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/assistant/tools/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/capabilities/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/remote/pair/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/skills/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/templates/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/todos/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/more/page-03867ab635d197c7.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/review/page-9a6d18ddcccbb63c.js +0 -1
- package/.next/static/chunks/app/sessions/page-4d5382b257077c14.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-817378dd7c580774.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/terminal/page-00ad5d9a62a71cab.js +0 -1
- package/.next/static/css/6266bde3bce465a2.css +0 -1
- /package/.next/static/{Dvfs4ZThl5vBhJGP-ZQuJ → 7K0XXFu_ty4wRSkl4X21E}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `~/.codex/version.json` — what codex itself already knows about its updates
|
|
3
|
+
* (Issue #2069).
|
|
4
|
+
*
|
|
5
|
+
* ## Why a file rather than a request
|
|
6
|
+
*
|
|
7
|
+
* codex runs its own release check and writes the answer next to its config:
|
|
8
|
+
*
|
|
9
|
+
* ```json
|
|
10
|
+
* {"latest_version":"0.151.0","last_checked_at":"2026-08-30T15:12:18.082219Z","dismissed_version":null}
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* So "is there a newer codex?" is answerable with a `readFileSync` and no
|
|
14
|
+
* network at all. That is the whole reason this module exists rather than a
|
|
15
|
+
* registry query: `GET /api/agents/versions` is rendered on a settings screen
|
|
16
|
+
* and inside the agent pane, and #1913's rule — do not put a network round trip
|
|
17
|
+
* on a surface that renders a list — applies to a fetch exactly as it applies to
|
|
18
|
+
* a child process. The trade is that the answer is only as fresh as the last
|
|
19
|
+
* time codex itself looked, which is the correct freshness: it is codex's own
|
|
20
|
+
* notion of "you are behind", the same one its TUI banner uses.
|
|
21
|
+
*
|
|
22
|
+
* ## Fail-open, in every direction
|
|
23
|
+
*
|
|
24
|
+
* The file is written by another program, on its own schedule, in a format it
|
|
25
|
+
* owns. It is legitimately **absent** (a fresh install, a codex that has never
|
|
26
|
+
* run), legitimately **null-valued** (`dismissed_version` is null until the user
|
|
27
|
+
* dismisses a banner), and it can be a half-written temp file caught mid-rename.
|
|
28
|
+
* None of those is an error here: every failure resolves to
|
|
29
|
+
* {@link EMPTY_CODEX_VERSION_FILE} and the caller reports "no update known",
|
|
30
|
+
* which is exactly what the surfaces render when codex is not installed either.
|
|
31
|
+
* The acceptance criterion for this Issue names that behaviour directly —
|
|
32
|
+
* 「`version.json` が無い / 壊れている環境で落ちない」— and
|
|
33
|
+
* `tests/unit/updates/codex-version-2069.test.ts` pins it case by case.
|
|
34
|
+
*
|
|
35
|
+
* ## `$CODEX_HOME`: why it is resolved here, and where the two rules diverge
|
|
36
|
+
*
|
|
37
|
+
* `lib/hooks/sources/codex/hooks-config.getCodexHome()` answers the same
|
|
38
|
+
* question, and this module cannot call it: that function reaches `@/lib/logger`
|
|
39
|
+
* through `config/safe-directory`, and `tsconfig.cli.json` resets `"paths"` to
|
|
40
|
+
* `{}` — so one alias import anywhere in this module's transitive closure breaks
|
|
41
|
+
* `npm run build:cli` with TS2307 (the #1933 defect PR #1991 fixed), and
|
|
42
|
+
* `commandmate agents update` puts this file in the CLI's closure. The variable
|
|
43
|
+
* NAME therefore exists in two files, and
|
|
44
|
+
* `tests/unit/updates/codex-home-parity-2069.test.ts` is the join: it imports
|
|
45
|
+
* both and fails if the spellings or the shared rules ever drift.
|
|
46
|
+
*
|
|
47
|
+
* The rules are deliberately identical except for one case, and that case is a
|
|
48
|
+
* correctness fix rather than a divergence for its own sake:
|
|
49
|
+
*
|
|
50
|
+
* | `$CODEX_HOME` | hooks-config | here |
|
|
51
|
+
* |--------------------------|-------------------------------------|---------------------|
|
|
52
|
+
* | unset | `~/.codex` | `~/.codex` |
|
|
53
|
+
* | absolute | that path | that path |
|
|
54
|
+
* | inside `/proc`/`/sys`/`/dev` | `~/.codex` (#1774) | `~/.codex` |
|
|
55
|
+
* | **relative** | passed through **verbatim** | **null = unknown** |
|
|
56
|
+
*
|
|
57
|
+
* `resolveSafeDirectory` returns a relative candidate unchanged, and
|
|
58
|
+
* `hooks-config` puts that value on codex's own launch line — so codex resolves
|
|
59
|
+
* it against **the agent's worktree cwd**, and `CODEX_HOME=.codex-shared` means
|
|
60
|
+
* codex writes `<worktree>/.codex-shared/version.json`. This process is not in
|
|
61
|
+
* that worktree and, with several worktrees open, cannot say which one was
|
|
62
|
+
* meant. Falling back to `~/.codex` there is the one genuinely bad answer: it
|
|
63
|
+
* is not "no data", it is an unrelated install's version, reported with the
|
|
64
|
+
* same confidence as a real reading. So a relative value resolves to null and
|
|
65
|
+
* every surface renders "no update information", which is what they already
|
|
66
|
+
* render when codex has never run.
|
|
67
|
+
*
|
|
68
|
+
* @module lib/updates/codex-version
|
|
69
|
+
*/
|
|
70
|
+
/**
|
|
71
|
+
* The one thing this module reads out of the environment.
|
|
72
|
+
*
|
|
73
|
+
* Narrower than `NodeJS.ProcessEnv` on purpose: vitest's type augmentation
|
|
74
|
+
* makes `NODE_ENV` REQUIRED on that interface, so a test could not hand these
|
|
75
|
+
* functions a two-key literal without also declaring a `NODE_ENV` that has
|
|
76
|
+
* nothing to do with what is being tested.
|
|
77
|
+
*/
|
|
78
|
+
export type CodexVersionEnv = Readonly<Record<string, string | undefined>>;
|
|
79
|
+
/** The file codex writes its release check into, inside `$CODEX_HOME`. */
|
|
80
|
+
export declare const CODEX_VERSION_FILENAME = "version.json";
|
|
81
|
+
/**
|
|
82
|
+
* Largest `version.json` this module will parse.
|
|
83
|
+
*
|
|
84
|
+
* Three short fields; anything past this is not the file we mean. A cap rather
|
|
85
|
+
* than trust because the read happens on a request path and the file is written
|
|
86
|
+
* by another process — an oversized file is discarded, not truncated and parsed.
|
|
87
|
+
*/
|
|
88
|
+
export declare const CODEX_VERSION_FILE_MAX_BYTES: number;
|
|
89
|
+
/** What {@link readCodexVersionFile} could recover from the file. */
|
|
90
|
+
export interface CodexVersionFile {
|
|
91
|
+
/** `latest_version`, normalized to `major.minor.patch`, or null. */
|
|
92
|
+
latestVersion: string | null;
|
|
93
|
+
/** `dismissed_version`, normalized, or null (the ordinary value). */
|
|
94
|
+
dismissedVersion: string | null;
|
|
95
|
+
/** `last_checked_at` verbatim — an opaque timestamp string, or null. */
|
|
96
|
+
lastCheckedAt: string | null;
|
|
97
|
+
/**
|
|
98
|
+
* Absolute path that was read, or null when `$CODEX_HOME` is relative and the
|
|
99
|
+
* file's location therefore depends on a worktree this process cannot name.
|
|
100
|
+
*/
|
|
101
|
+
path: string | null;
|
|
102
|
+
/** False when the file was missing, oversized, unreadable or malformed. */
|
|
103
|
+
readable: boolean;
|
|
104
|
+
}
|
|
105
|
+
/** The answer for every failure: "codex has told us nothing". */
|
|
106
|
+
export declare const EMPTY_CODEX_VERSION_FILE: Omit<CodexVersionFile, 'path'>;
|
|
107
|
+
/**
|
|
108
|
+
* The directory codex keeps its state in, as seen from THIS process.
|
|
109
|
+
*
|
|
110
|
+
* See the table in the module header for the four cases. The one that returns
|
|
111
|
+
* null is a relative `$CODEX_HOME`: `hooks-config` forwards such a value to
|
|
112
|
+
* codex verbatim, codex resolves it against the agent's worktree cwd, and this
|
|
113
|
+
* process has no worktree — so the honest answer is "cannot tell", not
|
|
114
|
+
* `~/.codex`.
|
|
115
|
+
*
|
|
116
|
+
* @param env - Environment to read. Injectable so tests need no `process.env`
|
|
117
|
+
* mutation.
|
|
118
|
+
* @returns An absolute directory path, or null when it cannot be determined.
|
|
119
|
+
*/
|
|
120
|
+
export declare function getCodexHomeForVersionRead(env?: CodexVersionEnv): string | null;
|
|
121
|
+
/**
|
|
122
|
+
* Absolute path of the file codex writes its release check into, or null when
|
|
123
|
+
* {@link getCodexHomeForVersionRead} cannot determine the directory.
|
|
124
|
+
*/
|
|
125
|
+
export declare function getCodexVersionFilePath(env?: CodexVersionEnv): string | null;
|
|
126
|
+
/**
|
|
127
|
+
* Read `$CODEX_HOME/version.json`.
|
|
128
|
+
*
|
|
129
|
+
* Never throws and never rejects: see the module header. A file that parses but
|
|
130
|
+
* carries junk in a field yields null for **that field only**, so a codex build
|
|
131
|
+
* that adds or renames a key still gives up whatever the rest of it says.
|
|
132
|
+
*
|
|
133
|
+
* @param options.path - Read this file instead of the resolved default (tests,
|
|
134
|
+
* and an isolated-HOME verification run).
|
|
135
|
+
* @param options.env - Environment used to resolve the default path.
|
|
136
|
+
*/
|
|
137
|
+
export declare function readCodexVersionFile(options?: {
|
|
138
|
+
path?: string;
|
|
139
|
+
env?: CodexVersionEnv;
|
|
140
|
+
}): CodexVersionFile;
|
|
141
|
+
/** What the two update surfaces render for codex. */
|
|
142
|
+
export interface CodexUpdateStatus {
|
|
143
|
+
/** What `codex --version` reported, or null when it is not installed. */
|
|
144
|
+
installed: string | null;
|
|
145
|
+
/** codex's own `latest_version`, or null when it has not looked. */
|
|
146
|
+
latestVersion: string | null;
|
|
147
|
+
/** codex's own `dismissed_version`, or null. */
|
|
148
|
+
dismissedVersion: string | null;
|
|
149
|
+
/** True only when BOTH versions are known AND latest is strictly newer. */
|
|
150
|
+
updateAvailable: boolean;
|
|
151
|
+
/**
|
|
152
|
+
* True when `dismissed_version` names the update that is available — i.e.
|
|
153
|
+
* **something** answered codex's update banner with "not this version".
|
|
154
|
+
*
|
|
155
|
+
* **Not necessarily the user.** The digit that writes `dismissed_version` is
|
|
156
|
+
* the same one CommandMate can be configured to send for codex's in-pane
|
|
157
|
+
* update dialog (#2068, `CM_CODEX_UPDATE_DIALOG`), and on the default policy
|
|
158
|
+
* CommandMate sends it on every codex launch. So on a stock install this flag
|
|
159
|
+
* goes true without anybody having decided anything, and wording that says
|
|
160
|
+
* "you dismissed this" would be blaming the user for the server's own
|
|
161
|
+
* automatic answer.
|
|
162
|
+
*
|
|
163
|
+
* That is why it is reported and never acted on: it does not hide the update,
|
|
164
|
+
* it does not disable the button, and the copy beside it
|
|
165
|
+
* (`common.agentUpdates.dismissed`) says only that the version was dismissed
|
|
166
|
+
* in codex — without naming who did it.
|
|
167
|
+
*/
|
|
168
|
+
dismissedInCodex: boolean;
|
|
169
|
+
/** Where the "latest" half came from, or null when nothing was readable. */
|
|
170
|
+
source: 'version.json' | null;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Combine the installed version with codex's own release check.
|
|
174
|
+
*
|
|
175
|
+
* Both halves are "no answer"-tolerant, and every kind of no-answer resolves to
|
|
176
|
+
* `updateAvailable: false` — not installed, never checked, unparseable. That is
|
|
177
|
+
* the same posture `DetectorFreshnessRow.stale` takes, and for the same reason:
|
|
178
|
+
* an update prompt the user cannot act on is worse than no prompt.
|
|
179
|
+
*
|
|
180
|
+
* @param installed - Output of the `codex --version` probe, or null.
|
|
181
|
+
* @param file - What {@link readCodexVersionFile} recovered.
|
|
182
|
+
*/
|
|
183
|
+
export declare function evaluateCodexUpdate(installed: string | null, file: CodexVersionFile): CodexUpdateStatus;
|
|
184
|
+
//# sourceMappingURL=codex-version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-version.d.ts","sourceRoot":"","sources":["../../../src/lib/updates/codex-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AAQH;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;AAa3E,0EAA0E;AAC1E,eAAO,MAAM,sBAAsB,iBAAiB,CAAC;AAErD;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,QAAY,CAAC;AAEtD,qEAAqE;AACrE,MAAM,WAAW,gBAAgB;IAC/B,oEAAoE;IACpE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,qEAAqE;IACrE,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,wEAAwE;IACxE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;OAGG;IACH,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,2EAA2E;IAC3E,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,iEAAiE;AACjE,eAAO,MAAM,wBAAwB,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAKnE,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,GAAE,eAA6B,GAAG,MAAM,GAAG,IAAI,CAS5F;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,GAAE,eAA6B,GAAG,MAAM,GAAG,IAAI,CAGzF;AASD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,eAAe,CAAA;CAAO,GACrD,gBAAgB,CA2BlB;AAED,qDAAqD;AACrD,MAAM,WAAW,iBAAiB;IAChC,yEAAyE;IACzE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,oEAAoE;IACpE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gDAAgD;IAChD,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,2EAA2E;IAC3E,eAAe,EAAE,OAAO,CAAC;IACzB;;;;;;;;;;;;;;;;OAgBG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAC1B,4EAA4E;IAC5E,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;CAC/B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,IAAI,EAAE,gBAAgB,GACrB,iBAAiB,CAiBnB"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* `~/.codex/version.json` — what codex itself already knows about its updates
|
|
4
|
+
* (Issue #2069).
|
|
5
|
+
*
|
|
6
|
+
* ## Why a file rather than a request
|
|
7
|
+
*
|
|
8
|
+
* codex runs its own release check and writes the answer next to its config:
|
|
9
|
+
*
|
|
10
|
+
* ```json
|
|
11
|
+
* {"latest_version":"0.151.0","last_checked_at":"2026-08-30T15:12:18.082219Z","dismissed_version":null}
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* So "is there a newer codex?" is answerable with a `readFileSync` and no
|
|
15
|
+
* network at all. That is the whole reason this module exists rather than a
|
|
16
|
+
* registry query: `GET /api/agents/versions` is rendered on a settings screen
|
|
17
|
+
* and inside the agent pane, and #1913's rule — do not put a network round trip
|
|
18
|
+
* on a surface that renders a list — applies to a fetch exactly as it applies to
|
|
19
|
+
* a child process. The trade is that the answer is only as fresh as the last
|
|
20
|
+
* time codex itself looked, which is the correct freshness: it is codex's own
|
|
21
|
+
* notion of "you are behind", the same one its TUI banner uses.
|
|
22
|
+
*
|
|
23
|
+
* ## Fail-open, in every direction
|
|
24
|
+
*
|
|
25
|
+
* The file is written by another program, on its own schedule, in a format it
|
|
26
|
+
* owns. It is legitimately **absent** (a fresh install, a codex that has never
|
|
27
|
+
* run), legitimately **null-valued** (`dismissed_version` is null until the user
|
|
28
|
+
* dismisses a banner), and it can be a half-written temp file caught mid-rename.
|
|
29
|
+
* None of those is an error here: every failure resolves to
|
|
30
|
+
* {@link EMPTY_CODEX_VERSION_FILE} and the caller reports "no update known",
|
|
31
|
+
* which is exactly what the surfaces render when codex is not installed either.
|
|
32
|
+
* The acceptance criterion for this Issue names that behaviour directly —
|
|
33
|
+
* 「`version.json` が無い / 壊れている環境で落ちない」— and
|
|
34
|
+
* `tests/unit/updates/codex-version-2069.test.ts` pins it case by case.
|
|
35
|
+
*
|
|
36
|
+
* ## `$CODEX_HOME`: why it is resolved here, and where the two rules diverge
|
|
37
|
+
*
|
|
38
|
+
* `lib/hooks/sources/codex/hooks-config.getCodexHome()` answers the same
|
|
39
|
+
* question, and this module cannot call it: that function reaches `@/lib/logger`
|
|
40
|
+
* through `config/safe-directory`, and `tsconfig.cli.json` resets `"paths"` to
|
|
41
|
+
* `{}` — so one alias import anywhere in this module's transitive closure breaks
|
|
42
|
+
* `npm run build:cli` with TS2307 (the #1933 defect PR #1991 fixed), and
|
|
43
|
+
* `commandmate agents update` puts this file in the CLI's closure. The variable
|
|
44
|
+
* NAME therefore exists in two files, and
|
|
45
|
+
* `tests/unit/updates/codex-home-parity-2069.test.ts` is the join: it imports
|
|
46
|
+
* both and fails if the spellings or the shared rules ever drift.
|
|
47
|
+
*
|
|
48
|
+
* The rules are deliberately identical except for one case, and that case is a
|
|
49
|
+
* correctness fix rather than a divergence for its own sake:
|
|
50
|
+
*
|
|
51
|
+
* | `$CODEX_HOME` | hooks-config | here |
|
|
52
|
+
* |--------------------------|-------------------------------------|---------------------|
|
|
53
|
+
* | unset | `~/.codex` | `~/.codex` |
|
|
54
|
+
* | absolute | that path | that path |
|
|
55
|
+
* | inside `/proc`/`/sys`/`/dev` | `~/.codex` (#1774) | `~/.codex` |
|
|
56
|
+
* | **relative** | passed through **verbatim** | **null = unknown** |
|
|
57
|
+
*
|
|
58
|
+
* `resolveSafeDirectory` returns a relative candidate unchanged, and
|
|
59
|
+
* `hooks-config` puts that value on codex's own launch line — so codex resolves
|
|
60
|
+
* it against **the agent's worktree cwd**, and `CODEX_HOME=.codex-shared` means
|
|
61
|
+
* codex writes `<worktree>/.codex-shared/version.json`. This process is not in
|
|
62
|
+
* that worktree and, with several worktrees open, cannot say which one was
|
|
63
|
+
* meant. Falling back to `~/.codex` there is the one genuinely bad answer: it
|
|
64
|
+
* is not "no data", it is an unrelated install's version, reported with the
|
|
65
|
+
* same confidence as a real reading. So a relative value resolves to null and
|
|
66
|
+
* every surface renders "no update information", which is what they already
|
|
67
|
+
* render when codex has never run.
|
|
68
|
+
*
|
|
69
|
+
* @module lib/updates/codex-version
|
|
70
|
+
*/
|
|
71
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
72
|
+
exports.EMPTY_CODEX_VERSION_FILE = exports.CODEX_VERSION_FILE_MAX_BYTES = exports.CODEX_VERSION_FILENAME = void 0;
|
|
73
|
+
exports.getCodexHomeForVersionRead = getCodexHomeForVersionRead;
|
|
74
|
+
exports.getCodexVersionFilePath = getCodexVersionFilePath;
|
|
75
|
+
exports.readCodexVersionFile = readCodexVersionFile;
|
|
76
|
+
exports.evaluateCodexUpdate = evaluateCodexUpdate;
|
|
77
|
+
const fs_1 = require("fs");
|
|
78
|
+
const os_1 = require("os");
|
|
79
|
+
const path_1 = require("path");
|
|
80
|
+
const system_directories_1 = require("../../config/system-directories");
|
|
81
|
+
const version_probes_1 = require("../detection/version-probes");
|
|
82
|
+
/**
|
|
83
|
+
* codex's own config-directory override.
|
|
84
|
+
*
|
|
85
|
+
* NOT exported: `lib/hooks/sources/codex/hooks-config` already exports this name
|
|
86
|
+
* and that one is the repository's single public spelling. A second exported
|
|
87
|
+
* `CODEX_HOME_ENV_VAR` is how two modules end up disagreeing about it, and the
|
|
88
|
+
* `@/`-import rule above is the only reason the literal exists twice at all.
|
|
89
|
+
* `tests/unit/updates/codex-home-parity-2069.test.ts` pins the two together.
|
|
90
|
+
*/
|
|
91
|
+
const CODEX_HOME_ENV_VAR = 'CODEX_HOME';
|
|
92
|
+
/** The file codex writes its release check into, inside `$CODEX_HOME`. */
|
|
93
|
+
exports.CODEX_VERSION_FILENAME = 'version.json';
|
|
94
|
+
/**
|
|
95
|
+
* Largest `version.json` this module will parse.
|
|
96
|
+
*
|
|
97
|
+
* Three short fields; anything past this is not the file we mean. A cap rather
|
|
98
|
+
* than trust because the read happens on a request path and the file is written
|
|
99
|
+
* by another process — an oversized file is discarded, not truncated and parsed.
|
|
100
|
+
*/
|
|
101
|
+
exports.CODEX_VERSION_FILE_MAX_BYTES = 64 * 1024;
|
|
102
|
+
/** The answer for every failure: "codex has told us nothing". */
|
|
103
|
+
exports.EMPTY_CODEX_VERSION_FILE = {
|
|
104
|
+
latestVersion: null,
|
|
105
|
+
dismissedVersion: null,
|
|
106
|
+
lastCheckedAt: null,
|
|
107
|
+
readable: false,
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* The directory codex keeps its state in, as seen from THIS process.
|
|
111
|
+
*
|
|
112
|
+
* See the table in the module header for the four cases. The one that returns
|
|
113
|
+
* null is a relative `$CODEX_HOME`: `hooks-config` forwards such a value to
|
|
114
|
+
* codex verbatim, codex resolves it against the agent's worktree cwd, and this
|
|
115
|
+
* process has no worktree — so the honest answer is "cannot tell", not
|
|
116
|
+
* `~/.codex`.
|
|
117
|
+
*
|
|
118
|
+
* @param env - Environment to read. Injectable so tests need no `process.env`
|
|
119
|
+
* mutation.
|
|
120
|
+
* @returns An absolute directory path, or null when it cannot be determined.
|
|
121
|
+
*/
|
|
122
|
+
function getCodexHomeForVersionRead(env = process.env) {
|
|
123
|
+
const fallback = (0, path_1.join)((0, os_1.homedir)(), '.codex');
|
|
124
|
+
const configured = env[CODEX_HOME_ENV_VAR];
|
|
125
|
+
if (!configured)
|
|
126
|
+
return fallback;
|
|
127
|
+
// Matches `resolveSafeDirectory`: a /proc, /sys or /dev path is refused and
|
|
128
|
+
// the built-in default is used, on both sides of the join.
|
|
129
|
+
if ((0, system_directories_1.isVirtualFilesystemPath)(configured))
|
|
130
|
+
return fallback;
|
|
131
|
+
if (!(0, path_1.isAbsolute)(configured))
|
|
132
|
+
return null;
|
|
133
|
+
return configured;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Absolute path of the file codex writes its release check into, or null when
|
|
137
|
+
* {@link getCodexHomeForVersionRead} cannot determine the directory.
|
|
138
|
+
*/
|
|
139
|
+
function getCodexVersionFilePath(env = process.env) {
|
|
140
|
+
const home = getCodexHomeForVersionRead(env);
|
|
141
|
+
return home === null ? null : (0, path_1.join)(home, exports.CODEX_VERSION_FILENAME);
|
|
142
|
+
}
|
|
143
|
+
/** Read one field as a normalized version, tolerating null / wrong types. */
|
|
144
|
+
function readVersionField(raw, key) {
|
|
145
|
+
const value = raw[key];
|
|
146
|
+
if (typeof value !== 'string')
|
|
147
|
+
return null;
|
|
148
|
+
return (0, version_probes_1.parseCliVersion)(value);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Read `$CODEX_HOME/version.json`.
|
|
152
|
+
*
|
|
153
|
+
* Never throws and never rejects: see the module header. A file that parses but
|
|
154
|
+
* carries junk in a field yields null for **that field only**, so a codex build
|
|
155
|
+
* that adds or renames a key still gives up whatever the rest of it says.
|
|
156
|
+
*
|
|
157
|
+
* @param options.path - Read this file instead of the resolved default (tests,
|
|
158
|
+
* and an isolated-HOME verification run).
|
|
159
|
+
* @param options.env - Environment used to resolve the default path.
|
|
160
|
+
*/
|
|
161
|
+
function readCodexVersionFile(options = {}) {
|
|
162
|
+
const path = options.path ?? getCodexVersionFilePath(options.env);
|
|
163
|
+
const empty = { ...exports.EMPTY_CODEX_VERSION_FILE, path };
|
|
164
|
+
// Unknown directory (a relative `$CODEX_HOME`): read nothing rather than read
|
|
165
|
+
// the wrong install's file. See the table in the module header.
|
|
166
|
+
if (path === null)
|
|
167
|
+
return empty;
|
|
168
|
+
try {
|
|
169
|
+
const stat = (0, fs_1.statSync)(path);
|
|
170
|
+
if (!stat.isFile())
|
|
171
|
+
return empty;
|
|
172
|
+
if (stat.size > exports.CODEX_VERSION_FILE_MAX_BYTES)
|
|
173
|
+
return empty;
|
|
174
|
+
const parsed = JSON.parse((0, fs_1.readFileSync)(path, 'utf-8'));
|
|
175
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
|
|
176
|
+
return empty;
|
|
177
|
+
const raw = parsed;
|
|
178
|
+
return {
|
|
179
|
+
latestVersion: readVersionField(raw, 'latest_version'),
|
|
180
|
+
dismissedVersion: readVersionField(raw, 'dismissed_version'),
|
|
181
|
+
lastCheckedAt: typeof raw.last_checked_at === 'string' ? raw.last_checked_at : null,
|
|
182
|
+
path,
|
|
183
|
+
readable: true,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
return empty;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Combine the installed version with codex's own release check.
|
|
192
|
+
*
|
|
193
|
+
* Both halves are "no answer"-tolerant, and every kind of no-answer resolves to
|
|
194
|
+
* `updateAvailable: false` — not installed, never checked, unparseable. That is
|
|
195
|
+
* the same posture `DetectorFreshnessRow.stale` takes, and for the same reason:
|
|
196
|
+
* an update prompt the user cannot act on is worse than no prompt.
|
|
197
|
+
*
|
|
198
|
+
* @param installed - Output of the `codex --version` probe, or null.
|
|
199
|
+
* @param file - What {@link readCodexVersionFile} recovered.
|
|
200
|
+
*/
|
|
201
|
+
function evaluateCodexUpdate(installed, file) {
|
|
202
|
+
const updateAvailable = installed !== null &&
|
|
203
|
+
file.latestVersion !== null &&
|
|
204
|
+
(0, version_probes_1.compareCliVersions)(file.latestVersion, installed) > 0;
|
|
205
|
+
return {
|
|
206
|
+
installed,
|
|
207
|
+
latestVersion: file.latestVersion,
|
|
208
|
+
dismissedVersion: file.dismissedVersion,
|
|
209
|
+
updateAvailable,
|
|
210
|
+
dismissedInCodex: updateAvailable &&
|
|
211
|
+
file.dismissedVersion !== null &&
|
|
212
|
+
file.dismissedVersion === file.latestVersion,
|
|
213
|
+
source: file.readable ? 'version.json' : null,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loader and validator for `.commandmate/verify.yaml`.
|
|
3
|
+
*
|
|
4
|
+
* Canonical spec: docs/design/verification-config.md
|
|
5
|
+
* Phase 0 reference implementation: .claude/skills/cmate-verify/scripts/verify-run.sh
|
|
6
|
+
*
|
|
7
|
+
* Server-only: reads from disk, so import this from API routes / CLI only.
|
|
8
|
+
*/
|
|
9
|
+
export interface VerifyGate {
|
|
10
|
+
id: string;
|
|
11
|
+
command: string;
|
|
12
|
+
timeoutSec: number;
|
|
13
|
+
/**
|
|
14
|
+
* Name of a machine-wide lock this gate must hold while it runs (Issue #1771).
|
|
15
|
+
*
|
|
16
|
+
* Declares "only one of these may run on this machine at a time", which a
|
|
17
|
+
* gate owning a fixed port, database or emulator needs and which command and
|
|
18
|
+
* timeout cannot express. Two parallel worktrees running such a gate at once
|
|
19
|
+
* make the second fail on the resource, and `GATE e2e FAIL exit=1` reads
|
|
20
|
+
* exactly like the change being broken.
|
|
21
|
+
*
|
|
22
|
+
* Optional rather than `string | null`: contracts store their gate list as
|
|
23
|
+
* JSON in `tasks.contract_json` and are read back with `JSON.parse`, never
|
|
24
|
+
* re-validated, so every row written before this field existed simply has no
|
|
25
|
+
* key — and `undefined` is the honest reading of that.
|
|
26
|
+
*/
|
|
27
|
+
mutex?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Re-run this gate once, in the same tree, when its command exits non-zero
|
|
30
|
+
* (Issue #1772). `1` opts in; `0` (the default) is the behaviour every gate
|
|
31
|
+
* had before this field existed.
|
|
32
|
+
*
|
|
33
|
+
* Only 0 and 1 are accepted. A gate allowed three or four attempts stops
|
|
34
|
+
* being a gate: enough re-runs turn any red into a green, and the value of
|
|
35
|
+
* this field is precisely that it cannot. One retry answers the one question
|
|
36
|
+
* worth asking — "does this reproduce in the same tree?" — and nothing more.
|
|
37
|
+
*
|
|
38
|
+
* Optional for the same reason {@link VerifyGate.mutex} is: contracts store
|
|
39
|
+
* their gate list as JSON in `tasks.contract_json` and read it back with
|
|
40
|
+
* `JSON.parse` without re-validating, so a row written before this field
|
|
41
|
+
* existed simply has no key.
|
|
42
|
+
*/
|
|
43
|
+
retryOnFail?: number;
|
|
44
|
+
/**
|
|
45
|
+
* Whether a FLAKY outcome — failed, then passed on the retry — counts as a
|
|
46
|
+
* pass (Issue #1772). Default false: the gate does not get weaker by opting
|
|
47
|
+
* into a retry, it only gets a name for what happened.
|
|
48
|
+
*
|
|
49
|
+
* Declared per gate rather than per repository because it is a statement
|
|
50
|
+
* about *this* gate's failure mode. `unit` failing on a random UUID that
|
|
51
|
+
* happens to contain a forbidden substring is noise; `e2e` failing once and
|
|
52
|
+
* passing once is usually a real race in the product. An `options`-level flag
|
|
53
|
+
* would force those two into one answer, and would also be declarable for
|
|
54
|
+
* gates that never opted into a retry, where it can never fire.
|
|
55
|
+
*
|
|
56
|
+
* `true` without `retryOnFail: 1` is a config error rather than a no-op: no
|
|
57
|
+
* retry means no FLAKY, so the declaration could never take effect.
|
|
58
|
+
*/
|
|
59
|
+
flakyIsPass?: boolean;
|
|
60
|
+
}
|
|
61
|
+
export interface VerifyOptions {
|
|
62
|
+
/** null when unset; the caller resolves the repository default branch. */
|
|
63
|
+
baseRef: string | null;
|
|
64
|
+
skipInPrimaryCheckout: boolean;
|
|
65
|
+
maxLogTailBytes: number;
|
|
66
|
+
/**
|
|
67
|
+
* Whether `work-evidence` demands a COMMIT rather than any change at all
|
|
68
|
+
* (Issue #1628, D-4). Default false — the gate's job has always been "is
|
|
69
|
+
* there work here to verify", and a dirty tree answers that.
|
|
70
|
+
*
|
|
71
|
+
* Turn it on in a repository whose delegations end in a commit (the task
|
|
72
|
+
* contract preamble tells agents "未 commit の作業は未完了とみなされる", and
|
|
73
|
+
* without this the gate happily passes `commits=0 uncommitted=1`, so
|
|
74
|
+
* `RESULT passed` proved nothing about the commit). Repository-wide by
|
|
75
|
+
* design: it is a property of how the repository is worked, not of one run.
|
|
76
|
+
*/
|
|
77
|
+
requireCommit: boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Whether the built-in `env-clean` gate judges this repository's runs
|
|
80
|
+
* (Issue #1740). Default false — every contract written before the gate
|
|
81
|
+
* existed must keep its verdict, and a gate that starts failing runs the day
|
|
82
|
+
* it lands is a gate that gets switched off again.
|
|
83
|
+
*
|
|
84
|
+
* Turning it on has a second effect: baselines are only recorded (at task
|
|
85
|
+
* creation) while it is on, because a snapshot of the machine is a side effect
|
|
86
|
+
* and the off state must have none. A run without a baseline reports UNKNOWN,
|
|
87
|
+
* never a pass.
|
|
88
|
+
*/
|
|
89
|
+
requireEnvClean: boolean;
|
|
90
|
+
}
|
|
91
|
+
export interface VerifyConfig {
|
|
92
|
+
version: 1;
|
|
93
|
+
gates: VerifyGate[];
|
|
94
|
+
options: VerifyOptions;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Built-in gate that answers "is there any work here to verify?".
|
|
98
|
+
*
|
|
99
|
+
* Declared here rather than in the runner so modules that only reason *about*
|
|
100
|
+
* gate selection (task contracts) can name it without importing the engine.
|
|
101
|
+
*/
|
|
102
|
+
export declare const WORK_EVIDENCE_GATE_ID = "work-evidence";
|
|
103
|
+
/**
|
|
104
|
+
* Built-in gate that reconciles the changed files against the contract's
|
|
105
|
+
* `scope.allow` / `scope.deny` (#1546). Declared alongside work-evidence for the
|
|
106
|
+
* same reason: `lib/tasks/contract-message.ts` has to name it while resolving a
|
|
107
|
+
* contract's gate list, and must not pull the engine in to do so.
|
|
108
|
+
*/
|
|
109
|
+
export declare const SCOPE_GATE_ID = "scope";
|
|
110
|
+
/**
|
|
111
|
+
* Built-in gate that reconciles the *machine* against the snapshot taken when
|
|
112
|
+
* the task was created (#1740): listening CommandMate servers, `mcbd-*` tmux
|
|
113
|
+
* sessions, `$HOME` and `~/.commandmate`. `scope` answers what a delegation
|
|
114
|
+
* changed inside the repository; this answers what it changed outside one.
|
|
115
|
+
*/
|
|
116
|
+
export declare const ENV_CLEAN_GATE_ID = "env-clean";
|
|
117
|
+
/** Gate IDs reserved for built-in gates; using one in `gates` is a config error. */
|
|
118
|
+
export declare const RESERVED_GATE_IDS: readonly ["work-evidence", "scope", "env-clean"];
|
|
119
|
+
export declare const VERIFY_CONFIG_RELATIVE_PATH = ".commandmate/verify.yaml";
|
|
120
|
+
/**
|
|
121
|
+
* Gate ids a default full run executes, in the order the runner records them
|
|
122
|
+
* (Issue #2061).
|
|
123
|
+
*
|
|
124
|
+
* The Verification pane needs a denominator while a run is in flight — gate
|
|
125
|
+
* rows are created as each gate starts, so "3 gates recorded" is progress, not
|
|
126
|
+
* a total. Declared here rather than in the pane because the composition is the
|
|
127
|
+
* runner's: `work-evidence`, then `scope`, then `env-clean` only when a
|
|
128
|
+
* declaration switched it on, then verify.yaml's own gates in file order.
|
|
129
|
+
*
|
|
130
|
+
* A *default* run, which is what the pane's "run verification" button starts.
|
|
131
|
+
* A run narrowed with `--gates` / `gateIds` executes a subset of this.
|
|
132
|
+
*
|
|
133
|
+
* @param contractGates gate definitions the worktree's execution contract
|
|
134
|
+
* carries (#1791). They run after verify.yaml's, exactly as
|
|
135
|
+
* `declaredGates()` orders them, and leaving them out understated both
|
|
136
|
+
* the pane's progress denominator and — since #2063 made the list
|
|
137
|
+
* selectable — which gates an operator is allowed to re-run: a run whose
|
|
138
|
+
* only failure was a contract gate offered nothing to re-run at all.
|
|
139
|
+
*/
|
|
140
|
+
export declare function defaultPlannedGateIds(config: VerifyConfig, contractGates?: readonly VerifyGate[]): string[];
|
|
141
|
+
export declare const DEFAULT_TIMEOUT_SEC = 600;
|
|
142
|
+
export declare const DEFAULT_MAX_LOG_TAIL_BYTES = 8192;
|
|
143
|
+
/**
|
|
144
|
+
* Shape a gate id may take, wherever a gate is declared.
|
|
145
|
+
*
|
|
146
|
+
* Exported because the task contract declares gates too (#1791) and names them
|
|
147
|
+
* in `verify.gates`. A second copy of this expression would let the two
|
|
148
|
+
* declaration sites drift into accepting different ids, and a contract gate the
|
|
149
|
+
* runner refuses to resolve is a completion criterion nothing can evaluate.
|
|
150
|
+
*/
|
|
151
|
+
export declare const GATE_ID_PATTERN: RegExp;
|
|
152
|
+
/**
|
|
153
|
+
* Shape a `mutex` name may take (Issue #1771).
|
|
154
|
+
*
|
|
155
|
+
* Wider than {@link GATE_ID_PATTERN} because a mutex names a *resource*, not a
|
|
156
|
+
* gate: two repositories that both bind port 60303 should be able to agree on
|
|
157
|
+
* `port.60303` and be serialized against each other. Narrow enough that the
|
|
158
|
+
* name is safe as a path segment — no separator, no whitespace, nothing a shell
|
|
159
|
+
* re-interprets — because both runners turn it into
|
|
160
|
+
* `~/.commandmate/locks/<name>.lock`.
|
|
161
|
+
*/
|
|
162
|
+
export declare const GATE_MUTEX_PATTERN: RegExp;
|
|
163
|
+
/** Keeps the lock directory name inside every filesystem's limit. */
|
|
164
|
+
export declare const MAX_GATE_MUTEX_LENGTH = 64;
|
|
165
|
+
/**
|
|
166
|
+
* Largest `retryOnFail` a gate may declare (Issue #1772).
|
|
167
|
+
*
|
|
168
|
+
* Deliberately 1, and deliberately a named constant rather than a literal in
|
|
169
|
+
* one `if`: the ceiling is the feature. A gate that may re-run until it passes
|
|
170
|
+
* reports the machine's luck, not the work.
|
|
171
|
+
*/
|
|
172
|
+
export declare const MAX_RETRY_ON_FAIL = 1;
|
|
173
|
+
export declare class VerifyConfigError extends Error {
|
|
174
|
+
readonly issues: string[];
|
|
175
|
+
constructor(issues: string[]);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Validate a list of `{ id, command, timeoutSec }` entries.
|
|
179
|
+
*
|
|
180
|
+
* Shared with the task contract's `verify.gateDefinitions` (#1791), which
|
|
181
|
+
* declares gates in the same shape and must be held to the same constraints —
|
|
182
|
+
* id pattern, reserved ids, duplicates, integer timeout in range. Calling this
|
|
183
|
+
* is what makes "the same constraints" a fact rather than a comment: a contract
|
|
184
|
+
* gate accepted here is one the runner can execute and the report can name.
|
|
185
|
+
*
|
|
186
|
+
* Deliberately does *not* decide whether the list may be absent or empty. That
|
|
187
|
+
* is the caller's rule: verify.yaml requires at least one gate, a contract that
|
|
188
|
+
* declares none is the normal case.
|
|
189
|
+
*
|
|
190
|
+
* @param at path prefix for issue messages (`gates`, `verify.gateDefinitions`)
|
|
191
|
+
* @returns the accepted entries; an entry that produced an issue is dropped so
|
|
192
|
+
* the result never carries a value that failed validation
|
|
193
|
+
*/
|
|
194
|
+
export declare function validateGateEntries(value: unknown, at: string, issues: string[]): VerifyGate[];
|
|
195
|
+
/**
|
|
196
|
+
* Read and validate `<repoPath>/.commandmate/verify.yaml`.
|
|
197
|
+
*
|
|
198
|
+
* @returns the validated config, or null when the file does not exist
|
|
199
|
+
* @throws VerifyConfigError with every violation collected in `issues`
|
|
200
|
+
*/
|
|
201
|
+
export declare function loadVerifyConfig(repoPath: string): VerifyConfig | null;
|
|
202
|
+
//# sourceMappingURL=verify-config.d.ts.map
|
|
@@ -0,0 +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;CAC1B;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;AAYnC,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;AA2OD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAYtE"}
|