commandmate 0.11.3 → 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 +392 -300
- package/.next/app-path-routes-manifest.json +30 -21
- 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.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 +30 -21
- 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-8819e6905355caea.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/cli/utils/npx-runner.d.ts +14 -0
- package/dist/cli/utils/npx-runner.d.ts.map +1 -1
- package/dist/cli/utils/npx-runner.js +20 -0
- 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/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-6105a3470b279527.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/i8mdUwheg9j9sU_lI_ZSf/_buildManifest.js +0 -1
- /package/.next/static/{i8mdUwheg9j9sU_lI_ZSf → D-aoE4gWfuCUN0GqEPIX3}/_ssgManifest.js +0 -0
|
@@ -31,6 +31,8 @@ exports.ACTIVITIES = [
|
|
|
31
31
|
{ id: 'timer', labelKey: 'activityBar.timer', icon: lucide_react_1.Timer },
|
|
32
32
|
// Issue #1015: branch-scoped ToDo list.
|
|
33
33
|
{ id: 'todo', labelKey: 'activityBar.todo', icon: lucide_react_1.ListTodo },
|
|
34
|
+
// Issue #1441: worktree-scoped Skill install/uninstall management.
|
|
35
|
+
{ id: 'skills', labelKey: 'activityBar.skills', icon: lucide_react_1.Sparkles },
|
|
34
36
|
];
|
|
35
37
|
/**
|
|
36
38
|
* Set of valid ActivityId values for runtime validation.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Git status polling configuration
|
|
4
|
+
* Issue #779: git status API + GitPane Current Status (Phase 1/5)
|
|
5
|
+
*
|
|
6
|
+
* Semantic separation from file-polling-config: GitPane's Current Status
|
|
7
|
+
* section polls `GET /api/worktrees/[id]/git/status` on its own cadence.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.GIT_PROGRESS_POLL_INTERVAL_MS = exports.GIT_PUSH_TIMEOUT_MS = exports.GIT_PULL_TIMEOUT_MS = exports.GIT_FETCH_TIMEOUT_MS = exports.MAX_STASH_INDEX = exports.MAX_COMMIT_MESSAGE_LENGTH = exports.MAX_GIT_FILES = exports.GIT_WRITE_TIMEOUT_MS = exports.GIT_STATUS_POLL_INTERVAL_MS = void 0;
|
|
11
|
+
/**
|
|
12
|
+
* Polling interval (ms) for GitPane's Current Status section.
|
|
13
|
+
* Issue #779: drives `useFilePolling` in GitPane (visibilitychange-aware).
|
|
14
|
+
*/
|
|
15
|
+
exports.GIT_STATUS_POLL_INTERVAL_MS = 5000;
|
|
16
|
+
// =============================================================================
|
|
17
|
+
// Issue #780: stage / unstage / commit operations
|
|
18
|
+
// =============================================================================
|
|
19
|
+
/**
|
|
20
|
+
* Timeout (ms) for git WRITE operations (add / restore --staged / commit) and
|
|
21
|
+
* for the staged-status read used by those flows. Deliberately larger than the
|
|
22
|
+
* 1s `GIT_COMMAND_TIMEOUT_MS` used by getGitStatus (#779) because write ops can
|
|
23
|
+
* run pre-commit hooks and stage large numbers of files.
|
|
24
|
+
*/
|
|
25
|
+
exports.GIT_WRITE_TIMEOUT_MS = 30000;
|
|
26
|
+
/**
|
|
27
|
+
* Maximum number of file paths accepted in a single stage / unstage request.
|
|
28
|
+
* Requests exceeding this are rejected with HTTP 400 to bound argv size and
|
|
29
|
+
* per-request work.
|
|
30
|
+
*/
|
|
31
|
+
exports.MAX_GIT_FILES = 1000;
|
|
32
|
+
/**
|
|
33
|
+
* Maximum length (characters) of a commit message. Messages exceeding this are
|
|
34
|
+
* rejected with HTTP 400.
|
|
35
|
+
*/
|
|
36
|
+
exports.MAX_COMMIT_MESSAGE_LENGTH = 10000;
|
|
37
|
+
// =============================================================================
|
|
38
|
+
// Issue #782: stash + reset/revert (Phase 4/5 - Danger Zone)
|
|
39
|
+
// =============================================================================
|
|
40
|
+
/**
|
|
41
|
+
* Maximum accepted `index` for the stash pop/apply/drop routes (Issue #782).
|
|
42
|
+
* The index is validated to be `/^\d+$/` and <= this bound before it is
|
|
43
|
+
* embedded into the `stash@{N}` argv (DoS / absurd-index defense). Mirrors the
|
|
44
|
+
* MAX_GIT_FILES (#780) / MAX_BRANCH_REF_LENGTH (#781) bounding pattern.
|
|
45
|
+
*/
|
|
46
|
+
exports.MAX_STASH_INDEX = 1000;
|
|
47
|
+
// =============================================================================
|
|
48
|
+
// Issue #783: network operations (Phase 5/5 - push / pull / fetch)
|
|
49
|
+
// =============================================================================
|
|
50
|
+
/**
|
|
51
|
+
* Timeout (ms) for `git fetch`. Larger than the 1s `GIT_COMMAND_TIMEOUT_MS`
|
|
52
|
+
* (status read) and the 30s `GIT_WRITE_TIMEOUT_MS` line: a fetch contacts the
|
|
53
|
+
* remote and may run longer than a local index write. fetch is NOT serialized
|
|
54
|
+
* (§6.1) — it only updates remote-tracking refs / packed-refs.
|
|
55
|
+
*/
|
|
56
|
+
exports.GIT_FETCH_TIMEOUT_MS = 30000;
|
|
57
|
+
/**
|
|
58
|
+
* Timeout (ms) for `git pull`. 60s because a pull does a fetch AND a merge/rebase
|
|
59
|
+
* over the working tree (slower than a bare fetch). Serialized per worktree.
|
|
60
|
+
*/
|
|
61
|
+
exports.GIT_PULL_TIMEOUT_MS = 60000;
|
|
62
|
+
/**
|
|
63
|
+
* Timeout (ms) for `git push`. 60s because a push uploads objects to a remote
|
|
64
|
+
* over the network (the slowest network op). Serialized per worktree.
|
|
65
|
+
*/
|
|
66
|
+
exports.GIT_PUSH_TIMEOUT_MS = 60000;
|
|
67
|
+
/**
|
|
68
|
+
* DR1-003: This is NOT a server progress-polling interval. There is NO server
|
|
69
|
+
* progress endpoint; the route holds the git process until completion and the
|
|
70
|
+
* awaited Promise is the only true state-transition source. This constant is an
|
|
71
|
+
* OPTIONAL client-side elapsed-time tick (zero server round-trips) used only to
|
|
72
|
+
* re-render the elapsed seconds while a network op is in-flight. A plain spinner
|
|
73
|
+
* is sufficient, so this may go unused. The name is kept for compatibility with
|
|
74
|
+
* the Issue body's "progress polling" wording (its true role is documented here).
|
|
75
|
+
*/
|
|
76
|
+
exports.GIT_PROGRESS_POLL_INTERVAL_MS = 1000; // optional elapsed-time tick (in-flight only; NOT server progress)
|
|
77
|
+
// Issue #1277: the GitPane warning/guidance strings that used to live here
|
|
78
|
+
// (CHECKOUT_*_WARNING / RESET_HARD_HISTORY_LOSS_WARNING /
|
|
79
|
+
// DANGER_ZONE_RUNNING_SESSION_WARNING / PUSH_AUTH_FAILED_GUIDANCE /
|
|
80
|
+
// PUSH_PROTECTED_BRANCH_WARNING) were hardcoded Japanese rendered to every
|
|
81
|
+
// locale. They now live in the `worktree` dictionary under `git.*` and are
|
|
82
|
+
// resolved with useTranslations at the render site. Do not reintroduce
|
|
83
|
+
// user-facing prose in this config module.
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Skill fetch/snapshot security policy (Issue #1229)
|
|
4
|
+
*
|
|
5
|
+
* Single source of truth for *where* CommandMate is allowed to fetch Skill
|
|
6
|
+
* documents from and *how much* it is allowed to keep on disk. Every value here
|
|
7
|
+
* is a hardcoded constant: none of it may be derived from environment
|
|
8
|
+
* variables, config files or client input, because that is exactly the SSRF
|
|
9
|
+
* lever this module exists to remove (OWASP A10:2021, same rule as
|
|
10
|
+
* `GITHUB_API_URL` in src/lib/version-checker.ts).
|
|
11
|
+
*
|
|
12
|
+
* Catalog JSON and release assets get *separate* policies: they are served by
|
|
13
|
+
* different origins with different media types, and a Catalog response must
|
|
14
|
+
* never be accepted where an artifact is expected (or vice versa).
|
|
15
|
+
*
|
|
16
|
+
* @module config/skill-security-config
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.SKILL_PLAN_SWEEP_INTERVAL_MS = exports.SKILL_SNAPSHOT_ID_PATTERN = exports.SKILL_SNAPSHOT_ID_BYTES = exports.SKILL_SNAPSHOT_MAX_COUNT = exports.SKILL_SNAPSHOT_TOTAL_QUOTA_BYTES = exports.SKILL_SNAPSHOT_TTL_MS = exports.SKILL_SNAPSHOT_FILE_MODE = exports.SKILL_SNAPSHOT_DIR_MODE = exports.SKILL_SNAPSHOT_DIRNAME = exports.SKILL_FETCH_USER_AGENT_PREFIX = exports.SKILL_CREDENTIAL_HEADERS = exports.SKILL_FETCH_TOTAL_TIMEOUT_MS = exports.SKILL_FETCH_HEADER_TIMEOUT_MS = exports.SKILL_FETCH_MAX_REDIRECTS = exports.SKILL_SOURCE_POLICIES = exports.SKILL_CATALOG_MAX_SIZE = exports.SKILL_CATALOG_FILENAME = exports.SKILL_OFFICIAL_REPOSITORY = void 0;
|
|
20
|
+
exports.buildSkillCatalogUrl = buildSkillCatalogUrl;
|
|
21
|
+
const skills_1 = require("../lib/skills");
|
|
22
|
+
// =============================================================================
|
|
23
|
+
// Official source coordinates
|
|
24
|
+
// =============================================================================
|
|
25
|
+
/** The only repository Skills may be distributed from in schema_version 1. */
|
|
26
|
+
exports.SKILL_OFFICIAL_REPOSITORY = 'Kewton/commandmate-skills';
|
|
27
|
+
/** Catalog document filename at the repository root. */
|
|
28
|
+
exports.SKILL_CATALOG_FILENAME = 'catalog.json';
|
|
29
|
+
/** Catalog JSON is served by the raw content host, pinned to the official repo. */
|
|
30
|
+
const CATALOG_HOSTS = [
|
|
31
|
+
{ host: 'raw.githubusercontent.com', pathPrefix: `/${exports.SKILL_OFFICIAL_REPOSITORY}/` },
|
|
32
|
+
];
|
|
33
|
+
/** Release asset downloads always start at the release download path. */
|
|
34
|
+
const ARTIFACT_ENTRY_HOSTS = [
|
|
35
|
+
{ host: 'github.com', pathPrefix: `/${exports.SKILL_OFFICIAL_REPOSITORY}/releases/download/` },
|
|
36
|
+
];
|
|
37
|
+
/**
|
|
38
|
+
* Hosts a release asset download may be redirected to.
|
|
39
|
+
*
|
|
40
|
+
* GitHub hands release assets off to a storage CDN with an opaque, signed path,
|
|
41
|
+
* so no path prefix can be asserted on these hops. The artifact digest check is
|
|
42
|
+
* what makes that acceptable: a wrong body from an allowed host still fails.
|
|
43
|
+
*/
|
|
44
|
+
const ARTIFACT_REDIRECT_HOSTS = [
|
|
45
|
+
...ARTIFACT_ENTRY_HOSTS,
|
|
46
|
+
{ host: 'objects.githubusercontent.com' },
|
|
47
|
+
{ host: 'release-assets.githubusercontent.com' },
|
|
48
|
+
];
|
|
49
|
+
/** Maximum Catalog document size in bytes (4 MiB). */
|
|
50
|
+
exports.SKILL_CATALOG_MAX_SIZE = 4 * 1024 * 1024;
|
|
51
|
+
/**
|
|
52
|
+
* `raw.githubusercontent.com` serves `.json` as `text/plain`, so the Catalog
|
|
53
|
+
* policy has to accept it. The document is parsed as JSON regardless of the
|
|
54
|
+
* declared type, and validated by `validateSkillCatalog` afterwards.
|
|
55
|
+
*/
|
|
56
|
+
const CATALOG_CONTENT_TYPES = ['application/json', 'text/plain'];
|
|
57
|
+
exports.SKILL_SOURCE_POLICIES = {
|
|
58
|
+
catalog: {
|
|
59
|
+
kind: 'catalog',
|
|
60
|
+
entryHosts: CATALOG_HOSTS,
|
|
61
|
+
redirectHosts: CATALOG_HOSTS,
|
|
62
|
+
accept: 'application/json',
|
|
63
|
+
contentTypes: CATALOG_CONTENT_TYPES,
|
|
64
|
+
maxBytes: exports.SKILL_CATALOG_MAX_SIZE,
|
|
65
|
+
},
|
|
66
|
+
artifact: {
|
|
67
|
+
kind: 'artifact',
|
|
68
|
+
entryHosts: ARTIFACT_ENTRY_HOSTS,
|
|
69
|
+
redirectHosts: ARTIFACT_REDIRECT_HOSTS,
|
|
70
|
+
accept: skills_1.SKILL_ARTIFACT_CONTENT_TYPE,
|
|
71
|
+
contentTypes: [skills_1.SKILL_ARTIFACT_CONTENT_TYPE, 'application/octet-stream'],
|
|
72
|
+
maxBytes: skills_1.SKILL_ARTIFACT_MAX_SIZE,
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
// =============================================================================
|
|
76
|
+
// Transport limits
|
|
77
|
+
// =============================================================================
|
|
78
|
+
/** Maximum number of redirect hops before a fetch fails closed. */
|
|
79
|
+
exports.SKILL_FETCH_MAX_REDIRECTS = 5;
|
|
80
|
+
/** Timeout for receiving response headers, in milliseconds. */
|
|
81
|
+
exports.SKILL_FETCH_HEADER_TIMEOUT_MS = 10_000;
|
|
82
|
+
/** Timeout for the whole request including body transfer, in milliseconds. */
|
|
83
|
+
exports.SKILL_FETCH_TOTAL_TIMEOUT_MS = 120_000;
|
|
84
|
+
/**
|
|
85
|
+
* Request headers dropped when a redirect crosses an origin.
|
|
86
|
+
*
|
|
87
|
+
* `fetch` with `redirect: 'manual'` gives us the hop, so credential forwarding
|
|
88
|
+
* is our responsibility: a signed CDN redirect must never carry a GitHub token.
|
|
89
|
+
*/
|
|
90
|
+
exports.SKILL_CREDENTIAL_HEADERS = [
|
|
91
|
+
'authorization',
|
|
92
|
+
'cookie',
|
|
93
|
+
'proxy-authorization',
|
|
94
|
+
];
|
|
95
|
+
/** Value sent as `User-Agent`, matching the version-checker convention. */
|
|
96
|
+
exports.SKILL_FETCH_USER_AGENT_PREFIX = 'CommandMate';
|
|
97
|
+
// =============================================================================
|
|
98
|
+
// Snapshot store limits
|
|
99
|
+
// =============================================================================
|
|
100
|
+
/** Directory name of the snapshot store under the service-owned data root. */
|
|
101
|
+
exports.SKILL_SNAPSHOT_DIRNAME = 'skill-snapshots';
|
|
102
|
+
/** Snapshot directory mode: service-owned, not group/world readable. */
|
|
103
|
+
exports.SKILL_SNAPSHOT_DIR_MODE = 0o700;
|
|
104
|
+
/** Snapshot file mode: read-only for the owning service account. */
|
|
105
|
+
exports.SKILL_SNAPSHOT_FILE_MODE = 0o400;
|
|
106
|
+
/** Lifetime of an unreferenced snapshot before sweeping, in milliseconds. */
|
|
107
|
+
exports.SKILL_SNAPSHOT_TTL_MS = 30 * 60 * 1000;
|
|
108
|
+
/** Total bytes the snapshot store may hold (256 MiB). */
|
|
109
|
+
exports.SKILL_SNAPSHOT_TOTAL_QUOTA_BYTES = 256 * 1024 * 1024;
|
|
110
|
+
/** Maximum number of concurrently retained snapshots. */
|
|
111
|
+
exports.SKILL_SNAPSHOT_MAX_COUNT = 64;
|
|
112
|
+
/** Random bytes behind an opaque snapshot ID. */
|
|
113
|
+
exports.SKILL_SNAPSHOT_ID_BYTES = 16;
|
|
114
|
+
/** Opaque snapshot ID grammar: lowercase hex of {@link SKILL_SNAPSHOT_ID_BYTES}. */
|
|
115
|
+
exports.SKILL_SNAPSHOT_ID_PATTERN = /^[0-9a-f]{32}$/;
|
|
116
|
+
/**
|
|
117
|
+
* How often the background sweeper reclaims expired plans and snapshots.
|
|
118
|
+
*
|
|
119
|
+
* Short relative to both TTLs so an abandoned plan releases its snapshot within
|
|
120
|
+
* a minute of expiring, rather than waiting for the next plan to be created.
|
|
121
|
+
*/
|
|
122
|
+
exports.SKILL_PLAN_SWEEP_INTERVAL_MS = 60 * 1000;
|
|
123
|
+
// =============================================================================
|
|
124
|
+
// URL construction
|
|
125
|
+
// =============================================================================
|
|
126
|
+
/**
|
|
127
|
+
* Build the Catalog URL for an immutable commit.
|
|
128
|
+
*
|
|
129
|
+
* Takes a resolved 40-hex commit rather than a branch so the Catalog a user
|
|
130
|
+
* reviewed is the Catalog that gets installed. Callers never supply a URL.
|
|
131
|
+
*
|
|
132
|
+
* @throws Error when the commit is not a resolved 40-hex SHA
|
|
133
|
+
*/
|
|
134
|
+
function buildSkillCatalogUrl(commit) {
|
|
135
|
+
if (!skills_1.GIT_COMMIT_SHA_PATTERN.test(commit)) {
|
|
136
|
+
throw new Error('Skill catalog URL requires a resolved 40-hex commit SHA');
|
|
137
|
+
}
|
|
138
|
+
return `https://raw.githubusercontent.com/${exports.SKILL_OFFICIAL_REPOSITORY}/${commit}/${exports.SKILL_CATALOG_FILENAME}`;
|
|
139
|
+
}
|
|
@@ -27,6 +27,10 @@ const v40_timer_error_1 = require("./v40-timer-error");
|
|
|
27
27
|
const v41_push_subscriptions_1 = require("./v41-push-subscriptions");
|
|
28
28
|
const v42_push_subscription_locale_1 = require("./v42-push-subscription-locale");
|
|
29
29
|
const v43_remove_cm_root_dir_ghost_repository_1 = require("./v43-remove-cm-root-dir-ghost-repository");
|
|
30
|
+
const v44_skill_operations_1 = require("./v44-skill-operations");
|
|
31
|
+
const v45_skill_installations_1 = require("./v45-skill-installations");
|
|
32
|
+
const v46_skill_installations_cascade_1 = require("./v46-skill-installations-cascade");
|
|
33
|
+
const v47_skill_installations_roots_1 = require("./v47-skill-installations-roots");
|
|
30
34
|
/**
|
|
31
35
|
* Complete ordered list of all migrations.
|
|
32
36
|
* Used internally by the barrel file (db-migrations.ts); NOT exported from the barrel (DR2-004).
|
|
@@ -57,4 +61,8 @@ exports.migrations = [
|
|
|
57
61
|
...v41_push_subscriptions_1.v41_migrations,
|
|
58
62
|
...v42_push_subscription_locale_1.v42_migrations,
|
|
59
63
|
...v43_remove_cm_root_dir_ghost_repository_1.v43_migrations,
|
|
64
|
+
...v44_skill_operations_1.v44_migrations,
|
|
65
|
+
...v45_skill_installations_1.v45_migrations,
|
|
66
|
+
...v46_skill_installations_cascade_1.v46_migrations,
|
|
67
|
+
...v47_skill_installations_roots_1.v47_migrations,
|
|
60
68
|
];
|
|
@@ -17,7 +17,7 @@ const path_1 = __importDefault(require("path"));
|
|
|
17
17
|
* Current schema version
|
|
18
18
|
* Increment this when adding new migrations
|
|
19
19
|
*/
|
|
20
|
-
exports.CURRENT_SCHEMA_VERSION =
|
|
20
|
+
exports.CURRENT_SCHEMA_VERSION = 47;
|
|
21
21
|
/**
|
|
22
22
|
* Get current schema version from database
|
|
23
23
|
*/
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Migration v44: append-only skill_operations audit log (Issue #1234).
|
|
4
|
+
*
|
|
5
|
+
* One row per audit event, not per operation: a single operationId appends a row
|
|
6
|
+
* when it fails and another when reconciliation converges it, so the sequence of
|
|
7
|
+
* events survives instead of being overwritten. Append-only is enforced in the
|
|
8
|
+
* database by BEFORE UPDATE/DELETE triggers rather than by convention, so a bug
|
|
9
|
+
* or a direct sqlite3 session cannot silently rewrite history.
|
|
10
|
+
*
|
|
11
|
+
* Source coordinates (repository/ref/resolved commit/artifact digest) are stored
|
|
12
|
+
* as separate columns so an install can be traced back to an immutable source
|
|
13
|
+
* without parsing a blob. No column holds a URL, token or machine-absolute path.
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.v44_migrations = void 0;
|
|
17
|
+
exports.v44_migrations = [
|
|
18
|
+
{
|
|
19
|
+
version: 44,
|
|
20
|
+
name: 'add-skill-operations',
|
|
21
|
+
up: (db) => {
|
|
22
|
+
db.exec(`
|
|
23
|
+
CREATE TABLE IF NOT EXISTS skill_operations (
|
|
24
|
+
id TEXT PRIMARY KEY,
|
|
25
|
+
operation_id TEXT NOT NULL,
|
|
26
|
+
idempotency_key TEXT NOT NULL,
|
|
27
|
+
binding_hash TEXT NOT NULL,
|
|
28
|
+
operation TEXT NOT NULL,
|
|
29
|
+
state TEXT NOT NULL,
|
|
30
|
+
result TEXT NOT NULL,
|
|
31
|
+
actor_type TEXT NOT NULL,
|
|
32
|
+
actor_id TEXT,
|
|
33
|
+
worktree_id TEXT NOT NULL,
|
|
34
|
+
skill_id TEXT NOT NULL,
|
|
35
|
+
skill_version TEXT,
|
|
36
|
+
source_origin TEXT,
|
|
37
|
+
source_repository TEXT,
|
|
38
|
+
source_ref TEXT,
|
|
39
|
+
source_commit TEXT,
|
|
40
|
+
artifact_sha256 TEXT,
|
|
41
|
+
error_code TEXT,
|
|
42
|
+
error_message TEXT,
|
|
43
|
+
recorded_at INTEGER NOT NULL
|
|
44
|
+
);
|
|
45
|
+
`);
|
|
46
|
+
db.exec(`
|
|
47
|
+
CREATE INDEX IF NOT EXISTS idx_skill_operations_operation_id
|
|
48
|
+
ON skill_operations(operation_id);
|
|
49
|
+
`);
|
|
50
|
+
db.exec(`
|
|
51
|
+
CREATE INDEX IF NOT EXISTS idx_skill_operations_idempotency_key
|
|
52
|
+
ON skill_operations(idempotency_key);
|
|
53
|
+
`);
|
|
54
|
+
db.exec(`
|
|
55
|
+
CREATE INDEX IF NOT EXISTS idx_skill_operations_target
|
|
56
|
+
ON skill_operations(worktree_id, skill_id, recorded_at);
|
|
57
|
+
`);
|
|
58
|
+
db.exec(`
|
|
59
|
+
CREATE TRIGGER IF NOT EXISTS skill_operations_no_update
|
|
60
|
+
BEFORE UPDATE ON skill_operations
|
|
61
|
+
BEGIN
|
|
62
|
+
SELECT RAISE(ABORT, 'skill_operations is append-only');
|
|
63
|
+
END;
|
|
64
|
+
`);
|
|
65
|
+
db.exec(`
|
|
66
|
+
CREATE TRIGGER IF NOT EXISTS skill_operations_no_delete
|
|
67
|
+
BEFORE DELETE ON skill_operations
|
|
68
|
+
BEGIN
|
|
69
|
+
SELECT RAISE(ABORT, 'skill_operations is append-only');
|
|
70
|
+
END;
|
|
71
|
+
`);
|
|
72
|
+
},
|
|
73
|
+
down: (db) => {
|
|
74
|
+
// Triggers first: the delete guard would otherwise be the only thing
|
|
75
|
+
// standing between a rollback and an ABORT on any later cleanup.
|
|
76
|
+
db.exec('DROP TRIGGER IF EXISTS skill_operations_no_delete;');
|
|
77
|
+
db.exec('DROP TRIGGER IF EXISTS skill_operations_no_update;');
|
|
78
|
+
db.exec('DROP TABLE IF EXISTS skill_operations;');
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
];
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Migration v45: `skill_installations` index (Issue #1235).
|
|
4
|
+
*
|
|
5
|
+
* One row per (worktree, skill): the index answers "what is installed here"
|
|
6
|
+
* without walking every worktree on disk. It is an *index*, not the truth — the
|
|
7
|
+
* receipt inside `.agents/skills/<id>/` is. That ordering is what lets a crash
|
|
8
|
+
* between the atomic rename and this row be reconciled forward (#1234) instead
|
|
9
|
+
* of being reported as a rollback that the filesystem contradicts.
|
|
10
|
+
*
|
|
11
|
+
* `receipt_sha256` is the join back to the payload: reconciliation compares it
|
|
12
|
+
* against the receipt actually on disk, so a row that describes a different
|
|
13
|
+
* install than the one present is detectable rather than merely stale.
|
|
14
|
+
*
|
|
15
|
+
* No column holds a URL, a token or a machine-absolute path; `install_root` is
|
|
16
|
+
* repository-relative by construction.
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.v45_migrations = void 0;
|
|
20
|
+
exports.v45_migrations = [
|
|
21
|
+
{
|
|
22
|
+
version: 45,
|
|
23
|
+
name: 'add-skill-installations',
|
|
24
|
+
up: (db) => {
|
|
25
|
+
db.exec(`
|
|
26
|
+
CREATE TABLE IF NOT EXISTS skill_installations (
|
|
27
|
+
id TEXT PRIMARY KEY,
|
|
28
|
+
worktree_id TEXT NOT NULL,
|
|
29
|
+
skill_id TEXT NOT NULL,
|
|
30
|
+
version TEXT NOT NULL,
|
|
31
|
+
install_root TEXT NOT NULL,
|
|
32
|
+
receipt_sha256 TEXT NOT NULL,
|
|
33
|
+
source_repository TEXT NOT NULL,
|
|
34
|
+
source_ref TEXT NOT NULL,
|
|
35
|
+
source_commit TEXT NOT NULL,
|
|
36
|
+
artifact_sha256 TEXT NOT NULL,
|
|
37
|
+
effective_risk TEXT NOT NULL,
|
|
38
|
+
operation_id TEXT NOT NULL,
|
|
39
|
+
installed_at INTEGER NOT NULL,
|
|
40
|
+
updated_at INTEGER NOT NULL,
|
|
41
|
+
UNIQUE (worktree_id, skill_id)
|
|
42
|
+
);
|
|
43
|
+
`);
|
|
44
|
+
db.exec(`
|
|
45
|
+
CREATE INDEX IF NOT EXISTS idx_skill_installations_worktree
|
|
46
|
+
ON skill_installations(worktree_id);
|
|
47
|
+
`);
|
|
48
|
+
db.exec(`
|
|
49
|
+
CREATE INDEX IF NOT EXISTS idx_skill_installations_skill
|
|
50
|
+
ON skill_installations(skill_id, version);
|
|
51
|
+
`);
|
|
52
|
+
},
|
|
53
|
+
down: (db) => {
|
|
54
|
+
db.exec('DROP INDEX IF EXISTS idx_skill_installations_skill;');
|
|
55
|
+
db.exec('DROP INDEX IF EXISTS idx_skill_installations_worktree;');
|
|
56
|
+
db.exec('DROP TABLE IF EXISTS skill_installations;');
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
];
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Migration v46: `skill_installations` follows the worktree it belongs to (Issue #1430).
|
|
4
|
+
*
|
|
5
|
+
* v45 created the table with `worktree_id TEXT NOT NULL` and no foreign key, so
|
|
6
|
+
* deleting a worktree left its install rows behind forever (`UNIQUE(worktree_id,
|
|
7
|
+
* skill_id)` keeps them). Recreating a worktree at the same path mints a new
|
|
8
|
+
* UUID, so the UI reports "not installed" while the payload and receipt are
|
|
9
|
+
* still on disk: re-install fails with SKILL_INSTALL_DESTINATION_EXISTS and
|
|
10
|
+
* uninstall has no record to act on.
|
|
11
|
+
*
|
|
12
|
+
* The fix follows the convention every other worktree-scoped table already uses
|
|
13
|
+
* — `ON DELETE CASCADE` — rather than an explicit DELETE at one call site. Two
|
|
14
|
+
* reasons beyond consistency: `deleteWorktreesByIds` is not the only path that
|
|
15
|
+
* removes a worktree row, and `migrateWorktreeIdPreservingChildren` (#1151)
|
|
16
|
+
* discovers child tables through `PRAGMA foreign_key_list`, so the constraint is
|
|
17
|
+
* also what makes a same-directory branch switch *carry* installs forward
|
|
18
|
+
* instead of orphaning them.
|
|
19
|
+
*
|
|
20
|
+
* SQLite cannot add a constraint in place, so the table is rebuilt (same pattern
|
|
21
|
+
* as v33). Rows whose worktree is already gone are dropped by the copy filter,
|
|
22
|
+
* which is what clears the dangling rows existing databases have accumulated —
|
|
23
|
+
* `PRAGMA foreign_keys` cannot be toggled inside the migration transaction, so
|
|
24
|
+
* the filter must be in the SELECT rather than deferred to the constraint.
|
|
25
|
+
*/
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.v46_migrations = void 0;
|
|
28
|
+
const COLUMNS = `
|
|
29
|
+
id, worktree_id, skill_id, version, install_root, receipt_sha256,
|
|
30
|
+
source_repository, source_ref, source_commit, artifact_sha256,
|
|
31
|
+
effective_risk, operation_id, installed_at, updated_at
|
|
32
|
+
`;
|
|
33
|
+
const COLUMN_DEFINITIONS = `
|
|
34
|
+
id TEXT PRIMARY KEY,
|
|
35
|
+
worktree_id TEXT NOT NULL,
|
|
36
|
+
skill_id TEXT NOT NULL,
|
|
37
|
+
version TEXT NOT NULL,
|
|
38
|
+
install_root TEXT NOT NULL,
|
|
39
|
+
receipt_sha256 TEXT NOT NULL,
|
|
40
|
+
source_repository TEXT NOT NULL,
|
|
41
|
+
source_ref TEXT NOT NULL,
|
|
42
|
+
source_commit TEXT NOT NULL,
|
|
43
|
+
artifact_sha256 TEXT NOT NULL,
|
|
44
|
+
effective_risk TEXT NOT NULL,
|
|
45
|
+
operation_id TEXT NOT NULL,
|
|
46
|
+
installed_at INTEGER NOT NULL,
|
|
47
|
+
updated_at INTEGER NOT NULL,
|
|
48
|
+
UNIQUE (worktree_id, skill_id)
|
|
49
|
+
`;
|
|
50
|
+
function createIndexes(db) {
|
|
51
|
+
db.exec(`
|
|
52
|
+
CREATE INDEX IF NOT EXISTS idx_skill_installations_worktree
|
|
53
|
+
ON skill_installations(worktree_id);
|
|
54
|
+
`);
|
|
55
|
+
db.exec(`
|
|
56
|
+
CREATE INDEX IF NOT EXISTS idx_skill_installations_skill
|
|
57
|
+
ON skill_installations(skill_id, version);
|
|
58
|
+
`);
|
|
59
|
+
}
|
|
60
|
+
exports.v46_migrations = [
|
|
61
|
+
{
|
|
62
|
+
version: 46,
|
|
63
|
+
name: 'skill-installations-worktree-cascade',
|
|
64
|
+
up: (db) => {
|
|
65
|
+
db.exec(`
|
|
66
|
+
CREATE TABLE skill_installations_new (
|
|
67
|
+
${COLUMN_DEFINITIONS},
|
|
68
|
+
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
69
|
+
);
|
|
70
|
+
`);
|
|
71
|
+
// The WHERE clause is the dangling-row sweep: rows pointing at a worktree
|
|
72
|
+
// that no longer exists are not carried over.
|
|
73
|
+
db.exec(`
|
|
74
|
+
INSERT INTO skill_installations_new (${COLUMNS})
|
|
75
|
+
SELECT ${COLUMNS} FROM skill_installations
|
|
76
|
+
WHERE worktree_id IN (SELECT id FROM worktrees);
|
|
77
|
+
`);
|
|
78
|
+
const dangling = db
|
|
79
|
+
.prepare(`SELECT COUNT(*) AS n FROM skill_installations
|
|
80
|
+
WHERE worktree_id NOT IN (SELECT id FROM worktrees)`)
|
|
81
|
+
.get();
|
|
82
|
+
// Dropping the table drops its indexes too; recreate them on the new one.
|
|
83
|
+
db.exec('DROP TABLE skill_installations;');
|
|
84
|
+
db.exec('ALTER TABLE skill_installations_new RENAME TO skill_installations;');
|
|
85
|
+
createIndexes(db);
|
|
86
|
+
if (dangling.n > 0) {
|
|
87
|
+
console.log(`Removed ${dangling.n} skill_installations row(s) with no worktree`);
|
|
88
|
+
}
|
|
89
|
+
console.log('skill_installations now cascades with its worktree');
|
|
90
|
+
},
|
|
91
|
+
down: (db) => {
|
|
92
|
+
db.exec(`
|
|
93
|
+
CREATE TABLE skill_installations_old (
|
|
94
|
+
${COLUMN_DEFINITIONS}
|
|
95
|
+
);
|
|
96
|
+
`);
|
|
97
|
+
db.exec(`
|
|
98
|
+
INSERT INTO skill_installations_old (${COLUMNS})
|
|
99
|
+
SELECT ${COLUMNS} FROM skill_installations;
|
|
100
|
+
`);
|
|
101
|
+
db.exec('DROP TABLE skill_installations;');
|
|
102
|
+
db.exec('ALTER TABLE skill_installations_old RENAME TO skill_installations;');
|
|
103
|
+
createIndexes(db);
|
|
104
|
+
console.log('Rolled back skill_installations cascade (v46)');
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
];
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Migration v47: `skill_installations.install_roots` (Issue #1460).
|
|
4
|
+
*
|
|
5
|
+
* A package is now placed into more than one discovery root — `.agents/skills`
|
|
6
|
+
* (Codex) and `.claude/skills` (Claude) — so the index needs to record the full
|
|
7
|
+
* set, not just the primary `install_root`. The column is a JSON array of
|
|
8
|
+
* repository-relative roots, primary first.
|
|
9
|
+
*
|
|
10
|
+
* Nullable and added by `ALTER TABLE`, so it is backward compatible: rows written
|
|
11
|
+
* before this migration keep `install_root` and read back as the single root they
|
|
12
|
+
* name. The on-disk receipt remains the source of truth; this column, like the
|
|
13
|
+
* rest of the row, is a rebuildable index over it (#1235).
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.v47_migrations = void 0;
|
|
17
|
+
exports.v47_migrations = [
|
|
18
|
+
{
|
|
19
|
+
version: 47,
|
|
20
|
+
name: 'add-skill-installations-roots',
|
|
21
|
+
up: (db) => {
|
|
22
|
+
db.exec('ALTER TABLE skill_installations ADD COLUMN install_roots TEXT;');
|
|
23
|
+
},
|
|
24
|
+
down: (db) => {
|
|
25
|
+
// SQLite < 3.35 cannot DROP COLUMN; rebuild the table without it. The
|
|
26
|
+
// column is nullable and index-only, so no data of record is lost.
|
|
27
|
+
db.exec(`
|
|
28
|
+
CREATE TABLE skill_installations__v46 (
|
|
29
|
+
id TEXT PRIMARY KEY,
|
|
30
|
+
worktree_id TEXT NOT NULL,
|
|
31
|
+
skill_id TEXT NOT NULL,
|
|
32
|
+
version TEXT NOT NULL,
|
|
33
|
+
install_root TEXT NOT NULL,
|
|
34
|
+
receipt_sha256 TEXT NOT NULL,
|
|
35
|
+
source_repository TEXT NOT NULL,
|
|
36
|
+
source_ref TEXT NOT NULL,
|
|
37
|
+
source_commit TEXT NOT NULL,
|
|
38
|
+
artifact_sha256 TEXT NOT NULL,
|
|
39
|
+
effective_risk TEXT NOT NULL,
|
|
40
|
+
operation_id TEXT NOT NULL,
|
|
41
|
+
installed_at INTEGER NOT NULL,
|
|
42
|
+
updated_at INTEGER NOT NULL,
|
|
43
|
+
UNIQUE (worktree_id, skill_id)
|
|
44
|
+
);
|
|
45
|
+
`);
|
|
46
|
+
db.exec(`
|
|
47
|
+
INSERT INTO skill_installations__v46 (
|
|
48
|
+
id, worktree_id, skill_id, version, install_root, receipt_sha256,
|
|
49
|
+
source_repository, source_ref, source_commit, artifact_sha256,
|
|
50
|
+
effective_risk, operation_id, installed_at, updated_at
|
|
51
|
+
)
|
|
52
|
+
SELECT
|
|
53
|
+
id, worktree_id, skill_id, version, install_root, receipt_sha256,
|
|
54
|
+
source_repository, source_ref, source_commit, artifact_sha256,
|
|
55
|
+
effective_risk, operation_id, installed_at, updated_at
|
|
56
|
+
FROM skill_installations;
|
|
57
|
+
`);
|
|
58
|
+
db.exec('DROP TABLE skill_installations;');
|
|
59
|
+
db.exec('ALTER TABLE skill_installations__v46 RENAME TO skill_installations;');
|
|
60
|
+
db.exec(`
|
|
61
|
+
CREATE INDEX IF NOT EXISTS idx_skill_installations_worktree
|
|
62
|
+
ON skill_installations(worktree_id);
|
|
63
|
+
`);
|
|
64
|
+
db.exec(`
|
|
65
|
+
CREATE INDEX IF NOT EXISTS idx_skill_installations_skill
|
|
66
|
+
ON skill_installations(skill_id, version);
|
|
67
|
+
`);
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
];
|
|
@@ -523,8 +523,11 @@ function getWorktreesByRepository(db, repositoryPath) {
|
|
|
523
523
|
}
|
|
524
524
|
/**
|
|
525
525
|
* Delete all worktrees for a given repository path
|
|
526
|
-
* Related data
|
|
527
|
-
*
|
|
526
|
+
* Related data is automatically deleted via ON DELETE CASCADE in every table
|
|
527
|
+
* holding a foreign key to worktrees(id) — chat_messages, session_states,
|
|
528
|
+
* worktree_memos, worktree_todos, agent_instances, scheduled_executions,
|
|
529
|
+
* execution_logs, timer_messages and skill_installations (#1430). The live list
|
|
530
|
+
* is whatever `PRAGMA foreign_key_list` reports; see getWorktreeChildTables.
|
|
528
531
|
*
|
|
529
532
|
* @param db - Database instance
|
|
530
533
|
* @param repositoryPath - Path of the repository to delete
|
|
@@ -539,8 +542,10 @@ function deleteRepositoryWorktrees(db, repositoryPath) {
|
|
|
539
542
|
}
|
|
540
543
|
/**
|
|
541
544
|
* Delete worktrees by their IDs
|
|
542
|
-
* Related data
|
|
543
|
-
*
|
|
545
|
+
* Related data is automatically deleted via ON DELETE CASCADE in every table
|
|
546
|
+
* holding a foreign key to worktrees(id) — including skill_installations, whose
|
|
547
|
+
* rows used to survive the worktree and make a re-created worktree at the same
|
|
548
|
+
* path un-installable (#1430). See getWorktreeChildTables for the live list.
|
|
544
549
|
*
|
|
545
550
|
* @param db - Database instance
|
|
546
551
|
* @param worktreeIds - Array of worktree IDs to delete
|