commandmate 0.15.0 → 0.16.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 +366 -321
- package/.next/app-path-routes-manifest.json +31 -26
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +9 -9
- package/.next/react-loadable-manifest.json +11 -11
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +15 -0
- 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/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/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.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.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/repositories/validate-path/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 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route.js +23 -0
- package/.next/server/app/api/skills/installations/route.js.nft.json +1 -0
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/skills/operations/route.js +13 -0
- package/.next/server/app/api/skills/operations/route.js.nft.json +1 -0
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/skills/reindex/route.js +23 -0
- package/.next/server/app/api/skills/reindex/route.js.nft.json +1 -0
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/skills/route.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- 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]/git-workflow/route.js +18 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_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_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page.js +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page.js +1 -1
- package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page.js +2 -0
- package/.next/server/app/skills/installed/page.js.nft.json +1 -0
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -0
- package/.next/server/app/skills/page.js +2 -2
- package/.next/server/app/skills/page.js.nft.json +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +3 -3
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +31 -26
- package/.next/server/chunks/1117.js +1 -1
- package/.next/server/chunks/1185.js +1 -0
- package/.next/server/chunks/1239.js +1 -0
- package/.next/server/chunks/22.js +1 -1
- package/.next/server/chunks/2328.js +1 -1
- package/.next/server/chunks/2710.js +2 -0
- package/.next/server/chunks/28.js +35 -0
- package/.next/server/chunks/3042.js +1 -2
- package/.next/server/chunks/4440.js +2 -0
- package/.next/server/chunks/4548.js +1 -0
- package/.next/server/chunks/5064.js +1 -1
- package/.next/server/chunks/5381.js +1 -1
- package/.next/server/chunks/5456.js +1 -1
- package/.next/server/chunks/5737.js +1 -0
- package/.next/server/chunks/5793.js +1 -0
- package/.next/server/chunks/5959.js +2 -2
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/8681.js +1 -1
- package/.next/server/chunks/8807.js +66 -3
- package/.next/server/chunks/9051.js +1 -0
- 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/AKqbAyuzbFfg05qpbCI_K/_buildManifest.js +1 -0
- package/.next/static/chunks/2751-7fabd91275b14ca3.js +1 -0
- package/.next/static/chunks/{4459.03172449db395039.js → 4459.a94b52985a76509a.js} +1 -1
- package/.next/static/chunks/{6488-93870a55f4a3e3cd.js → 6488-c2a968ec806975c2.js} +1 -1
- package/.next/static/chunks/{7485.43871aedf3dbb980.js → 7485.442b21101fca7257.js} +1 -1
- package/.next/static/chunks/8562-6e2ab32452f4fa5b.js +1 -0
- package/.next/static/chunks/app/api/app/update/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/assistant/conversation/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/assistant/current-output/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/assistant/messages/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/assistant/session/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/assistant/start/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/assistant/terminal/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/assistant/tools/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/skills/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/templates/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/todos/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/more/{page-082d4ae496f9a36e.js → page-1619018cac999bbc.js} +1 -1
- package/.next/static/chunks/app/proxy/[...path]/route-55e398bd20e2d7a9.js +1 -0
- package/.next/static/chunks/app/skills/[skillId]/page-6008b904225ebb25.js +1 -0
- package/.next/static/chunks/app/skills/installed/page-6641f95e6a6e5f9d.js +1 -0
- package/.next/static/chunks/app/skills/page-184f8e23e31a3667.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/{page-6da38f0a06dfd9db.js → page-59a63a2c013ec1eb.js} +1 -1
- package/.next/static/chunks/{webpack-6b35d37d50302d27.js → webpack-180bebdee221b6f4.js} +1 -1
- package/.next/static/css/{5127edd9aa8f3b49.css → d3453a6876553d32.css} +1 -1
- package/.next/trace +11 -11
- package/.next/types/app/api/skills/installations/route.ts +347 -0
- package/.next/types/app/api/skills/operations/route.ts +347 -0
- package/.next/types/app/api/skills/reindex/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.ts +347 -0
- package/.next/types/app/skills/installed/page.ts +84 -0
- package/.next/types/routes.d.ts +7 -2
- package/.next/types/validator.ts +45 -0
- package/dist/cli/commands/skill.d.ts +2 -1
- package/dist/cli/commands/skill.d.ts.map +1 -1
- package/dist/cli/commands/skill.js +136 -2
- package/dist/cli/types/api-responses.d.ts +40 -0
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/index.d.ts +6 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/server/src/lib/db/migrations/index.js +2 -0
- package/dist/server/src/lib/db/migrations/runner.js +1 -1
- package/dist/server/src/lib/db/migrations/v48-skill-operations-audit-index.js +117 -0
- package/dist/server/src/lib/skills/compatibility-matrix.js +256 -0
- package/dist/server/src/lib/skills/compatibility.js +132 -11
- package/dist/server/src/lib/skills/operation-audit.js +85 -15
- package/dist/server/src/lib/skills/operation-journal.js +14 -1
- package/package.json +1 -1
- package/.next/server/chunks/1808.js +0 -1
- package/.next/server/chunks/5226.js +0 -28
- package/.next/server/chunks/5306.js +0 -2
- package/.next/server/chunks/593.js +0 -1
- package/.next/server/chunks/9192.js +0 -1
- package/.next/static/MqlW91_Se_kEW6mtm-1x0/_buildManifest.js +0 -1
- package/.next/static/chunks/3418-7e47651340d940b0.js +0 -1
- package/.next/static/chunks/9142-41b13a2f278529cc.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/assistant/conversation/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/assistant/current-output/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/assistant/messages/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/assistant/session/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/assistant/start/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/assistant/terminal/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/assistant/tools/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/skills/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/templates/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/todos/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-8c8bebe20cebf964.js +0 -1
- package/.next/static/chunks/app/skills/[skillId]/page-8c40c9683f242207.js +0 -1
- package/.next/static/chunks/app/skills/page-46242c428ee8bccf.js +0 -1
- /package/.next/static/{MqlW91_Se_kEW6mtm-1x0 → AKqbAyuzbFfg05qpbCI_K}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Migration v48: audit version transition and feed indexes (Issue #1248).
|
|
4
|
+
*
|
|
5
|
+
* Two things the applied-state dashboard needs that v44 does not provide.
|
|
6
|
+
*
|
|
7
|
+
* **`from_version` / `to_version`.** v44 records a single `skill_version`, which
|
|
8
|
+
* answers "what version was this operation about" but not "what replaced what".
|
|
9
|
+
* An update is exactly a transition, and reading one out of two adjacent audit
|
|
10
|
+
* rows is guesswork the log should not require. Both columns are nullable
|
|
11
|
+
* because the ends of the timeline are genuinely open: an install onto an empty
|
|
12
|
+
* target has no `from`, an uninstall has no `to`.
|
|
13
|
+
*
|
|
14
|
+
* **Feed indexes.** The existing `idx_skill_operations_target` leads with
|
|
15
|
+
* `worktree_id`, so it cannot serve the dashboard's cross-worktree "newest
|
|
16
|
+
* first" query, and the "show me only the failures" filter has no index at all.
|
|
17
|
+
* Both are added here rather than left to a full scan that grows with history —
|
|
18
|
+
* the table is append-only, so it only ever gets longer.
|
|
19
|
+
*
|
|
20
|
+
* `ALTER TABLE ... ADD COLUMN` is DDL and does not fire the v44 append-only
|
|
21
|
+
* triggers, so existing rows are preserved and read back with NULL transitions.
|
|
22
|
+
*/
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.v48_migrations = void 0;
|
|
25
|
+
exports.v48_migrations = [
|
|
26
|
+
{
|
|
27
|
+
version: 48,
|
|
28
|
+
name: 'add-skill-operations-audit-index',
|
|
29
|
+
up: (db) => {
|
|
30
|
+
db.exec('ALTER TABLE skill_operations ADD COLUMN from_version TEXT;');
|
|
31
|
+
db.exec('ALTER TABLE skill_operations ADD COLUMN to_version TEXT;');
|
|
32
|
+
db.exec(`
|
|
33
|
+
CREATE INDEX IF NOT EXISTS idx_skill_operations_recent
|
|
34
|
+
ON skill_operations(recorded_at DESC, id DESC);
|
|
35
|
+
`);
|
|
36
|
+
db.exec(`
|
|
37
|
+
CREATE INDEX IF NOT EXISTS idx_skill_operations_result
|
|
38
|
+
ON skill_operations(result, recorded_at DESC);
|
|
39
|
+
`);
|
|
40
|
+
},
|
|
41
|
+
down: (db) => {
|
|
42
|
+
db.exec('DROP INDEX IF EXISTS idx_skill_operations_result;');
|
|
43
|
+
db.exec('DROP INDEX IF EXISTS idx_skill_operations_recent;');
|
|
44
|
+
// SQLite < 3.35 cannot DROP COLUMN; rebuild without the two columns. The
|
|
45
|
+
// append-only triggers are recreated afterwards: DROP TABLE removes the
|
|
46
|
+
// triggers bound to the old table, and a log without them is not the log.
|
|
47
|
+
db.exec('DROP TRIGGER IF EXISTS skill_operations_no_delete;');
|
|
48
|
+
db.exec('DROP TRIGGER IF EXISTS skill_operations_no_update;');
|
|
49
|
+
db.exec(`
|
|
50
|
+
CREATE TABLE skill_operations__v47 (
|
|
51
|
+
id TEXT PRIMARY KEY,
|
|
52
|
+
operation_id TEXT NOT NULL,
|
|
53
|
+
idempotency_key TEXT NOT NULL,
|
|
54
|
+
binding_hash TEXT NOT NULL,
|
|
55
|
+
operation TEXT NOT NULL,
|
|
56
|
+
state TEXT NOT NULL,
|
|
57
|
+
result TEXT NOT NULL,
|
|
58
|
+
actor_type TEXT NOT NULL,
|
|
59
|
+
actor_id TEXT,
|
|
60
|
+
worktree_id TEXT NOT NULL,
|
|
61
|
+
skill_id TEXT NOT NULL,
|
|
62
|
+
skill_version TEXT,
|
|
63
|
+
source_origin TEXT,
|
|
64
|
+
source_repository TEXT,
|
|
65
|
+
source_ref TEXT,
|
|
66
|
+
source_commit TEXT,
|
|
67
|
+
artifact_sha256 TEXT,
|
|
68
|
+
error_code TEXT,
|
|
69
|
+
error_message TEXT,
|
|
70
|
+
recorded_at INTEGER NOT NULL
|
|
71
|
+
);
|
|
72
|
+
`);
|
|
73
|
+
db.exec(`
|
|
74
|
+
INSERT INTO skill_operations__v47 (
|
|
75
|
+
id, operation_id, idempotency_key, binding_hash, operation, state, result,
|
|
76
|
+
actor_type, actor_id, worktree_id, skill_id, skill_version,
|
|
77
|
+
source_origin, source_repository, source_ref, source_commit, artifact_sha256,
|
|
78
|
+
error_code, error_message, recorded_at
|
|
79
|
+
)
|
|
80
|
+
SELECT
|
|
81
|
+
id, operation_id, idempotency_key, binding_hash, operation, state, result,
|
|
82
|
+
actor_type, actor_id, worktree_id, skill_id, skill_version,
|
|
83
|
+
source_origin, source_repository, source_ref, source_commit, artifact_sha256,
|
|
84
|
+
error_code, error_message, recorded_at
|
|
85
|
+
FROM skill_operations;
|
|
86
|
+
`);
|
|
87
|
+
db.exec('DROP TABLE skill_operations;');
|
|
88
|
+
db.exec('ALTER TABLE skill_operations__v47 RENAME TO skill_operations;');
|
|
89
|
+
db.exec(`
|
|
90
|
+
CREATE INDEX IF NOT EXISTS idx_skill_operations_operation_id
|
|
91
|
+
ON skill_operations(operation_id);
|
|
92
|
+
`);
|
|
93
|
+
db.exec(`
|
|
94
|
+
CREATE INDEX IF NOT EXISTS idx_skill_operations_idempotency_key
|
|
95
|
+
ON skill_operations(idempotency_key);
|
|
96
|
+
`);
|
|
97
|
+
db.exec(`
|
|
98
|
+
CREATE INDEX IF NOT EXISTS idx_skill_operations_target
|
|
99
|
+
ON skill_operations(worktree_id, skill_id, recorded_at);
|
|
100
|
+
`);
|
|
101
|
+
db.exec(`
|
|
102
|
+
CREATE TRIGGER IF NOT EXISTS skill_operations_no_update
|
|
103
|
+
BEFORE UPDATE ON skill_operations
|
|
104
|
+
BEGIN
|
|
105
|
+
SELECT RAISE(ABORT, 'skill_operations is append-only');
|
|
106
|
+
END;
|
|
107
|
+
`);
|
|
108
|
+
db.exec(`
|
|
109
|
+
CREATE TRIGGER IF NOT EXISTS skill_operations_no_delete
|
|
110
|
+
BEFORE DELETE ON skill_operations
|
|
111
|
+
BEGIN
|
|
112
|
+
SELECT RAISE(ABORT, 'skill_operations is append-only');
|
|
113
|
+
END;
|
|
114
|
+
`);
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
];
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Measured Agent discovery matrix (Issue #1246)
|
|
4
|
+
*
|
|
5
|
+
* What a Skill package *declares* about an Agent and what CommandMate has
|
|
6
|
+
* actually *measured* are different claims. `compatibility.ts` carries the
|
|
7
|
+
* declaration; this module carries the measurement, so the UI can show both and
|
|
8
|
+
* never present one as the other.
|
|
9
|
+
*
|
|
10
|
+
* Two axes, not one. A single `native`/`unsupported` value cannot describe
|
|
11
|
+
* Codex CLI 0.145.0, which discovers a Skill from `.agents/skills` but does not
|
|
12
|
+
* expose it as a slash command. Collapsing that into one value would either
|
|
13
|
+
* promise an invocation route that does not exist or deny a discovery that does.
|
|
14
|
+
* So discovery and invocation are recorded separately and only discovery feeds
|
|
15
|
+
* the support verdict; invocation becomes a stated limitation.
|
|
16
|
+
*
|
|
17
|
+
* Pure data and pure functions: no filesystem, no network, no clock. `now` is
|
|
18
|
+
* always an explicit argument so a staleness verdict is reproducible.
|
|
19
|
+
*
|
|
20
|
+
* Evidence provenance: the 2026-07-26 measurements were taken in an isolated
|
|
21
|
+
* environment (dedicated port, dedicated database, a fresh repository with no
|
|
22
|
+
* Skills installed) against CommandMate 0.15.0. They are recorded here rather
|
|
23
|
+
* than re-derived at runtime — CommandMate does not drive a CLI to answer a
|
|
24
|
+
* catalog request.
|
|
25
|
+
*
|
|
26
|
+
* @module lib/skills/compatibility-matrix
|
|
27
|
+
*/
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.AGENT_LIMITATION_MESSAGE_KEYS = exports.AGENT_RELOAD_MESSAGE_KEYS = exports.SKILL_EVIDENCE_MAX_AGE_DAYS = exports.AGENT_EVIDENCE_KIND_LABEL_KEYS = exports.AGENT_AXIS_OUTCOME_LABEL_KEYS = exports.AGENT_AXIS_LABEL_KEYS = exports.SKILL_EVIDENCE_KINDS = exports.SKILL_AGENT_AXIS_OUTCOMES = void 0;
|
|
30
|
+
exports.getSkillAgentMatrix = getSkillAgentMatrix;
|
|
31
|
+
exports.findSkillAgentMatrixEntry = findSkillAgentMatrixEntry;
|
|
32
|
+
exports.isAgentMeasured = isAgentMeasured;
|
|
33
|
+
exports.deriveMatrixAgentSupport = deriveMatrixAgentSupport;
|
|
34
|
+
exports.evidenceAgeInDays = evidenceAgeInDays;
|
|
35
|
+
exports.isEvidenceStale = isEvidenceStale;
|
|
36
|
+
exports.unmeasuredAgents = unmeasuredAgents;
|
|
37
|
+
exports.agentsMissingFromMatrix = agentsMissingFromMatrix;
|
|
38
|
+
const types_1 = require("../../lib/cli-tools/types");
|
|
39
|
+
const constants_1 = require("../../lib/skills/constants");
|
|
40
|
+
exports.SKILL_AGENT_AXIS_OUTCOMES = [
|
|
41
|
+
'verified',
|
|
42
|
+
'unsupported',
|
|
43
|
+
'unknown',
|
|
44
|
+
];
|
|
45
|
+
exports.SKILL_EVIDENCE_KINDS = [
|
|
46
|
+
'mechanical',
|
|
47
|
+
'self_report',
|
|
48
|
+
'not_measured',
|
|
49
|
+
];
|
|
50
|
+
/** i18n keys naming each axis, shared by UI and CLI (UX-05). */
|
|
51
|
+
exports.AGENT_AXIS_LABEL_KEYS = {
|
|
52
|
+
discovery: 'skills.compatibility.axis.discovery',
|
|
53
|
+
invocation: 'skills.compatibility.axis.invocation',
|
|
54
|
+
};
|
|
55
|
+
exports.AGENT_AXIS_OUTCOME_LABEL_KEYS = {
|
|
56
|
+
verified: 'skills.compatibility.axisOutcome.verified',
|
|
57
|
+
unsupported: 'skills.compatibility.axisOutcome.unsupported',
|
|
58
|
+
unknown: 'skills.compatibility.axisOutcome.unknown',
|
|
59
|
+
};
|
|
60
|
+
exports.AGENT_EVIDENCE_KIND_LABEL_KEYS = {
|
|
61
|
+
mechanical: 'skills.compatibility.evidenceKind.mechanical',
|
|
62
|
+
self_report: 'skills.compatibility.evidenceKind.selfReport',
|
|
63
|
+
not_measured: 'skills.compatibility.evidenceKind.notMeasured',
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* How long a measurement stays quotable before the UI flags it.
|
|
67
|
+
*
|
|
68
|
+
* Agent CLIs ship far faster than CommandMate re-measures them, so evidence
|
|
69
|
+
* that is merely old is presented as old rather than silently trusted.
|
|
70
|
+
*/
|
|
71
|
+
exports.SKILL_EVIDENCE_MAX_AGE_DAYS = 180;
|
|
72
|
+
const NOT_MEASURED_AXIS = {
|
|
73
|
+
outcome: 'unknown',
|
|
74
|
+
evidenceKind: 'not_measured',
|
|
75
|
+
labelKey: exports.AGENT_AXIS_OUTCOME_LABEL_KEYS.unknown,
|
|
76
|
+
evidenceKindKey: exports.AGENT_EVIDENCE_KIND_LABEL_KEYS.not_measured,
|
|
77
|
+
limitationKey: null,
|
|
78
|
+
};
|
|
79
|
+
const NOT_MEASURED_SKIP_REASON_KEY = 'skills.compatibility.skipReason.notMeasured';
|
|
80
|
+
/** Reload guidance keys. Keyed by behavior, not by Agent, so they stay reusable. */
|
|
81
|
+
exports.AGENT_RELOAD_MESSAGE_KEYS = {
|
|
82
|
+
SESSION_RESTART: 'skills.compatibility.reload.sessionRestart',
|
|
83
|
+
SESSION_RESTART_NO_SLASH: 'skills.compatibility.reload.sessionRestartNoSlash',
|
|
84
|
+
UNKNOWN: 'skills.compatibility.reload.unknown',
|
|
85
|
+
};
|
|
86
|
+
/** Known limitation keys attached to an axis outcome. */
|
|
87
|
+
exports.AGENT_LIMITATION_MESSAGE_KEYS = {
|
|
88
|
+
NO_SLASH_COMMAND: 'skills.compatibility.limitation.noSlashCommand',
|
|
89
|
+
};
|
|
90
|
+
/** Evidence reference for the 2026-07-26 isolated-environment measurement. */
|
|
91
|
+
const G4_EVIDENCE_SOURCE = 'https://github.com/Kewton/CommandMate/issues/1513#issuecomment-5083878264';
|
|
92
|
+
const MEASURED_DATE_2026_07_26 = '2026-07-26';
|
|
93
|
+
function unmeasuredEntry(agent) {
|
|
94
|
+
return {
|
|
95
|
+
agent,
|
|
96
|
+
discoveryRoots: [],
|
|
97
|
+
discovery: NOT_MEASURED_AXIS,
|
|
98
|
+
invocation: NOT_MEASURED_AXIS,
|
|
99
|
+
testedVersion: null,
|
|
100
|
+
testedDate: null,
|
|
101
|
+
evidenceSource: null,
|
|
102
|
+
reloadKey: exports.AGENT_RELOAD_MESSAGE_KEYS.UNKNOWN,
|
|
103
|
+
skipReasonKey: NOT_MEASURED_SKIP_REASON_KEY,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
// =============================================================================
|
|
107
|
+
// The matrix
|
|
108
|
+
// =============================================================================
|
|
109
|
+
/**
|
|
110
|
+
* Every Agent CommandMate knows about, measured or not.
|
|
111
|
+
*
|
|
112
|
+
* The unmeasured entries are listed rather than omitted: an Agent missing from
|
|
113
|
+
* the table would render as no statement at all, which a reader completes as
|
|
114
|
+
* "presumably fine". An explicit `unknown` with a skip reason is the honest
|
|
115
|
+
* shape of "we did not test this".
|
|
116
|
+
*/
|
|
117
|
+
const AGENT_DISCOVERY_MATRIX = [
|
|
118
|
+
{
|
|
119
|
+
agent: 'claude',
|
|
120
|
+
// Measured to read `.claude/skills` and *not* `.agents/skills`. The official
|
|
121
|
+
// catalog's older entries credited `.agents/skills` for Claude support; the
|
|
122
|
+
// conclusion was right and the reason was wrong — it works because #1460
|
|
123
|
+
// installs into `.claude/skills` too.
|
|
124
|
+
discoveryRoots: [constants_1.SKILL_CLAUDE_INSTALL_ROOT_PREFIX],
|
|
125
|
+
discovery: {
|
|
126
|
+
outcome: 'verified',
|
|
127
|
+
evidenceKind: 'mechanical',
|
|
128
|
+
labelKey: exports.AGENT_AXIS_OUTCOME_LABEL_KEYS.verified,
|
|
129
|
+
evidenceKindKey: exports.AGENT_EVIDENCE_KIND_LABEL_KEYS.mechanical,
|
|
130
|
+
limitationKey: null,
|
|
131
|
+
},
|
|
132
|
+
invocation: {
|
|
133
|
+
outcome: 'verified',
|
|
134
|
+
evidenceKind: 'mechanical',
|
|
135
|
+
labelKey: exports.AGENT_AXIS_OUTCOME_LABEL_KEYS.verified,
|
|
136
|
+
evidenceKindKey: exports.AGENT_EVIDENCE_KIND_LABEL_KEYS.mechanical,
|
|
137
|
+
limitationKey: null,
|
|
138
|
+
},
|
|
139
|
+
testedVersion: '2.1.220',
|
|
140
|
+
testedDate: MEASURED_DATE_2026_07_26,
|
|
141
|
+
evidenceSource: G4_EVIDENCE_SOURCE,
|
|
142
|
+
reloadKey: exports.AGENT_RELOAD_MESSAGE_KEYS.SESSION_RESTART,
|
|
143
|
+
skipReasonKey: null,
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
agent: 'codex',
|
|
147
|
+
discoveryRoots: [constants_1.SKILL_INSTALL_ROOT_PREFIX],
|
|
148
|
+
discovery: {
|
|
149
|
+
// The Agent named the absolute SKILL.md path under `.agents/skills` when
|
|
150
|
+
// asked without tools. That is evidence, and it is the Agent describing
|
|
151
|
+
// itself, so it is recorded as a self report rather than as a match.
|
|
152
|
+
outcome: 'verified',
|
|
153
|
+
evidenceKind: 'self_report',
|
|
154
|
+
labelKey: exports.AGENT_AXIS_OUTCOME_LABEL_KEYS.verified,
|
|
155
|
+
evidenceKindKey: exports.AGENT_EVIDENCE_KIND_LABEL_KEYS.self_report,
|
|
156
|
+
limitationKey: null,
|
|
157
|
+
},
|
|
158
|
+
invocation: {
|
|
159
|
+
// Ruled out as a placement problem by control: `/mo` matched `/model`, so
|
|
160
|
+
// the palette works, and a Skill already sitting in `~/.codex/skills` did
|
|
161
|
+
// not match either. This CLI version does not expose Skills as slash
|
|
162
|
+
// commands wherever they are placed.
|
|
163
|
+
outcome: 'unsupported',
|
|
164
|
+
evidenceKind: 'mechanical',
|
|
165
|
+
labelKey: exports.AGENT_AXIS_OUTCOME_LABEL_KEYS.unsupported,
|
|
166
|
+
evidenceKindKey: exports.AGENT_EVIDENCE_KIND_LABEL_KEYS.mechanical,
|
|
167
|
+
limitationKey: exports.AGENT_LIMITATION_MESSAGE_KEYS.NO_SLASH_COMMAND,
|
|
168
|
+
},
|
|
169
|
+
testedVersion: '0.145.0',
|
|
170
|
+
testedDate: MEASURED_DATE_2026_07_26,
|
|
171
|
+
evidenceSource: G4_EVIDENCE_SOURCE,
|
|
172
|
+
reloadKey: exports.AGENT_RELOAD_MESSAGE_KEYS.SESSION_RESTART_NO_SLASH,
|
|
173
|
+
skipReasonKey: null,
|
|
174
|
+
},
|
|
175
|
+
unmeasuredEntry('gemini'),
|
|
176
|
+
unmeasuredEntry('vibe-local'),
|
|
177
|
+
unmeasuredEntry('opencode'),
|
|
178
|
+
unmeasuredEntry('copilot'),
|
|
179
|
+
// CommandMate's own slash palette serves `.agents/skills` entries to
|
|
180
|
+
// antigravity sessions (#1504). That is CommandMate injecting a command, not
|
|
181
|
+
// the Agent discovering a Skill, so it is not evidence for this table.
|
|
182
|
+
unmeasuredEntry('antigravity'),
|
|
183
|
+
];
|
|
184
|
+
/** The measured matrix, in CLI-tool declaration order. */
|
|
185
|
+
function getSkillAgentMatrix() {
|
|
186
|
+
return AGENT_DISCOVERY_MATRIX;
|
|
187
|
+
}
|
|
188
|
+
/** The entry for one Agent, or null when the id is not a known CLI tool. */
|
|
189
|
+
function findSkillAgentMatrixEntry(agent) {
|
|
190
|
+
return AGENT_DISCOVERY_MATRIX.find((entry) => entry.agent === agent) ?? null;
|
|
191
|
+
}
|
|
192
|
+
/** Whether CommandMate has any measurement at all for this Agent. */
|
|
193
|
+
function isAgentMeasured(entry) {
|
|
194
|
+
return entry.discovery.evidenceKind !== 'not_measured';
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* The four-valued support verdict implied by the measurement.
|
|
198
|
+
*
|
|
199
|
+
* Only the discovery axis decides it. An Agent that finds and can run a Skill
|
|
200
|
+
* supports it natively even when its palette does not list it, so a failed
|
|
201
|
+
* invocation axis is reported as a limitation instead of demoting the verdict
|
|
202
|
+
* to `unsupported` — which would read as "this will not work".
|
|
203
|
+
*
|
|
204
|
+
* `commandmate_runtime` is never produced here: the Runtime is not shipped, and
|
|
205
|
+
* inventing that verdict would promise a fallback that does not exist.
|
|
206
|
+
*/
|
|
207
|
+
function deriveMatrixAgentSupport(entry) {
|
|
208
|
+
switch (entry.discovery.outcome) {
|
|
209
|
+
case 'verified':
|
|
210
|
+
return 'native';
|
|
211
|
+
case 'unsupported':
|
|
212
|
+
return 'unsupported';
|
|
213
|
+
case 'unknown':
|
|
214
|
+
return 'unknown';
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// =============================================================================
|
|
218
|
+
// Staleness
|
|
219
|
+
// =============================================================================
|
|
220
|
+
const MS_PER_DAY = 24 * 60 * 60 * 1000;
|
|
221
|
+
const MEASURED_DATE_PATTERN = /^\d{4}-\d{2}-\d{2}$/;
|
|
222
|
+
/**
|
|
223
|
+
* Whole days between the measurement and `now`, or null when unmeasured or when
|
|
224
|
+
* the recorded date is unusable. A measurement dated in the future yields 0
|
|
225
|
+
* rather than a negative age.
|
|
226
|
+
*/
|
|
227
|
+
function evidenceAgeInDays(entry, now) {
|
|
228
|
+
if (entry.testedDate === null || !MEASURED_DATE_PATTERN.test(entry.testedDate))
|
|
229
|
+
return null;
|
|
230
|
+
const measured = Date.parse(`${entry.testedDate}T00:00:00Z`);
|
|
231
|
+
const current = now.getTime();
|
|
232
|
+
if (Number.isNaN(measured) || Number.isNaN(current))
|
|
233
|
+
return null;
|
|
234
|
+
return Math.max(0, Math.floor((current - measured) / MS_PER_DAY));
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Whether the measurement is old enough to warn about.
|
|
238
|
+
*
|
|
239
|
+
* An unmeasured Agent is not stale — it is unknown, which the UI already states
|
|
240
|
+
* more strongly. Marking it stale as well would imply a measurement had expired.
|
|
241
|
+
*/
|
|
242
|
+
function isEvidenceStale(entry, now, maxAgeDays = exports.SKILL_EVIDENCE_MAX_AGE_DAYS) {
|
|
243
|
+
const age = evidenceAgeInDays(entry, now);
|
|
244
|
+
return age !== null && age > maxAgeDays;
|
|
245
|
+
}
|
|
246
|
+
// =============================================================================
|
|
247
|
+
// Coverage
|
|
248
|
+
// =============================================================================
|
|
249
|
+
/** CLI tools with no measurement, in matrix order. */
|
|
250
|
+
function unmeasuredAgents() {
|
|
251
|
+
return AGENT_DISCOVERY_MATRIX.filter((entry) => !isAgentMeasured(entry)).map((entry) => entry.agent);
|
|
252
|
+
}
|
|
253
|
+
/** CLI tool ids the matrix does not mention. Empty in a consistent build. */
|
|
254
|
+
function agentsMissingFromMatrix() {
|
|
255
|
+
return types_1.CLI_TOOL_IDS.filter((id) => findSkillAgentMatrixEntry(id) === null);
|
|
256
|
+
}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* CommandMate compatibility judgement and version resolution (Issue #1231)
|
|
4
4
|
*
|
|
5
5
|
* Pure functions: no filesystem, no network, no process state. The host version
|
|
6
|
-
*
|
|
7
|
-
* Catalog against the same rules and reach the same verdict.
|
|
6
|
+
* and the current instant are always explicit arguments so UI, API and CLI can
|
|
7
|
+
* evaluate the same Catalog against the same rules and reach the same verdict.
|
|
8
8
|
*
|
|
9
9
|
* Every verdict carries a stable machine code *and* a human-readable message
|
|
10
10
|
* (受入条件: "互換性NGの理由がmachine-readable codeとhuman-readable messageで返る").
|
|
@@ -14,16 +14,19 @@
|
|
|
14
14
|
* @module lib/skills/compatibility
|
|
15
15
|
*/
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.SkillRecommendationReason = exports.UNKNOWN_HOST_VERSION_SENTINEL = exports.SKILL_COMPATIBILITY_MESSAGE_KEYS = exports.SkillCompatibilityReason = void 0;
|
|
17
|
+
exports.SkillRecommendationReason = exports.SKILL_AGENT_VERIFICATION_MESSAGE_KEYS = exports.SkillAgentVerification = exports.UNKNOWN_HOST_VERSION_SENTINEL = exports.SKILL_COMPATIBILITY_MESSAGE_KEYS = exports.SkillCompatibilityReason = void 0;
|
|
18
18
|
exports.normalizeHostVersion = normalizeHostVersion;
|
|
19
19
|
exports.evaluateCommandMateCompatibility = evaluateCommandMateCompatibility;
|
|
20
20
|
exports.evaluateVersionCompatibility = evaluateVersionCompatibility;
|
|
21
|
+
exports.capSupportByMeasurement = capSupportByMeasurement;
|
|
22
|
+
exports.reconcileAgentSupport = reconcileAgentSupport;
|
|
21
23
|
exports.describeAgentCompatibility = describeAgentCompatibility;
|
|
22
24
|
exports.resolveSkillVersions = resolveSkillVersions;
|
|
23
25
|
exports.findSkillCatalogEntry = findSkillCatalogEntry;
|
|
24
26
|
// Sibling modules of the same package are imported directly rather than through
|
|
25
27
|
// the `@/lib/skills` barrel, so adding this module to the barrel later can never
|
|
26
28
|
// introduce an import cycle. External callers still go through the barrel.
|
|
29
|
+
const compatibility_matrix_1 = require("../../lib/skills/compatibility-matrix");
|
|
27
30
|
const constants_1 = require("../../lib/skills/constants");
|
|
28
31
|
const semver_1 = require("../../lib/skills/semver");
|
|
29
32
|
/** Stable reason codes for a CommandMate compatibility verdict. */
|
|
@@ -122,14 +125,132 @@ function evaluateCommandMateCompatibility(requiredRange, currentVersion) {
|
|
|
122
125
|
function evaluateVersionCompatibility(version, currentVersion) {
|
|
123
126
|
return evaluateCommandMateCompatibility(version.compatibility.commandmate, currentVersion);
|
|
124
127
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
128
|
+
// =============================================================================
|
|
129
|
+
// Agent compatibility
|
|
130
|
+
// =============================================================================
|
|
131
|
+
/**
|
|
132
|
+
* How the publisher's declaration stands up against what CommandMate measured
|
|
133
|
+
* (Issue #1246).
|
|
134
|
+
*/
|
|
135
|
+
exports.SkillAgentVerification = {
|
|
136
|
+
/** Declaration and measurement agree. */
|
|
137
|
+
CONFIRMED: 'SKILL_AGENT_EVIDENCE_CONFIRMED',
|
|
138
|
+
/** Measurement is weaker than the declaration, so the declaration is capped. */
|
|
139
|
+
RESTRICTED: 'SKILL_AGENT_EVIDENCE_RESTRICTED',
|
|
140
|
+
/** Measurement is stronger than the declaration; the manifest has fallen behind. */
|
|
141
|
+
STALE_DECLARATION: 'SKILL_AGENT_EVIDENCE_STALE_DECLARATION',
|
|
142
|
+
/** CommandMate has never measured this Agent. */
|
|
143
|
+
UNVERIFIED: 'SKILL_AGENT_EVIDENCE_UNVERIFIED',
|
|
144
|
+
};
|
|
145
|
+
exports.SKILL_AGENT_VERIFICATION_MESSAGE_KEYS = {
|
|
146
|
+
[exports.SkillAgentVerification.CONFIRMED]: 'skills.compatibility.verification.confirmed',
|
|
147
|
+
[exports.SkillAgentVerification.RESTRICTED]: 'skills.compatibility.verification.restricted',
|
|
148
|
+
[exports.SkillAgentVerification.STALE_DECLARATION]: 'skills.compatibility.verification.staleDeclaration',
|
|
149
|
+
[exports.SkillAgentVerification.UNVERIFIED]: 'skills.compatibility.verification.unverified',
|
|
150
|
+
};
|
|
151
|
+
/**
|
|
152
|
+
* Ordering used to cap a declaration by a measurement. Higher is stronger.
|
|
153
|
+
*
|
|
154
|
+
* `unknown` outranks `unsupported` because "we could not tell" leaves more room
|
|
155
|
+
* than "we established it does not work".
|
|
156
|
+
*/
|
|
157
|
+
const AGENT_SUPPORT_RANK = {
|
|
158
|
+
unsupported: 0,
|
|
159
|
+
unknown: 1,
|
|
160
|
+
commandmate_runtime: 2,
|
|
161
|
+
native: 3,
|
|
162
|
+
};
|
|
163
|
+
/**
|
|
164
|
+
* Cap a publisher's declaration by what CommandMate measured.
|
|
165
|
+
*
|
|
166
|
+
* Downward only. A weaker measurement wins, which is what keeps an
|
|
167
|
+
* evidence-free `native` off the screen. A stronger one does not: raising a
|
|
168
|
+
* package's own claim is the publisher's call, so the mismatch is reported as
|
|
169
|
+
* a declaration that has fallen behind.
|
|
170
|
+
*/
|
|
171
|
+
function capSupportByMeasurement(declared, measured) {
|
|
172
|
+
const declaredRank = AGENT_SUPPORT_RANK[declared];
|
|
173
|
+
const measuredRank = AGENT_SUPPORT_RANK[measured];
|
|
174
|
+
if (measuredRank < declaredRank) {
|
|
175
|
+
return { support: measured, verification: exports.SkillAgentVerification.RESTRICTED };
|
|
176
|
+
}
|
|
177
|
+
if (measuredRank > declaredRank) {
|
|
178
|
+
return { support: declared, verification: exports.SkillAgentVerification.STALE_DECLARATION };
|
|
179
|
+
}
|
|
180
|
+
return { support: declared, verification: exports.SkillAgentVerification.CONFIRMED };
|
|
181
|
+
}
|
|
182
|
+
function toAxisView(axis, evidence) {
|
|
183
|
+
return {
|
|
184
|
+
axis,
|
|
185
|
+
axisKey: compatibility_matrix_1.AGENT_AXIS_LABEL_KEYS[axis],
|
|
186
|
+
outcome: evidence.outcome,
|
|
187
|
+
outcomeKey: evidence.labelKey,
|
|
188
|
+
evidenceKind: evidence.evidenceKind,
|
|
189
|
+
evidenceKindKey: evidence.evidenceKindKey,
|
|
190
|
+
limitationKey: evidence.limitationKey,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
function toMeasuredView(entry, now) {
|
|
194
|
+
return {
|
|
195
|
+
discovery: toAxisView('discovery', entry.discovery),
|
|
196
|
+
invocation: toAxisView('invocation', entry.invocation),
|
|
197
|
+
discoveryRoots: [...entry.discoveryRoots],
|
|
198
|
+
testedVersion: entry.testedVersion,
|
|
199
|
+
testedDate: entry.testedDate,
|
|
200
|
+
evidenceSource: entry.evidenceSource,
|
|
201
|
+
ageDays: (0, compatibility_matrix_1.evidenceAgeInDays)(entry, now),
|
|
202
|
+
stale: (0, compatibility_matrix_1.isEvidenceStale)(entry, now),
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Reconcile one declared Agent claim with the measured discovery matrix.
|
|
207
|
+
*
|
|
208
|
+
* The declaration is never rewritten upward: a measurement stronger than the
|
|
209
|
+
* manifest is reported as a stale declaration, not silently promoted, because
|
|
210
|
+
* the publisher is the one who decides what their package claims to support.
|
|
211
|
+
* It *is* capped downward, which is what keeps "evidence-free native" off the
|
|
212
|
+
* screen when a manifest asserts an Agent CommandMate measured as unsupported.
|
|
213
|
+
*/
|
|
214
|
+
function reconcileAgentSupport(declared, now) {
|
|
215
|
+
const entry = (0, compatibility_matrix_1.findSkillAgentMatrixEntry)(declared.agent);
|
|
216
|
+
const base = {
|
|
217
|
+
agent: declared.agent,
|
|
218
|
+
evidence: declared.evidence,
|
|
219
|
+
declaredSupport: declared.support,
|
|
220
|
+
declaredLabelKey: constants_1.AGENT_SUPPORT_LABEL_KEYS[declared.support],
|
|
221
|
+
};
|
|
222
|
+
if (entry === null || !(0, compatibility_matrix_1.isAgentMeasured)(entry)) {
|
|
223
|
+
return {
|
|
224
|
+
...base,
|
|
225
|
+
support: declared.support,
|
|
226
|
+
labelKey: constants_1.AGENT_SUPPORT_LABEL_KEYS[declared.support],
|
|
227
|
+
verification: exports.SkillAgentVerification.UNVERIFIED,
|
|
228
|
+
verificationKey: exports.SKILL_AGENT_VERIFICATION_MESSAGE_KEYS[exports.SkillAgentVerification.UNVERIFIED],
|
|
229
|
+
measured: null,
|
|
230
|
+
skipReasonKey: entry?.skipReasonKey ?? null,
|
|
231
|
+
reloadKey: entry?.reloadKey ?? compatibility_matrix_1.AGENT_RELOAD_MESSAGE_KEYS.UNKNOWN,
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
const { support, verification } = capSupportByMeasurement(declared.support, (0, compatibility_matrix_1.deriveMatrixAgentSupport)(entry));
|
|
235
|
+
return {
|
|
236
|
+
...base,
|
|
237
|
+
support,
|
|
238
|
+
labelKey: constants_1.AGENT_SUPPORT_LABEL_KEYS[support],
|
|
239
|
+
verification,
|
|
240
|
+
verificationKey: exports.SKILL_AGENT_VERIFICATION_MESSAGE_KEYS[verification],
|
|
241
|
+
measured: toMeasuredView(entry, now),
|
|
242
|
+
skipReasonKey: null,
|
|
243
|
+
reloadKey: entry.reloadKey,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Attach the shared i18n label key and the measured evidence to each claim.
|
|
248
|
+
*
|
|
249
|
+
* @param now - Evaluated against for evidence staleness. Passed explicitly by
|
|
250
|
+
* tests so a verdict never depends on when the suite runs.
|
|
251
|
+
*/
|
|
252
|
+
function describeAgentCompatibility(agents, now = new Date()) {
|
|
253
|
+
return agents.map((entry) => reconcileAgentSupport(entry, now));
|
|
133
254
|
}
|
|
134
255
|
// =============================================================================
|
|
135
256
|
// Version resolution
|