commandmate 0.11.4 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +395 -303
- package/.next/app-path-routes-manifest.json +31 -22
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +12 -12
- package/.next/react-loadable-manifest.json +8 -6
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +66 -0
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +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/daily-summary/route.js +1 -1
- package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/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/subscriptions/route.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +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_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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route.js +1 -0
- package/.next/server/app/api/skills/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/skills/route.js +1 -0
- package/.next/server/app/api/skills/route.js.nft.json +1 -0
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/todos/route.js +1 -1
- package/.next/server/app/api/todos/route_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route.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]/interrupt/route_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +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 +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/route.js +23 -0
- package/.next/server/app/api/worktrees/[id]/skills/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +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_client-reference-manifest.js +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]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_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_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_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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/chat/page.js +2 -2
- package/.next/server/app/chat/page.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page.js.nft.json +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page.js +2 -2
- package/.next/server/app/more/page.js.nft.json +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page.js.nft.json +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page.js +1 -1
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page.js +1 -1
- package/.next/server/app/repositories/page.js.nft.json +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page.js +1 -1
- package/.next/server/app/review/page.js.nft.json +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.js +1 -1
- package/.next/server/app/sessions/page.js.nft.json +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page.js +2 -0
- package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -0
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -0
- package/.next/server/app/skills/page.js +2 -0
- package/.next/server/app/skills/page.js.nft.json +1 -0
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -0
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +9 -9
- package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page.js +3 -3
- package/.next/server/app/worktrees/[id]/terminal/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +31 -22
- package/.next/server/chunks/1117.js +1 -1
- package/.next/server/chunks/120.js +1 -0
- package/.next/server/chunks/1808.js +1 -0
- package/.next/server/chunks/186.js +1 -0
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/22.js +1 -0
- package/.next/server/chunks/2328.js +1 -0
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/3042.js +2 -0
- package/.next/server/chunks/3543.js +1 -1
- package/.next/server/chunks/3708.js +1 -0
- package/.next/server/chunks/3945.js +1 -1
- package/.next/server/chunks/5064.js +1 -0
- package/.next/server/chunks/5226.js +28 -0
- package/.next/server/chunks/5306.js +2 -0
- package/.next/server/chunks/5312.js +1 -0
- package/.next/server/chunks/5326.js +1 -0
- package/.next/server/chunks/5381.js +1 -1
- package/.next/server/chunks/5456.js +1 -0
- package/.next/server/chunks/5571.js +1 -1
- package/.next/server/chunks/5959.js +2 -2
- package/.next/server/chunks/6065.js +1 -0
- package/.next/server/chunks/6130.js +1 -0
- package/.next/server/chunks/6285.js +1 -1
- package/.next/server/chunks/646.js +6 -6
- package/.next/server/chunks/{9968.js → 7587.js} +1 -1
- package/.next/server/chunks/8584.js +1 -0
- package/.next/server/chunks/8681.js +1 -1
- package/.next/server/chunks/8807.js +950 -804
- package/.next/server/chunks/9123.js +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/D-aoE4gWfuCUN0GqEPIX3/_buildManifest.js +1 -0
- package/.next/static/chunks/1668-7484081c45a44f89.js +1 -0
- package/.next/static/chunks/3418-7e47651340d940b0.js +1 -0
- package/.next/static/chunks/4027-0c529b322be7d4d8.js +1 -0
- package/.next/static/chunks/{4560-64b1461fd996127a.js → 4560-04e5aebcab96bfa1.js} +1 -1
- package/.next/static/chunks/6007-de36119357dcd418.js +1 -0
- package/.next/static/chunks/{6488-76295bf0184b101f.js → 6488-e257111ca7389d05.js} +1 -1
- package/.next/static/chunks/{8965-872d8de254196cec.js → 6497-dc26c6c6b0b15adf.js} +1 -1
- package/.next/static/chunks/790-d8e6acd26e03679c.js +1 -0
- package/.next/static/chunks/8361.4bf062be2d2962f4.js +1 -0
- package/.next/static/chunks/app/api/app/update/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/assistant/conversation/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/assistant/current-output/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/assistant/messages/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/assistant/session/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/assistant/start/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/assistant/terminal/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/assistant/tools/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/skills/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/templates/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/todos/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/chat/{page-9ed2ffd98eb4ae18.js → page-9cf4ba62e21d9074.js} +1 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/more/{page-a496425bba427b48.js → page-082d4ae496f9a36e.js} +1 -1
- package/.next/static/chunks/app/{page-15bfd76bcf65842d.js → page-af457ca5876ed616.js} +1 -1
- package/.next/static/chunks/app/proxy/[...path]/route-56dad0523d3c4a92.js +1 -0
- package/.next/static/chunks/app/repositories/{page-d214522ab8792ce7.js → page-75f0d70452c6b6c0.js} +1 -1
- package/.next/static/chunks/app/review/{page-1dadf0b5d7129598.js → page-f431d630097c2e85.js} +1 -1
- package/.next/static/chunks/app/sessions/{page-96f007d986c5f327.js → page-20f07a99db64d2ca.js} +1 -1
- package/.next/static/chunks/app/skills/[skillId]/page-68ed5e9186efe56d.js +1 -0
- package/.next/static/chunks/app/skills/page-46242c428ee8bccf.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-bf811e793052c917.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/terminal/page-a75fe180a7233b2b.js +1 -0
- package/.next/static/chunks/webpack-0f9275e279c058eb.js +1 -0
- package/.next/static/css/b4bdb1f3457fe9a7.css +1 -0
- package/.next/trace +11 -10
- package/.next/types/app/api/skills/[id]/route.ts +347 -0
- package/.next/types/app/api/skills/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/skills/[skillId]/install/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/skills/[skillId]/plan/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/skills/route.ts +347 -0
- package/.next/types/app/skills/[skillId]/page.ts +84 -0
- package/.next/types/app/skills/page.ts +84 -0
- package/.next/types/routes.d.ts +11 -2
- package/.next/types/validator.ts +81 -0
- package/dist/cli/commands/skill-format.d.ts +28 -0
- package/dist/cli/commands/skill-format.d.ts.map +1 -0
- package/dist/cli/commands/skill-format.js +163 -0
- package/dist/cli/commands/skill-guards.d.ts +53 -0
- package/dist/cli/commands/skill-guards.d.ts.map +1 -0
- package/dist/cli/commands/skill-guards.js +188 -0
- package/dist/cli/commands/skill.d.ts +24 -0
- package/dist/cli/commands/skill.d.ts.map +1 -0
- package/dist/cli/commands/skill.js +365 -0
- package/dist/cli/docs/agent-operations.d.ts +1 -1
- package/dist/cli/docs/agent-operations.d.ts.map +1 -1
- package/dist/cli/docs/agent-operations.js +36 -0
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +11 -0
- package/dist/cli/types/api-responses.d.ts +215 -0
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/index.d.ts +60 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/types/index.js +23 -1
- package/dist/cli/utils/api-client.d.ts +19 -1
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +41 -4
- package/dist/server/server.js +57 -0
- package/dist/server/src/config/activity-bar-config.js +2 -0
- package/dist/server/src/config/git-status-config.js +83 -0
- package/dist/server/src/config/skill-security-config.js +139 -0
- package/dist/server/src/lib/db/migrations/index.js +8 -0
- package/dist/server/src/lib/db/migrations/runner.js +1 -1
- package/dist/server/src/lib/db/migrations/v44-skill-operations.js +81 -0
- package/dist/server/src/lib/db/migrations/v45-skill-installations.js +59 -0
- package/dist/server/src/lib/db/migrations/v46-skill-installations-cascade.js +107 -0
- package/dist/server/src/lib/db/migrations/v47-skill-installations-roots.js +70 -0
- package/dist/server/src/lib/db/worktree-db.js +9 -4
- package/dist/server/src/lib/git/git-errors.js +336 -0
- package/dist/server/src/lib/git/git-exec.js +285 -0
- package/dist/server/src/lib/skills/compatibility.js +194 -0
- package/dist/server/src/lib/skills/constants.js +252 -0
- package/dist/server/src/lib/skills/errors.js +82 -0
- package/dist/server/src/lib/skills/index.js +91 -0
- package/dist/server/src/lib/skills/install-apply.js +670 -0
- package/dist/server/src/lib/skills/install-plan.js +582 -0
- package/dist/server/src/lib/skills/installed-state.js +127 -0
- package/dist/server/src/lib/skills/integrity.js +225 -0
- package/dist/server/src/lib/skills/json-schema.js +365 -0
- package/dist/server/src/lib/skills/operation-audit.js +120 -0
- package/dist/server/src/lib/skills/operation-journal.js +286 -0
- package/dist/server/src/lib/skills/operation-lock.js +339 -0
- package/dist/server/src/lib/skills/operation-reconciler.js +107 -0
- package/dist/server/src/lib/skills/operation-store.js +153 -0
- package/dist/server/src/lib/skills/package-reader.js +495 -0
- package/dist/server/src/lib/skills/package-validator.js +451 -0
- package/dist/server/src/lib/skills/preview-diff.js +627 -0
- package/dist/server/src/lib/skills/safe-yaml.js +593 -0
- package/dist/server/src/lib/skills/schema.js +1248 -0
- package/dist/server/src/lib/skills/semver.js +193 -0
- package/dist/server/src/lib/skills/snapshot-store.js +334 -0
- package/dist/server/src/lib/skills/startup-reconcile.js +138 -0
- package/dist/server/src/lib/skills/uninstall-apply.js +495 -0
- package/dist/server/src/lib/skills/uninstall-plan.js +479 -0
- package/dist/server/src/types/skills.js +17 -0
- package/package.json +1 -1
- package/.next/server/chunks/129.js +0 -1
- package/.next/server/chunks/2478.js +0 -1
- package/.next/server/chunks/9886.js +0 -1
- package/.next/static/0_lnKsT0DH-MnHhnV5n-l/_buildManifest.js +0 -1
- package/.next/static/chunks/3165-87bf884f7f3d15cf.js +0 -1
- package/.next/static/chunks/6416.6756b7ad06dd96f7.js +0 -1
- package/.next/static/chunks/8676.57260a06f6554e7e.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/assistant/conversation/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/assistant/current-output/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/assistant/messages/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/assistant/session/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/assistant/start/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/assistant/terminal/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/assistant/tools/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/templates/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/todos/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-7536041a7a89616d.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-9a4ce51e697baac6.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/terminal/page-ed4590b024edd8d6.js +0 -1
- package/.next/static/chunks/webpack-2e3739a831868daa.js +0 -1
- package/.next/static/css/d7e2e8d1b8d69d36.css +0 -1
- /package/.next/static/{0_lnKsT0DH-MnHhnV5n-l → D-aoE4gWfuCUN0GqEPIX3}/_ssgManifest.js +0 -0
|
@@ -1,807 +1,51 @@
|
|
|
1
|
-
"use strict";exports.id=8807,exports.ids=[8807],exports.modules={
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
`).get(c.id);if(b){let a=b.content.substring(0,200);d.run(a,b.timestamp,c.id)}}},down:a=>{a.exec(`
|
|
27
|
-
-- Create backup table
|
|
28
|
-
CREATE TABLE worktrees_backup AS
|
|
29
|
-
SELECT id, name, path, last_message_summary, updated_at
|
|
30
|
-
FROM worktrees;
|
|
31
|
-
|
|
32
|
-
-- Drop original table
|
|
33
|
-
DROP TABLE worktrees;
|
|
34
|
-
|
|
35
|
-
-- Recreate original table
|
|
36
|
-
CREATE TABLE worktrees (
|
|
37
|
-
id TEXT PRIMARY KEY,
|
|
38
|
-
name TEXT NOT NULL,
|
|
39
|
-
path TEXT NOT NULL UNIQUE,
|
|
40
|
-
last_message_summary TEXT,
|
|
41
|
-
updated_at INTEGER
|
|
42
|
-
);
|
|
43
|
-
|
|
44
|
-
-- Restore data
|
|
45
|
-
INSERT INTO worktrees (id, name, path, last_message_summary, updated_at)
|
|
46
|
-
SELECT id, name, path, last_message_summary, updated_at
|
|
47
|
-
FROM worktrees_backup;
|
|
48
|
-
|
|
49
|
-
-- Drop backup table
|
|
50
|
-
DROP TABLE worktrees_backup;
|
|
51
|
-
|
|
52
|
-
-- Drop index
|
|
53
|
-
DROP INDEX IF EXISTS idx_worktrees_repository;
|
|
54
|
-
`)}},{version:3,name:"fix-worktree-repository-paths",up:a=>{let b=a.prepare("SELECT id, path FROM worktrees").all(),c=a.prepare(`
|
|
55
|
-
UPDATE worktrees
|
|
56
|
-
SET repository_path = ?,
|
|
57
|
-
repository_name = ?
|
|
58
|
-
WHERE id = ?
|
|
59
|
-
`);for(let a of b){let b=g(a.path),d=e().basename(b);c.run(b,d,a.id)}},down:()=>{console.log("No rollback needed for repository path fix")}},{version:4,name:"add-favorite-field",up:a=>{a.exec(`
|
|
60
|
-
ALTER TABLE worktrees ADD COLUMN favorite INTEGER DEFAULT 0;
|
|
61
|
-
`),a.exec(`
|
|
62
|
-
CREATE INDEX IF NOT EXISTS idx_worktrees_favorite
|
|
63
|
-
ON worktrees(favorite DESC, updated_at DESC);
|
|
64
|
-
`)},down:a=>{a.exec(`
|
|
65
|
-
DROP INDEX IF EXISTS idx_worktrees_favorite;
|
|
66
|
-
`)}},{version:5,name:"add-status-field",up:a=>{a.exec(`
|
|
67
|
-
ALTER TABLE worktrees ADD COLUMN status TEXT DEFAULT NULL;
|
|
68
|
-
`),a.exec(`
|
|
69
|
-
CREATE INDEX IF NOT EXISTS idx_worktrees_status
|
|
70
|
-
ON worktrees(status);
|
|
71
|
-
`)},down:a=>{a.exec(`
|
|
72
|
-
DROP INDEX IF EXISTS idx_worktrees_status;
|
|
73
|
-
`)}},{version:6,name:"add-link-field",up:a=>{a.exec(`
|
|
74
|
-
ALTER TABLE worktrees ADD COLUMN link TEXT DEFAULT NULL;
|
|
75
|
-
`)},down:()=>{console.log("No rollback needed for link field")}},{version:7,name:"add-cli-tool-id",up:a=>{a.exec(`
|
|
76
|
-
ALTER TABLE worktrees ADD COLUMN cli_tool_id TEXT DEFAULT 'claude';
|
|
77
|
-
`),a.exec(`
|
|
78
|
-
CREATE INDEX IF NOT EXISTS idx_worktrees_cli_tool
|
|
79
|
-
ON worktrees(cli_tool_id);
|
|
80
|
-
`),a.exec(`
|
|
81
|
-
UPDATE worktrees SET cli_tool_id = 'claude' WHERE cli_tool_id IS NULL;
|
|
82
|
-
`)},down:a=>{a.exec(`
|
|
83
|
-
DROP INDEX IF EXISTS idx_worktrees_cli_tool;
|
|
84
|
-
`),console.log("No full rollback for cli_tool_id column (SQLite limitation)")}},{version:8,name:"change-role-claude-to-assistant",up:a=>{a.exec(`
|
|
85
|
-
CREATE TABLE chat_messages_new (
|
|
86
|
-
id TEXT PRIMARY KEY,
|
|
87
|
-
worktree_id TEXT NOT NULL,
|
|
88
|
-
role TEXT NOT NULL CHECK (role IN ('user', 'assistant')),
|
|
89
|
-
content TEXT NOT NULL,
|
|
90
|
-
summary TEXT,
|
|
91
|
-
timestamp INTEGER NOT NULL,
|
|
92
|
-
log_file_name TEXT,
|
|
93
|
-
request_id TEXT,
|
|
94
|
-
message_type TEXT DEFAULT 'normal',
|
|
95
|
-
prompt_data TEXT,
|
|
96
|
-
cli_tool_id TEXT DEFAULT 'claude',
|
|
97
|
-
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
98
|
-
);
|
|
99
|
-
`),a.exec(`
|
|
100
|
-
INSERT INTO chat_messages_new
|
|
101
|
-
SELECT
|
|
102
|
-
id,
|
|
103
|
-
worktree_id,
|
|
104
|
-
CASE WHEN role = 'claude' THEN 'assistant' ELSE role END as role,
|
|
105
|
-
content,
|
|
106
|
-
summary,
|
|
107
|
-
timestamp,
|
|
108
|
-
log_file_name,
|
|
109
|
-
request_id,
|
|
110
|
-
message_type,
|
|
111
|
-
prompt_data,
|
|
112
|
-
cli_tool_id
|
|
113
|
-
FROM chat_messages;
|
|
114
|
-
`),a.exec("DROP TABLE chat_messages;"),a.exec("ALTER TABLE chat_messages_new RENAME TO chat_messages;"),a.exec(`
|
|
115
|
-
CREATE INDEX IF NOT EXISTS idx_chat_messages_worktree
|
|
116
|
-
ON chat_messages(worktree_id);
|
|
117
|
-
`),a.exec(`
|
|
118
|
-
CREATE INDEX IF NOT EXISTS idx_chat_messages_timestamp
|
|
119
|
-
ON chat_messages(timestamp);
|
|
120
|
-
`),console.log('Changed role constraint from "claude" to "assistant"'),console.log('Updated existing messages with role="claude" to role="assistant"')},down:a=>{a.exec(`
|
|
121
|
-
CREATE TABLE chat_messages_new (
|
|
122
|
-
id TEXT PRIMARY KEY,
|
|
123
|
-
worktree_id TEXT NOT NULL,
|
|
124
|
-
role TEXT NOT NULL CHECK (role IN ('user', 'claude')),
|
|
125
|
-
content TEXT NOT NULL,
|
|
126
|
-
summary TEXT,
|
|
127
|
-
timestamp INTEGER NOT NULL,
|
|
128
|
-
log_file_name TEXT,
|
|
129
|
-
request_id TEXT,
|
|
130
|
-
message_type TEXT DEFAULT 'normal',
|
|
131
|
-
prompt_data TEXT,
|
|
132
|
-
cli_tool_id TEXT DEFAULT 'claude',
|
|
133
|
-
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
134
|
-
);
|
|
135
|
-
`),a.exec(`
|
|
136
|
-
INSERT INTO chat_messages_new
|
|
137
|
-
SELECT
|
|
138
|
-
id,
|
|
139
|
-
worktree_id,
|
|
140
|
-
CASE WHEN role = 'assistant' THEN 'claude' ELSE role END as role,
|
|
141
|
-
content,
|
|
142
|
-
summary,
|
|
143
|
-
timestamp,
|
|
144
|
-
log_file_name,
|
|
145
|
-
request_id,
|
|
146
|
-
message_type,
|
|
147
|
-
prompt_data,
|
|
148
|
-
cli_tool_id
|
|
149
|
-
FROM chat_messages;
|
|
150
|
-
`),a.exec("DROP TABLE chat_messages;"),a.exec("ALTER TABLE chat_messages_new RENAME TO chat_messages;"),a.exec(`
|
|
151
|
-
CREATE INDEX IF NOT EXISTS idx_chat_messages_worktree
|
|
152
|
-
ON chat_messages(worktree_id);
|
|
153
|
-
`),a.exec(`
|
|
154
|
-
CREATE INDEX IF NOT EXISTS idx_chat_messages_timestamp
|
|
155
|
-
ON chat_messages(timestamp);
|
|
156
|
-
`),console.log('Rolled back: Changed role constraint from "assistant" to "claude"')}},{version:9,name:"add-in-progress-message-id-to-session-states",up:a=>{a.exec(`
|
|
157
|
-
ALTER TABLE session_states ADD COLUMN in_progress_message_id TEXT DEFAULT NULL;
|
|
158
|
-
`),console.log("Added in_progress_message_id column to session_states table")},down:()=>{console.log("No full rollback for in_progress_message_id column (SQLite limitation)")}},{version:10,name:"add-worktree-memos-table",up:a=>{a.exec(`
|
|
159
|
-
CREATE TABLE worktree_memos (
|
|
160
|
-
id TEXT PRIMARY KEY,
|
|
161
|
-
worktree_id TEXT NOT NULL,
|
|
162
|
-
title TEXT NOT NULL DEFAULT 'Memo',
|
|
163
|
-
content TEXT NOT NULL DEFAULT '',
|
|
164
|
-
position INTEGER NOT NULL DEFAULT 0,
|
|
165
|
-
created_at INTEGER NOT NULL,
|
|
166
|
-
updated_at INTEGER NOT NULL,
|
|
167
|
-
|
|
168
|
-
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE,
|
|
169
|
-
UNIQUE(worktree_id, position)
|
|
170
|
-
);
|
|
171
|
-
`),a.exec(`
|
|
172
|
-
CREATE INDEX idx_worktree_memos_worktree
|
|
173
|
-
ON worktree_memos(worktree_id, position);
|
|
174
|
-
`);let{randomUUID:b}=c(55511),d=a.prepare(`
|
|
175
|
-
SELECT id, memo FROM worktrees WHERE memo IS NOT NULL AND memo != ''
|
|
176
|
-
`).all(),e=a.prepare(`
|
|
177
|
-
INSERT INTO worktree_memos (id, worktree_id, title, content, position, created_at, updated_at)
|
|
178
|
-
VALUES (?, ?, 'Memo', ?, 0, ?, ?)
|
|
179
|
-
`),f=Date.now();for(let a of d)e.run(b(),a.id,a.memo,f,f);console.log("Created worktree_memos table"),console.log(`Migrated ${d.length} existing memos to new table`)},down:a=>{a.exec("DROP TABLE IF EXISTS worktree_memos"),console.log("Dropped worktree_memos table")}},{version:11,name:"add-viewed-tracking",up:a=>{a.exec(`
|
|
180
|
-
ALTER TABLE worktrees ADD COLUMN last_viewed_at TEXT;
|
|
181
|
-
`),a.exec(`
|
|
182
|
-
CREATE INDEX IF NOT EXISTS idx_chat_messages_assistant_latest
|
|
183
|
-
ON chat_messages(worktree_id, role, timestamp DESC);
|
|
184
|
-
`),console.log("Added last_viewed_at column to worktrees table"),console.log("Created index for assistant message queries")},down:a=>{a.exec("DROP INDEX IF EXISTS idx_chat_messages_assistant_latest"),console.log("Dropped idx_chat_messages_assistant_latest index")}},{version:12,name:"add-external-apps-table",up:a=>{a.exec(`
|
|
185
|
-
CREATE TABLE IF NOT EXISTS external_apps (
|
|
186
|
-
id TEXT PRIMARY KEY,
|
|
187
|
-
|
|
188
|
-
-- Basic info
|
|
189
|
-
name TEXT NOT NULL UNIQUE,
|
|
190
|
-
display_name TEXT NOT NULL,
|
|
191
|
-
description TEXT,
|
|
192
|
-
|
|
193
|
-
-- Routing config
|
|
194
|
-
path_prefix TEXT NOT NULL UNIQUE,
|
|
195
|
-
target_port INTEGER NOT NULL,
|
|
196
|
-
target_host TEXT DEFAULT 'localhost',
|
|
197
|
-
|
|
198
|
-
-- App type
|
|
199
|
-
app_type TEXT NOT NULL CHECK(app_type IN ('sveltekit', 'streamlit', 'nextjs', 'other')),
|
|
200
|
-
|
|
201
|
-
-- WebSocket config
|
|
202
|
-
websocket_enabled INTEGER DEFAULT 0,
|
|
203
|
-
websocket_path_pattern TEXT,
|
|
1
|
+
"use strict";exports.id=8807,exports.ids=[8807],exports.modules={25537:(a,b,c)=>{function d(a){a.exec(`
|
|
2
|
+
CREATE TABLE IF NOT EXISTS worktrees (
|
|
3
|
+
id TEXT PRIMARY KEY,
|
|
4
|
+
name TEXT NOT NULL,
|
|
5
|
+
path TEXT NOT NULL UNIQUE,
|
|
6
|
+
last_message_summary TEXT,
|
|
7
|
+
updated_at INTEGER
|
|
8
|
+
);
|
|
9
|
+
`),a.exec(`
|
|
10
|
+
CREATE INDEX IF NOT EXISTS idx_worktrees_updated_at
|
|
11
|
+
ON worktrees(updated_at DESC);
|
|
12
|
+
`),a.exec(`
|
|
13
|
+
CREATE TABLE IF NOT EXISTS chat_messages (
|
|
14
|
+
id TEXT PRIMARY KEY,
|
|
15
|
+
worktree_id TEXT NOT NULL,
|
|
16
|
+
role TEXT NOT NULL CHECK(role IN ('user', 'assistant')),
|
|
17
|
+
content TEXT NOT NULL,
|
|
18
|
+
summary TEXT,
|
|
19
|
+
timestamp INTEGER NOT NULL,
|
|
20
|
+
log_file_name TEXT,
|
|
21
|
+
request_id TEXT,
|
|
22
|
+
message_type TEXT DEFAULT 'normal',
|
|
23
|
+
prompt_data TEXT,
|
|
24
|
+
cli_tool_id TEXT DEFAULT 'claude',
|
|
25
|
+
archived INTEGER DEFAULT 0,
|
|
204
26
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
normalized_clone_url TEXT,
|
|
228
|
-
clone_source TEXT CHECK(clone_source IN ('local', 'https', 'ssh')) DEFAULT 'local',
|
|
229
|
-
is_env_managed INTEGER NOT NULL DEFAULT 0,
|
|
230
|
-
created_at INTEGER NOT NULL,
|
|
231
|
-
updated_at INTEGER NOT NULL
|
|
232
|
-
);
|
|
233
|
-
`),a.exec(`
|
|
234
|
-
CREATE UNIQUE INDEX IF NOT EXISTS idx_repositories_normalized_clone_url
|
|
235
|
-
ON repositories(normalized_clone_url)
|
|
236
|
-
WHERE normalized_clone_url IS NOT NULL;
|
|
237
|
-
`),a.exec(`
|
|
238
|
-
CREATE INDEX IF NOT EXISTS idx_repositories_path
|
|
239
|
-
ON repositories(path);
|
|
240
|
-
`),a.exec(`
|
|
241
|
-
CREATE TABLE IF NOT EXISTS clone_jobs (
|
|
242
|
-
id TEXT PRIMARY KEY,
|
|
243
|
-
clone_url TEXT NOT NULL,
|
|
244
|
-
normalized_clone_url TEXT NOT NULL,
|
|
245
|
-
target_path TEXT NOT NULL,
|
|
246
|
-
repository_id TEXT,
|
|
247
|
-
status TEXT NOT NULL CHECK(status IN ('pending', 'running', 'completed', 'failed', 'cancelled')) DEFAULT 'pending',
|
|
248
|
-
pid INTEGER,
|
|
249
|
-
progress INTEGER NOT NULL DEFAULT 0,
|
|
250
|
-
error_category TEXT,
|
|
251
|
-
error_code TEXT,
|
|
252
|
-
error_message TEXT,
|
|
253
|
-
started_at INTEGER,
|
|
254
|
-
completed_at INTEGER,
|
|
255
|
-
created_at INTEGER NOT NULL,
|
|
256
|
-
|
|
257
|
-
FOREIGN KEY (repository_id) REFERENCES repositories(id) ON DELETE SET NULL
|
|
258
|
-
);
|
|
259
|
-
`),a.exec(`
|
|
260
|
-
CREATE INDEX IF NOT EXISTS idx_clone_jobs_status
|
|
261
|
-
ON clone_jobs(status);
|
|
262
|
-
`),a.exec(`
|
|
263
|
-
CREATE INDEX IF NOT EXISTS idx_clone_jobs_normalized_clone_url
|
|
264
|
-
ON clone_jobs(normalized_clone_url);
|
|
265
|
-
`),console.log("Created repositories table"),console.log("Created clone_jobs table"),console.log("Created indexes for repositories and clone_jobs")},down:a=>{a.exec("DROP INDEX IF EXISTS idx_clone_jobs_normalized_clone_url"),a.exec("DROP INDEX IF EXISTS idx_clone_jobs_status"),a.exec("DROP TABLE IF EXISTS clone_jobs"),a.exec("DROP INDEX IF EXISTS idx_repositories_path"),a.exec("DROP INDEX IF EXISTS idx_repositories_normalized_clone_url"),a.exec("DROP TABLE IF EXISTS repositories"),console.log("Dropped repositories and clone_jobs tables")}},{version:15,name:"add-initial-branch-column",up:a=>{a.exec(`
|
|
266
|
-
ALTER TABLE worktrees ADD COLUMN initial_branch TEXT;
|
|
267
|
-
`),console.log("Added initial_branch column to worktrees table")},down:a=>{a.exec(`
|
|
268
|
-
-- 1. Create backup table without initial_branch
|
|
269
|
-
CREATE TABLE worktrees_backup AS
|
|
270
|
-
SELECT id, name, path, repository_path, repository_name, description,
|
|
271
|
-
last_user_message, last_user_message_at, last_message_summary,
|
|
272
|
-
favorite, status, link, cli_tool_id, updated_at, last_viewed_at
|
|
273
|
-
FROM worktrees;
|
|
274
|
-
|
|
275
|
-
-- 2. Drop original table
|
|
276
|
-
DROP TABLE worktrees;
|
|
277
|
-
|
|
278
|
-
-- 3. Recreate table without initial_branch
|
|
279
|
-
CREATE TABLE worktrees (
|
|
280
|
-
id TEXT PRIMARY KEY,
|
|
281
|
-
name TEXT NOT NULL,
|
|
282
|
-
path TEXT NOT NULL UNIQUE,
|
|
283
|
-
repository_path TEXT,
|
|
284
|
-
repository_name TEXT,
|
|
285
|
-
description TEXT,
|
|
286
|
-
last_user_message TEXT,
|
|
287
|
-
last_user_message_at INTEGER,
|
|
288
|
-
last_message_summary TEXT,
|
|
289
|
-
favorite INTEGER DEFAULT 0,
|
|
290
|
-
status TEXT DEFAULT NULL,
|
|
291
|
-
link TEXT DEFAULT NULL,
|
|
292
|
-
cli_tool_id TEXT DEFAULT 'claude',
|
|
293
|
-
updated_at INTEGER,
|
|
294
|
-
last_viewed_at TEXT
|
|
295
|
-
);
|
|
296
|
-
|
|
297
|
-
-- 4. Restore data
|
|
298
|
-
INSERT INTO worktrees (id, name, path, repository_path, repository_name,
|
|
299
|
-
description, last_user_message, last_user_message_at, last_message_summary,
|
|
300
|
-
favorite, status, link, cli_tool_id, updated_at, last_viewed_at)
|
|
301
|
-
SELECT id, name, path, repository_path, repository_name,
|
|
302
|
-
description, last_user_message, last_user_message_at, last_message_summary,
|
|
303
|
-
favorite, status, link, cli_tool_id, updated_at, last_viewed_at
|
|
304
|
-
FROM worktrees_backup;
|
|
305
|
-
|
|
306
|
-
-- 5. Drop backup
|
|
307
|
-
DROP TABLE worktrees_backup;
|
|
308
|
-
|
|
309
|
-
-- 6. Recreate indexes
|
|
310
|
-
CREATE INDEX IF NOT EXISTS idx_worktrees_updated_at
|
|
311
|
-
ON worktrees(updated_at DESC);
|
|
312
|
-
|
|
313
|
-
CREATE INDEX IF NOT EXISTS idx_worktrees_repository
|
|
314
|
-
ON worktrees(repository_path);
|
|
315
|
-
|
|
316
|
-
CREATE INDEX IF NOT EXISTS idx_worktrees_favorite
|
|
317
|
-
ON worktrees(favorite DESC, updated_at DESC);
|
|
318
|
-
|
|
319
|
-
CREATE INDEX IF NOT EXISTS idx_worktrees_status
|
|
320
|
-
ON worktrees(status);
|
|
321
|
-
|
|
322
|
-
CREATE INDEX IF NOT EXISTS idx_worktrees_cli_tool
|
|
323
|
-
ON worktrees(cli_tool_id);
|
|
324
|
-
`),console.log("Removed initial_branch column from worktrees table")}},{version:16,name:"add-issue-no-to-external-apps",up:a=>{a.exec(`
|
|
325
|
-
ALTER TABLE external_apps ADD COLUMN issue_no INTEGER;
|
|
326
|
-
`),a.exec(`
|
|
327
|
-
CREATE INDEX IF NOT EXISTS idx_external_apps_issue_no ON external_apps(issue_no);
|
|
328
|
-
`),console.log("Added issue_no column to external_apps table"),console.log("Created index idx_external_apps_issue_no")},down:a=>{a.exec(`
|
|
329
|
-
-- 1. Create backup table without issue_no
|
|
330
|
-
CREATE TABLE external_apps_backup AS
|
|
331
|
-
SELECT id, name, display_name, description, path_prefix, target_port,
|
|
332
|
-
target_host, app_type, websocket_enabled, websocket_path_pattern,
|
|
333
|
-
enabled, created_at, updated_at
|
|
334
|
-
FROM external_apps;
|
|
335
|
-
|
|
336
|
-
-- 2. Drop original table (this also drops indexes)
|
|
337
|
-
DROP TABLE external_apps;
|
|
338
|
-
|
|
339
|
-
-- 3. Recreate table without issue_no
|
|
340
|
-
CREATE TABLE external_apps (
|
|
341
|
-
id TEXT PRIMARY KEY,
|
|
342
|
-
name TEXT NOT NULL UNIQUE,
|
|
343
|
-
display_name TEXT NOT NULL,
|
|
344
|
-
description TEXT,
|
|
345
|
-
path_prefix TEXT NOT NULL UNIQUE,
|
|
346
|
-
target_port INTEGER NOT NULL,
|
|
347
|
-
target_host TEXT DEFAULT 'localhost',
|
|
348
|
-
app_type TEXT NOT NULL CHECK(app_type IN ('sveltekit', 'streamlit', 'nextjs', 'other')),
|
|
349
|
-
websocket_enabled INTEGER DEFAULT 0,
|
|
350
|
-
websocket_path_pattern TEXT,
|
|
351
|
-
enabled INTEGER DEFAULT 1,
|
|
352
|
-
created_at INTEGER NOT NULL,
|
|
353
|
-
updated_at INTEGER NOT NULL
|
|
354
|
-
);
|
|
355
|
-
|
|
356
|
-
-- 4. Restore data
|
|
357
|
-
INSERT INTO external_apps (id, name, display_name, description, path_prefix,
|
|
358
|
-
target_port, target_host, app_type, websocket_enabled, websocket_path_pattern,
|
|
359
|
-
enabled, created_at, updated_at)
|
|
360
|
-
SELECT id, name, display_name, description, path_prefix,
|
|
361
|
-
target_port, target_host, app_type, websocket_enabled, websocket_path_pattern,
|
|
362
|
-
enabled, created_at, updated_at
|
|
363
|
-
FROM external_apps_backup;
|
|
364
|
-
|
|
365
|
-
-- 5. Drop backup
|
|
366
|
-
DROP TABLE external_apps_backup;
|
|
367
|
-
|
|
368
|
-
-- 6. Recreate original indexes
|
|
369
|
-
CREATE INDEX idx_external_apps_path_prefix ON external_apps(path_prefix);
|
|
370
|
-
CREATE INDEX idx_external_apps_enabled ON external_apps(enabled);
|
|
371
|
-
`),console.log("Removed issue_no column from external_apps table")}},{version:17,name:"add-scheduled-executions-and-execution-logs",up:a=>{a.exec(`
|
|
372
|
-
DELETE FROM chat_messages WHERE worktree_id NOT IN (SELECT id FROM worktrees);
|
|
373
|
-
`),a.exec(`
|
|
374
|
-
DELETE FROM session_states WHERE worktree_id NOT IN (SELECT id FROM worktrees);
|
|
375
|
-
`),a.exec(`
|
|
376
|
-
DELETE FROM worktree_memos WHERE worktree_id NOT IN (SELECT id FROM worktrees);
|
|
377
|
-
`),a.exec(`
|
|
378
|
-
UPDATE clone_jobs SET repository_id = NULL
|
|
379
|
-
WHERE repository_id IS NOT NULL AND repository_id NOT IN (SELECT id FROM repositories);
|
|
380
|
-
`),a.exec(`
|
|
381
|
-
CREATE TABLE scheduled_executions (
|
|
382
|
-
id TEXT PRIMARY KEY,
|
|
383
|
-
worktree_id TEXT NOT NULL,
|
|
384
|
-
cli_tool_id TEXT DEFAULT 'claude',
|
|
385
|
-
name TEXT NOT NULL,
|
|
386
|
-
message TEXT NOT NULL,
|
|
387
|
-
cron_expression TEXT,
|
|
388
|
-
enabled INTEGER DEFAULT 1,
|
|
389
|
-
last_executed_at INTEGER,
|
|
390
|
-
next_execute_at INTEGER,
|
|
391
|
-
created_at INTEGER NOT NULL,
|
|
392
|
-
updated_at INTEGER NOT NULL,
|
|
393
|
-
UNIQUE(worktree_id, name),
|
|
394
|
-
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
395
|
-
);
|
|
396
|
-
`),a.exec(`
|
|
397
|
-
CREATE INDEX idx_scheduled_executions_worktree
|
|
398
|
-
ON scheduled_executions(worktree_id);
|
|
399
|
-
`),a.exec(`
|
|
400
|
-
CREATE INDEX idx_scheduled_executions_enabled
|
|
401
|
-
ON scheduled_executions(enabled);
|
|
402
|
-
`),a.exec(`
|
|
403
|
-
CREATE TABLE execution_logs (
|
|
404
|
-
id TEXT PRIMARY KEY,
|
|
405
|
-
schedule_id TEXT NOT NULL,
|
|
406
|
-
worktree_id TEXT NOT NULL,
|
|
407
|
-
message TEXT NOT NULL,
|
|
408
|
-
result TEXT,
|
|
409
|
-
exit_code INTEGER,
|
|
410
|
-
status TEXT DEFAULT 'running' CHECK(status IN ('running', 'completed', 'failed', 'timeout', 'cancelled')),
|
|
411
|
-
started_at INTEGER NOT NULL,
|
|
412
|
-
completed_at INTEGER,
|
|
413
|
-
created_at INTEGER NOT NULL,
|
|
414
|
-
FOREIGN KEY (schedule_id) REFERENCES scheduled_executions(id) ON DELETE CASCADE,
|
|
415
|
-
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
416
|
-
);
|
|
417
|
-
`),a.exec(`
|
|
418
|
-
CREATE INDEX idx_execution_logs_schedule
|
|
419
|
-
ON execution_logs(schedule_id);
|
|
420
|
-
`),a.exec(`
|
|
421
|
-
CREATE INDEX idx_execution_logs_worktree
|
|
422
|
-
ON execution_logs(worktree_id);
|
|
423
|
-
`),a.exec(`
|
|
424
|
-
CREATE INDEX idx_execution_logs_status
|
|
425
|
-
ON execution_logs(status);
|
|
426
|
-
`),console.log("Cleaned up orphan records"),console.log("Created scheduled_executions table"),console.log("Created execution_logs table"),console.log("Created indexes for schedule tables")},down:a=>{a.exec("DROP INDEX IF EXISTS idx_execution_logs_status"),a.exec("DROP INDEX IF EXISTS idx_execution_logs_worktree"),a.exec("DROP INDEX IF EXISTS idx_execution_logs_schedule"),a.exec("DROP TABLE IF EXISTS execution_logs"),a.exec("DROP INDEX IF EXISTS idx_scheduled_executions_enabled"),a.exec("DROP INDEX IF EXISTS idx_scheduled_executions_worktree"),a.exec("DROP TABLE IF EXISTS scheduled_executions"),console.log("Dropped scheduled_executions and execution_logs tables")}},{version:18,name:"add-selected-agents-column",up:a=>{a.exec(`
|
|
427
|
-
ALTER TABLE worktrees ADD COLUMN selected_agents TEXT;
|
|
428
|
-
`),a.exec(`
|
|
429
|
-
UPDATE worktrees SET selected_agents =
|
|
430
|
-
CASE
|
|
431
|
-
WHEN cli_tool_id NOT IN ('claude', 'codex')
|
|
432
|
-
THEN json_array(cli_tool_id, 'claude')
|
|
433
|
-
ELSE '["claude","codex"]'
|
|
434
|
-
END;
|
|
435
|
-
`),console.log("Added selected_agents column to worktrees table"),console.log("Initialized selected_agents based on cli_tool_id")},down:()=>{console.log("No rollback for selected_agents column (SQLite limitation)")}},{version:19,name:"add-vibe-local-model-column",up:a=>{a.exec(`
|
|
436
|
-
ALTER TABLE worktrees ADD COLUMN vibe_local_model TEXT DEFAULT NULL;
|
|
437
|
-
`),console.log("Added vibe_local_model column to worktrees table")},down:()=>{console.log("No rollback for vibe_local_model column (SQLite limitation)")}},{version:20,name:"add-vibe-local-context-window-column",up:a=>{a.exec(`
|
|
438
|
-
ALTER TABLE worktrees ADD COLUMN vibe_local_context_window INTEGER DEFAULT NULL;
|
|
439
|
-
`),console.log("Added vibe_local_context_window column to worktrees table")},down:()=>{console.log("No rollback for vibe_local_context_window column (SQLite limitation)")}},{version:21,name:"add-scheduled-executions-worktree-enabled-index",up:a=>{a.exec(`
|
|
440
|
-
CREATE INDEX IF NOT EXISTS idx_scheduled_executions_worktree_enabled
|
|
441
|
-
ON scheduled_executions(worktree_id, enabled);
|
|
442
|
-
`),console.log("Created composite index idx_scheduled_executions_worktree_enabled")},down:a=>{a.exec("DROP INDEX IF EXISTS idx_scheduled_executions_worktree_enabled"),console.log("Dropped idx_scheduled_executions_worktree_enabled index")}},{version:22,name:"add-archived-column-to-chat-messages",up:a=>{a.exec(`
|
|
443
|
-
ALTER TABLE chat_messages ADD COLUMN archived INTEGER DEFAULT 0;
|
|
444
|
-
`),a.exec(`
|
|
445
|
-
UPDATE chat_messages SET archived = 0 WHERE archived IS NULL;
|
|
446
|
-
`),a.exec(`
|
|
447
|
-
CREATE INDEX IF NOT EXISTS idx_messages_archived
|
|
448
|
-
ON chat_messages(worktree_id, archived, timestamp DESC);
|
|
449
|
-
`),console.log("Added archived column to chat_messages table"),console.log("Created composite index idx_messages_archived")},down:()=>{console.log("No rollback for archived column (SQLite limitation)")}},{version:23,name:"add-timer-messages-table",up:a=>{a.exec(`
|
|
450
|
-
CREATE TABLE timer_messages (
|
|
451
|
-
id TEXT PRIMARY KEY,
|
|
452
|
-
worktree_id TEXT NOT NULL,
|
|
453
|
-
cli_tool_id TEXT NOT NULL,
|
|
454
|
-
message TEXT NOT NULL,
|
|
455
|
-
delay_ms INTEGER NOT NULL,
|
|
456
|
-
scheduled_send_time INTEGER NOT NULL,
|
|
457
|
-
status TEXT NOT NULL DEFAULT 'pending',
|
|
458
|
-
created_at INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
|
|
459
|
-
sent_at INTEGER,
|
|
460
|
-
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
461
|
-
);
|
|
462
|
-
|
|
463
|
-
CREATE INDEX idx_timer_messages_worktree_status
|
|
464
|
-
ON timer_messages(worktree_id, status);
|
|
465
|
-
|
|
466
|
-
CREATE INDEX idx_timer_messages_status_scheduled
|
|
467
|
-
ON timer_messages(status, scheduled_send_time);
|
|
468
|
-
`),console.log("Created timer_messages table with indexes")},down:a=>{a.exec(`
|
|
469
|
-
DROP INDEX IF EXISTS idx_timer_messages_status_scheduled;
|
|
470
|
-
DROP INDEX IF EXISTS idx_timer_messages_worktree_status;
|
|
471
|
-
DROP TABLE IF EXISTS timer_messages;
|
|
472
|
-
`)}},{version:24,name:"add-daily-reports-table",up:a=>{a.exec(`
|
|
473
|
-
CREATE TABLE daily_reports (
|
|
474
|
-
date TEXT PRIMARY KEY,
|
|
475
|
-
content TEXT NOT NULL,
|
|
476
|
-
generated_by_tool TEXT NOT NULL,
|
|
477
|
-
model TEXT,
|
|
478
|
-
created_at INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
|
|
479
|
-
updated_at INTEGER NOT NULL DEFAULT (unixepoch() * 1000)
|
|
480
|
-
);
|
|
481
|
-
`),console.log("Created daily_reports table")},down:a=>{a.exec("DROP TABLE IF EXISTS daily_reports"),console.log("Dropped daily_reports table")}},{version:25,name:"add-report-templates-table",up:a=>{a.exec(`
|
|
482
|
-
CREATE TABLE report_templates (
|
|
483
|
-
id TEXT PRIMARY KEY,
|
|
484
|
-
name TEXT NOT NULL,
|
|
485
|
-
content TEXT NOT NULL,
|
|
486
|
-
sort_order INTEGER NOT NULL DEFAULT 0,
|
|
487
|
-
created_at INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
|
|
488
|
-
updated_at INTEGER NOT NULL DEFAULT (unixepoch() * 1000)
|
|
489
|
-
);
|
|
490
|
-
`),console.log("Created report_templates table")},down:a=>{a.exec("DROP TABLE IF EXISTS report_templates"),console.log("Dropped report_templates table")}},{version:26,name:"add-repository-display-name",up:a=>{a.exec("ALTER TABLE repositories ADD COLUMN display_name TEXT;"),console.log("Added display_name column to repositories table")},down:a=>{a.exec("ALTER TABLE repositories DROP COLUMN display_name;"),console.log("Removed display_name column from repositories table")}},{version:27,name:"add-app-settings-table",up:a=>{a.exec(`
|
|
491
|
-
CREATE TABLE IF NOT EXISTS app_settings (
|
|
492
|
-
key TEXT PRIMARY KEY,
|
|
493
|
-
value TEXT NOT NULL,
|
|
494
|
-
created_at INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
|
|
495
|
-
updated_at INTEGER NOT NULL DEFAULT (unixepoch() * 1000)
|
|
496
|
-
);
|
|
497
|
-
`)},down:a=>{a.exec("DROP TABLE IF EXISTS app_settings")}},{version:28,name:"add-assistant-conversation-tables",up:a=>{a.exec(`
|
|
498
|
-
CREATE TABLE IF NOT EXISTS assistant_conversations (
|
|
499
|
-
id TEXT PRIMARY KEY,
|
|
500
|
-
repository_id TEXT NOT NULL,
|
|
501
|
-
cli_tool_id TEXT NOT NULL,
|
|
502
|
-
working_directory TEXT NOT NULL,
|
|
503
|
-
session_name TEXT,
|
|
504
|
-
status TEXT NOT NULL DEFAULT 'idle',
|
|
505
|
-
last_started_at INTEGER,
|
|
506
|
-
last_stopped_at INTEGER,
|
|
507
|
-
context_sent_at INTEGER,
|
|
508
|
-
created_at INTEGER NOT NULL,
|
|
509
|
-
updated_at INTEGER NOT NULL,
|
|
510
|
-
archived INTEGER NOT NULL DEFAULT 0,
|
|
511
|
-
UNIQUE(repository_id, cli_tool_id),
|
|
512
|
-
FOREIGN KEY (repository_id) REFERENCES repositories(id) ON DELETE CASCADE
|
|
513
|
-
);
|
|
514
|
-
|
|
515
|
-
CREATE INDEX IF NOT EXISTS idx_assistant_conversations_repository_tool
|
|
516
|
-
ON assistant_conversations(repository_id, cli_tool_id);
|
|
517
|
-
|
|
518
|
-
CREATE INDEX IF NOT EXISTS idx_assistant_conversations_status
|
|
519
|
-
ON assistant_conversations(status, archived, updated_at DESC);
|
|
520
|
-
|
|
521
|
-
CREATE TABLE IF NOT EXISTS assistant_messages (
|
|
522
|
-
id TEXT PRIMARY KEY,
|
|
523
|
-
conversation_id TEXT NOT NULL,
|
|
524
|
-
role TEXT NOT NULL CHECK(role IN ('user', 'assistant', 'system')),
|
|
525
|
-
content TEXT NOT NULL,
|
|
526
|
-
summary TEXT,
|
|
527
|
-
timestamp INTEGER NOT NULL,
|
|
528
|
-
message_type TEXT NOT NULL DEFAULT 'normal',
|
|
529
|
-
delivery_status TEXT CHECK(delivery_status IN ('pending', 'sent', 'failed')),
|
|
530
|
-
archived INTEGER NOT NULL DEFAULT 0,
|
|
531
|
-
FOREIGN KEY (conversation_id) REFERENCES assistant_conversations(id) ON DELETE CASCADE
|
|
532
|
-
);
|
|
533
|
-
|
|
534
|
-
CREATE INDEX IF NOT EXISTS idx_assistant_messages_conversation_time
|
|
535
|
-
ON assistant_messages(conversation_id, timestamp DESC);
|
|
536
|
-
|
|
537
|
-
CREATE INDEX IF NOT EXISTS idx_assistant_messages_delivery
|
|
538
|
-
ON assistant_messages(conversation_id, delivery_status, timestamp DESC);
|
|
539
|
-
|
|
540
|
-
CREATE TABLE IF NOT EXISTS assistant_session_states (
|
|
541
|
-
conversation_id TEXT PRIMARY KEY,
|
|
542
|
-
last_captured_line INTEGER NOT NULL DEFAULT 0,
|
|
543
|
-
in_progress_message_id TEXT,
|
|
544
|
-
FOREIGN KEY (conversation_id) REFERENCES assistant_conversations(id) ON DELETE CASCADE
|
|
545
|
-
);
|
|
546
|
-
`)},down:a=>{a.exec(`
|
|
547
|
-
DROP TABLE IF EXISTS assistant_session_states;
|
|
548
|
-
DROP TABLE IF EXISTS assistant_messages;
|
|
549
|
-
DROP TABLE IF EXISTS assistant_conversations;
|
|
550
|
-
`)}},{version:29,name:"add-assistant-non-interactive-executions",up:a=>{a.exec(`
|
|
551
|
-
ALTER TABLE assistant_conversations
|
|
552
|
-
ADD COLUMN execution_mode TEXT NOT NULL DEFAULT 'interactive';
|
|
553
|
-
|
|
554
|
-
ALTER TABLE assistant_conversations
|
|
555
|
-
ADD COLUMN resume_session_id TEXT;
|
|
556
|
-
|
|
557
|
-
ALTER TABLE assistant_conversations
|
|
558
|
-
ADD COLUMN last_execution_id TEXT;
|
|
559
|
-
|
|
560
|
-
UPDATE assistant_conversations
|
|
561
|
-
SET status = CASE
|
|
562
|
-
WHEN status = 'idle' THEN 'stopped'
|
|
563
|
-
ELSE status
|
|
564
|
-
END;
|
|
565
|
-
|
|
566
|
-
UPDATE assistant_conversations
|
|
567
|
-
SET execution_mode = CASE
|
|
568
|
-
WHEN cli_tool_id IN ('claude', 'codex') THEN 'non_interactive'
|
|
569
|
-
ELSE 'interactive'
|
|
570
|
-
END;
|
|
571
|
-
|
|
572
|
-
CREATE TABLE IF NOT EXISTS assistant_executions (
|
|
573
|
-
id TEXT PRIMARY KEY,
|
|
574
|
-
conversation_id TEXT NOT NULL,
|
|
575
|
-
cli_tool_id TEXT NOT NULL,
|
|
576
|
-
status TEXT NOT NULL,
|
|
577
|
-
pid INTEGER,
|
|
578
|
-
command_line TEXT NOT NULL,
|
|
579
|
-
prompt_text TEXT NOT NULL,
|
|
580
|
-
stdout_text TEXT,
|
|
581
|
-
stderr_text TEXT,
|
|
582
|
-
final_message_text TEXT,
|
|
583
|
-
exit_code INTEGER,
|
|
584
|
-
resume_session_id_before TEXT,
|
|
585
|
-
resume_session_id_after TEXT,
|
|
586
|
-
started_at INTEGER,
|
|
587
|
-
finished_at INTEGER,
|
|
588
|
-
created_at INTEGER NOT NULL,
|
|
589
|
-
updated_at INTEGER NOT NULL,
|
|
590
|
-
FOREIGN KEY (conversation_id) REFERENCES assistant_conversations(id) ON DELETE CASCADE
|
|
591
|
-
);
|
|
592
|
-
|
|
593
|
-
CREATE INDEX IF NOT EXISTS idx_assistant_executions_conversation
|
|
594
|
-
ON assistant_executions(conversation_id, created_at DESC);
|
|
595
|
-
|
|
596
|
-
CREATE INDEX IF NOT EXISTS idx_assistant_executions_status
|
|
597
|
-
ON assistant_executions(status, updated_at DESC);
|
|
598
|
-
`)},down:a=>{a.exec(`
|
|
599
|
-
DROP TABLE IF EXISTS assistant_executions;
|
|
600
|
-
`)}},{version:30,name:"add-assistant-context-snapshot",up:a=>{a.exec(`
|
|
601
|
-
ALTER TABLE assistant_conversations
|
|
602
|
-
ADD COLUMN context_snapshot TEXT;
|
|
603
|
-
`)},down:a=>{a.exec(`
|
|
604
|
-
ALTER TABLE assistant_conversations
|
|
605
|
-
DROP COLUMN context_snapshot;
|
|
606
|
-
`)}},{version:31,name:"add-repository-visible",up:a=>{a.exec("ALTER TABLE repositories ADD COLUMN visible INTEGER NOT NULL DEFAULT 1;")},down:a=>{a.exec("ALTER TABLE repositories DROP COLUMN visible;")}},{version:32,name:"add-messages-role-composite-index",up:a=>{a.exec(`
|
|
607
|
-
CREATE INDEX IF NOT EXISTS idx_messages_worktree_role_archived_time
|
|
608
|
-
ON chat_messages(worktree_id, role, archived, timestamp DESC);
|
|
609
|
-
`),a.exec("DROP INDEX IF EXISTS idx_messages_archived;")},down:a=>{a.exec("DROP INDEX IF EXISTS idx_messages_worktree_role_archived_time;"),a.exec(`
|
|
610
|
-
CREATE INDEX IF NOT EXISTS idx_messages_archived
|
|
611
|
-
ON chat_messages(worktree_id, archived, timestamp DESC);
|
|
612
|
-
`)}},{version:33,name:"add-agent-instances",up:a=>{a.exec(`
|
|
613
|
-
CREATE TABLE session_states_new (
|
|
614
|
-
worktree_id TEXT NOT NULL,
|
|
615
|
-
cli_tool_id TEXT NOT NULL DEFAULT 'claude',
|
|
616
|
-
instance_id TEXT NOT NULL DEFAULT 'claude',
|
|
617
|
-
last_captured_line INTEGER DEFAULT 0,
|
|
618
|
-
in_progress_message_id TEXT DEFAULT NULL,
|
|
619
|
-
|
|
620
|
-
PRIMARY KEY (worktree_id, instance_id),
|
|
621
|
-
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
622
|
-
);
|
|
623
|
-
`),a.exec(`
|
|
624
|
-
INSERT INTO session_states_new
|
|
625
|
-
(worktree_id, cli_tool_id, instance_id, last_captured_line, in_progress_message_id)
|
|
626
|
-
SELECT
|
|
627
|
-
worktree_id,
|
|
628
|
-
COALESCE(cli_tool_id, 'claude'),
|
|
629
|
-
COALESCE(cli_tool_id, 'claude'),
|
|
630
|
-
last_captured_line,
|
|
631
|
-
in_progress_message_id
|
|
632
|
-
FROM session_states
|
|
633
|
-
WHERE worktree_id IN (SELECT id FROM worktrees);
|
|
634
|
-
`),a.exec("DROP TABLE session_states;"),a.exec("ALTER TABLE session_states_new RENAME TO session_states;"),a.exec(`
|
|
635
|
-
ALTER TABLE chat_messages ADD COLUMN instance_id TEXT DEFAULT NULL;
|
|
636
|
-
`),a.exec(`
|
|
637
|
-
UPDATE chat_messages
|
|
638
|
-
SET instance_id = COALESCE(cli_tool_id, 'claude')
|
|
639
|
-
WHERE instance_id IS NULL;
|
|
640
|
-
`),a.exec(`
|
|
641
|
-
CREATE INDEX IF NOT EXISTS idx_messages_instance
|
|
642
|
-
ON chat_messages(worktree_id, instance_id, timestamp DESC);
|
|
643
|
-
`),a.exec(`
|
|
644
|
-
CREATE TABLE agent_instances (
|
|
645
|
-
worktree_id TEXT NOT NULL,
|
|
646
|
-
instance_id TEXT NOT NULL,
|
|
647
|
-
cli_tool_id TEXT NOT NULL,
|
|
648
|
-
alias TEXT NOT NULL DEFAULT '',
|
|
649
|
-
sort_order INTEGER NOT NULL DEFAULT 0,
|
|
650
|
-
created_at INTEGER NOT NULL,
|
|
651
|
-
|
|
652
|
-
PRIMARY KEY (worktree_id, instance_id),
|
|
653
|
-
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
654
|
-
);
|
|
655
|
-
`),a.exec(`
|
|
656
|
-
CREATE INDEX idx_agent_instances_worktree
|
|
657
|
-
ON agent_instances(worktree_id, sort_order);
|
|
658
|
-
`);let b=a.prepare(`
|
|
659
|
-
SELECT id, selected_agents, cli_tool_id FROM worktrees
|
|
660
|
-
`).all(),c=a.prepare(`
|
|
661
|
-
INSERT OR IGNORE INTO agent_instances
|
|
662
|
-
(worktree_id, instance_id, cli_tool_id, alias, sort_order, created_at)
|
|
663
|
-
VALUES (?, ?, ?, '', ?, ?)
|
|
664
|
-
`),d=Date.now(),e=0;for(let a of b){let b=function(a){if(!a)return[];try{let b=JSON.parse(a);if(!Array.isArray(b))return[];let c=new Set,d=[];for(let a of b)"string"==typeof a&&a.length>0&&!c.has(a)&&(c.add(a),d.push(a));return d}catch{return[]}}(a.selected_agents);0===b.length&&(b=[a.cli_tool_id||"claude"]),b.forEach((b,f)=>{c.run(a.id,b,b,f,d),e+=1})}console.log("Rebuilt session_states with (worktree_id, instance_id) primary key"),console.log("Added instance_id column + idx_messages_instance to chat_messages"),console.log(`Created agent_instances table; backfilled ${e} primary instance(s)`)},down:a=>{a.exec("DROP INDEX IF EXISTS idx_agent_instances_worktree;"),a.exec("DROP TABLE IF EXISTS agent_instances;"),a.exec("DROP INDEX IF EXISTS idx_messages_instance;"),a.exec(`
|
|
665
|
-
CREATE TABLE session_states_old (
|
|
666
|
-
worktree_id TEXT NOT NULL,
|
|
667
|
-
cli_tool_id TEXT NOT NULL DEFAULT 'claude',
|
|
668
|
-
last_captured_line INTEGER DEFAULT 0,
|
|
669
|
-
in_progress_message_id TEXT DEFAULT NULL,
|
|
670
|
-
|
|
671
|
-
PRIMARY KEY (worktree_id, cli_tool_id),
|
|
672
|
-
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
673
|
-
);
|
|
674
|
-
`),a.exec(`
|
|
675
|
-
INSERT OR IGNORE INTO session_states_old
|
|
676
|
-
(worktree_id, cli_tool_id, last_captured_line, in_progress_message_id)
|
|
677
|
-
SELECT worktree_id, cli_tool_id, last_captured_line, in_progress_message_id
|
|
678
|
-
FROM session_states
|
|
679
|
-
WHERE instance_id = cli_tool_id;
|
|
680
|
-
`),a.exec("DROP TABLE session_states;"),a.exec("ALTER TABLE session_states_old RENAME TO session_states;"),console.log("Rolled back agent_instances migration (v33)")}},{version:34,name:"add-repository-todos",up:a=>{a.exec(`
|
|
681
|
-
CREATE TABLE IF NOT EXISTS repository_todos (
|
|
682
|
-
id TEXT PRIMARY KEY,
|
|
683
|
-
repository_id TEXT NOT NULL,
|
|
684
|
-
content TEXT NOT NULL,
|
|
685
|
-
done INTEGER NOT NULL DEFAULT 0,
|
|
686
|
-
position INTEGER NOT NULL DEFAULT 0,
|
|
687
|
-
created_at INTEGER NOT NULL,
|
|
688
|
-
updated_at INTEGER NOT NULL,
|
|
689
|
-
FOREIGN KEY (repository_id) REFERENCES repositories(id) ON DELETE CASCADE
|
|
690
|
-
);
|
|
691
|
-
`),a.exec(`
|
|
692
|
-
CREATE INDEX IF NOT EXISTS idx_repository_todos_repo
|
|
693
|
-
ON repository_todos(repository_id, position);
|
|
694
|
-
`)},down:a=>{a.exec("DROP TABLE IF EXISTS repository_todos;")}},{version:35,name:"add-instance-id-to-timer-messages",up:a=>{a.exec(`
|
|
695
|
-
ALTER TABLE timer_messages ADD COLUMN instance_id TEXT;
|
|
696
|
-
`),a.exec(`
|
|
697
|
-
UPDATE timer_messages SET instance_id = cli_tool_id WHERE instance_id IS NULL;
|
|
698
|
-
`),console.log("Added instance_id column to timer_messages table")},down:()=>{console.log("No rollback for instance_id column (SQLite limitation)")}},{version:36,name:"add-branch-to-worktrees",up:a=>{a.exec(`
|
|
699
|
-
ALTER TABLE worktrees ADD COLUMN branch TEXT;
|
|
700
|
-
`),console.log("Added branch column to worktrees table")},down:()=>{console.log("No rollback for branch column (SQLite limitation)")}},{version:37,name:"add-worktree-todos",up:a=>{a.exec(`
|
|
701
|
-
CREATE TABLE IF NOT EXISTS worktree_todos (
|
|
702
|
-
id TEXT PRIMARY KEY,
|
|
703
|
-
worktree_id TEXT NOT NULL,
|
|
704
|
-
content TEXT NOT NULL,
|
|
705
|
-
done INTEGER NOT NULL DEFAULT 0,
|
|
706
|
-
position INTEGER NOT NULL DEFAULT 0,
|
|
707
|
-
created_at INTEGER NOT NULL,
|
|
708
|
-
updated_at INTEGER NOT NULL,
|
|
709
|
-
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
710
|
-
);
|
|
711
|
-
`),a.exec(`
|
|
712
|
-
CREATE INDEX IF NOT EXISTS idx_worktree_todos_wt
|
|
713
|
-
ON worktree_todos(worktree_id, position);
|
|
714
|
-
`)},down:a=>{a.exec("DROP TABLE IF EXISTS worktree_todos;")}},{version:38,name:"add-status-to-worktree-todos",up:a=>{a.exec(`
|
|
715
|
-
ALTER TABLE worktree_todos
|
|
716
|
-
ADD COLUMN status TEXT NOT NULL DEFAULT 'todo';
|
|
717
|
-
`),a.exec(`
|
|
718
|
-
UPDATE worktree_todos SET status = 'done' WHERE done = 1;
|
|
719
|
-
`)},down:()=>{}},{version:39,name:"add-detail-to-worktree-todos",up:a=>{a.exec(`
|
|
720
|
-
ALTER TABLE worktree_todos
|
|
721
|
-
ADD COLUMN detail TEXT NOT NULL DEFAULT '';
|
|
722
|
-
`)},down:()=>{}},{version:40,name:"add-error-to-timer-messages",up:a=>{a.exec(`
|
|
723
|
-
ALTER TABLE timer_messages ADD COLUMN error TEXT;
|
|
724
|
-
`),console.log("Added error column to timer_messages table")},down:()=>{console.log("No rollback for error column (SQLite limitation)")}},{version:41,name:"add-push-subscriptions",up:a=>{a.exec(`
|
|
725
|
-
CREATE TABLE IF NOT EXISTS push_subscriptions (
|
|
726
|
-
id TEXT PRIMARY KEY,
|
|
727
|
-
endpoint TEXT NOT NULL UNIQUE,
|
|
728
|
-
p256dh TEXT NOT NULL,
|
|
729
|
-
auth TEXT NOT NULL,
|
|
730
|
-
device_label TEXT,
|
|
731
|
-
enabled_prompt INTEGER NOT NULL DEFAULT 1,
|
|
732
|
-
enabled_completion INTEGER NOT NULL DEFAULT 1,
|
|
733
|
-
created_at INTEGER NOT NULL,
|
|
734
|
-
updated_at INTEGER NOT NULL
|
|
735
|
-
);
|
|
736
|
-
`),a.exec(`
|
|
737
|
-
CREATE INDEX IF NOT EXISTS idx_push_subscriptions_endpoint
|
|
738
|
-
ON push_subscriptions(endpoint);
|
|
739
|
-
`)},down:a=>{a.exec("DROP TABLE IF EXISTS push_subscriptions;")}},{version:42,name:"add-locale-to-push-subscriptions",up:a=>{a.exec(`
|
|
740
|
-
ALTER TABLE push_subscriptions ADD COLUMN locale TEXT;
|
|
741
|
-
`)},down:a=>{a.exec(`
|
|
742
|
-
ALTER TABLE push_subscriptions DROP COLUMN locale;
|
|
743
|
-
`)}},{version:43,name:"remove-cm-root-dir-ghost-repository",up:a=>{let b=function(){let a=process.env.CM_ROOT_DIR??process.env.MCBD_ROOT_DIR;return a&&a.trim()?e().resolve(a.trim()):null}();return b?(function(){let a=process.env.WORKTREE_REPOS;return a&&a.trim()?a.split(",").map(a=>a.trim()).filter(a=>a.length>0).map(a=>e().resolve(a)):[]})().includes(b)?void console.log(`Migration 43: ${b} is a WORKTREE_REPOS entry; keeping its repository row`):void(a.prepare(`DELETE FROM repositories
|
|
744
|
-
WHERE path = ?
|
|
745
|
-
AND is_env_managed = 1
|
|
746
|
-
AND NOT EXISTS (
|
|
747
|
-
SELECT 1 FROM worktrees WHERE worktrees.repository_path = ?
|
|
748
|
-
)`).run(b,b).changes>0?console.log(`Migration 43: removed CM_ROOT_DIR ghost repository row (${b})`):console.log(`Migration 43: no ghost repository row at ${b}`)):void console.log("Migration 43: CM_ROOT_DIR is not set; no ghost row to remove")},down:()=>{console.log("No rollback for the CM_ROOT_DIR ghost row removal")}}];function j(a){!function(a,b){a.exec(`
|
|
749
|
-
CREATE TABLE IF NOT EXISTS schema_version (
|
|
750
|
-
version INTEGER PRIMARY KEY,
|
|
751
|
-
name TEXT NOT NULL,
|
|
752
|
-
applied_at INTEGER NOT NULL
|
|
753
|
-
);
|
|
754
|
-
`);let c=f(a);if(console.log(`Current schema version: ${c}`),c>43)throw Error(`This database (schema v${c}) was created by a newer version of CommandMate (this build supports up to v43). Please update: commandmate update`);let d=b.filter(a=>a.version>c);if(0===d.length)return console.log("Schema is up to date");for(let b of(console.log(`Found ${d.length} pending migration(s)`),d)){console.log(`Applying migration ${b.version}: ${b.name}...`);try{a.transaction(()=>{b.up(a),a.prepare(`
|
|
755
|
-
INSERT INTO schema_version (version, name, applied_at)
|
|
756
|
-
VALUES (?, ?, ?)
|
|
757
|
-
`).run(b.version,b.name,Date.now())})(),console.log(`Migration ${b.version} applied successfully`)}catch(c){let a=c instanceof Error?c.message:String(c);throw console.error(`Migration ${b.version} failed:`,a),Error(`Migration ${b.version} (${b.name}) failed: ${a}`)}}console.log(`All migrations completed. Current version: ${f(a)}`)}(a,i)}},25537:(a,b,c)=>{function d(a){a.exec(`
|
|
758
|
-
CREATE TABLE IF NOT EXISTS worktrees (
|
|
759
|
-
id TEXT PRIMARY KEY,
|
|
760
|
-
name TEXT NOT NULL,
|
|
761
|
-
path TEXT NOT NULL UNIQUE,
|
|
762
|
-
last_message_summary TEXT,
|
|
763
|
-
updated_at INTEGER
|
|
764
|
-
);
|
|
765
|
-
`),a.exec(`
|
|
766
|
-
CREATE INDEX IF NOT EXISTS idx_worktrees_updated_at
|
|
767
|
-
ON worktrees(updated_at DESC);
|
|
768
|
-
`),a.exec(`
|
|
769
|
-
CREATE TABLE IF NOT EXISTS chat_messages (
|
|
770
|
-
id TEXT PRIMARY KEY,
|
|
771
|
-
worktree_id TEXT NOT NULL,
|
|
772
|
-
role TEXT NOT NULL CHECK(role IN ('user', 'assistant')),
|
|
773
|
-
content TEXT NOT NULL,
|
|
774
|
-
summary TEXT,
|
|
775
|
-
timestamp INTEGER NOT NULL,
|
|
776
|
-
log_file_name TEXT,
|
|
777
|
-
request_id TEXT,
|
|
778
|
-
message_type TEXT DEFAULT 'normal',
|
|
779
|
-
prompt_data TEXT,
|
|
780
|
-
cli_tool_id TEXT DEFAULT 'claude',
|
|
781
|
-
archived INTEGER DEFAULT 0,
|
|
782
|
-
|
|
783
|
-
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
784
|
-
);
|
|
785
|
-
`),a.exec(`
|
|
786
|
-
CREATE INDEX IF NOT EXISTS idx_messages_worktree_time
|
|
787
|
-
ON chat_messages(worktree_id, timestamp DESC);
|
|
788
|
-
`),a.exec(`
|
|
789
|
-
CREATE INDEX IF NOT EXISTS idx_messages_request_id
|
|
790
|
-
ON chat_messages(request_id);
|
|
791
|
-
`),a.exec(`
|
|
792
|
-
CREATE INDEX IF NOT EXISTS idx_messages_type
|
|
793
|
-
ON chat_messages(message_type, worktree_id);
|
|
794
|
-
`),a.exec(`
|
|
795
|
-
CREATE INDEX IF NOT EXISTS idx_messages_cli_tool
|
|
796
|
-
ON chat_messages(worktree_id, cli_tool_id, timestamp DESC);
|
|
797
|
-
`),a.exec(`
|
|
798
|
-
CREATE INDEX IF NOT EXISTS idx_messages_worktree_role_archived_time
|
|
799
|
-
ON chat_messages(worktree_id, role, archived, timestamp DESC);
|
|
800
|
-
`),a.exec(`
|
|
801
|
-
CREATE TABLE IF NOT EXISTS session_states (
|
|
802
|
-
worktree_id TEXT NOT NULL,
|
|
803
|
-
cli_tool_id TEXT NOT NULL DEFAULT 'claude',
|
|
804
|
-
last_captured_line INTEGER DEFAULT 0,
|
|
27
|
+
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
28
|
+
);
|
|
29
|
+
`),a.exec(`
|
|
30
|
+
CREATE INDEX IF NOT EXISTS idx_messages_worktree_time
|
|
31
|
+
ON chat_messages(worktree_id, timestamp DESC);
|
|
32
|
+
`),a.exec(`
|
|
33
|
+
CREATE INDEX IF NOT EXISTS idx_messages_request_id
|
|
34
|
+
ON chat_messages(request_id);
|
|
35
|
+
`),a.exec(`
|
|
36
|
+
CREATE INDEX IF NOT EXISTS idx_messages_type
|
|
37
|
+
ON chat_messages(message_type, worktree_id);
|
|
38
|
+
`),a.exec(`
|
|
39
|
+
CREATE INDEX IF NOT EXISTS idx_messages_cli_tool
|
|
40
|
+
ON chat_messages(worktree_id, cli_tool_id, timestamp DESC);
|
|
41
|
+
`),a.exec(`
|
|
42
|
+
CREATE INDEX IF NOT EXISTS idx_messages_worktree_role_archived_time
|
|
43
|
+
ON chat_messages(worktree_id, role, archived, timestamp DESC);
|
|
44
|
+
`),a.exec(`
|
|
45
|
+
CREATE TABLE IF NOT EXISTS session_states (
|
|
46
|
+
worktree_id TEXT NOT NULL,
|
|
47
|
+
cli_tool_id TEXT NOT NULL DEFAULT 'claude',
|
|
48
|
+
last_captured_line INTEGER DEFAULT 0,
|
|
805
49
|
|
|
806
50
|
PRIMARY KEY (worktree_id, cli_tool_id),
|
|
807
51
|
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
@@ -1064,4 +308,906 @@
|
|
|
1064
308
|
device_label = excluded.device_label,
|
|
1065
309
|
locale = COALESCE(excluded.locale, push_subscriptions.locale),
|
|
1066
310
|
updated_at = excluded.updated_at
|
|
1067
|
-
`).run((0,d.randomUUID)(),b.endpoint,b.p256dh,b.auth,e,f,c,c);let g=h(a,b.endpoint);if(!g)throw Error("Failed to persist push subscription");return g}function h(a,b){let c=a.prepare(`SELECT ${f} FROM push_subscriptions WHERE endpoint = ?`).get(b);return c?e(c):null}function i(a,b){return a.prepare(`SELECT ${f} FROM push_subscriptions WHERE ${"prompt"===b?"enabled_prompt":"enabled_completion"} = 1 ORDER BY created_at ASC`).all().map(e)}function j(a,b,c){let d=["updated_at = ?"],e=[Date.now()];return void 0!==c.enabledPrompt&&(d.push("enabled_prompt = ?"),e.push(+!!c.enabledPrompt)),void 0!==c.enabledCompletion&&(d.push("enabled_completion = ?"),e.push(+!!c.enabledCompletion)),e.push(b),a.prepare(`UPDATE push_subscriptions SET ${d.join(", ")} WHERE endpoint = ?`).run(...e),h(a,b)}function k(a,b){return a.prepare("DELETE FROM push_subscriptions WHERE endpoint = ?").run(b).changes>0}},
|
|
311
|
+
`).run((0,d.randomUUID)(),b.endpoint,b.p256dh,b.auth,e,f,c,c);let g=h(a,b.endpoint);if(!g)throw Error("Failed to persist push subscription");return g}function h(a,b){let c=a.prepare(`SELECT ${f} FROM push_subscriptions WHERE endpoint = ?`).get(b);return c?e(c):null}function i(a,b){return a.prepare(`SELECT ${f} FROM push_subscriptions WHERE ${"prompt"===b?"enabled_prompt":"enabled_completion"} = 1 ORDER BY created_at ASC`).all().map(e)}function j(a,b,c){let d=["updated_at = ?"],e=[Date.now()];return void 0!==c.enabledPrompt&&(d.push("enabled_prompt = ?"),e.push(+!!c.enabledPrompt)),void 0!==c.enabledCompletion&&(d.push("enabled_completion = ?"),e.push(+!!c.enabledCompletion)),e.push(b),a.prepare(`UPDATE push_subscriptions SET ${d.join(", ")} WHERE endpoint = ?`).run(...e),h(a,b)}function k(a,b){return a.prepare("DELETE FROM push_subscriptions WHERE endpoint = ?").run(b).changes>0}},80499:(a,b,c)=>{c.d(b,{vI:()=>m});var d=c(33873),e=c.n(d);function f(a){try{let b=a.prepare("SELECT MAX(version) as version FROM schema_version").get();return b?.version??0}catch{return 0}}function g(a){let b=c(29021),d=a;for(;d!==e().dirname(d);){let a=e().join(d,".git");if(b.existsSync(a)){let c=b.statSync(a);if(c.isDirectory())return d;if(c.isFile()){let c=b.readFileSync(a,"utf-8").trim().match(/^gitdir:\s*(.+)$/);if(c)return c[1].split("/.git/")[0]}}d=e().dirname(d)}return a}var h=c(25537);let i=`
|
|
312
|
+
id, worktree_id, skill_id, version, install_root, receipt_sha256,
|
|
313
|
+
source_repository, source_ref, source_commit, artifact_sha256,
|
|
314
|
+
effective_risk, operation_id, installed_at, updated_at
|
|
315
|
+
`,j=`
|
|
316
|
+
id TEXT PRIMARY KEY,
|
|
317
|
+
worktree_id TEXT NOT NULL,
|
|
318
|
+
skill_id TEXT NOT NULL,
|
|
319
|
+
version TEXT NOT NULL,
|
|
320
|
+
install_root TEXT NOT NULL,
|
|
321
|
+
receipt_sha256 TEXT NOT NULL,
|
|
322
|
+
source_repository TEXT NOT NULL,
|
|
323
|
+
source_ref TEXT NOT NULL,
|
|
324
|
+
source_commit TEXT NOT NULL,
|
|
325
|
+
artifact_sha256 TEXT NOT NULL,
|
|
326
|
+
effective_risk TEXT NOT NULL,
|
|
327
|
+
operation_id TEXT NOT NULL,
|
|
328
|
+
installed_at INTEGER NOT NULL,
|
|
329
|
+
updated_at INTEGER NOT NULL,
|
|
330
|
+
UNIQUE (worktree_id, skill_id)
|
|
331
|
+
`;function k(a){a.exec(`
|
|
332
|
+
CREATE INDEX IF NOT EXISTS idx_skill_installations_worktree
|
|
333
|
+
ON skill_installations(worktree_id);
|
|
334
|
+
`),a.exec(`
|
|
335
|
+
CREATE INDEX IF NOT EXISTS idx_skill_installations_skill
|
|
336
|
+
ON skill_installations(skill_id, version);
|
|
337
|
+
`)}let l=[{version:1,name:"initial-schema",up:a=>{(0,h.s4)(a)},down:a=>{a.exec("DROP TABLE IF EXISTS session_states;"),a.exec("DROP TABLE IF EXISTS chat_messages;"),a.exec("DROP TABLE IF EXISTS worktrees;")}},{version:2,name:"add-multi-repo-and-memo-support",up:a=>{a.exec(`
|
|
338
|
+
ALTER TABLE worktrees ADD COLUMN repository_path TEXT;
|
|
339
|
+
ALTER TABLE worktrees ADD COLUMN repository_name TEXT;
|
|
340
|
+
ALTER TABLE worktrees ADD COLUMN memo TEXT;
|
|
341
|
+
ALTER TABLE worktrees ADD COLUMN last_user_message TEXT;
|
|
342
|
+
ALTER TABLE worktrees ADD COLUMN last_user_message_at INTEGER;
|
|
343
|
+
`),a.exec(`
|
|
344
|
+
CREATE INDEX IF NOT EXISTS idx_worktrees_repository
|
|
345
|
+
ON worktrees(repository_path);
|
|
346
|
+
`);let b=a.prepare("SELECT id, path FROM worktrees").all(),c=a.prepare(`
|
|
347
|
+
UPDATE worktrees
|
|
348
|
+
SET repository_path = ?,
|
|
349
|
+
repository_name = ?
|
|
350
|
+
WHERE id = ?
|
|
351
|
+
`);for(let a of b){let b=g(a.path),d=e().basename(b);c.run(b,d,a.id)}let d=a.prepare(`
|
|
352
|
+
UPDATE worktrees
|
|
353
|
+
SET last_user_message = ?,
|
|
354
|
+
last_user_message_at = ?
|
|
355
|
+
WHERE id = ?
|
|
356
|
+
`);for(let c of b){let b=a.prepare(`
|
|
357
|
+
SELECT content, timestamp
|
|
358
|
+
FROM chat_messages
|
|
359
|
+
WHERE worktree_id = ? AND role = 'user'
|
|
360
|
+
ORDER BY timestamp DESC
|
|
361
|
+
LIMIT 1
|
|
362
|
+
`).get(c.id);if(b){let a=b.content.substring(0,200);d.run(a,b.timestamp,c.id)}}},down:a=>{a.exec(`
|
|
363
|
+
-- Create backup table
|
|
364
|
+
CREATE TABLE worktrees_backup AS
|
|
365
|
+
SELECT id, name, path, last_message_summary, updated_at
|
|
366
|
+
FROM worktrees;
|
|
367
|
+
|
|
368
|
+
-- Drop original table
|
|
369
|
+
DROP TABLE worktrees;
|
|
370
|
+
|
|
371
|
+
-- Recreate original table
|
|
372
|
+
CREATE TABLE worktrees (
|
|
373
|
+
id TEXT PRIMARY KEY,
|
|
374
|
+
name TEXT NOT NULL,
|
|
375
|
+
path TEXT NOT NULL UNIQUE,
|
|
376
|
+
last_message_summary TEXT,
|
|
377
|
+
updated_at INTEGER
|
|
378
|
+
);
|
|
379
|
+
|
|
380
|
+
-- Restore data
|
|
381
|
+
INSERT INTO worktrees (id, name, path, last_message_summary, updated_at)
|
|
382
|
+
SELECT id, name, path, last_message_summary, updated_at
|
|
383
|
+
FROM worktrees_backup;
|
|
384
|
+
|
|
385
|
+
-- Drop backup table
|
|
386
|
+
DROP TABLE worktrees_backup;
|
|
387
|
+
|
|
388
|
+
-- Drop index
|
|
389
|
+
DROP INDEX IF EXISTS idx_worktrees_repository;
|
|
390
|
+
`)}},{version:3,name:"fix-worktree-repository-paths",up:a=>{let b=a.prepare("SELECT id, path FROM worktrees").all(),c=a.prepare(`
|
|
391
|
+
UPDATE worktrees
|
|
392
|
+
SET repository_path = ?,
|
|
393
|
+
repository_name = ?
|
|
394
|
+
WHERE id = ?
|
|
395
|
+
`);for(let a of b){let b=g(a.path),d=e().basename(b);c.run(b,d,a.id)}},down:()=>{console.log("No rollback needed for repository path fix")}},{version:4,name:"add-favorite-field",up:a=>{a.exec(`
|
|
396
|
+
ALTER TABLE worktrees ADD COLUMN favorite INTEGER DEFAULT 0;
|
|
397
|
+
`),a.exec(`
|
|
398
|
+
CREATE INDEX IF NOT EXISTS idx_worktrees_favorite
|
|
399
|
+
ON worktrees(favorite DESC, updated_at DESC);
|
|
400
|
+
`)},down:a=>{a.exec(`
|
|
401
|
+
DROP INDEX IF EXISTS idx_worktrees_favorite;
|
|
402
|
+
`)}},{version:5,name:"add-status-field",up:a=>{a.exec(`
|
|
403
|
+
ALTER TABLE worktrees ADD COLUMN status TEXT DEFAULT NULL;
|
|
404
|
+
`),a.exec(`
|
|
405
|
+
CREATE INDEX IF NOT EXISTS idx_worktrees_status
|
|
406
|
+
ON worktrees(status);
|
|
407
|
+
`)},down:a=>{a.exec(`
|
|
408
|
+
DROP INDEX IF EXISTS idx_worktrees_status;
|
|
409
|
+
`)}},{version:6,name:"add-link-field",up:a=>{a.exec(`
|
|
410
|
+
ALTER TABLE worktrees ADD COLUMN link TEXT DEFAULT NULL;
|
|
411
|
+
`)},down:()=>{console.log("No rollback needed for link field")}},{version:7,name:"add-cli-tool-id",up:a=>{a.exec(`
|
|
412
|
+
ALTER TABLE worktrees ADD COLUMN cli_tool_id TEXT DEFAULT 'claude';
|
|
413
|
+
`),a.exec(`
|
|
414
|
+
CREATE INDEX IF NOT EXISTS idx_worktrees_cli_tool
|
|
415
|
+
ON worktrees(cli_tool_id);
|
|
416
|
+
`),a.exec(`
|
|
417
|
+
UPDATE worktrees SET cli_tool_id = 'claude' WHERE cli_tool_id IS NULL;
|
|
418
|
+
`)},down:a=>{a.exec(`
|
|
419
|
+
DROP INDEX IF EXISTS idx_worktrees_cli_tool;
|
|
420
|
+
`),console.log("No full rollback for cli_tool_id column (SQLite limitation)")}},{version:8,name:"change-role-claude-to-assistant",up:a=>{a.exec(`
|
|
421
|
+
CREATE TABLE chat_messages_new (
|
|
422
|
+
id TEXT PRIMARY KEY,
|
|
423
|
+
worktree_id TEXT NOT NULL,
|
|
424
|
+
role TEXT NOT NULL CHECK (role IN ('user', 'assistant')),
|
|
425
|
+
content TEXT NOT NULL,
|
|
426
|
+
summary TEXT,
|
|
427
|
+
timestamp INTEGER NOT NULL,
|
|
428
|
+
log_file_name TEXT,
|
|
429
|
+
request_id TEXT,
|
|
430
|
+
message_type TEXT DEFAULT 'normal',
|
|
431
|
+
prompt_data TEXT,
|
|
432
|
+
cli_tool_id TEXT DEFAULT 'claude',
|
|
433
|
+
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
434
|
+
);
|
|
435
|
+
`),a.exec(`
|
|
436
|
+
INSERT INTO chat_messages_new
|
|
437
|
+
SELECT
|
|
438
|
+
id,
|
|
439
|
+
worktree_id,
|
|
440
|
+
CASE WHEN role = 'claude' THEN 'assistant' ELSE role END as role,
|
|
441
|
+
content,
|
|
442
|
+
summary,
|
|
443
|
+
timestamp,
|
|
444
|
+
log_file_name,
|
|
445
|
+
request_id,
|
|
446
|
+
message_type,
|
|
447
|
+
prompt_data,
|
|
448
|
+
cli_tool_id
|
|
449
|
+
FROM chat_messages;
|
|
450
|
+
`),a.exec("DROP TABLE chat_messages;"),a.exec("ALTER TABLE chat_messages_new RENAME TO chat_messages;"),a.exec(`
|
|
451
|
+
CREATE INDEX IF NOT EXISTS idx_chat_messages_worktree
|
|
452
|
+
ON chat_messages(worktree_id);
|
|
453
|
+
`),a.exec(`
|
|
454
|
+
CREATE INDEX IF NOT EXISTS idx_chat_messages_timestamp
|
|
455
|
+
ON chat_messages(timestamp);
|
|
456
|
+
`),console.log('Changed role constraint from "claude" to "assistant"'),console.log('Updated existing messages with role="claude" to role="assistant"')},down:a=>{a.exec(`
|
|
457
|
+
CREATE TABLE chat_messages_new (
|
|
458
|
+
id TEXT PRIMARY KEY,
|
|
459
|
+
worktree_id TEXT NOT NULL,
|
|
460
|
+
role TEXT NOT NULL CHECK (role IN ('user', 'claude')),
|
|
461
|
+
content TEXT NOT NULL,
|
|
462
|
+
summary TEXT,
|
|
463
|
+
timestamp INTEGER NOT NULL,
|
|
464
|
+
log_file_name TEXT,
|
|
465
|
+
request_id TEXT,
|
|
466
|
+
message_type TEXT DEFAULT 'normal',
|
|
467
|
+
prompt_data TEXT,
|
|
468
|
+
cli_tool_id TEXT DEFAULT 'claude',
|
|
469
|
+
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
470
|
+
);
|
|
471
|
+
`),a.exec(`
|
|
472
|
+
INSERT INTO chat_messages_new
|
|
473
|
+
SELECT
|
|
474
|
+
id,
|
|
475
|
+
worktree_id,
|
|
476
|
+
CASE WHEN role = 'assistant' THEN 'claude' ELSE role END as role,
|
|
477
|
+
content,
|
|
478
|
+
summary,
|
|
479
|
+
timestamp,
|
|
480
|
+
log_file_name,
|
|
481
|
+
request_id,
|
|
482
|
+
message_type,
|
|
483
|
+
prompt_data,
|
|
484
|
+
cli_tool_id
|
|
485
|
+
FROM chat_messages;
|
|
486
|
+
`),a.exec("DROP TABLE chat_messages;"),a.exec("ALTER TABLE chat_messages_new RENAME TO chat_messages;"),a.exec(`
|
|
487
|
+
CREATE INDEX IF NOT EXISTS idx_chat_messages_worktree
|
|
488
|
+
ON chat_messages(worktree_id);
|
|
489
|
+
`),a.exec(`
|
|
490
|
+
CREATE INDEX IF NOT EXISTS idx_chat_messages_timestamp
|
|
491
|
+
ON chat_messages(timestamp);
|
|
492
|
+
`),console.log('Rolled back: Changed role constraint from "assistant" to "claude"')}},{version:9,name:"add-in-progress-message-id-to-session-states",up:a=>{a.exec(`
|
|
493
|
+
ALTER TABLE session_states ADD COLUMN in_progress_message_id TEXT DEFAULT NULL;
|
|
494
|
+
`),console.log("Added in_progress_message_id column to session_states table")},down:()=>{console.log("No full rollback for in_progress_message_id column (SQLite limitation)")}},{version:10,name:"add-worktree-memos-table",up:a=>{a.exec(`
|
|
495
|
+
CREATE TABLE worktree_memos (
|
|
496
|
+
id TEXT PRIMARY KEY,
|
|
497
|
+
worktree_id TEXT NOT NULL,
|
|
498
|
+
title TEXT NOT NULL DEFAULT 'Memo',
|
|
499
|
+
content TEXT NOT NULL DEFAULT '',
|
|
500
|
+
position INTEGER NOT NULL DEFAULT 0,
|
|
501
|
+
created_at INTEGER NOT NULL,
|
|
502
|
+
updated_at INTEGER NOT NULL,
|
|
503
|
+
|
|
504
|
+
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE,
|
|
505
|
+
UNIQUE(worktree_id, position)
|
|
506
|
+
);
|
|
507
|
+
`),a.exec(`
|
|
508
|
+
CREATE INDEX idx_worktree_memos_worktree
|
|
509
|
+
ON worktree_memos(worktree_id, position);
|
|
510
|
+
`);let{randomUUID:b}=c(55511),d=a.prepare(`
|
|
511
|
+
SELECT id, memo FROM worktrees WHERE memo IS NOT NULL AND memo != ''
|
|
512
|
+
`).all(),e=a.prepare(`
|
|
513
|
+
INSERT INTO worktree_memos (id, worktree_id, title, content, position, created_at, updated_at)
|
|
514
|
+
VALUES (?, ?, 'Memo', ?, 0, ?, ?)
|
|
515
|
+
`),f=Date.now();for(let a of d)e.run(b(),a.id,a.memo,f,f);console.log("Created worktree_memos table"),console.log(`Migrated ${d.length} existing memos to new table`)},down:a=>{a.exec("DROP TABLE IF EXISTS worktree_memos"),console.log("Dropped worktree_memos table")}},{version:11,name:"add-viewed-tracking",up:a=>{a.exec(`
|
|
516
|
+
ALTER TABLE worktrees ADD COLUMN last_viewed_at TEXT;
|
|
517
|
+
`),a.exec(`
|
|
518
|
+
CREATE INDEX IF NOT EXISTS idx_chat_messages_assistant_latest
|
|
519
|
+
ON chat_messages(worktree_id, role, timestamp DESC);
|
|
520
|
+
`),console.log("Added last_viewed_at column to worktrees table"),console.log("Created index for assistant message queries")},down:a=>{a.exec("DROP INDEX IF EXISTS idx_chat_messages_assistant_latest"),console.log("Dropped idx_chat_messages_assistant_latest index")}},{version:12,name:"add-external-apps-table",up:a=>{a.exec(`
|
|
521
|
+
CREATE TABLE IF NOT EXISTS external_apps (
|
|
522
|
+
id TEXT PRIMARY KEY,
|
|
523
|
+
|
|
524
|
+
-- Basic info
|
|
525
|
+
name TEXT NOT NULL UNIQUE,
|
|
526
|
+
display_name TEXT NOT NULL,
|
|
527
|
+
description TEXT,
|
|
528
|
+
|
|
529
|
+
-- Routing config
|
|
530
|
+
path_prefix TEXT NOT NULL UNIQUE,
|
|
531
|
+
target_port INTEGER NOT NULL,
|
|
532
|
+
target_host TEXT DEFAULT 'localhost',
|
|
533
|
+
|
|
534
|
+
-- App type
|
|
535
|
+
app_type TEXT NOT NULL CHECK(app_type IN ('sveltekit', 'streamlit', 'nextjs', 'other')),
|
|
536
|
+
|
|
537
|
+
-- WebSocket config
|
|
538
|
+
websocket_enabled INTEGER DEFAULT 0,
|
|
539
|
+
websocket_path_pattern TEXT,
|
|
540
|
+
|
|
541
|
+
-- Status
|
|
542
|
+
enabled INTEGER DEFAULT 1,
|
|
543
|
+
|
|
544
|
+
-- Metadata
|
|
545
|
+
created_at INTEGER NOT NULL,
|
|
546
|
+
updated_at INTEGER NOT NULL
|
|
547
|
+
);
|
|
548
|
+
`),a.exec(`
|
|
549
|
+
CREATE INDEX idx_external_apps_path_prefix ON external_apps(path_prefix);
|
|
550
|
+
`),a.exec(`
|
|
551
|
+
CREATE INDEX idx_external_apps_enabled ON external_apps(enabled);
|
|
552
|
+
`),console.log("Created external_apps table"),console.log("Created indexes for external_apps")},down:a=>{a.exec("DROP INDEX IF EXISTS idx_external_apps_enabled"),a.exec("DROP INDEX IF EXISTS idx_external_apps_path_prefix"),a.exec("DROP TABLE IF EXISTS external_apps"),console.log("Dropped external_apps table and indexes")}},{version:13,name:"rename-worktree-memo-to-description",up:a=>{a.exec(`
|
|
553
|
+
ALTER TABLE worktrees RENAME COLUMN memo TO description;
|
|
554
|
+
`),console.log("Renamed worktrees.memo column to description")},down:a=>{a.exec(`
|
|
555
|
+
ALTER TABLE worktrees RENAME COLUMN description TO memo;
|
|
556
|
+
`),console.log("Rolled back: Renamed worktrees.description column back to memo")}},{version:14,name:"add-repositories-and-clone-jobs-tables",up:a=>{a.exec(`
|
|
557
|
+
CREATE TABLE IF NOT EXISTS repositories (
|
|
558
|
+
id TEXT PRIMARY KEY,
|
|
559
|
+
name TEXT NOT NULL,
|
|
560
|
+
path TEXT NOT NULL UNIQUE,
|
|
561
|
+
enabled INTEGER NOT NULL DEFAULT 1,
|
|
562
|
+
clone_url TEXT,
|
|
563
|
+
normalized_clone_url TEXT,
|
|
564
|
+
clone_source TEXT CHECK(clone_source IN ('local', 'https', 'ssh')) DEFAULT 'local',
|
|
565
|
+
is_env_managed INTEGER NOT NULL DEFAULT 0,
|
|
566
|
+
created_at INTEGER NOT NULL,
|
|
567
|
+
updated_at INTEGER NOT NULL
|
|
568
|
+
);
|
|
569
|
+
`),a.exec(`
|
|
570
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_repositories_normalized_clone_url
|
|
571
|
+
ON repositories(normalized_clone_url)
|
|
572
|
+
WHERE normalized_clone_url IS NOT NULL;
|
|
573
|
+
`),a.exec(`
|
|
574
|
+
CREATE INDEX IF NOT EXISTS idx_repositories_path
|
|
575
|
+
ON repositories(path);
|
|
576
|
+
`),a.exec(`
|
|
577
|
+
CREATE TABLE IF NOT EXISTS clone_jobs (
|
|
578
|
+
id TEXT PRIMARY KEY,
|
|
579
|
+
clone_url TEXT NOT NULL,
|
|
580
|
+
normalized_clone_url TEXT NOT NULL,
|
|
581
|
+
target_path TEXT NOT NULL,
|
|
582
|
+
repository_id TEXT,
|
|
583
|
+
status TEXT NOT NULL CHECK(status IN ('pending', 'running', 'completed', 'failed', 'cancelled')) DEFAULT 'pending',
|
|
584
|
+
pid INTEGER,
|
|
585
|
+
progress INTEGER NOT NULL DEFAULT 0,
|
|
586
|
+
error_category TEXT,
|
|
587
|
+
error_code TEXT,
|
|
588
|
+
error_message TEXT,
|
|
589
|
+
started_at INTEGER,
|
|
590
|
+
completed_at INTEGER,
|
|
591
|
+
created_at INTEGER NOT NULL,
|
|
592
|
+
|
|
593
|
+
FOREIGN KEY (repository_id) REFERENCES repositories(id) ON DELETE SET NULL
|
|
594
|
+
);
|
|
595
|
+
`),a.exec(`
|
|
596
|
+
CREATE INDEX IF NOT EXISTS idx_clone_jobs_status
|
|
597
|
+
ON clone_jobs(status);
|
|
598
|
+
`),a.exec(`
|
|
599
|
+
CREATE INDEX IF NOT EXISTS idx_clone_jobs_normalized_clone_url
|
|
600
|
+
ON clone_jobs(normalized_clone_url);
|
|
601
|
+
`),console.log("Created repositories table"),console.log("Created clone_jobs table"),console.log("Created indexes for repositories and clone_jobs")},down:a=>{a.exec("DROP INDEX IF EXISTS idx_clone_jobs_normalized_clone_url"),a.exec("DROP INDEX IF EXISTS idx_clone_jobs_status"),a.exec("DROP TABLE IF EXISTS clone_jobs"),a.exec("DROP INDEX IF EXISTS idx_repositories_path"),a.exec("DROP INDEX IF EXISTS idx_repositories_normalized_clone_url"),a.exec("DROP TABLE IF EXISTS repositories"),console.log("Dropped repositories and clone_jobs tables")}},{version:15,name:"add-initial-branch-column",up:a=>{a.exec(`
|
|
602
|
+
ALTER TABLE worktrees ADD COLUMN initial_branch TEXT;
|
|
603
|
+
`),console.log("Added initial_branch column to worktrees table")},down:a=>{a.exec(`
|
|
604
|
+
-- 1. Create backup table without initial_branch
|
|
605
|
+
CREATE TABLE worktrees_backup AS
|
|
606
|
+
SELECT id, name, path, repository_path, repository_name, description,
|
|
607
|
+
last_user_message, last_user_message_at, last_message_summary,
|
|
608
|
+
favorite, status, link, cli_tool_id, updated_at, last_viewed_at
|
|
609
|
+
FROM worktrees;
|
|
610
|
+
|
|
611
|
+
-- 2. Drop original table
|
|
612
|
+
DROP TABLE worktrees;
|
|
613
|
+
|
|
614
|
+
-- 3. Recreate table without initial_branch
|
|
615
|
+
CREATE TABLE worktrees (
|
|
616
|
+
id TEXT PRIMARY KEY,
|
|
617
|
+
name TEXT NOT NULL,
|
|
618
|
+
path TEXT NOT NULL UNIQUE,
|
|
619
|
+
repository_path TEXT,
|
|
620
|
+
repository_name TEXT,
|
|
621
|
+
description TEXT,
|
|
622
|
+
last_user_message TEXT,
|
|
623
|
+
last_user_message_at INTEGER,
|
|
624
|
+
last_message_summary TEXT,
|
|
625
|
+
favorite INTEGER DEFAULT 0,
|
|
626
|
+
status TEXT DEFAULT NULL,
|
|
627
|
+
link TEXT DEFAULT NULL,
|
|
628
|
+
cli_tool_id TEXT DEFAULT 'claude',
|
|
629
|
+
updated_at INTEGER,
|
|
630
|
+
last_viewed_at TEXT
|
|
631
|
+
);
|
|
632
|
+
|
|
633
|
+
-- 4. Restore data
|
|
634
|
+
INSERT INTO worktrees (id, name, path, repository_path, repository_name,
|
|
635
|
+
description, last_user_message, last_user_message_at, last_message_summary,
|
|
636
|
+
favorite, status, link, cli_tool_id, updated_at, last_viewed_at)
|
|
637
|
+
SELECT id, name, path, repository_path, repository_name,
|
|
638
|
+
description, last_user_message, last_user_message_at, last_message_summary,
|
|
639
|
+
favorite, status, link, cli_tool_id, updated_at, last_viewed_at
|
|
640
|
+
FROM worktrees_backup;
|
|
641
|
+
|
|
642
|
+
-- 5. Drop backup
|
|
643
|
+
DROP TABLE worktrees_backup;
|
|
644
|
+
|
|
645
|
+
-- 6. Recreate indexes
|
|
646
|
+
CREATE INDEX IF NOT EXISTS idx_worktrees_updated_at
|
|
647
|
+
ON worktrees(updated_at DESC);
|
|
648
|
+
|
|
649
|
+
CREATE INDEX IF NOT EXISTS idx_worktrees_repository
|
|
650
|
+
ON worktrees(repository_path);
|
|
651
|
+
|
|
652
|
+
CREATE INDEX IF NOT EXISTS idx_worktrees_favorite
|
|
653
|
+
ON worktrees(favorite DESC, updated_at DESC);
|
|
654
|
+
|
|
655
|
+
CREATE INDEX IF NOT EXISTS idx_worktrees_status
|
|
656
|
+
ON worktrees(status);
|
|
657
|
+
|
|
658
|
+
CREATE INDEX IF NOT EXISTS idx_worktrees_cli_tool
|
|
659
|
+
ON worktrees(cli_tool_id);
|
|
660
|
+
`),console.log("Removed initial_branch column from worktrees table")}},{version:16,name:"add-issue-no-to-external-apps",up:a=>{a.exec(`
|
|
661
|
+
ALTER TABLE external_apps ADD COLUMN issue_no INTEGER;
|
|
662
|
+
`),a.exec(`
|
|
663
|
+
CREATE INDEX IF NOT EXISTS idx_external_apps_issue_no ON external_apps(issue_no);
|
|
664
|
+
`),console.log("Added issue_no column to external_apps table"),console.log("Created index idx_external_apps_issue_no")},down:a=>{a.exec(`
|
|
665
|
+
-- 1. Create backup table without issue_no
|
|
666
|
+
CREATE TABLE external_apps_backup AS
|
|
667
|
+
SELECT id, name, display_name, description, path_prefix, target_port,
|
|
668
|
+
target_host, app_type, websocket_enabled, websocket_path_pattern,
|
|
669
|
+
enabled, created_at, updated_at
|
|
670
|
+
FROM external_apps;
|
|
671
|
+
|
|
672
|
+
-- 2. Drop original table (this also drops indexes)
|
|
673
|
+
DROP TABLE external_apps;
|
|
674
|
+
|
|
675
|
+
-- 3. Recreate table without issue_no
|
|
676
|
+
CREATE TABLE external_apps (
|
|
677
|
+
id TEXT PRIMARY KEY,
|
|
678
|
+
name TEXT NOT NULL UNIQUE,
|
|
679
|
+
display_name TEXT NOT NULL,
|
|
680
|
+
description TEXT,
|
|
681
|
+
path_prefix TEXT NOT NULL UNIQUE,
|
|
682
|
+
target_port INTEGER NOT NULL,
|
|
683
|
+
target_host TEXT DEFAULT 'localhost',
|
|
684
|
+
app_type TEXT NOT NULL CHECK(app_type IN ('sveltekit', 'streamlit', 'nextjs', 'other')),
|
|
685
|
+
websocket_enabled INTEGER DEFAULT 0,
|
|
686
|
+
websocket_path_pattern TEXT,
|
|
687
|
+
enabled INTEGER DEFAULT 1,
|
|
688
|
+
created_at INTEGER NOT NULL,
|
|
689
|
+
updated_at INTEGER NOT NULL
|
|
690
|
+
);
|
|
691
|
+
|
|
692
|
+
-- 4. Restore data
|
|
693
|
+
INSERT INTO external_apps (id, name, display_name, description, path_prefix,
|
|
694
|
+
target_port, target_host, app_type, websocket_enabled, websocket_path_pattern,
|
|
695
|
+
enabled, created_at, updated_at)
|
|
696
|
+
SELECT id, name, display_name, description, path_prefix,
|
|
697
|
+
target_port, target_host, app_type, websocket_enabled, websocket_path_pattern,
|
|
698
|
+
enabled, created_at, updated_at
|
|
699
|
+
FROM external_apps_backup;
|
|
700
|
+
|
|
701
|
+
-- 5. Drop backup
|
|
702
|
+
DROP TABLE external_apps_backup;
|
|
703
|
+
|
|
704
|
+
-- 6. Recreate original indexes
|
|
705
|
+
CREATE INDEX idx_external_apps_path_prefix ON external_apps(path_prefix);
|
|
706
|
+
CREATE INDEX idx_external_apps_enabled ON external_apps(enabled);
|
|
707
|
+
`),console.log("Removed issue_no column from external_apps table")}},{version:17,name:"add-scheduled-executions-and-execution-logs",up:a=>{a.exec(`
|
|
708
|
+
DELETE FROM chat_messages WHERE worktree_id NOT IN (SELECT id FROM worktrees);
|
|
709
|
+
`),a.exec(`
|
|
710
|
+
DELETE FROM session_states WHERE worktree_id NOT IN (SELECT id FROM worktrees);
|
|
711
|
+
`),a.exec(`
|
|
712
|
+
DELETE FROM worktree_memos WHERE worktree_id NOT IN (SELECT id FROM worktrees);
|
|
713
|
+
`),a.exec(`
|
|
714
|
+
UPDATE clone_jobs SET repository_id = NULL
|
|
715
|
+
WHERE repository_id IS NOT NULL AND repository_id NOT IN (SELECT id FROM repositories);
|
|
716
|
+
`),a.exec(`
|
|
717
|
+
CREATE TABLE scheduled_executions (
|
|
718
|
+
id TEXT PRIMARY KEY,
|
|
719
|
+
worktree_id TEXT NOT NULL,
|
|
720
|
+
cli_tool_id TEXT DEFAULT 'claude',
|
|
721
|
+
name TEXT NOT NULL,
|
|
722
|
+
message TEXT NOT NULL,
|
|
723
|
+
cron_expression TEXT,
|
|
724
|
+
enabled INTEGER DEFAULT 1,
|
|
725
|
+
last_executed_at INTEGER,
|
|
726
|
+
next_execute_at INTEGER,
|
|
727
|
+
created_at INTEGER NOT NULL,
|
|
728
|
+
updated_at INTEGER NOT NULL,
|
|
729
|
+
UNIQUE(worktree_id, name),
|
|
730
|
+
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
731
|
+
);
|
|
732
|
+
`),a.exec(`
|
|
733
|
+
CREATE INDEX idx_scheduled_executions_worktree
|
|
734
|
+
ON scheduled_executions(worktree_id);
|
|
735
|
+
`),a.exec(`
|
|
736
|
+
CREATE INDEX idx_scheduled_executions_enabled
|
|
737
|
+
ON scheduled_executions(enabled);
|
|
738
|
+
`),a.exec(`
|
|
739
|
+
CREATE TABLE execution_logs (
|
|
740
|
+
id TEXT PRIMARY KEY,
|
|
741
|
+
schedule_id TEXT NOT NULL,
|
|
742
|
+
worktree_id TEXT NOT NULL,
|
|
743
|
+
message TEXT NOT NULL,
|
|
744
|
+
result TEXT,
|
|
745
|
+
exit_code INTEGER,
|
|
746
|
+
status TEXT DEFAULT 'running' CHECK(status IN ('running', 'completed', 'failed', 'timeout', 'cancelled')),
|
|
747
|
+
started_at INTEGER NOT NULL,
|
|
748
|
+
completed_at INTEGER,
|
|
749
|
+
created_at INTEGER NOT NULL,
|
|
750
|
+
FOREIGN KEY (schedule_id) REFERENCES scheduled_executions(id) ON DELETE CASCADE,
|
|
751
|
+
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
752
|
+
);
|
|
753
|
+
`),a.exec(`
|
|
754
|
+
CREATE INDEX idx_execution_logs_schedule
|
|
755
|
+
ON execution_logs(schedule_id);
|
|
756
|
+
`),a.exec(`
|
|
757
|
+
CREATE INDEX idx_execution_logs_worktree
|
|
758
|
+
ON execution_logs(worktree_id);
|
|
759
|
+
`),a.exec(`
|
|
760
|
+
CREATE INDEX idx_execution_logs_status
|
|
761
|
+
ON execution_logs(status);
|
|
762
|
+
`),console.log("Cleaned up orphan records"),console.log("Created scheduled_executions table"),console.log("Created execution_logs table"),console.log("Created indexes for schedule tables")},down:a=>{a.exec("DROP INDEX IF EXISTS idx_execution_logs_status"),a.exec("DROP INDEX IF EXISTS idx_execution_logs_worktree"),a.exec("DROP INDEX IF EXISTS idx_execution_logs_schedule"),a.exec("DROP TABLE IF EXISTS execution_logs"),a.exec("DROP INDEX IF EXISTS idx_scheduled_executions_enabled"),a.exec("DROP INDEX IF EXISTS idx_scheduled_executions_worktree"),a.exec("DROP TABLE IF EXISTS scheduled_executions"),console.log("Dropped scheduled_executions and execution_logs tables")}},{version:18,name:"add-selected-agents-column",up:a=>{a.exec(`
|
|
763
|
+
ALTER TABLE worktrees ADD COLUMN selected_agents TEXT;
|
|
764
|
+
`),a.exec(`
|
|
765
|
+
UPDATE worktrees SET selected_agents =
|
|
766
|
+
CASE
|
|
767
|
+
WHEN cli_tool_id NOT IN ('claude', 'codex')
|
|
768
|
+
THEN json_array(cli_tool_id, 'claude')
|
|
769
|
+
ELSE '["claude","codex"]'
|
|
770
|
+
END;
|
|
771
|
+
`),console.log("Added selected_agents column to worktrees table"),console.log("Initialized selected_agents based on cli_tool_id")},down:()=>{console.log("No rollback for selected_agents column (SQLite limitation)")}},{version:19,name:"add-vibe-local-model-column",up:a=>{a.exec(`
|
|
772
|
+
ALTER TABLE worktrees ADD COLUMN vibe_local_model TEXT DEFAULT NULL;
|
|
773
|
+
`),console.log("Added vibe_local_model column to worktrees table")},down:()=>{console.log("No rollback for vibe_local_model column (SQLite limitation)")}},{version:20,name:"add-vibe-local-context-window-column",up:a=>{a.exec(`
|
|
774
|
+
ALTER TABLE worktrees ADD COLUMN vibe_local_context_window INTEGER DEFAULT NULL;
|
|
775
|
+
`),console.log("Added vibe_local_context_window column to worktrees table")},down:()=>{console.log("No rollback for vibe_local_context_window column (SQLite limitation)")}},{version:21,name:"add-scheduled-executions-worktree-enabled-index",up:a=>{a.exec(`
|
|
776
|
+
CREATE INDEX IF NOT EXISTS idx_scheduled_executions_worktree_enabled
|
|
777
|
+
ON scheduled_executions(worktree_id, enabled);
|
|
778
|
+
`),console.log("Created composite index idx_scheduled_executions_worktree_enabled")},down:a=>{a.exec("DROP INDEX IF EXISTS idx_scheduled_executions_worktree_enabled"),console.log("Dropped idx_scheduled_executions_worktree_enabled index")}},{version:22,name:"add-archived-column-to-chat-messages",up:a=>{a.exec(`
|
|
779
|
+
ALTER TABLE chat_messages ADD COLUMN archived INTEGER DEFAULT 0;
|
|
780
|
+
`),a.exec(`
|
|
781
|
+
UPDATE chat_messages SET archived = 0 WHERE archived IS NULL;
|
|
782
|
+
`),a.exec(`
|
|
783
|
+
CREATE INDEX IF NOT EXISTS idx_messages_archived
|
|
784
|
+
ON chat_messages(worktree_id, archived, timestamp DESC);
|
|
785
|
+
`),console.log("Added archived column to chat_messages table"),console.log("Created composite index idx_messages_archived")},down:()=>{console.log("No rollback for archived column (SQLite limitation)")}},{version:23,name:"add-timer-messages-table",up:a=>{a.exec(`
|
|
786
|
+
CREATE TABLE timer_messages (
|
|
787
|
+
id TEXT PRIMARY KEY,
|
|
788
|
+
worktree_id TEXT NOT NULL,
|
|
789
|
+
cli_tool_id TEXT NOT NULL,
|
|
790
|
+
message TEXT NOT NULL,
|
|
791
|
+
delay_ms INTEGER NOT NULL,
|
|
792
|
+
scheduled_send_time INTEGER NOT NULL,
|
|
793
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
794
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
|
|
795
|
+
sent_at INTEGER,
|
|
796
|
+
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
797
|
+
);
|
|
798
|
+
|
|
799
|
+
CREATE INDEX idx_timer_messages_worktree_status
|
|
800
|
+
ON timer_messages(worktree_id, status);
|
|
801
|
+
|
|
802
|
+
CREATE INDEX idx_timer_messages_status_scheduled
|
|
803
|
+
ON timer_messages(status, scheduled_send_time);
|
|
804
|
+
`),console.log("Created timer_messages table with indexes")},down:a=>{a.exec(`
|
|
805
|
+
DROP INDEX IF EXISTS idx_timer_messages_status_scheduled;
|
|
806
|
+
DROP INDEX IF EXISTS idx_timer_messages_worktree_status;
|
|
807
|
+
DROP TABLE IF EXISTS timer_messages;
|
|
808
|
+
`)}},{version:24,name:"add-daily-reports-table",up:a=>{a.exec(`
|
|
809
|
+
CREATE TABLE daily_reports (
|
|
810
|
+
date TEXT PRIMARY KEY,
|
|
811
|
+
content TEXT NOT NULL,
|
|
812
|
+
generated_by_tool TEXT NOT NULL,
|
|
813
|
+
model TEXT,
|
|
814
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
|
|
815
|
+
updated_at INTEGER NOT NULL DEFAULT (unixepoch() * 1000)
|
|
816
|
+
);
|
|
817
|
+
`),console.log("Created daily_reports table")},down:a=>{a.exec("DROP TABLE IF EXISTS daily_reports"),console.log("Dropped daily_reports table")}},{version:25,name:"add-report-templates-table",up:a=>{a.exec(`
|
|
818
|
+
CREATE TABLE report_templates (
|
|
819
|
+
id TEXT PRIMARY KEY,
|
|
820
|
+
name TEXT NOT NULL,
|
|
821
|
+
content TEXT NOT NULL,
|
|
822
|
+
sort_order INTEGER NOT NULL DEFAULT 0,
|
|
823
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
|
|
824
|
+
updated_at INTEGER NOT NULL DEFAULT (unixepoch() * 1000)
|
|
825
|
+
);
|
|
826
|
+
`),console.log("Created report_templates table")},down:a=>{a.exec("DROP TABLE IF EXISTS report_templates"),console.log("Dropped report_templates table")}},{version:26,name:"add-repository-display-name",up:a=>{a.exec("ALTER TABLE repositories ADD COLUMN display_name TEXT;"),console.log("Added display_name column to repositories table")},down:a=>{a.exec("ALTER TABLE repositories DROP COLUMN display_name;"),console.log("Removed display_name column from repositories table")}},{version:27,name:"add-app-settings-table",up:a=>{a.exec(`
|
|
827
|
+
CREATE TABLE IF NOT EXISTS app_settings (
|
|
828
|
+
key TEXT PRIMARY KEY,
|
|
829
|
+
value TEXT NOT NULL,
|
|
830
|
+
created_at INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
|
|
831
|
+
updated_at INTEGER NOT NULL DEFAULT (unixepoch() * 1000)
|
|
832
|
+
);
|
|
833
|
+
`)},down:a=>{a.exec("DROP TABLE IF EXISTS app_settings")}},{version:28,name:"add-assistant-conversation-tables",up:a=>{a.exec(`
|
|
834
|
+
CREATE TABLE IF NOT EXISTS assistant_conversations (
|
|
835
|
+
id TEXT PRIMARY KEY,
|
|
836
|
+
repository_id TEXT NOT NULL,
|
|
837
|
+
cli_tool_id TEXT NOT NULL,
|
|
838
|
+
working_directory TEXT NOT NULL,
|
|
839
|
+
session_name TEXT,
|
|
840
|
+
status TEXT NOT NULL DEFAULT 'idle',
|
|
841
|
+
last_started_at INTEGER,
|
|
842
|
+
last_stopped_at INTEGER,
|
|
843
|
+
context_sent_at INTEGER,
|
|
844
|
+
created_at INTEGER NOT NULL,
|
|
845
|
+
updated_at INTEGER NOT NULL,
|
|
846
|
+
archived INTEGER NOT NULL DEFAULT 0,
|
|
847
|
+
UNIQUE(repository_id, cli_tool_id),
|
|
848
|
+
FOREIGN KEY (repository_id) REFERENCES repositories(id) ON DELETE CASCADE
|
|
849
|
+
);
|
|
850
|
+
|
|
851
|
+
CREATE INDEX IF NOT EXISTS idx_assistant_conversations_repository_tool
|
|
852
|
+
ON assistant_conversations(repository_id, cli_tool_id);
|
|
853
|
+
|
|
854
|
+
CREATE INDEX IF NOT EXISTS idx_assistant_conversations_status
|
|
855
|
+
ON assistant_conversations(status, archived, updated_at DESC);
|
|
856
|
+
|
|
857
|
+
CREATE TABLE IF NOT EXISTS assistant_messages (
|
|
858
|
+
id TEXT PRIMARY KEY,
|
|
859
|
+
conversation_id TEXT NOT NULL,
|
|
860
|
+
role TEXT NOT NULL CHECK(role IN ('user', 'assistant', 'system')),
|
|
861
|
+
content TEXT NOT NULL,
|
|
862
|
+
summary TEXT,
|
|
863
|
+
timestamp INTEGER NOT NULL,
|
|
864
|
+
message_type TEXT NOT NULL DEFAULT 'normal',
|
|
865
|
+
delivery_status TEXT CHECK(delivery_status IN ('pending', 'sent', 'failed')),
|
|
866
|
+
archived INTEGER NOT NULL DEFAULT 0,
|
|
867
|
+
FOREIGN KEY (conversation_id) REFERENCES assistant_conversations(id) ON DELETE CASCADE
|
|
868
|
+
);
|
|
869
|
+
|
|
870
|
+
CREATE INDEX IF NOT EXISTS idx_assistant_messages_conversation_time
|
|
871
|
+
ON assistant_messages(conversation_id, timestamp DESC);
|
|
872
|
+
|
|
873
|
+
CREATE INDEX IF NOT EXISTS idx_assistant_messages_delivery
|
|
874
|
+
ON assistant_messages(conversation_id, delivery_status, timestamp DESC);
|
|
875
|
+
|
|
876
|
+
CREATE TABLE IF NOT EXISTS assistant_session_states (
|
|
877
|
+
conversation_id TEXT PRIMARY KEY,
|
|
878
|
+
last_captured_line INTEGER NOT NULL DEFAULT 0,
|
|
879
|
+
in_progress_message_id TEXT,
|
|
880
|
+
FOREIGN KEY (conversation_id) REFERENCES assistant_conversations(id) ON DELETE CASCADE
|
|
881
|
+
);
|
|
882
|
+
`)},down:a=>{a.exec(`
|
|
883
|
+
DROP TABLE IF EXISTS assistant_session_states;
|
|
884
|
+
DROP TABLE IF EXISTS assistant_messages;
|
|
885
|
+
DROP TABLE IF EXISTS assistant_conversations;
|
|
886
|
+
`)}},{version:29,name:"add-assistant-non-interactive-executions",up:a=>{a.exec(`
|
|
887
|
+
ALTER TABLE assistant_conversations
|
|
888
|
+
ADD COLUMN execution_mode TEXT NOT NULL DEFAULT 'interactive';
|
|
889
|
+
|
|
890
|
+
ALTER TABLE assistant_conversations
|
|
891
|
+
ADD COLUMN resume_session_id TEXT;
|
|
892
|
+
|
|
893
|
+
ALTER TABLE assistant_conversations
|
|
894
|
+
ADD COLUMN last_execution_id TEXT;
|
|
895
|
+
|
|
896
|
+
UPDATE assistant_conversations
|
|
897
|
+
SET status = CASE
|
|
898
|
+
WHEN status = 'idle' THEN 'stopped'
|
|
899
|
+
ELSE status
|
|
900
|
+
END;
|
|
901
|
+
|
|
902
|
+
UPDATE assistant_conversations
|
|
903
|
+
SET execution_mode = CASE
|
|
904
|
+
WHEN cli_tool_id IN ('claude', 'codex') THEN 'non_interactive'
|
|
905
|
+
ELSE 'interactive'
|
|
906
|
+
END;
|
|
907
|
+
|
|
908
|
+
CREATE TABLE IF NOT EXISTS assistant_executions (
|
|
909
|
+
id TEXT PRIMARY KEY,
|
|
910
|
+
conversation_id TEXT NOT NULL,
|
|
911
|
+
cli_tool_id TEXT NOT NULL,
|
|
912
|
+
status TEXT NOT NULL,
|
|
913
|
+
pid INTEGER,
|
|
914
|
+
command_line TEXT NOT NULL,
|
|
915
|
+
prompt_text TEXT NOT NULL,
|
|
916
|
+
stdout_text TEXT,
|
|
917
|
+
stderr_text TEXT,
|
|
918
|
+
final_message_text TEXT,
|
|
919
|
+
exit_code INTEGER,
|
|
920
|
+
resume_session_id_before TEXT,
|
|
921
|
+
resume_session_id_after TEXT,
|
|
922
|
+
started_at INTEGER,
|
|
923
|
+
finished_at INTEGER,
|
|
924
|
+
created_at INTEGER NOT NULL,
|
|
925
|
+
updated_at INTEGER NOT NULL,
|
|
926
|
+
FOREIGN KEY (conversation_id) REFERENCES assistant_conversations(id) ON DELETE CASCADE
|
|
927
|
+
);
|
|
928
|
+
|
|
929
|
+
CREATE INDEX IF NOT EXISTS idx_assistant_executions_conversation
|
|
930
|
+
ON assistant_executions(conversation_id, created_at DESC);
|
|
931
|
+
|
|
932
|
+
CREATE INDEX IF NOT EXISTS idx_assistant_executions_status
|
|
933
|
+
ON assistant_executions(status, updated_at DESC);
|
|
934
|
+
`)},down:a=>{a.exec(`
|
|
935
|
+
DROP TABLE IF EXISTS assistant_executions;
|
|
936
|
+
`)}},{version:30,name:"add-assistant-context-snapshot",up:a=>{a.exec(`
|
|
937
|
+
ALTER TABLE assistant_conversations
|
|
938
|
+
ADD COLUMN context_snapshot TEXT;
|
|
939
|
+
`)},down:a=>{a.exec(`
|
|
940
|
+
ALTER TABLE assistant_conversations
|
|
941
|
+
DROP COLUMN context_snapshot;
|
|
942
|
+
`)}},{version:31,name:"add-repository-visible",up:a=>{a.exec("ALTER TABLE repositories ADD COLUMN visible INTEGER NOT NULL DEFAULT 1;")},down:a=>{a.exec("ALTER TABLE repositories DROP COLUMN visible;")}},{version:32,name:"add-messages-role-composite-index",up:a=>{a.exec(`
|
|
943
|
+
CREATE INDEX IF NOT EXISTS idx_messages_worktree_role_archived_time
|
|
944
|
+
ON chat_messages(worktree_id, role, archived, timestamp DESC);
|
|
945
|
+
`),a.exec("DROP INDEX IF EXISTS idx_messages_archived;")},down:a=>{a.exec("DROP INDEX IF EXISTS idx_messages_worktree_role_archived_time;"),a.exec(`
|
|
946
|
+
CREATE INDEX IF NOT EXISTS idx_messages_archived
|
|
947
|
+
ON chat_messages(worktree_id, archived, timestamp DESC);
|
|
948
|
+
`)}},{version:33,name:"add-agent-instances",up:a=>{a.exec(`
|
|
949
|
+
CREATE TABLE session_states_new (
|
|
950
|
+
worktree_id TEXT NOT NULL,
|
|
951
|
+
cli_tool_id TEXT NOT NULL DEFAULT 'claude',
|
|
952
|
+
instance_id TEXT NOT NULL DEFAULT 'claude',
|
|
953
|
+
last_captured_line INTEGER DEFAULT 0,
|
|
954
|
+
in_progress_message_id TEXT DEFAULT NULL,
|
|
955
|
+
|
|
956
|
+
PRIMARY KEY (worktree_id, instance_id),
|
|
957
|
+
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
958
|
+
);
|
|
959
|
+
`),a.exec(`
|
|
960
|
+
INSERT INTO session_states_new
|
|
961
|
+
(worktree_id, cli_tool_id, instance_id, last_captured_line, in_progress_message_id)
|
|
962
|
+
SELECT
|
|
963
|
+
worktree_id,
|
|
964
|
+
COALESCE(cli_tool_id, 'claude'),
|
|
965
|
+
COALESCE(cli_tool_id, 'claude'),
|
|
966
|
+
last_captured_line,
|
|
967
|
+
in_progress_message_id
|
|
968
|
+
FROM session_states
|
|
969
|
+
WHERE worktree_id IN (SELECT id FROM worktrees);
|
|
970
|
+
`),a.exec("DROP TABLE session_states;"),a.exec("ALTER TABLE session_states_new RENAME TO session_states;"),a.exec(`
|
|
971
|
+
ALTER TABLE chat_messages ADD COLUMN instance_id TEXT DEFAULT NULL;
|
|
972
|
+
`),a.exec(`
|
|
973
|
+
UPDATE chat_messages
|
|
974
|
+
SET instance_id = COALESCE(cli_tool_id, 'claude')
|
|
975
|
+
WHERE instance_id IS NULL;
|
|
976
|
+
`),a.exec(`
|
|
977
|
+
CREATE INDEX IF NOT EXISTS idx_messages_instance
|
|
978
|
+
ON chat_messages(worktree_id, instance_id, timestamp DESC);
|
|
979
|
+
`),a.exec(`
|
|
980
|
+
CREATE TABLE agent_instances (
|
|
981
|
+
worktree_id TEXT NOT NULL,
|
|
982
|
+
instance_id TEXT NOT NULL,
|
|
983
|
+
cli_tool_id TEXT NOT NULL,
|
|
984
|
+
alias TEXT NOT NULL DEFAULT '',
|
|
985
|
+
sort_order INTEGER NOT NULL DEFAULT 0,
|
|
986
|
+
created_at INTEGER NOT NULL,
|
|
987
|
+
|
|
988
|
+
PRIMARY KEY (worktree_id, instance_id),
|
|
989
|
+
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
990
|
+
);
|
|
991
|
+
`),a.exec(`
|
|
992
|
+
CREATE INDEX idx_agent_instances_worktree
|
|
993
|
+
ON agent_instances(worktree_id, sort_order);
|
|
994
|
+
`);let b=a.prepare(`
|
|
995
|
+
SELECT id, selected_agents, cli_tool_id FROM worktrees
|
|
996
|
+
`).all(),c=a.prepare(`
|
|
997
|
+
INSERT OR IGNORE INTO agent_instances
|
|
998
|
+
(worktree_id, instance_id, cli_tool_id, alias, sort_order, created_at)
|
|
999
|
+
VALUES (?, ?, ?, '', ?, ?)
|
|
1000
|
+
`),d=Date.now(),e=0;for(let a of b){let b=function(a){if(!a)return[];try{let b=JSON.parse(a);if(!Array.isArray(b))return[];let c=new Set,d=[];for(let a of b)"string"==typeof a&&a.length>0&&!c.has(a)&&(c.add(a),d.push(a));return d}catch{return[]}}(a.selected_agents);0===b.length&&(b=[a.cli_tool_id||"claude"]),b.forEach((b,f)=>{c.run(a.id,b,b,f,d),e+=1})}console.log("Rebuilt session_states with (worktree_id, instance_id) primary key"),console.log("Added instance_id column + idx_messages_instance to chat_messages"),console.log(`Created agent_instances table; backfilled ${e} primary instance(s)`)},down:a=>{a.exec("DROP INDEX IF EXISTS idx_agent_instances_worktree;"),a.exec("DROP TABLE IF EXISTS agent_instances;"),a.exec("DROP INDEX IF EXISTS idx_messages_instance;"),a.exec(`
|
|
1001
|
+
CREATE TABLE session_states_old (
|
|
1002
|
+
worktree_id TEXT NOT NULL,
|
|
1003
|
+
cli_tool_id TEXT NOT NULL DEFAULT 'claude',
|
|
1004
|
+
last_captured_line INTEGER DEFAULT 0,
|
|
1005
|
+
in_progress_message_id TEXT DEFAULT NULL,
|
|
1006
|
+
|
|
1007
|
+
PRIMARY KEY (worktree_id, cli_tool_id),
|
|
1008
|
+
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
1009
|
+
);
|
|
1010
|
+
`),a.exec(`
|
|
1011
|
+
INSERT OR IGNORE INTO session_states_old
|
|
1012
|
+
(worktree_id, cli_tool_id, last_captured_line, in_progress_message_id)
|
|
1013
|
+
SELECT worktree_id, cli_tool_id, last_captured_line, in_progress_message_id
|
|
1014
|
+
FROM session_states
|
|
1015
|
+
WHERE instance_id = cli_tool_id;
|
|
1016
|
+
`),a.exec("DROP TABLE session_states;"),a.exec("ALTER TABLE session_states_old RENAME TO session_states;"),console.log("Rolled back agent_instances migration (v33)")}},{version:34,name:"add-repository-todos",up:a=>{a.exec(`
|
|
1017
|
+
CREATE TABLE IF NOT EXISTS repository_todos (
|
|
1018
|
+
id TEXT PRIMARY KEY,
|
|
1019
|
+
repository_id TEXT NOT NULL,
|
|
1020
|
+
content TEXT NOT NULL,
|
|
1021
|
+
done INTEGER NOT NULL DEFAULT 0,
|
|
1022
|
+
position INTEGER NOT NULL DEFAULT 0,
|
|
1023
|
+
created_at INTEGER NOT NULL,
|
|
1024
|
+
updated_at INTEGER NOT NULL,
|
|
1025
|
+
FOREIGN KEY (repository_id) REFERENCES repositories(id) ON DELETE CASCADE
|
|
1026
|
+
);
|
|
1027
|
+
`),a.exec(`
|
|
1028
|
+
CREATE INDEX IF NOT EXISTS idx_repository_todos_repo
|
|
1029
|
+
ON repository_todos(repository_id, position);
|
|
1030
|
+
`)},down:a=>{a.exec("DROP TABLE IF EXISTS repository_todos;")}},{version:35,name:"add-instance-id-to-timer-messages",up:a=>{a.exec(`
|
|
1031
|
+
ALTER TABLE timer_messages ADD COLUMN instance_id TEXT;
|
|
1032
|
+
`),a.exec(`
|
|
1033
|
+
UPDATE timer_messages SET instance_id = cli_tool_id WHERE instance_id IS NULL;
|
|
1034
|
+
`),console.log("Added instance_id column to timer_messages table")},down:()=>{console.log("No rollback for instance_id column (SQLite limitation)")}},{version:36,name:"add-branch-to-worktrees",up:a=>{a.exec(`
|
|
1035
|
+
ALTER TABLE worktrees ADD COLUMN branch TEXT;
|
|
1036
|
+
`),console.log("Added branch column to worktrees table")},down:()=>{console.log("No rollback for branch column (SQLite limitation)")}},{version:37,name:"add-worktree-todos",up:a=>{a.exec(`
|
|
1037
|
+
CREATE TABLE IF NOT EXISTS worktree_todos (
|
|
1038
|
+
id TEXT PRIMARY KEY,
|
|
1039
|
+
worktree_id TEXT NOT NULL,
|
|
1040
|
+
content TEXT NOT NULL,
|
|
1041
|
+
done INTEGER NOT NULL DEFAULT 0,
|
|
1042
|
+
position INTEGER NOT NULL DEFAULT 0,
|
|
1043
|
+
created_at INTEGER NOT NULL,
|
|
1044
|
+
updated_at INTEGER NOT NULL,
|
|
1045
|
+
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
1046
|
+
);
|
|
1047
|
+
`),a.exec(`
|
|
1048
|
+
CREATE INDEX IF NOT EXISTS idx_worktree_todos_wt
|
|
1049
|
+
ON worktree_todos(worktree_id, position);
|
|
1050
|
+
`)},down:a=>{a.exec("DROP TABLE IF EXISTS worktree_todos;")}},{version:38,name:"add-status-to-worktree-todos",up:a=>{a.exec(`
|
|
1051
|
+
ALTER TABLE worktree_todos
|
|
1052
|
+
ADD COLUMN status TEXT NOT NULL DEFAULT 'todo';
|
|
1053
|
+
`),a.exec(`
|
|
1054
|
+
UPDATE worktree_todos SET status = 'done' WHERE done = 1;
|
|
1055
|
+
`)},down:()=>{}},{version:39,name:"add-detail-to-worktree-todos",up:a=>{a.exec(`
|
|
1056
|
+
ALTER TABLE worktree_todos
|
|
1057
|
+
ADD COLUMN detail TEXT NOT NULL DEFAULT '';
|
|
1058
|
+
`)},down:()=>{}},{version:40,name:"add-error-to-timer-messages",up:a=>{a.exec(`
|
|
1059
|
+
ALTER TABLE timer_messages ADD COLUMN error TEXT;
|
|
1060
|
+
`),console.log("Added error column to timer_messages table")},down:()=>{console.log("No rollback for error column (SQLite limitation)")}},{version:41,name:"add-push-subscriptions",up:a=>{a.exec(`
|
|
1061
|
+
CREATE TABLE IF NOT EXISTS push_subscriptions (
|
|
1062
|
+
id TEXT PRIMARY KEY,
|
|
1063
|
+
endpoint TEXT NOT NULL UNIQUE,
|
|
1064
|
+
p256dh TEXT NOT NULL,
|
|
1065
|
+
auth TEXT NOT NULL,
|
|
1066
|
+
device_label TEXT,
|
|
1067
|
+
enabled_prompt INTEGER NOT NULL DEFAULT 1,
|
|
1068
|
+
enabled_completion INTEGER NOT NULL DEFAULT 1,
|
|
1069
|
+
created_at INTEGER NOT NULL,
|
|
1070
|
+
updated_at INTEGER NOT NULL
|
|
1071
|
+
);
|
|
1072
|
+
`),a.exec(`
|
|
1073
|
+
CREATE INDEX IF NOT EXISTS idx_push_subscriptions_endpoint
|
|
1074
|
+
ON push_subscriptions(endpoint);
|
|
1075
|
+
`)},down:a=>{a.exec("DROP TABLE IF EXISTS push_subscriptions;")}},{version:42,name:"add-locale-to-push-subscriptions",up:a=>{a.exec(`
|
|
1076
|
+
ALTER TABLE push_subscriptions ADD COLUMN locale TEXT;
|
|
1077
|
+
`)},down:a=>{a.exec(`
|
|
1078
|
+
ALTER TABLE push_subscriptions DROP COLUMN locale;
|
|
1079
|
+
`)}},{version:43,name:"remove-cm-root-dir-ghost-repository",up:a=>{let b=function(){let a=process.env.CM_ROOT_DIR??process.env.MCBD_ROOT_DIR;return a&&a.trim()?e().resolve(a.trim()):null}();return b?(function(){let a=process.env.WORKTREE_REPOS;return a&&a.trim()?a.split(",").map(a=>a.trim()).filter(a=>a.length>0).map(a=>e().resolve(a)):[]})().includes(b)?void console.log(`Migration 43: ${b} is a WORKTREE_REPOS entry; keeping its repository row`):void(a.prepare(`DELETE FROM repositories
|
|
1080
|
+
WHERE path = ?
|
|
1081
|
+
AND is_env_managed = 1
|
|
1082
|
+
AND NOT EXISTS (
|
|
1083
|
+
SELECT 1 FROM worktrees WHERE worktrees.repository_path = ?
|
|
1084
|
+
)`).run(b,b).changes>0?console.log(`Migration 43: removed CM_ROOT_DIR ghost repository row (${b})`):console.log(`Migration 43: no ghost repository row at ${b}`)):void console.log("Migration 43: CM_ROOT_DIR is not set; no ghost row to remove")},down:()=>{console.log("No rollback for the CM_ROOT_DIR ghost row removal")}},{version:44,name:"add-skill-operations",up:a=>{a.exec(`
|
|
1085
|
+
CREATE TABLE IF NOT EXISTS skill_operations (
|
|
1086
|
+
id TEXT PRIMARY KEY,
|
|
1087
|
+
operation_id TEXT NOT NULL,
|
|
1088
|
+
idempotency_key TEXT NOT NULL,
|
|
1089
|
+
binding_hash TEXT NOT NULL,
|
|
1090
|
+
operation TEXT NOT NULL,
|
|
1091
|
+
state TEXT NOT NULL,
|
|
1092
|
+
result TEXT NOT NULL,
|
|
1093
|
+
actor_type TEXT NOT NULL,
|
|
1094
|
+
actor_id TEXT,
|
|
1095
|
+
worktree_id TEXT NOT NULL,
|
|
1096
|
+
skill_id TEXT NOT NULL,
|
|
1097
|
+
skill_version TEXT,
|
|
1098
|
+
source_origin TEXT,
|
|
1099
|
+
source_repository TEXT,
|
|
1100
|
+
source_ref TEXT,
|
|
1101
|
+
source_commit TEXT,
|
|
1102
|
+
artifact_sha256 TEXT,
|
|
1103
|
+
error_code TEXT,
|
|
1104
|
+
error_message TEXT,
|
|
1105
|
+
recorded_at INTEGER NOT NULL
|
|
1106
|
+
);
|
|
1107
|
+
`),a.exec(`
|
|
1108
|
+
CREATE INDEX IF NOT EXISTS idx_skill_operations_operation_id
|
|
1109
|
+
ON skill_operations(operation_id);
|
|
1110
|
+
`),a.exec(`
|
|
1111
|
+
CREATE INDEX IF NOT EXISTS idx_skill_operations_idempotency_key
|
|
1112
|
+
ON skill_operations(idempotency_key);
|
|
1113
|
+
`),a.exec(`
|
|
1114
|
+
CREATE INDEX IF NOT EXISTS idx_skill_operations_target
|
|
1115
|
+
ON skill_operations(worktree_id, skill_id, recorded_at);
|
|
1116
|
+
`),a.exec(`
|
|
1117
|
+
CREATE TRIGGER IF NOT EXISTS skill_operations_no_update
|
|
1118
|
+
BEFORE UPDATE ON skill_operations
|
|
1119
|
+
BEGIN
|
|
1120
|
+
SELECT RAISE(ABORT, 'skill_operations is append-only');
|
|
1121
|
+
END;
|
|
1122
|
+
`),a.exec(`
|
|
1123
|
+
CREATE TRIGGER IF NOT EXISTS skill_operations_no_delete
|
|
1124
|
+
BEFORE DELETE ON skill_operations
|
|
1125
|
+
BEGIN
|
|
1126
|
+
SELECT RAISE(ABORT, 'skill_operations is append-only');
|
|
1127
|
+
END;
|
|
1128
|
+
`)},down:a=>{a.exec("DROP TRIGGER IF EXISTS skill_operations_no_delete;"),a.exec("DROP TRIGGER IF EXISTS skill_operations_no_update;"),a.exec("DROP TABLE IF EXISTS skill_operations;")}},{version:45,name:"add-skill-installations",up:a=>{a.exec(`
|
|
1129
|
+
CREATE TABLE IF NOT EXISTS skill_installations (
|
|
1130
|
+
id TEXT PRIMARY KEY,
|
|
1131
|
+
worktree_id TEXT NOT NULL,
|
|
1132
|
+
skill_id TEXT NOT NULL,
|
|
1133
|
+
version TEXT NOT NULL,
|
|
1134
|
+
install_root TEXT NOT NULL,
|
|
1135
|
+
receipt_sha256 TEXT NOT NULL,
|
|
1136
|
+
source_repository TEXT NOT NULL,
|
|
1137
|
+
source_ref TEXT NOT NULL,
|
|
1138
|
+
source_commit TEXT NOT NULL,
|
|
1139
|
+
artifact_sha256 TEXT NOT NULL,
|
|
1140
|
+
effective_risk TEXT NOT NULL,
|
|
1141
|
+
operation_id TEXT NOT NULL,
|
|
1142
|
+
installed_at INTEGER NOT NULL,
|
|
1143
|
+
updated_at INTEGER NOT NULL,
|
|
1144
|
+
UNIQUE (worktree_id, skill_id)
|
|
1145
|
+
);
|
|
1146
|
+
`),a.exec(`
|
|
1147
|
+
CREATE INDEX IF NOT EXISTS idx_skill_installations_worktree
|
|
1148
|
+
ON skill_installations(worktree_id);
|
|
1149
|
+
`),a.exec(`
|
|
1150
|
+
CREATE INDEX IF NOT EXISTS idx_skill_installations_skill
|
|
1151
|
+
ON skill_installations(skill_id, version);
|
|
1152
|
+
`)},down:a=>{a.exec("DROP INDEX IF EXISTS idx_skill_installations_skill;"),a.exec("DROP INDEX IF EXISTS idx_skill_installations_worktree;"),a.exec("DROP TABLE IF EXISTS skill_installations;")}},{version:46,name:"skill-installations-worktree-cascade",up:a=>{a.exec(`
|
|
1153
|
+
CREATE TABLE skill_installations_new (
|
|
1154
|
+
${j},
|
|
1155
|
+
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
1156
|
+
);
|
|
1157
|
+
`),a.exec(`
|
|
1158
|
+
INSERT INTO skill_installations_new (${i})
|
|
1159
|
+
SELECT ${i} FROM skill_installations
|
|
1160
|
+
WHERE worktree_id IN (SELECT id FROM worktrees);
|
|
1161
|
+
`);let b=a.prepare(`SELECT COUNT(*) AS n FROM skill_installations
|
|
1162
|
+
WHERE worktree_id NOT IN (SELECT id FROM worktrees)`).get();a.exec("DROP TABLE skill_installations;"),a.exec("ALTER TABLE skill_installations_new RENAME TO skill_installations;"),k(a),b.n>0&&console.log(`Removed ${b.n} skill_installations row(s) with no worktree`),console.log("skill_installations now cascades with its worktree")},down:a=>{a.exec(`
|
|
1163
|
+
CREATE TABLE skill_installations_old (
|
|
1164
|
+
${j}
|
|
1165
|
+
);
|
|
1166
|
+
`),a.exec(`
|
|
1167
|
+
INSERT INTO skill_installations_old (${i})
|
|
1168
|
+
SELECT ${i} FROM skill_installations;
|
|
1169
|
+
`),a.exec("DROP TABLE skill_installations;"),a.exec("ALTER TABLE skill_installations_old RENAME TO skill_installations;"),k(a),console.log("Rolled back skill_installations cascade (v46)")}},{version:47,name:"add-skill-installations-roots",up:a=>{a.exec("ALTER TABLE skill_installations ADD COLUMN install_roots TEXT;")},down:a=>{a.exec(`
|
|
1170
|
+
CREATE TABLE skill_installations__v46 (
|
|
1171
|
+
id TEXT PRIMARY KEY,
|
|
1172
|
+
worktree_id TEXT NOT NULL,
|
|
1173
|
+
skill_id TEXT NOT NULL,
|
|
1174
|
+
version TEXT NOT NULL,
|
|
1175
|
+
install_root TEXT NOT NULL,
|
|
1176
|
+
receipt_sha256 TEXT NOT NULL,
|
|
1177
|
+
source_repository TEXT NOT NULL,
|
|
1178
|
+
source_ref TEXT NOT NULL,
|
|
1179
|
+
source_commit TEXT NOT NULL,
|
|
1180
|
+
artifact_sha256 TEXT NOT NULL,
|
|
1181
|
+
effective_risk TEXT NOT NULL,
|
|
1182
|
+
operation_id TEXT NOT NULL,
|
|
1183
|
+
installed_at INTEGER NOT NULL,
|
|
1184
|
+
updated_at INTEGER NOT NULL,
|
|
1185
|
+
UNIQUE (worktree_id, skill_id)
|
|
1186
|
+
);
|
|
1187
|
+
`),a.exec(`
|
|
1188
|
+
INSERT INTO skill_installations__v46 (
|
|
1189
|
+
id, worktree_id, skill_id, version, install_root, receipt_sha256,
|
|
1190
|
+
source_repository, source_ref, source_commit, artifact_sha256,
|
|
1191
|
+
effective_risk, operation_id, installed_at, updated_at
|
|
1192
|
+
)
|
|
1193
|
+
SELECT
|
|
1194
|
+
id, worktree_id, skill_id, version, install_root, receipt_sha256,
|
|
1195
|
+
source_repository, source_ref, source_commit, artifact_sha256,
|
|
1196
|
+
effective_risk, operation_id, installed_at, updated_at
|
|
1197
|
+
FROM skill_installations;
|
|
1198
|
+
`),a.exec("DROP TABLE skill_installations;"),a.exec("ALTER TABLE skill_installations__v46 RENAME TO skill_installations;"),a.exec(`
|
|
1199
|
+
CREATE INDEX IF NOT EXISTS idx_skill_installations_worktree
|
|
1200
|
+
ON skill_installations(worktree_id);
|
|
1201
|
+
`),a.exec(`
|
|
1202
|
+
CREATE INDEX IF NOT EXISTS idx_skill_installations_skill
|
|
1203
|
+
ON skill_installations(skill_id, version);
|
|
1204
|
+
`)}}];function m(a){!function(a,b){a.exec(`
|
|
1205
|
+
CREATE TABLE IF NOT EXISTS schema_version (
|
|
1206
|
+
version INTEGER PRIMARY KEY,
|
|
1207
|
+
name TEXT NOT NULL,
|
|
1208
|
+
applied_at INTEGER NOT NULL
|
|
1209
|
+
);
|
|
1210
|
+
`);let c=f(a);if(console.log(`Current schema version: ${c}`),c>47)throw Error(`This database (schema v${c}) was created by a newer version of CommandMate (this build supports up to v47). Please update: commandmate update`);let d=b.filter(a=>a.version>c);if(0===d.length)return console.log("Schema is up to date");for(let b of(console.log(`Found ${d.length} pending migration(s)`),d)){console.log(`Applying migration ${b.version}: ${b.name}...`);try{a.transaction(()=>{b.up(a),a.prepare(`
|
|
1211
|
+
INSERT INTO schema_version (version, name, applied_at)
|
|
1212
|
+
VALUES (?, ?, ?)
|
|
1213
|
+
`).run(b.version,b.name,Date.now())})(),console.log(`Migration ${b.version} applied successfully`)}catch(c){let a=c instanceof Error?c.message:String(c);throw console.error(`Migration ${b.version} failed:`,a),Error(`Migration ${b.version} (${b.name}) failed: ${a}`)}}console.log(`All migrations completed. Current version: ${f(a)}`)}(a,l)}},87374:(a,b,c)=>{c.d(b,{Dr:()=>i,HR:()=>h,Ky:()=>f,XS:()=>e,ms:()=>g,u8:()=>d}),Array.from({length:Math.floor(104)+1},(a,b)=>3e5+3e5*b);let d=5,e=50,f=100,g=1e4,h={PENDING:"pending",SENDING:"sending",SENT:"sent",FAILED:"failed",CANCELLED:"cancelled",NO_SESSION:"no_session"};function i(a){return"number"==typeof a&&a>=3e5&&a<=315e5&&a%3e5==0}},88807:(a,b,c)=>{c.r(b),c.d(b,{closeDbInstance:()=>p,getDbInstance:()=>o});var d=c(33873),e=c.n(d),f=c(80499),g=c(79646),h=c(87550),i=c.n(h);let j=!1;function k(a){return a instanceof Error&&"ERR_DLOPEN_FAILED"===a.code&&a.message.includes("NODE_MODULE_VERSION")}function l(a,b){let c=["better-sqlite3 could not be loaded: it was built for a different Node.js version.","This usually happens after switching Node.js versions (nvm, fnm, Homebrew, ...).","",`Automatic recovery failed: ${a}`,"","How to fix it manually:"];return b?c.push(" The install directory is not writable by the current user, so the addon"," cannot be rebuilt in place. Do not re-run this with sudo — root-owned"," files there will break future installs and updates.",""," Either switch back to the Node.js version CommandMate was installed with:",` node -v (currently ${process.version}, NODE_MODULE_VERSION ${process.versions.modules})`,""," Or reinstall CommandMate under a Node.js version manager, which keeps"," global packages in a user-owned directory:"," nvm use <version> && npm install -g commandmate"):c.push(` 1. cd ${process.cwd()}`," 2. npm rebuild better-sqlite3"," 3. Start CommandMate again",""," If that fails, reinstalling picks up the current Node.js version:"," npm install -g commandmate"),c.join("\n")}var m=c(87447);let n=null;function o(){if(!n){let a=(0,m._$)().CM_DB_PATH,b=c(29021),d=e().dirname(a);b.existsSync(d)||b.mkdirSync(d,{recursive:!0,mode:448});let h=function(a){try{return new(i())(a)}catch(c){if(!k(c))throw c;if(j)throw Error(l("a rebuild was already attempted in this process.",!1));j=!0,console.error("[commandmate] better-sqlite3 was built for a different Node.js version.\n[commandmate] Rebuilding it automatically — this can take a few minutes...");let b=function(){let a=(0,g.spawnSync)("npm",["rebuild","better-sqlite3"],{cwd:process.cwd(),encoding:"utf-8",timeout:3e5,env:{...process.env,PATH:`${e().dirname(process.execPath)}${e().delimiter}${process.env.PATH??""}`}}),b=`${a.stdout??""}${a.stderr??""}`;return a.error||0!==a.status?{success:!1,permissionDenied:/EACCES|permission denied/i.test(b),output:b}:{success:!0,permissionDenied:!1,output:b}}();if(!b.success)throw Error(l("npm rebuild better-sqlite3 failed.",b.permissionDenied));console.error("[commandmate] Rebuild succeeded. Continuing startup.");try{return new(i())(a)}catch(a){if(k(a))throw Error(l("the addon still reports a version mismatch after rebuilding.",!1));throw a}}}(a);h.pragma("foreign_keys = ON"),h.pragma("journal_mode = WAL"),h.pragma("busy_timeout = 5000");try{(0,f.vI)(h)}catch(a){throw h.close(),a}n=h}return n}function p(){n&&(n.close(),n=null)}}};
|