commandmate 0.27.1 → 0.28.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/.env.example +28 -0
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +278 -248
- package/.next/app-path-routes-manifest.json +30 -26
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +15 -15
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +32 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route.js +1 -1
- package/.next/server/app/api/app/update/route.js.nft.json +1 -1
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route.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 +32 -1
- 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 +34 -3
- 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 -1
- 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 -1
- 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 +1 -1
- 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 +1 -1
- package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +7 -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 +1 -1
- package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/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/sidebar/group-order/route.js +1 -1
- 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.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 +1 -1
- 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 +1 -1
- 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.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.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-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 +2 -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 -0
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +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 +4 -4
- 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 -0
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -0
- 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 +5 -1
- 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 +6 -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 +7 -3
- 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]/start-polling/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/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 -3
- 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/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]/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/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_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page.js +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route.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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js +1 -1
- 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 +15 -10
- 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 +2 -2
- 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 -26
- package/.next/server/chunks/1058.js +1 -0
- package/.next/server/chunks/1068.js +1 -3
- package/.next/server/chunks/1191.js +13 -0
- package/.next/server/chunks/1296.js +1 -1
- package/.next/server/chunks/1601.js +2 -2
- package/.next/server/chunks/1714.js +7 -0
- package/.next/server/chunks/1886.js +5 -0
- package/.next/server/chunks/1944.js +1 -0
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/221.js +19 -0
- package/.next/server/chunks/222.js +1 -0
- package/.next/server/chunks/2328.js +1 -1
- package/.next/server/chunks/2366.js +1 -0
- package/.next/server/chunks/2404.js +1 -1
- package/.next/server/chunks/243.js +1 -0
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2759.js +1 -1
- package/.next/server/chunks/3346.js +1 -1
- package/.next/server/chunks/3480.js +17 -1
- package/.next/server/chunks/3558.js +1 -0
- package/.next/server/chunks/4299.js +1 -0
- package/.next/server/chunks/4393.js +1 -1
- package/.next/server/chunks/5017.js +1 -1
- package/.next/server/chunks/5089.js +1 -1
- package/.next/server/chunks/5354.js +1 -1
- package/.next/server/chunks/5571.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6274.js +11 -10
- package/.next/server/chunks/6285.js +1 -1
- package/.next/server/chunks/6337.js +1 -0
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/663.js +78 -0
- package/.next/server/chunks/7472.js +1 -1
- package/.next/server/chunks/7824.js +1 -0
- package/.next/server/chunks/7905.js +1 -0
- package/.next/server/chunks/880.js +1 -1
- package/.next/server/chunks/8807.js +84 -18
- package/.next/server/chunks/9130.js +5 -0
- package/.next/server/chunks/9328.js +1 -1
- package/.next/server/chunks/9358.js +1 -1
- package/.next/server/chunks/9508.js +1 -1
- package/.next/server/chunks/9584.js +1 -0
- package/.next/server/chunks/9627.js +274 -0
- package/.next/server/chunks/9798.js +2 -0
- package/.next/server/chunks/9938.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/1188-8567ee5ecfef02ee.js +1 -0
- package/.next/static/chunks/3361-aa1b6e7c1d7eeeb4.js +1 -0
- package/.next/static/chunks/3968-8d8ca15657748bfb.js +1 -0
- package/.next/static/chunks/6381-d921ab728eda1191.js +1 -0
- package/.next/static/chunks/app/api/app/update/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/assistant/conversation/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/assistant/current-output/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/assistant/messages/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/assistant/session/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/assistant/start/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/assistant/terminal/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/assistant/tools/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/skills/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/templates/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/todos/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/more/page-03867ab635d197c7.js +1 -0
- package/.next/static/chunks/app/proxy/[...path]/route-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/review/page-9a6d18ddcccbb63c.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/layout-9247d6b9d647f750.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-27b7cb2e77099eec.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/terminal/page-00ad5d9a62a71cab.js +1 -0
- package/.next/static/css/98722bc4152cedcc.css +1 -0
- package/.next/trace +13 -13
- package/.next/types/app/api/worktrees/[id]/instances/opencode/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/opencode/diff/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/opencode/session/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/opencode/share/route.ts +347 -0
- package/.next/types/routes.d.ts +5 -1
- package/.next/types/validator.ts +36 -0
- package/README.md +9 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +66 -0
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +46 -1
- package/dist/cli/commands/interrupt.d.ts +25 -0
- package/dist/cli/commands/interrupt.d.ts.map +1 -0
- package/dist/cli/commands/interrupt.js +146 -0
- package/dist/cli/commands/report.d.ts.map +1 -1
- package/dist/cli/commands/report.js +11 -4
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +146 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +104 -0
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +39 -1
- package/dist/cli/config/agent-target-options.d.ts +12 -0
- package/dist/cli/config/agent-target-options.d.ts.map +1 -1
- package/dist/cli/config/agent-target-options.js +15 -1
- 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 +34 -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 +375 -0
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/index.d.ts +63 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/types/index.js +31 -1
- package/dist/cli/utils/daemon.d.ts.map +1 -1
- package/dist/cli/utils/daemon.js +3 -0
- package/dist/cli/utils/env-setup.d.ts +24 -0
- package/dist/cli/utils/env-setup.d.ts.map +1 -1
- package/dist/cli/utils/env-setup.js +70 -0
- package/dist/cli/utils/vapid-keygen.d.ts +74 -0
- package/dist/cli/utils/vapid-keygen.d.ts.map +1 -0
- package/dist/cli/utils/vapid-keygen.js +111 -0
- package/dist/lib/cli-tools/types.d.ts +11 -1
- package/dist/lib/cli-tools/types.d.ts.map +1 -1
- package/dist/lib/detection/tools/verified-against.d.ts +14 -3
- package/dist/lib/detection/tools/verified-against.d.ts.map +1 -1
- package/dist/lib/detection/tools/verified-against.js +14 -3
- package/dist/lib/push/vapid.d.ts +178 -0
- package/dist/lib/push/vapid.d.ts.map +1 -0
- package/dist/lib/push/vapid.js +293 -0
- package/dist/lib/server/localhost-self-check.d.ts +203 -0
- package/dist/lib/server/localhost-self-check.d.ts.map +1 -0
- package/dist/lib/server/localhost-self-check.js +333 -0
- package/dist/server/locales/en/notifications.json +23 -1
- package/dist/server/locales/ja/notifications.json +23 -1
- package/dist/server/server.js +103 -0
- package/dist/server/src/config/image-extensions.js +244 -0
- package/dist/server/src/config/opencode-constants.js +69 -0
- package/dist/server/src/config/tmux-pane-config.js +100 -1
- package/dist/server/src/lib/cli-tools/base.js +33 -48
- package/dist/server/src/lib/cli-tools/opencode-config.js +12 -0
- package/dist/server/src/lib/cli-tools/opencode.js +435 -7
- package/dist/server/src/lib/cli-tools/start-availability.js +160 -0
- package/dist/server/src/lib/cmate-cli-tool-parser.js +328 -7
- package/dist/server/src/lib/cmate-parser.js +12 -0
- package/dist/server/src/lib/db/agent-instances-db.js +129 -0
- package/dist/server/src/lib/db/agent-session-cost-db.js +204 -0
- package/dist/server/src/lib/db/agent-session-cost-sampler.js +194 -0
- package/dist/server/src/lib/db/chat-db.js +33 -0
- package/dist/server/src/lib/db/db-instance.js +11 -0
- package/dist/server/src/lib/db/db.js +8 -3
- package/dist/server/src/lib/db/migrations/index.js +6 -0
- package/dist/server/src/lib/db/migrations/runner.js +1 -1
- package/dist/server/src/lib/db/migrations/v57-push-subscription-defaults-notice.js +54 -0
- package/dist/server/src/lib/db/migrations/v58-agent-session-costs.js +100 -0
- package/dist/server/src/lib/db/migrations/v59-opencode-instance-settings.js +71 -0
- package/dist/server/src/lib/db/push-subscriptions-db.js +56 -5
- package/dist/server/src/lib/detection/cli-patterns.js +17 -6
- package/dist/server/src/lib/detection/excerpt.js +48 -0
- package/dist/server/src/lib/detection/model-info-extractor.js +26 -3
- package/dist/server/src/lib/detection/opencode-modal-overlay.js +400 -0
- package/dist/server/src/lib/detection/opencode-pane-obstruction.js +181 -0
- package/dist/server/src/lib/detection/status-detector.js +7 -0
- package/dist/server/src/lib/detection/status-reason.js +20 -0
- package/dist/server/src/lib/detection/terminal-columns.js +94 -0
- package/dist/server/src/lib/detection/tools/opencode/detect.js +43 -0
- package/dist/server/src/lib/detection/tools/opencode/prompt.js +20 -0
- package/dist/server/src/lib/detection/tools/verified-against.js +14 -3
- package/dist/server/src/lib/detection/upstream-faults.js +7 -22
- package/dist/server/src/lib/hooks/agent-session-telemetry.js +324 -0
- package/dist/server/src/lib/hooks/pending-decision-kind.js +72 -0
- package/dist/server/src/lib/hooks/sources/define-source.js +88 -0
- package/dist/server/src/lib/hooks/sources/opencode/client.js +907 -2
- package/dist/server/src/lib/hooks/sources/opencode/diff.js +336 -0
- package/dist/server/src/lib/hooks/sources/opencode/history.js +480 -0
- package/dist/server/src/lib/hooks/sources/opencode/ingest.js +76 -7
- package/dist/server/src/lib/hooks/sources/opencode/launch-settings.js +222 -0
- package/dist/server/src/lib/hooks/sources/opencode/mappers.js +31 -0
- package/dist/server/src/lib/hooks/sources/opencode/payloads.js +45 -0
- package/dist/server/src/lib/hooks/sources/opencode/ports.js +16 -0
- package/dist/server/src/lib/hooks/sources/opencode/push.js +307 -0
- package/dist/server/src/lib/hooks/sources/opencode/reattach.js +284 -0
- package/dist/server/src/lib/hooks/sources/opencode/runtime.js +165 -2
- package/dist/server/src/lib/hooks/sources/opencode/source.js +46 -2
- package/dist/server/src/lib/hooks/sources/opencode/subscription.js +407 -4
- package/dist/server/src/lib/hooks/sources/opencode/transcript.js +383 -0
- package/dist/server/src/lib/hooks/structured-decision-response.js +460 -0
- package/dist/server/src/lib/job-executor.js +43 -20
- package/dist/server/src/lib/polling/response-checker.js +43 -16
- package/dist/server/src/lib/polling/structured-history-gate.js +75 -0
- package/dist/server/src/lib/prompt-answer-sender.js +153 -2
- package/dist/server/src/lib/push/delivery-health.js +237 -0
- package/dist/server/src/lib/push/failure-push-notifier.js +109 -7
- package/dist/server/src/lib/push/index.js +25 -1
- package/dist/server/src/lib/push/prompt-card-state.js +254 -14
- package/dist/server/src/lib/push/push-sender.js +63 -12
- package/dist/server/src/lib/push/resolution-push-notifier.js +15 -3
- package/dist/server/src/lib/push/vapid.js +264 -5
- package/dist/server/src/lib/push/waiting-push-notifier.js +7 -0
- package/dist/server/src/lib/server/localhost-self-check.js +333 -0
- package/dist/server/src/lib/session/agent-event-state.js +169 -4
- package/dist/server/src/lib/session/claude-executor.js +152 -15
- package/dist/server/src/lib/session/current-output-builder.js +182 -15
- package/dist/server/src/lib/session/opencode-session-api.js +214 -0
- package/dist/server/src/lib/session/opencode-session-recall.js +168 -0
- package/dist/server/src/lib/session/opencode-session-store.js +274 -0
- package/dist/server/src/lib/session/provisional-turn.js +54 -1
- package/dist/server/src/lib/session/send-user-message.js +6 -5
- package/dist/server/src/lib/session/structured-prompt.js +53 -2
- package/dist/server/src/lib/skills/compatibility-matrix.js +50 -1
- package/dist/server/src/lib/tmux/tmux.js +74 -4
- package/dist/server/src/lib/verification/gate-runner.js +71 -8
- package/dist/server/src/types/agent-session.js +63 -0
- package/dist/server/src/types/agent-transcript.js +80 -0
- package/dist/server/src/types/opencode-export.js +228 -0
- package/dist/server/src/types/opencode-instance-settings.js +140 -0
- package/dist/server/src/types/opencode-share.js +111 -0
- package/dist/server/src/types/terminal-keys.js +69 -1
- package/dist/types/cli-tool-contracts.d.ts +48 -0
- package/dist/types/cli-tool-contracts.d.ts.map +1 -1
- package/dist/types/terminal-keys.d.ts +89 -0
- package/dist/types/terminal-keys.d.ts.map +1 -0
- package/dist/types/terminal-keys.js +105 -0
- package/package.json +1 -1
- package/.next/server/chunks/1029.js +0 -1
- package/.next/server/chunks/1239.js +0 -1
- package/.next/server/chunks/1538.js +0 -7
- package/.next/server/chunks/2546.js +0 -1
- package/.next/server/chunks/2689.js +0 -13
- package/.next/server/chunks/3292.js +0 -1
- package/.next/server/chunks/3417.js +0 -1
- package/.next/server/chunks/3736.js +0 -1
- package/.next/server/chunks/4423.js +0 -1
- package/.next/server/chunks/4444.js +0 -32
- package/.next/server/chunks/4565.js +0 -3
- package/.next/server/chunks/467.js +0 -1
- package/.next/server/chunks/4905.js +0 -5
- package/.next/server/chunks/552.js +0 -19
- package/.next/server/chunks/5998.js +0 -74
- package/.next/server/chunks/6919.js +0 -1
- package/.next/server/chunks/7970.js +0 -229
- package/.next/server/chunks/8536.js +0 -1
- package/.next/server/chunks/9284.js +0 -1
- package/.next/static/chunks/3361-5d6e93fba8a92bc1.js +0 -1
- package/.next/static/chunks/6381-8cfe50a5ca5425b1.js +0 -1
- package/.next/static/chunks/8521-c43994fb58501d13.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/assistant/conversation/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/assistant/current-output/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/assistant/messages/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/assistant/session/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/assistant/start/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/assistant/terminal/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/assistant/tools/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/capabilities/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/skills/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/templates/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/todos/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/more/page-3266dfa945972649.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/review/page-8f63aff862fee421.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-6add0d88e2828c23.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-f7b3dfbe757dc6b8.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/terminal/page-a75fe180a7233b2b.js +0 -1
- package/.next/static/css/928e5a8830fbf997.css +0 -1
- /package/.next/static/{9IXgWfBUtnEnRqnbmErTp → 0GHE2JGlFzqvSBZAcBFSt}/_buildManifest.js +0 -0
- /package/.next/static/{9IXgWfBUtnEnRqnbmErTp → 0GHE2JGlFzqvSBZAcBFSt}/_ssgManifest.js +0 -0
|
@@ -20,6 +20,11 @@ exports.countAgentInstances = countAgentInstances;
|
|
|
20
20
|
exports.setAgentInstances = setAgentInstances;
|
|
21
21
|
exports.addAgentInstance = addAgentInstance;
|
|
22
22
|
exports.removeAgentInstance = removeAgentInstance;
|
|
23
|
+
exports.getOpencodeInstanceSettings = getOpencodeInstanceSettings;
|
|
24
|
+
exports.getOpencodeInstanceSettingsByWorktree = getOpencodeInstanceSettingsByWorktree;
|
|
25
|
+
exports.setOpencodeInstanceSettings = setOpencodeInstanceSettings;
|
|
26
|
+
exports.pruneOpencodeInstanceSettings = pruneOpencodeInstanceSettings;
|
|
27
|
+
const opencode_instance_settings_1 = require("../../types/opencode-instance-settings");
|
|
23
28
|
const types_1 = require("../../lib/cli-tools/types");
|
|
24
29
|
/**
|
|
25
30
|
* Thrown when an operation would exceed MAX_AGENT_INSTANCES for a worktree.
|
|
@@ -190,6 +195,10 @@ function setAgentInstances(db, worktreeId, instances) {
|
|
|
190
195
|
const now = Date.now();
|
|
191
196
|
const replace = db.transaction(() => {
|
|
192
197
|
db.prepare(`DELETE FROM agent_instances WHERE worktree_id = ?`).run(worktreeId);
|
|
198
|
+
// Issue #2048: the settings table is keyed on an instance id and this write
|
|
199
|
+
// is a full replace, so an instance dropped from the roster would otherwise
|
|
200
|
+
// leave its opencode settings behind for whoever next claimed that id.
|
|
201
|
+
pruneOpencodeInstanceSettings(db, worktreeId, instances.map((instance) => instance.id));
|
|
193
202
|
const insertStmt = db.prepare(`
|
|
194
203
|
INSERT INTO agent_instances
|
|
195
204
|
(worktree_id, instance_id, cli_tool_id, alias, sort_order, created_at)
|
|
@@ -237,6 +246,126 @@ function addAgentInstance(db, worktreeId, instance) {
|
|
|
237
246
|
function removeAgentInstance(db, worktreeId, instanceId) {
|
|
238
247
|
const result = db.prepare(`
|
|
239
248
|
DELETE FROM agent_instances WHERE worktree_id = ? AND instance_id = ?
|
|
249
|
+
`).run(worktreeId, instanceId);
|
|
250
|
+
// Issue #2048: same rule as the replace above — the instance is gone, so what
|
|
251
|
+
// it was configured to launch opencode with is gone with it.
|
|
252
|
+
db.prepare(`
|
|
253
|
+
DELETE FROM opencode_instance_settings WHERE worktree_id = ? AND instance_id = ?
|
|
240
254
|
`).run(worktreeId, instanceId);
|
|
241
255
|
return result.changes > 0;
|
|
242
256
|
}
|
|
257
|
+
/**
|
|
258
|
+
* What this instance should launch and prompt opencode with (Issue #2048).
|
|
259
|
+
*
|
|
260
|
+
* Answers the all-unset settings for an instance with no row, which is every
|
|
261
|
+
* instance until the settings pane writes one — and for an instance backed by
|
|
262
|
+
* any other CLI tool, which never gets a row at all. The stored values are
|
|
263
|
+
* re-validated on the way out rather than trusted: the row may have been written
|
|
264
|
+
* by a build with a wider pattern, and the `agent` / `provider_id` / `model_id`
|
|
265
|
+
* columns end up on a **shell command line**.
|
|
266
|
+
*
|
|
267
|
+
* @param db - Database instance
|
|
268
|
+
* @param worktreeId - Worktree ID
|
|
269
|
+
* @param instanceId - Instance ID (the primary instance uses the CLI tool id)
|
|
270
|
+
*/
|
|
271
|
+
function getOpencodeInstanceSettings(db, worktreeId, instanceId) {
|
|
272
|
+
const row = db.prepare(`
|
|
273
|
+
SELECT agent, provider_id, model_id, variant
|
|
274
|
+
FROM opencode_instance_settings
|
|
275
|
+
WHERE worktree_id = ? AND instance_id = ?
|
|
276
|
+
`).get(worktreeId, instanceId);
|
|
277
|
+
if (!row)
|
|
278
|
+
return { ...opencode_instance_settings_1.EMPTY_OPENCODE_INSTANCE_SETTINGS };
|
|
279
|
+
return (0, opencode_instance_settings_1.normalizeOpencodeInstanceSettings)({
|
|
280
|
+
agent: row.agent,
|
|
281
|
+
providerId: row.provider_id,
|
|
282
|
+
modelId: row.model_id,
|
|
283
|
+
variant: row.variant,
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Every opencode setting stored for a worktree, keyed by instance id.
|
|
288
|
+
*
|
|
289
|
+
* One statement rather than one per roster entry: the settings pane asks for the
|
|
290
|
+
* whole worktree at once, and an instance with no row is simply absent from the
|
|
291
|
+
* result — callers fill it with {@link EMPTY_OPENCODE_INSTANCE_SETTINGS}.
|
|
292
|
+
*/
|
|
293
|
+
function getOpencodeInstanceSettingsByWorktree(db, worktreeId) {
|
|
294
|
+
const rows = db.prepare(`
|
|
295
|
+
SELECT instance_id, agent, provider_id, model_id, variant
|
|
296
|
+
FROM opencode_instance_settings
|
|
297
|
+
WHERE worktree_id = ?
|
|
298
|
+
`).all(worktreeId);
|
|
299
|
+
const settings = {};
|
|
300
|
+
for (const row of rows) {
|
|
301
|
+
settings[row.instance_id] = (0, opencode_instance_settings_1.normalizeOpencodeInstanceSettings)({
|
|
302
|
+
agent: row.agent,
|
|
303
|
+
providerId: row.provider_id,
|
|
304
|
+
modelId: row.model_id,
|
|
305
|
+
variant: row.variant,
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
return settings;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Write one instance's opencode settings.
|
|
312
|
+
*
|
|
313
|
+
* Validated before the write as well as after the read — a value that would not
|
|
314
|
+
* survive {@link normalizeOpencodeInstanceSettings} is stored as null rather
|
|
315
|
+
* than kept, so nothing unusable ever reaches the launcher even if a later build
|
|
316
|
+
* loosens the reader.
|
|
317
|
+
*
|
|
318
|
+
* An all-unset write **deletes the row** instead of storing four nulls. The two
|
|
319
|
+
* states are indistinguishable to every reader, and the delete keeps the table
|
|
320
|
+
* to the instances somebody actually configured.
|
|
321
|
+
*
|
|
322
|
+
* @throws InvalidAgentInstanceError when the instance id is not a valid one
|
|
323
|
+
*/
|
|
324
|
+
function setOpencodeInstanceSettings(db, worktreeId, instanceId, settings, at = Date.now()) {
|
|
325
|
+
if (!(0, types_1.isValidInstanceId)(instanceId)) {
|
|
326
|
+
throw new InvalidAgentInstanceError(`Invalid instance id: ${String(instanceId)}`);
|
|
327
|
+
}
|
|
328
|
+
const normalized = (0, opencode_instance_settings_1.normalizeOpencodeInstanceSettings)(settings);
|
|
329
|
+
if (!(0, opencode_instance_settings_1.hasOpencodeInstanceSettings)(normalized)) {
|
|
330
|
+
db.prepare(`
|
|
331
|
+
DELETE FROM opencode_instance_settings WHERE worktree_id = ? AND instance_id = ?
|
|
332
|
+
`).run(worktreeId, instanceId);
|
|
333
|
+
return normalized;
|
|
334
|
+
}
|
|
335
|
+
db.prepare(`
|
|
336
|
+
INSERT INTO opencode_instance_settings
|
|
337
|
+
(worktree_id, instance_id, agent, provider_id, model_id, variant, updated_at)
|
|
338
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
339
|
+
ON CONFLICT(worktree_id, instance_id) DO UPDATE SET
|
|
340
|
+
agent = excluded.agent,
|
|
341
|
+
provider_id = excluded.provider_id,
|
|
342
|
+
model_id = excluded.model_id,
|
|
343
|
+
variant = excluded.variant,
|
|
344
|
+
updated_at = excluded.updated_at
|
|
345
|
+
`).run(worktreeId, instanceId, normalized.agent, normalized.providerId, normalized.modelId, normalized.variant, at);
|
|
346
|
+
return normalized;
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Drop the settings of instances that are no longer in the roster.
|
|
350
|
+
*
|
|
351
|
+
* Called by {@link setAgentInstances} and {@link removeAgentInstance}, because
|
|
352
|
+
* `opencode_instance_settings` is keyed on an instance id and nothing else would
|
|
353
|
+
* ever remove a row for an instance the operator deleted. Re-adding an instance
|
|
354
|
+
* under the same id therefore starts from opencode's defaults rather than
|
|
355
|
+
* inheriting a setting from a roster entry that no longer exists.
|
|
356
|
+
*
|
|
357
|
+
* @param keepInstanceIds - The ids that survive; every other row is deleted
|
|
358
|
+
* @returns How many rows were removed
|
|
359
|
+
*/
|
|
360
|
+
function pruneOpencodeInstanceSettings(db, worktreeId, keepInstanceIds) {
|
|
361
|
+
if (keepInstanceIds.length === 0) {
|
|
362
|
+
return db.prepare(`
|
|
363
|
+
DELETE FROM opencode_instance_settings WHERE worktree_id = ?
|
|
364
|
+
`).run(worktreeId).changes;
|
|
365
|
+
}
|
|
366
|
+
const placeholders = keepInstanceIds.map(() => '?').join(', ');
|
|
367
|
+
return db.prepare(`
|
|
368
|
+
DELETE FROM opencode_instance_settings
|
|
369
|
+
WHERE worktree_id = ? AND instance_id NOT IN (${placeholders})
|
|
370
|
+
`).run(worktreeId, ...keepInstanceIds).changes;
|
|
371
|
+
}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Agent session cost ledger (Issue #2044)
|
|
4
|
+
*
|
|
5
|
+
* CRUD for `agent_session_costs` — the durable half of what
|
|
6
|
+
* `lib/hooks/agent-session-telemetry` keeps in memory. See migration v58 for
|
|
7
|
+
* why the table exists, why `session_id` is the key and why writes overwrite
|
|
8
|
+
* rather than accumulate.
|
|
9
|
+
*
|
|
10
|
+
* Everything here is a pure function of `(db, args)`; the thing that decides
|
|
11
|
+
* *when* to write lives in `./agent-session-cost-sampler`.
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.recordAgentSessionCost = recordAgentSessionCost;
|
|
15
|
+
exports.getAgentSessionCostsByDate = getAgentSessionCostsByDate;
|
|
16
|
+
exports.getDailyAgentCostSummary = getDailyAgentCostSummary;
|
|
17
|
+
exports.deleteAgentSessionCostsByDate = deleteAgentSessionCostsByDate;
|
|
18
|
+
// =============================================================================
|
|
19
|
+
// Row Mapping
|
|
20
|
+
// =============================================================================
|
|
21
|
+
function mapRow(row) {
|
|
22
|
+
return {
|
|
23
|
+
sessionId: row.session_id,
|
|
24
|
+
worktreeId: row.worktree_id,
|
|
25
|
+
cliToolId: row.cli_tool_id,
|
|
26
|
+
instanceId: row.instance_id,
|
|
27
|
+
date: row.date,
|
|
28
|
+
title: row.title,
|
|
29
|
+
agent: row.agent,
|
|
30
|
+
model: row.model,
|
|
31
|
+
provider: row.provider,
|
|
32
|
+
cost: row.cost,
|
|
33
|
+
tokensInput: row.tokens_input,
|
|
34
|
+
tokensOutput: row.tokens_output,
|
|
35
|
+
tokensReasoning: row.tokens_reasoning,
|
|
36
|
+
tokensCacheRead: row.tokens_cache_read,
|
|
37
|
+
tokensCacheWrite: row.tokens_cache_write,
|
|
38
|
+
firstSeenAt: row.first_seen_at,
|
|
39
|
+
observedAt: row.observed_at,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
const COST_COLUMNS = 'session_id, worktree_id, cli_tool_id, instance_id, date, title, agent, model, provider, ' +
|
|
43
|
+
'cost, tokens_input, tokens_output, tokens_reasoning, tokens_cache_read, tokens_cache_write, ' +
|
|
44
|
+
'first_seen_at, observed_at';
|
|
45
|
+
/**
|
|
46
|
+
* Insert or refresh one session's ledger row.
|
|
47
|
+
*
|
|
48
|
+
* `ON CONFLICT(session_id)` updates the spend columns and `observed_at`, and
|
|
49
|
+
* leaves `date` and `first_seen_at` alone. That asymmetry is the whole point:
|
|
50
|
+
* the numbers are cumulative and must be *replaced* (see migration v58), while
|
|
51
|
+
* the day the session opened must not move when a long conversation is sampled
|
|
52
|
+
* again after midnight.
|
|
53
|
+
*
|
|
54
|
+
* `worktree_id` is refreshed too, because an instance can be re-registered
|
|
55
|
+
* against a renamed worktree id between samples and the ledger should follow
|
|
56
|
+
* the live one rather than keep a dead reference.
|
|
57
|
+
*
|
|
58
|
+
* @param db - Database instance
|
|
59
|
+
* @param input - The sample
|
|
60
|
+
* @returns Whether a row was inserted or updated (false when the write was a
|
|
61
|
+
* no-op because the worktree row is gone — the FK refuses it)
|
|
62
|
+
*/
|
|
63
|
+
function recordAgentSessionCost(db, input) {
|
|
64
|
+
const stmt = db.prepare(`
|
|
65
|
+
INSERT INTO agent_session_costs (
|
|
66
|
+
session_id, worktree_id, cli_tool_id, instance_id, date, title, agent, model, provider,
|
|
67
|
+
cost, tokens_input, tokens_output, tokens_reasoning, tokens_cache_read, tokens_cache_write,
|
|
68
|
+
first_seen_at, observed_at
|
|
69
|
+
) VALUES (
|
|
70
|
+
@sessionId, @worktreeId, @cliToolId, @instanceId, @date, @title, @agent, @model, @provider,
|
|
71
|
+
@cost, @tokensInput, @tokensOutput, @tokensReasoning, @tokensCacheRead, @tokensCacheWrite,
|
|
72
|
+
@observedAt, @observedAt
|
|
73
|
+
)
|
|
74
|
+
ON CONFLICT(session_id) DO UPDATE SET
|
|
75
|
+
worktree_id = excluded.worktree_id,
|
|
76
|
+
cli_tool_id = excluded.cli_tool_id,
|
|
77
|
+
instance_id = excluded.instance_id,
|
|
78
|
+
title = excluded.title,
|
|
79
|
+
agent = excluded.agent,
|
|
80
|
+
model = excluded.model,
|
|
81
|
+
provider = excluded.provider,
|
|
82
|
+
cost = excluded.cost,
|
|
83
|
+
tokens_input = excluded.tokens_input,
|
|
84
|
+
tokens_output = excluded.tokens_output,
|
|
85
|
+
tokens_reasoning = excluded.tokens_reasoning,
|
|
86
|
+
tokens_cache_read = excluded.tokens_cache_read,
|
|
87
|
+
tokens_cache_write = excluded.tokens_cache_write,
|
|
88
|
+
observed_at = excluded.observed_at
|
|
89
|
+
`);
|
|
90
|
+
const result = stmt.run({
|
|
91
|
+
sessionId: input.sessionId,
|
|
92
|
+
worktreeId: input.worktreeId,
|
|
93
|
+
cliToolId: input.cliToolId,
|
|
94
|
+
instanceId: input.instanceId,
|
|
95
|
+
date: input.date,
|
|
96
|
+
title: input.title,
|
|
97
|
+
agent: input.agent,
|
|
98
|
+
model: input.model,
|
|
99
|
+
provider: input.provider,
|
|
100
|
+
cost: input.cost,
|
|
101
|
+
tokensInput: input.tokensInput,
|
|
102
|
+
tokensOutput: input.tokensOutput,
|
|
103
|
+
tokensReasoning: input.tokensReasoning,
|
|
104
|
+
tokensCacheRead: input.tokensCacheRead,
|
|
105
|
+
tokensCacheWrite: input.tokensCacheWrite,
|
|
106
|
+
observedAt: input.observedAt,
|
|
107
|
+
});
|
|
108
|
+
return result.changes > 0;
|
|
109
|
+
}
|
|
110
|
+
// =============================================================================
|
|
111
|
+
// Read
|
|
112
|
+
// =============================================================================
|
|
113
|
+
/**
|
|
114
|
+
* Every session recorded for a day, newest sample first.
|
|
115
|
+
*
|
|
116
|
+
* @param db - Database instance
|
|
117
|
+
* @param date - `YYYY-MM-DD`
|
|
118
|
+
*/
|
|
119
|
+
function getAgentSessionCostsByDate(db, date) {
|
|
120
|
+
const rows = db
|
|
121
|
+
.prepare(`SELECT ${COST_COLUMNS} FROM agent_session_costs WHERE date = ? ORDER BY observed_at DESC, session_id`)
|
|
122
|
+
.all(date);
|
|
123
|
+
return rows.map(mapRow);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* A day's spend, per worktree and in total.
|
|
127
|
+
*
|
|
128
|
+
* The per-worktree rows are what `opencode stats --project <path>` reports for
|
|
129
|
+
* that project, and the total is what `opencode stats` reports across all of
|
|
130
|
+
* them — provided the ledger saw every session, which is the sampler's job and
|
|
131
|
+
* not this query's. Sorted by cost descending with NULLs last, so "which
|
|
132
|
+
* worktree is expensive" is the first line rather than a scan.
|
|
133
|
+
*
|
|
134
|
+
* @param db - Database instance
|
|
135
|
+
* @param date - `YYYY-MM-DD`
|
|
136
|
+
* @param cliToolId - Optional filter; omit for every tool that reported
|
|
137
|
+
*/
|
|
138
|
+
function getDailyAgentCostSummary(db, date, cliToolId) {
|
|
139
|
+
const where = cliToolId ? 'WHERE date = ? AND cli_tool_id = ?' : 'WHERE date = ?';
|
|
140
|
+
const params = cliToolId ? [date, cliToolId] : [date];
|
|
141
|
+
const rows = db
|
|
142
|
+
.prepare(`SELECT
|
|
143
|
+
worktree_id,
|
|
144
|
+
COUNT(*) AS sessions,
|
|
145
|
+
SUM(cost) AS cost,
|
|
146
|
+
SUM(tokens_input) AS tokens_input,
|
|
147
|
+
SUM(tokens_output) AS tokens_output,
|
|
148
|
+
SUM(tokens_reasoning) AS tokens_reasoning,
|
|
149
|
+
SUM(tokens_cache_read) AS tokens_cache_read,
|
|
150
|
+
SUM(tokens_cache_write) AS tokens_cache_write
|
|
151
|
+
FROM agent_session_costs
|
|
152
|
+
${where}
|
|
153
|
+
GROUP BY worktree_id
|
|
154
|
+
ORDER BY cost IS NULL, cost DESC, worktree_id`)
|
|
155
|
+
.all(...params);
|
|
156
|
+
const worktrees = rows.map((row) => ({
|
|
157
|
+
worktreeId: row.worktree_id,
|
|
158
|
+
sessions: row.sessions,
|
|
159
|
+
cost: row.cost,
|
|
160
|
+
tokensInput: row.tokens_input,
|
|
161
|
+
tokensOutput: row.tokens_output,
|
|
162
|
+
tokensReasoning: row.tokens_reasoning,
|
|
163
|
+
tokensCacheRead: row.tokens_cache_read,
|
|
164
|
+
tokensCacheWrite: row.tokens_cache_write,
|
|
165
|
+
}));
|
|
166
|
+
return { date, worktrees, total: sumWorktreeCosts(worktrees) };
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Add the per-worktree rows up, preserving "nobody said" as null.
|
|
170
|
+
*
|
|
171
|
+
* Done in TypeScript rather than a second `SUM()` query so the total is
|
|
172
|
+
* arithmetically the same numbers the caller is about to print — a rollup query
|
|
173
|
+
* could disagree with the rows above it if the two ever drifted on filtering,
|
|
174
|
+
* and a report whose total does not match its own lines is worse than no total.
|
|
175
|
+
*/
|
|
176
|
+
function sumWorktreeCosts(worktrees) {
|
|
177
|
+
const add = (pick) => {
|
|
178
|
+
let sum = null;
|
|
179
|
+
for (const row of worktrees) {
|
|
180
|
+
const value = pick(row);
|
|
181
|
+
if (value === null)
|
|
182
|
+
continue;
|
|
183
|
+
sum = (sum ?? 0) + value;
|
|
184
|
+
}
|
|
185
|
+
return sum;
|
|
186
|
+
};
|
|
187
|
+
return {
|
|
188
|
+
sessions: worktrees.reduce((acc, row) => acc + row.sessions, 0),
|
|
189
|
+
cost: add((row) => row.cost),
|
|
190
|
+
tokensInput: add((row) => row.tokensInput),
|
|
191
|
+
tokensOutput: add((row) => row.tokensOutput),
|
|
192
|
+
tokensReasoning: add((row) => row.tokensReasoning),
|
|
193
|
+
tokensCacheRead: add((row) => row.tokensCacheRead),
|
|
194
|
+
tokensCacheWrite: add((row) => row.tokensCacheWrite),
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Delete the ledger rows for a day. Test seam and manual-reset affordance.
|
|
199
|
+
*
|
|
200
|
+
* @returns Number of rows removed
|
|
201
|
+
*/
|
|
202
|
+
function deleteAgentSessionCostsByDate(db, date) {
|
|
203
|
+
return db.prepare('DELETE FROM agent_session_costs WHERE date = ?').run(date).changes;
|
|
204
|
+
}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copy the live agent-session telemetry into the durable ledger (Issue #2044).
|
|
4
|
+
*
|
|
5
|
+
* ## What this is, and what it deliberately is not
|
|
6
|
+
*
|
|
7
|
+
* It is **not** a second reader of `session.updated`. #2040's record is the one
|
|
8
|
+
* and only mapping of that frame, and adding another would give CommandMate two
|
|
9
|
+
* opinions about one number — the failure #2040's own module comment is written
|
|
10
|
+
* to prevent. This module reads that finished record, through its public getter,
|
|
11
|
+
* and writes it to `agent_session_costs`.
|
|
12
|
+
*
|
|
13
|
+
* It is a **sampler** because the record it copies is cumulative-per-session
|
|
14
|
+
* (measured; see migration v58) and dies when the pane is killed. Cumulative
|
|
15
|
+
* means "any sample after the last update is sufficient and no sample is
|
|
16
|
+
* double-counted"; dying means "a sample has to happen before the pane closes".
|
|
17
|
+
* Together those give the design: look periodically, overwrite by session id,
|
|
18
|
+
* and never add.
|
|
19
|
+
*
|
|
20
|
+
* ## Why the key enumeration reaches into `globalThis`
|
|
21
|
+
*
|
|
22
|
+
* `lib/hooks/agent-session-telemetry` exports a getter keyed by
|
|
23
|
+
* `(worktreeId, cliToolId, instanceId)` and no iterator, and that module is
|
|
24
|
+
* owned by a different Issue (#2041) for the duration of this work. The keys are
|
|
25
|
+
* `buildCompositeKey()` output — `worktreeId:cliToolId[:instanceId]`, with the
|
|
26
|
+
* separator forbidden inside either id by that function's own guards — so they
|
|
27
|
+
* parse unambiguously. Only the *keys* are taken that way; every **value** comes
|
|
28
|
+
* back through `getAgentSessionTelemetry()`, so the record's shape stays that
|
|
29
|
+
* module's business. Adding an iterator there and deleting
|
|
30
|
+
* {@link listTelemetryTargets} is the tidier end state and costs one export.
|
|
31
|
+
*
|
|
32
|
+
* @module lib/db/agent-session-cost-sampler
|
|
33
|
+
*/
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
exports.AGENT_SESSION_COST_SAMPLE_INTERVAL_MS = void 0;
|
|
36
|
+
exports.localDateKey = localDateKey;
|
|
37
|
+
exports.listTelemetryTargets = listTelemetryTargets;
|
|
38
|
+
exports.sampleAgentSessionCosts = sampleAgentSessionCosts;
|
|
39
|
+
exports.startAgentSessionCostSampler = startAgentSessionCostSampler;
|
|
40
|
+
exports.stopAgentSessionCostSampler = stopAgentSessionCostSampler;
|
|
41
|
+
const agent_session_telemetry_1 = require("../../lib/hooks/agent-session-telemetry");
|
|
42
|
+
const types_1 = require("../../lib/cli-tools/types");
|
|
43
|
+
const logger_1 = require("../../lib/logger");
|
|
44
|
+
const agent_session_cost_db_1 = require("./agent-session-cost-db");
|
|
45
|
+
const logger = (0, logger_1.createLogger)('agent-session-cost-sampler');
|
|
46
|
+
/**
|
|
47
|
+
* How often the background sampler looks.
|
|
48
|
+
*
|
|
49
|
+
* A minute is short next to how long a session lives and long next to how
|
|
50
|
+
* cheaply a Map is walked; the value is not load-bearing for correctness, only
|
|
51
|
+
* for how much of a session's tail is lost if the pane is killed between
|
|
52
|
+
* samples. Cumulative numbers are what make that true — see the module comment.
|
|
53
|
+
*/
|
|
54
|
+
exports.AGENT_SESSION_COST_SAMPLE_INTERVAL_MS = 60_000;
|
|
55
|
+
/**
|
|
56
|
+
* The local calendar day of an instant, as `YYYY-MM-DD`.
|
|
57
|
+
*
|
|
58
|
+
* Local rather than UTC, and hand-formatted rather than `toISOString()`, because
|
|
59
|
+
* this string is compared against `daily_reports.date`, which
|
|
60
|
+
* `daily-summary-generator` builds from `new Date(date + 'T00:00:00')` — a local
|
|
61
|
+
* midnight. Using UTC here would file the evening's sessions under tomorrow for
|
|
62
|
+
* anyone east of Greenwich.
|
|
63
|
+
*/
|
|
64
|
+
function localDateKey(at) {
|
|
65
|
+
const d = new Date(at);
|
|
66
|
+
const year = d.getFullYear();
|
|
67
|
+
const month = String(d.getMonth() + 1).padStart(2, '0');
|
|
68
|
+
const day = String(d.getDate()).padStart(2, '0');
|
|
69
|
+
return `${year}-${month}-${day}`;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Every instance the telemetry map currently holds a record for.
|
|
73
|
+
*
|
|
74
|
+
* Keys that do not parse — an unknown CLI tool id, a shape
|
|
75
|
+
* `buildCompositeKey()` would not produce — are skipped rather than guessed at.
|
|
76
|
+
* A malformed key means somebody wrote to the map by hand, and inventing a
|
|
77
|
+
* worktree id for it would put a real cost against a worktree that never
|
|
78
|
+
* incurred it.
|
|
79
|
+
*/
|
|
80
|
+
function listTelemetryTargets() {
|
|
81
|
+
const records = globalThis.__agentSessionTelemetry;
|
|
82
|
+
if (!records)
|
|
83
|
+
return [];
|
|
84
|
+
const targets = [];
|
|
85
|
+
for (const key of records.keys()) {
|
|
86
|
+
const parts = key.split(':');
|
|
87
|
+
if (parts.length < 2 || parts.length > 3)
|
|
88
|
+
continue;
|
|
89
|
+
const [worktreeId, cliToolId, instanceId] = parts;
|
|
90
|
+
if (!worktreeId || !(0, types_1.isCliToolType)(cliToolId))
|
|
91
|
+
continue;
|
|
92
|
+
targets.push({ worktreeId, cliToolId, instanceId: instanceId || undefined });
|
|
93
|
+
}
|
|
94
|
+
return targets;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Copy every live telemetry record into the ledger.
|
|
98
|
+
*
|
|
99
|
+
* A record with no session id is skipped: the ledger is keyed by the agent's own
|
|
100
|
+
* id, and a synthetic key would let one conversation appear twice under two
|
|
101
|
+
* invented names, which is precisely the double-count last-write-wins exists to
|
|
102
|
+
* avoid.
|
|
103
|
+
*
|
|
104
|
+
* Individual write failures are logged and stepped over rather than aborting the
|
|
105
|
+
* sweep — the common one is the FK refusing a worktree that was deleted between
|
|
106
|
+
* the map write and this call, which is not a reason to stop sampling the
|
|
107
|
+
* others.
|
|
108
|
+
*
|
|
109
|
+
* @param db - Database instance
|
|
110
|
+
* @param now - Epoch ms to stamp the samples with (injected for tests)
|
|
111
|
+
* @returns How many rows were written
|
|
112
|
+
*/
|
|
113
|
+
function sampleAgentSessionCosts(db, now = Date.now()) {
|
|
114
|
+
let written = 0;
|
|
115
|
+
for (const target of listTelemetryTargets()) {
|
|
116
|
+
const record = (0, agent_session_telemetry_1.getAgentSessionTelemetry)(target.worktreeId, target.cliToolId, target.instanceId);
|
|
117
|
+
if (!record || !record.id)
|
|
118
|
+
continue;
|
|
119
|
+
try {
|
|
120
|
+
const inserted = (0, agent_session_cost_db_1.recordAgentSessionCost)(db, {
|
|
121
|
+
sessionId: record.id,
|
|
122
|
+
worktreeId: target.worktreeId,
|
|
123
|
+
cliToolId: target.cliToolId,
|
|
124
|
+
instanceId: target.instanceId ?? null,
|
|
125
|
+
// `record.at` is when the agent last spoke, which is the honest date for
|
|
126
|
+
// the spend it reported; `now` only stamps the sample.
|
|
127
|
+
date: localDateKey(record.at || now),
|
|
128
|
+
title: record.title,
|
|
129
|
+
agent: record.agent,
|
|
130
|
+
model: record.model,
|
|
131
|
+
provider: record.provider,
|
|
132
|
+
cost: record.cost,
|
|
133
|
+
tokensInput: record.tokens.input,
|
|
134
|
+
tokensOutput: record.tokens.output,
|
|
135
|
+
tokensReasoning: record.tokens.reasoning,
|
|
136
|
+
tokensCacheRead: record.tokens.cacheRead,
|
|
137
|
+
tokensCacheWrite: record.tokens.cacheWrite,
|
|
138
|
+
observedAt: now,
|
|
139
|
+
});
|
|
140
|
+
if (inserted)
|
|
141
|
+
written++;
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
logger.warn('sample-failed', {
|
|
145
|
+
worktreeId: target.worktreeId,
|
|
146
|
+
cliToolId: target.cliToolId,
|
|
147
|
+
error: error instanceof Error ? error.message : String(error),
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return written;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Start the periodic sampler, once per process.
|
|
155
|
+
*
|
|
156
|
+
* Called from `getDbInstance()` — the one place in the server that runs exactly
|
|
157
|
+
* once, after the schema is known good, and that every process holding a
|
|
158
|
+
* database also holds. A `commandmate` CLI process reaches it too and samples an
|
|
159
|
+
* empty map, which costs a `Map.keys()` per minute and keeps the wiring from
|
|
160
|
+
* needing to know which kind of process it is in.
|
|
161
|
+
*
|
|
162
|
+
* The timer is `unref()`d so it never keeps Node alive, and skipped outright
|
|
163
|
+
* under Vitest: a suite that opens a database should not acquire a background
|
|
164
|
+
* writer to a file it is about to delete.
|
|
165
|
+
*
|
|
166
|
+
* @param db - Database instance to write into
|
|
167
|
+
* @returns Whether a timer was started by this call
|
|
168
|
+
*/
|
|
169
|
+
function startAgentSessionCostSampler(db) {
|
|
170
|
+
if (globalThis.__agentSessionCostSampler)
|
|
171
|
+
return false;
|
|
172
|
+
if (process.env.VITEST || process.env.NODE_ENV === 'test')
|
|
173
|
+
return false;
|
|
174
|
+
const timer = setInterval(() => {
|
|
175
|
+
try {
|
|
176
|
+
sampleAgentSessionCosts(db);
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
logger.warn('sweep-failed', {
|
|
180
|
+
error: error instanceof Error ? error.message : String(error),
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
}, exports.AGENT_SESSION_COST_SAMPLE_INTERVAL_MS);
|
|
184
|
+
timer.unref?.();
|
|
185
|
+
globalThis.__agentSessionCostSampler = timer;
|
|
186
|
+
return true;
|
|
187
|
+
}
|
|
188
|
+
/** Stop the periodic sampler. Test seam and shutdown hook. */
|
|
189
|
+
function stopAgentSessionCostSampler() {
|
|
190
|
+
if (!globalThis.__agentSessionCostSampler)
|
|
191
|
+
return;
|
|
192
|
+
clearInterval(globalThis.__agentSessionCostSampler);
|
|
193
|
+
globalThis.__agentSessionCostSampler = undefined;
|
|
194
|
+
}
|
|
@@ -12,6 +12,7 @@ exports.createMessage = createMessage;
|
|
|
12
12
|
exports.updateMessageContent = updateMessageContent;
|
|
13
13
|
exports.getMessages = getMessages;
|
|
14
14
|
exports.getLastUserMessage = getLastUserMessage;
|
|
15
|
+
exports.findMessageByRequestId = findMessageByRequestId;
|
|
15
16
|
exports.getLastMessage = getLastMessage;
|
|
16
17
|
exports.deleteAllMessages = deleteAllMessages;
|
|
17
18
|
exports.deleteMessageById = deleteMessageById;
|
|
@@ -196,6 +197,38 @@ function getLastUserMessage(db, worktreeId) {
|
|
|
196
197
|
const row = stmt.get(worktreeId);
|
|
197
198
|
return row ? mapChatMessage(row) : null;
|
|
198
199
|
}
|
|
200
|
+
/**
|
|
201
|
+
* Fetch the message a producer wrote under this `request_id`, if any.
|
|
202
|
+
*
|
|
203
|
+
* Issue #2041: the idempotency probe for a history writer that can be asked to
|
|
204
|
+
* save the same turn twice — once from the event stream and once from the
|
|
205
|
+
* `GET /session/:id/message` backfill that runs on every reconnect. Both derive
|
|
206
|
+
* the id from the agent's own message id, so "already there" is the whole test.
|
|
207
|
+
*
|
|
208
|
+
* `ACTIVE_FILTER` is deliberately **not** applied. An archived row is still a
|
|
209
|
+
* row that was written, and skipping it here would make "kill the session"
|
|
210
|
+
* (which archives) into "re-save every turn on the next attach", which is the
|
|
211
|
+
* duplication this is for.
|
|
212
|
+
*
|
|
213
|
+
* Scoped by worktree because `request_id` is unique per producer, not globally:
|
|
214
|
+
* two worktrees talking to the same `opencode.db` see the same session, and a
|
|
215
|
+
* global lookup would let the first one to save a turn suppress it for the
|
|
216
|
+
* second.
|
|
217
|
+
*
|
|
218
|
+
* @param requestId - The producer's own id for this row
|
|
219
|
+
* @returns The row, or null when nothing has been written under it
|
|
220
|
+
*/
|
|
221
|
+
function findMessageByRequestId(db, worktreeId, requestId) {
|
|
222
|
+
const stmt = db.prepare(`
|
|
223
|
+
SELECT id, worktree_id, role, content, summary, timestamp, log_file_name, request_id, message_type, prompt_data, cli_tool_id, instance_id, archived
|
|
224
|
+
FROM chat_messages
|
|
225
|
+
WHERE worktree_id = ? AND request_id = ?
|
|
226
|
+
ORDER BY timestamp DESC
|
|
227
|
+
LIMIT 1
|
|
228
|
+
`);
|
|
229
|
+
const row = stmt.get(worktreeId, requestId);
|
|
230
|
+
return row ? mapChatMessage(row) : null;
|
|
231
|
+
}
|
|
199
232
|
/**
|
|
200
233
|
* Fetch the most recent message for a worktree (any role).
|
|
201
234
|
* Used to determine if waiting for Claude's response.
|
|
@@ -15,6 +15,7 @@ exports.closeDbInstance = closeDbInstance;
|
|
|
15
15
|
const path_1 = __importDefault(require("path"));
|
|
16
16
|
const db_migrations_1 = require("./db-migrations");
|
|
17
17
|
const abi_recovery_1 = require("./abi-recovery");
|
|
18
|
+
const agent_session_cost_sampler_1 = require("./agent-session-cost-sampler");
|
|
18
19
|
const env_1 = require("../../lib/env");
|
|
19
20
|
let dbInstance = null;
|
|
20
21
|
/**
|
|
@@ -69,6 +70,13 @@ function getDbInstance() {
|
|
|
69
70
|
throw error;
|
|
70
71
|
}
|
|
71
72
|
dbInstance = db;
|
|
73
|
+
// Issue #2044: the agent cost ledger needs somebody to copy the in-memory
|
|
74
|
+
// telemetry in before the pane that holds it is killed. This is the one
|
|
75
|
+
// place that runs once per process, after the schema is verified, in every
|
|
76
|
+
// process that has a database — and the sampler is a no-op wherever the
|
|
77
|
+
// telemetry map is empty. It refuses to start under Vitest and unrefs its
|
|
78
|
+
// timer, so nothing here holds a test or the CLI open.
|
|
79
|
+
(0, agent_session_cost_sampler_1.startAgentSessionCostSampler)(db);
|
|
72
80
|
}
|
|
73
81
|
return dbInstance;
|
|
74
82
|
}
|
|
@@ -78,6 +86,9 @@ function getDbInstance() {
|
|
|
78
86
|
*/
|
|
79
87
|
function closeDbInstance() {
|
|
80
88
|
if (dbInstance) {
|
|
89
|
+
// Issue #2044: stop the sampler before the handle it writes through goes
|
|
90
|
+
// away, or the next tick throws `The database connection is not open`.
|
|
91
|
+
(0, agent_session_cost_sampler_1.stopAgentSessionCostSampler)();
|
|
81
92
|
dbInstance.close();
|
|
82
93
|
dbInstance = null;
|
|
83
94
|
}
|
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
* @internal functions from being unintentionally exposed.
|
|
11
11
|
*/
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.
|
|
14
|
-
exports.
|
|
15
|
-
exports.listTaskEvents = exports.ACTIVE_TASK_STATUSES = exports.TERMINAL_TASK_STATUSES = exports.TASK_STATUSES = exports.isTerminalTaskStatus = exports.getActiveTaskForInstance = exports.getActiveTask = exports.listTasks = exports.getTask = exports.createTask = exports.VERIFICATION_GATE_SOURCES = exports.VERIFICATION_TRIGGERS = exports.MAX_RUN_HISTORY_DAYS = exports.MAX_RUN_HISTORY_LIMIT = exports.DEFAULT_RUN_HISTORY_LIMIT = exports.listVerificationRunsForPeriod = exports.listRunningVerificationRuns = exports.getRunningVerificationRun = exports.listVerificationRuns = exports.getVerificationRun = exports.finishGateResult = exports.createGateResult = exports.finishVerificationRun = exports.createVerificationRun = exports.NEW_SUBSCRIPTION_DEFAULTS = exports.deletePushSubscriptionByEndpoint = exports.updatePushSubscriptionPreferences = exports.countPushSubscriptionsForKind = exports.getPushSubscriptionsForKind = exports.getAllPushSubscriptions = exports.getPushSubscriptionByEndpoint = exports.upsertPushSubscription = exports.deleteAssistantSessionState = exports.updateAssistantSessionState = exports.getAssistantSessionState = exports.listRunningAssistantExecutions = exports.getRunningAssistantExecutionByConversation = exports.getLatestAssistantExecutionByConversation = exports.getAssistantExecutionById = exports.updateAssistantExecution = exports.createAssistantExecution = exports.archiveAssistantMessagesFrom = exports.archiveAllAssistantMessages = exports.getAssistantMessageById = exports.getAssistantMessages = exports.updateAssistantMessageStatus = void 0;
|
|
13
|
+
exports.updateSessionState = exports.getSessionState = exports.getMessagesByDateRange = exports.ACTIVE_FILTER = exports.recordAnsweredPrompt = exports.markPendingPromptsAsAnswered = exports.updatePromptData = exports.getMessageById = exports.recomputeLastUserMessage = exports.clearLastUserMessage = exports.updateLastUserMessage = exports.deleteMessagesByInstance = exports.deleteMessagesByCliTool = exports.deleteMessageById = exports.deleteAllMessages = exports.findMessageByRequestId = exports.getLastMessage = exports.getLastUserMessage = exports.getMessages = exports.updateMessageContent = exports.createMessage = exports.getLastAssistantMessageAt = exports.getAliasedWorktreeIds = exports.getAllWorktreeAliases = exports.getWorktreeAliases = exports.resolveWorktreeIdWithAlias = exports.recordWorktreeAlias = exports.deleteWorktreesByIds = exports.deleteRepositoryWorktrees = exports.migrateWorktreeIdPreservingChildren = exports.getAllWorktreePathIds = exports.getAllWorktreeIds = exports.getWorktreesByRepository = exports.getWorktreeIdsByRepository = exports.getInitialBranch = exports.saveInitialBranch = exports.updateVibeLocalContextWindow = exports.updateVibeLocalModel = exports.updateSelectedAgents = exports.updateCliToolId = exports.updateStatus = exports.updateFavorite = exports.updateLastViewedAt = exports.updateWorktreeLink = exports.updateWorktreeDescription = exports.upsertWorktree = exports.getWorktreeById = exports.getRepositories = exports.getWorktrees = exports.initDatabase = void 0;
|
|
14
|
+
exports.updateAssistantConversation = exports.createAssistantConversation = exports.getAssistantConversationByRepositoryAndCliTool = exports.getAssistantConversationById = exports.updateDailyReportContent = exports.saveDailyReport = exports.getDailyReport = exports.recoverStuckSendingTimers = exports.clearTimerHistory = exports.cleanupOldTimers = exports.getPendingTimerCountByWorktree = exports.cancelTimersByWorktree = exports.cancelTimer = exports.updateTimerStatus = exports.getPendingTimers = exports.getTimerById = exports.getTimersByWorktree = exports.createTimer = exports.WORKTREE_TODO_STATUSES = exports.isWorktreeTodoStatus = exports.reorderWorktreeTodos = exports.deleteWorktreeTodo = exports.updateWorktreeTodo = exports.createWorktreeTodo = exports.getWorktreeTodoById = exports.getTodosByWorktreeId = exports.deleteTodo = exports.updateTodo = exports.createTodo = exports.getTodoById = exports.getAllTodos = exports.getTodosByRepositoryId = exports.MemoDbError = exports.reorderMemos = exports.deleteMemo = exports.updateMemo = exports.createMemo = exports.getMemoById = exports.getMemosByWorktreeId = exports.InvalidAgentInstanceError = exports.AgentInstanceLimitError = exports.removeAgentInstance = exports.addAgentInstance = exports.setAgentInstances = exports.countAgentInstances = exports.getAgentInstance = exports.getAgentInstances = exports.deleteSessionState = exports.clearInProgressMessageId = exports.setInProgressMessageId = void 0;
|
|
15
|
+
exports.listTaskEvents = exports.ACTIVE_TASK_STATUSES = exports.TERMINAL_TASK_STATUSES = exports.TASK_STATUSES = exports.isTerminalTaskStatus = exports.getActiveTaskForInstance = exports.getActiveTask = exports.listTasks = exports.getTask = exports.createTask = exports.VERIFICATION_GATE_SOURCES = exports.VERIFICATION_TRIGGERS = exports.MAX_RUN_HISTORY_DAYS = exports.MAX_RUN_HISTORY_LIMIT = exports.DEFAULT_RUN_HISTORY_LIMIT = exports.listVerificationRunsForPeriod = exports.listRunningVerificationRuns = exports.getRunningVerificationRun = exports.listVerificationRuns = exports.getVerificationRun = exports.finishGateResult = exports.createGateResult = exports.finishVerificationRun = exports.createVerificationRun = exports.pushSubscriptionNeedsDefaultsNotice = exports.PUSH_DEFAULTS_VERSION = exports.NEW_SUBSCRIPTION_DEFAULTS = exports.deletePushSubscriptionByEndpoint = exports.updatePushSubscriptionPreferences = exports.countPushSubscriptionsForKind = exports.getPushSubscriptionsForKind = exports.getAllPushSubscriptions = exports.getPushSubscriptionByEndpoint = exports.upsertPushSubscription = exports.deleteAssistantSessionState = exports.updateAssistantSessionState = exports.getAssistantSessionState = exports.listRunningAssistantExecutions = exports.getRunningAssistantExecutionByConversation = exports.getLatestAssistantExecutionByConversation = exports.getAssistantExecutionById = exports.updateAssistantExecution = exports.createAssistantExecution = exports.archiveAssistantMessagesFrom = exports.archiveAllAssistantMessages = exports.getAssistantMessageById = exports.getAssistantMessages = exports.updateAssistantMessageStatus = exports.createAssistantMessage = void 0;
|
|
16
16
|
// init-db
|
|
17
17
|
var init_db_1 = require("./init-db");
|
|
18
18
|
Object.defineProperty(exports, "initDatabase", { enumerable: true, get: function () { return init_db_1.initDatabase; } });
|
|
@@ -55,6 +55,7 @@ Object.defineProperty(exports, "updateMessageContent", { enumerable: true, get:
|
|
|
55
55
|
Object.defineProperty(exports, "getMessages", { enumerable: true, get: function () { return chat_db_1.getMessages; } });
|
|
56
56
|
Object.defineProperty(exports, "getLastUserMessage", { enumerable: true, get: function () { return chat_db_1.getLastUserMessage; } });
|
|
57
57
|
Object.defineProperty(exports, "getLastMessage", { enumerable: true, get: function () { return chat_db_1.getLastMessage; } });
|
|
58
|
+
Object.defineProperty(exports, "findMessageByRequestId", { enumerable: true, get: function () { return chat_db_1.findMessageByRequestId; } });
|
|
58
59
|
Object.defineProperty(exports, "deleteAllMessages", { enumerable: true, get: function () { return chat_db_1.deleteAllMessages; } });
|
|
59
60
|
Object.defineProperty(exports, "deleteMessageById", { enumerable: true, get: function () { return chat_db_1.deleteMessageById; } });
|
|
60
61
|
Object.defineProperty(exports, "deleteMessagesByCliTool", { enumerable: true, get: function () { return chat_db_1.deleteMessagesByCliTool; } });
|
|
@@ -164,6 +165,10 @@ Object.defineProperty(exports, "updatePushSubscriptionPreferences", { enumerable
|
|
|
164
165
|
Object.defineProperty(exports, "deletePushSubscriptionByEndpoint", { enumerable: true, get: function () { return push_subscriptions_db_1.deletePushSubscriptionByEndpoint; } });
|
|
165
166
|
// Issue #2000: the per-kind state a *new* subscription is created with.
|
|
166
167
|
Object.defineProperty(exports, "NEW_SUBSCRIPTION_DEFAULTS", { enumerable: true, get: function () { return push_subscriptions_db_1.NEW_SUBSCRIPTION_DEFAULTS; } });
|
|
168
|
+
// Issue #2056: which defaults generation a row knows about, and whether it is
|
|
169
|
+
// still owed the one-off notice about the change.
|
|
170
|
+
Object.defineProperty(exports, "PUSH_DEFAULTS_VERSION", { enumerable: true, get: function () { return push_subscriptions_db_1.PUSH_DEFAULTS_VERSION; } });
|
|
171
|
+
Object.defineProperty(exports, "pushSubscriptionNeedsDefaultsNotice", { enumerable: true, get: function () { return push_subscriptions_db_1.pushSubscriptionNeedsDefaultsNotice; } });
|
|
167
172
|
// verification-db (verification gate runs, Issue #1542)
|
|
168
173
|
var verification_db_1 = require("./verification-db");
|
|
169
174
|
Object.defineProperty(exports, "createVerificationRun", { enumerable: true, get: function () { return verification_db_1.createVerificationRun; } });
|