commandmate 0.14.1 → 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.
Files changed (705) hide show
  1. package/.env.example +7 -0
  2. package/.next/BUILD_ID +1 -1
  3. package/.next/app-build-manifest.json +418 -354
  4. package/.next/app-path-routes-manifest.json +42 -34
  5. package/.next/build-manifest.json +5 -5
  6. package/.next/prerender-manifest.json +9 -9
  7. package/.next/react-loadable-manifest.json +22 -24
  8. package/.next/required-server-files.json +1 -1
  9. package/.next/routes-manifest.json +15 -0
  10. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/app/update-check/route.js +1 -1
  13. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/assistant/conversation/route.js +1 -1
  15. package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
  16. package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/assistant/current-output/route.js +1 -1
  18. package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
  19. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/assistant/messages/route.js +1 -1
  21. package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
  22. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/assistant/session/route.js +1 -1
  24. package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
  25. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/assistant/start/route.js +1 -1
  27. package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
  28. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/assistant/terminal/route.js +1 -1
  30. package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
  31. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/assistant/tools/route.js +1 -1
  33. package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
  34. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/daily-summary/route.js +1 -1
  39. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  40. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  42. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  43. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/external-apps/[id]/health/route.js +1 -1
  45. package/.next/server/app/api/external-apps/[id]/health/route.js.nft.json +1 -1
  46. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/external-apps/[id]/route.js +1 -1
  48. package/.next/server/app/api/external-apps/[id]/route.js.nft.json +1 -1
  49. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/external-apps/route.js +1 -1
  51. package/.next/server/app/api/external-apps/route.js.nft.json +1 -1
  52. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/fs/browse/route.js +7 -0
  54. package/.next/server/app/api/fs/browse/route.js.nft.json +1 -0
  55. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -0
  56. package/.next/server/app/api/fs/recent-paths/route.js +7 -0
  57. package/.next/server/app/api/fs/recent-paths/route.js.nft.json +1 -0
  58. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -0
  59. package/.next/server/app/api/hooks/claude-done/route.js +1 -1
  60. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
  61. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  64. package/.next/server/app/api/push/subscriptions/route.js.nft.json +1 -1
  65. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  66. package/.next/server/app/api/push/vapid/route.js +1 -1
  67. package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
  68. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/repositories/[id]/route.js +1 -1
  70. package/.next/server/app/api/repositories/[id]/route.js.nft.json +1 -1
  71. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
  73. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js.nft.json +1 -1
  74. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
  76. package/.next/server/app/api/repositories/[id]/todos/route.js.nft.json +1 -1
  77. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
  79. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
  80. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/repositories/clone/route.js +1 -1
  82. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
  83. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/repositories/excluded/route.js +1 -1
  85. package/.next/server/app/api/repositories/excluded/route.js.nft.json +1 -1
  86. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/repositories/restore/route.js +1 -1
  88. package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
  89. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/repositories/route.js +1 -1
  91. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  92. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/repositories/scan/route.js +1 -1
  94. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
  95. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/repositories/sync/route.js +1 -1
  97. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
  98. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/repositories/validate-path/route.js +1 -0
  100. package/.next/server/app/api/repositories/validate-path/route.js.nft.json +1 -0
  101. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -0
  102. package/.next/server/app/api/sidebar/group-order/route.js +2 -2
  103. package/.next/server/app/api/sidebar/group-order/route.js.nft.json +1 -1
  104. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/skills/[id]/route.js +1 -1
  106. package/.next/server/app/api/skills/[id]/route.js.nft.json +1 -1
  107. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/skills/installations/route.js +23 -0
  109. package/.next/server/app/api/skills/installations/route.js.nft.json +1 -0
  110. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -0
  111. package/.next/server/app/api/skills/operations/route.js +13 -0
  112. package/.next/server/app/api/skills/operations/route.js.nft.json +1 -0
  113. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -0
  114. package/.next/server/app/api/skills/reindex/route.js +23 -0
  115. package/.next/server/app/api/skills/reindex/route.js.nft.json +1 -0
  116. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -0
  117. package/.next/server/app/api/skills/route.js +1 -1
  118. package/.next/server/app/api/skills/route.js.nft.json +1 -1
  119. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/slash-commands/route.js +1 -1
  121. package/.next/server/app/api/slash-commands/route.js.nft.json +1 -1
  122. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/templates/[id]/route.js +1 -1
  124. package/.next/server/app/api/templates/[id]/route.js.nft.json +1 -1
  125. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/templates/route.js +1 -1
  127. package/.next/server/app/api/templates/route.js.nft.json +1 -1
  128. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/todos/route.js +1 -1
  130. package/.next/server/app/api/todos/route.js.nft.json +1 -1
  131. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  134. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
  137. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js.nft.json +1 -1
  140. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
  143. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  146. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js.nft.json +1 -1
  149. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
  151. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  152. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +1 -1
  155. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js.nft.json +1 -1
  158. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js.nft.json +1 -1
  161. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/git/branches/route.js.nft.json +1 -1
  164. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js.nft.json +1 -1
  167. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/git/commit/route.js.nft.json +1 -1
  170. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/git/diff/route.js.nft.json +1 -1
  173. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  174. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  175. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js.nft.json +1 -1
  176. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  177. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  178. package/.next/server/app/api/worktrees/[id]/git/log/route.js.nft.json +1 -1
  179. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  180. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  181. package/.next/server/app/api/worktrees/[id]/git/pull/route.js.nft.json +1 -1
  182. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  183. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  184. package/.next/server/app/api/worktrees/[id]/git/push/route.js.nft.json +1 -1
  185. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  186. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  187. package/.next/server/app/api/worktrees/[id]/git/reset/route.js.nft.json +1 -1
  188. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/git/revert/route.js.nft.json +1 -1
  191. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js.nft.json +1 -1
  194. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/git/stage/route.js.nft.json +1 -1
  197. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/git/staged/route.js.nft.json +1 -1
  200. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js.nft.json +1 -1
  203. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js.nft.json +1 -1
  206. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  208. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js.nft.json +1 -1
  209. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  210. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  211. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js.nft.json +1 -1
  212. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  214. package/.next/server/app/api/worktrees/[id]/git/stash/route.js.nft.json +1 -1
  215. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  216. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  217. package/.next/server/app/api/worktrees/[id]/git/status/route.js.nft.json +1 -1
  218. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  219. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  220. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js.nft.json +1 -1
  221. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  222. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  223. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js.nft.json +1 -1
  224. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  225. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  226. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  227. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  228. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  229. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  230. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  231. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  232. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -1
  233. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  234. package/.next/server/app/api/worktrees/[id]/logs/route.js +1 -1
  235. package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +1 -1
  236. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  237. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +2 -2
  238. package/.next/server/app/api/worktrees/[id]/marp-render/route.js.nft.json +1 -1
  239. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  240. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  241. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js.nft.json +1 -1
  242. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  243. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  244. package/.next/server/app/api/worktrees/[id]/memos/route.js.nft.json +1 -1
  245. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  246. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  247. package/.next/server/app/api/worktrees/[id]/messages/route.js.nft.json +1 -1
  248. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  249. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  250. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  251. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  252. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  253. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  254. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  255. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  256. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  257. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  258. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -1
  259. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  260. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  261. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  262. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
  263. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  264. package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -2
  265. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  266. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  267. package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
  268. package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +1 -1
  269. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  270. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  271. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  272. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  273. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +18 -0
  274. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -0
  275. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -0
  276. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -1
  277. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -1
  278. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  279. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
  280. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
  281. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  282. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -1
  283. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -1
  284. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  285. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -1
  286. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -1
  287. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  288. package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
  289. package/.next/server/app/api/worktrees/[id]/skills/route.js.nft.json +1 -1
  290. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  291. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  292. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
  293. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  294. package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
  295. package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
  296. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  297. package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -1
  298. package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -1
  299. package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
  300. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
  301. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
  302. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  303. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  304. package/.next/server/app/api/worktrees/[id]/timers/history/route.js.nft.json +1 -1
  305. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  306. package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
  307. package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
  308. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  309. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  310. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js.nft.json +1 -1
  311. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  312. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  313. package/.next/server/app/api/worktrees/[id]/todos/route.js.nft.json +1 -1
  314. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  315. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
  316. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +1 -1
  317. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  318. package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
  319. package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +1 -1
  320. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  321. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
  322. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +1 -1
  323. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  324. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  325. package/.next/server/app/api/worktrees/[id]/viewed/route.js.nft.json +1 -1
  326. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  327. package/.next/server/app/api/worktrees/route.js +1 -1
  328. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  329. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  330. package/.next/server/app/chat/page.js +1 -1
  331. package/.next/server/app/chat/page.js.nft.json +1 -1
  332. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  333. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  334. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  335. package/.next/server/app/more/page.js +1 -1
  336. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  337. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  338. package/.next/server/app/page_client-reference-manifest.js +1 -1
  339. package/.next/server/app/proxy/[...path]/route.js +1 -1
  340. package/.next/server/app/proxy/[...path]/route.js.nft.json +1 -1
  341. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  342. package/.next/server/app/repositories/page.js +2 -2
  343. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  344. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  345. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  346. package/.next/server/app/skills/[skillId]/page.js +2 -2
  347. package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
  348. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  349. package/.next/server/app/skills/installed/page.js +2 -0
  350. package/.next/server/app/skills/installed/page.js.nft.json +1 -0
  351. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -0
  352. package/.next/server/app/skills/page.js +2 -2
  353. package/.next/server/app/skills/page.js.nft.json +1 -1
  354. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  355. package/.next/server/app/worktrees/[id]/files/[...path]/page.js +1 -1
  356. package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
  357. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  358. package/.next/server/app/worktrees/[id]/page.js +9 -9
  359. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  360. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  361. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  362. package/.next/server/app-paths-manifest.json +42 -34
  363. package/.next/server/chunks/1117.js +1 -1
  364. package/.next/server/chunks/1185.js +1 -0
  365. package/.next/server/chunks/1239.js +1 -0
  366. package/.next/server/chunks/1355.js +1 -0
  367. package/.next/server/chunks/2119.js +1 -1
  368. package/.next/server/chunks/22.js +1 -1
  369. package/.next/server/chunks/2328.js +1 -1
  370. package/.next/server/chunks/2445.js +1 -1
  371. package/.next/server/chunks/2710.js +2 -0
  372. package/.next/server/chunks/28.js +35 -0
  373. package/.next/server/chunks/3042.js +1 -2
  374. package/.next/server/chunks/3543.js +1 -1
  375. package/.next/server/chunks/3722.js +1 -1
  376. package/.next/server/chunks/3736.js +1 -1
  377. package/.next/server/chunks/3753.js +1 -1
  378. package/.next/server/chunks/3945.js +1 -1
  379. package/.next/server/chunks/4390.js +1 -0
  380. package/.next/server/chunks/4440.js +2 -0
  381. package/.next/server/chunks/4444.js +1 -1
  382. package/.next/server/chunks/4548.js +1 -0
  383. package/.next/server/chunks/5064.js +1 -1
  384. package/.next/server/chunks/5326.js +1 -1
  385. package/.next/server/chunks/5381.js +1 -1
  386. package/.next/server/chunks/5456.js +1 -1
  387. package/.next/server/chunks/5737.js +1 -0
  388. package/.next/server/chunks/5793.js +1 -0
  389. package/.next/server/chunks/5959.js +2 -2
  390. package/.next/server/chunks/6065.js +1 -1
  391. package/.next/server/chunks/6130.js +1 -1
  392. package/.next/server/chunks/646.js +2 -2
  393. package/.next/server/chunks/7593.js +1 -0
  394. package/.next/server/chunks/8356.js +1 -1
  395. package/.next/server/chunks/8681.js +1 -1
  396. package/.next/server/chunks/8807.js +66 -3
  397. package/.next/server/chunks/9051.js +1 -0
  398. package/.next/server/chunks/9123.js +1 -1
  399. package/.next/server/chunks/9687.js +1 -1
  400. package/.next/server/middleware-build-manifest.js +1 -1
  401. package/.next/server/middleware-manifest.json +5 -5
  402. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  403. package/.next/server/pages/500.html +1 -1
  404. package/.next/server/server-reference-manifest.json +1 -1
  405. package/.next/server/src/middleware.js.map +1 -1
  406. package/.next/static/AKqbAyuzbFfg05qpbCI_K/_buildManifest.js +1 -0
  407. package/.next/static/chunks/1191-b7dfdfe86b1d31d1.js +1 -0
  408. package/.next/static/chunks/2751-7fabd91275b14ca3.js +1 -0
  409. package/.next/static/chunks/{4459.03172449db395039.js → 4459.a94b52985a76509a.js} +1 -1
  410. package/.next/static/chunks/{4560-04e5aebcab96bfa1.js → 4560-8ffb0bb19f2ba998.js} +1 -1
  411. package/.next/static/chunks/530.e31cc754677fed0f.js +1 -0
  412. package/.next/static/chunks/5542-b6457f305d724a6b.js +1 -0
  413. package/.next/static/chunks/{6488-74d2f443e43c07b7.js → 6488-c2a968ec806975c2.js} +1 -1
  414. package/.next/static/chunks/{7485.43871aedf3dbb980.js → 7485.442b21101fca7257.js} +1 -1
  415. package/.next/static/chunks/8562-6e2ab32452f4fa5b.js +1 -0
  416. package/.next/static/chunks/8566-a6a7c70558927410.js +1 -0
  417. package/.next/static/chunks/9263.5259f73f89220d64.js +1 -0
  418. package/.next/static/chunks/9599-d29d2f8eeaf7c249.js +1 -0
  419. package/.next/static/chunks/app/api/app/update/route-55e398bd20e2d7a9.js +1 -0
  420. package/.next/static/chunks/app/api/app/update-check/route-55e398bd20e2d7a9.js +1 -0
  421. package/.next/static/chunks/app/api/assistant/conversation/route-55e398bd20e2d7a9.js +1 -0
  422. package/.next/static/chunks/app/api/assistant/current-output/route-55e398bd20e2d7a9.js +1 -0
  423. package/.next/static/chunks/app/api/assistant/messages/route-55e398bd20e2d7a9.js +1 -0
  424. package/.next/static/chunks/app/api/assistant/session/route-55e398bd20e2d7a9.js +1 -0
  425. package/.next/static/chunks/app/api/assistant/start/route-55e398bd20e2d7a9.js +1 -0
  426. package/.next/static/chunks/app/api/assistant/terminal/route-55e398bd20e2d7a9.js +1 -0
  427. package/.next/static/chunks/app/api/assistant/tools/route-55e398bd20e2d7a9.js +1 -0
  428. package/.next/static/chunks/app/api/auth/login/route-55e398bd20e2d7a9.js +1 -0
  429. package/.next/static/chunks/app/api/auth/logout/route-55e398bd20e2d7a9.js +1 -0
  430. package/.next/static/chunks/app/api/auth/status/route-55e398bd20e2d7a9.js +1 -0
  431. package/.next/static/chunks/app/api/daily-summary/route-55e398bd20e2d7a9.js +1 -0
  432. package/.next/static/chunks/app/api/daily-summary/status/route-55e398bd20e2d7a9.js +1 -0
  433. package/.next/static/chunks/app/api/external-apps/[id]/health/route-55e398bd20e2d7a9.js +1 -0
  434. package/.next/static/chunks/app/api/external-apps/[id]/route-55e398bd20e2d7a9.js +1 -0
  435. package/.next/static/chunks/app/api/external-apps/route-55e398bd20e2d7a9.js +1 -0
  436. package/.next/static/chunks/app/api/fs/browse/route-55e398bd20e2d7a9.js +1 -0
  437. package/.next/static/chunks/app/api/fs/recent-paths/route-55e398bd20e2d7a9.js +1 -0
  438. package/.next/static/chunks/app/api/hooks/claude-done/route-55e398bd20e2d7a9.js +1 -0
  439. package/.next/static/chunks/app/api/ollama/models/route-55e398bd20e2d7a9.js +1 -0
  440. package/.next/static/chunks/app/api/push/subscriptions/route-55e398bd20e2d7a9.js +1 -0
  441. package/.next/static/chunks/app/api/push/vapid/route-55e398bd20e2d7a9.js +1 -0
  442. package/.next/static/chunks/app/api/repositories/[id]/route-55e398bd20e2d7a9.js +1 -0
  443. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-55e398bd20e2d7a9.js +1 -0
  444. package/.next/static/chunks/app/api/repositories/[id]/todos/route-55e398bd20e2d7a9.js +1 -0
  445. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-55e398bd20e2d7a9.js +1 -0
  446. package/.next/static/chunks/app/api/repositories/clone/route-55e398bd20e2d7a9.js +1 -0
  447. package/.next/static/chunks/app/api/repositories/excluded/route-55e398bd20e2d7a9.js +1 -0
  448. package/.next/static/chunks/app/api/repositories/restore/route-55e398bd20e2d7a9.js +1 -0
  449. package/.next/static/chunks/app/api/repositories/route-55e398bd20e2d7a9.js +1 -0
  450. package/.next/static/chunks/app/api/repositories/scan/route-55e398bd20e2d7a9.js +1 -0
  451. package/.next/static/chunks/app/api/repositories/sync/route-55e398bd20e2d7a9.js +1 -0
  452. package/.next/static/chunks/app/api/repositories/validate-path/route-55e398bd20e2d7a9.js +1 -0
  453. package/.next/static/chunks/app/api/sidebar/group-order/route-55e398bd20e2d7a9.js +1 -0
  454. package/.next/static/chunks/app/api/skills/[id]/route-55e398bd20e2d7a9.js +1 -0
  455. package/.next/static/chunks/app/api/skills/installations/route-55e398bd20e2d7a9.js +1 -0
  456. package/.next/static/chunks/app/api/skills/operations/route-55e398bd20e2d7a9.js +1 -0
  457. package/.next/static/chunks/app/api/skills/reindex/route-55e398bd20e2d7a9.js +1 -0
  458. package/.next/static/chunks/app/api/skills/route-55e398bd20e2d7a9.js +1 -0
  459. package/.next/static/chunks/app/api/slash-commands/route-55e398bd20e2d7a9.js +1 -0
  460. package/.next/static/chunks/app/api/templates/[id]/route-55e398bd20e2d7a9.js +1 -0
  461. package/.next/static/chunks/app/api/templates/route-55e398bd20e2d7a9.js +1 -0
  462. package/.next/static/chunks/app/api/todos/route-55e398bd20e2d7a9.js +1 -0
  463. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-55e398bd20e2d7a9.js +1 -0
  464. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-55e398bd20e2d7a9.js +1 -0
  465. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-55e398bd20e2d7a9.js +1 -0
  466. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-55e398bd20e2d7a9.js +1 -0
  467. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-55e398bd20e2d7a9.js +1 -0
  468. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-55e398bd20e2d7a9.js +1 -0
  469. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-55e398bd20e2d7a9.js +1 -0
  470. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-55e398bd20e2d7a9.js +1 -0
  471. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-55e398bd20e2d7a9.js +1 -0
  472. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-55e398bd20e2d7a9.js +1 -0
  473. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-55e398bd20e2d7a9.js +1 -0
  474. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-55e398bd20e2d7a9.js +1 -0
  475. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-55e398bd20e2d7a9.js +1 -0
  476. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-55e398bd20e2d7a9.js +1 -0
  477. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-55e398bd20e2d7a9.js +1 -0
  478. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-55e398bd20e2d7a9.js +1 -0
  479. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-55e398bd20e2d7a9.js +1 -0
  480. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-55e398bd20e2d7a9.js +1 -0
  481. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-55e398bd20e2d7a9.js +1 -0
  482. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-55e398bd20e2d7a9.js +1 -0
  483. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-55e398bd20e2d7a9.js +1 -0
  484. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-55e398bd20e2d7a9.js +1 -0
  485. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-55e398bd20e2d7a9.js +1 -0
  486. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-55e398bd20e2d7a9.js +1 -0
  487. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-55e398bd20e2d7a9.js +1 -0
  488. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-55e398bd20e2d7a9.js +1 -0
  489. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-55e398bd20e2d7a9.js +1 -0
  490. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-55e398bd20e2d7a9.js +1 -0
  491. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-55e398bd20e2d7a9.js +1 -0
  492. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-55e398bd20e2d7a9.js +1 -0
  493. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-55e398bd20e2d7a9.js +1 -0
  494. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-55e398bd20e2d7a9.js +1 -0
  495. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-55e398bd20e2d7a9.js +1 -0
  496. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-55e398bd20e2d7a9.js +1 -0
  497. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-55e398bd20e2d7a9.js +1 -0
  498. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-55e398bd20e2d7a9.js +1 -0
  499. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-55e398bd20e2d7a9.js +1 -0
  500. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-55e398bd20e2d7a9.js +1 -0
  501. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-55e398bd20e2d7a9.js +1 -0
  502. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-55e398bd20e2d7a9.js +1 -0
  503. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-55e398bd20e2d7a9.js +1 -0
  504. package/.next/static/chunks/app/api/worktrees/[id]/route-55e398bd20e2d7a9.js +1 -0
  505. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-55e398bd20e2d7a9.js +1 -0
  506. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-55e398bd20e2d7a9.js +1 -0
  507. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-55e398bd20e2d7a9.js +1 -0
  508. package/.next/static/chunks/app/api/worktrees/[id]/search/route-55e398bd20e2d7a9.js +1 -0
  509. package/.next/static/chunks/app/api/worktrees/[id]/send/route-55e398bd20e2d7a9.js +1 -0
  510. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-55e398bd20e2d7a9.js +1 -0
  511. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-55e398bd20e2d7a9.js +1 -0
  512. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-55e398bd20e2d7a9.js +1 -0
  513. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-55e398bd20e2d7a9.js +1 -0
  514. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-55e398bd20e2d7a9.js +1 -0
  515. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-55e398bd20e2d7a9.js +1 -0
  516. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-55e398bd20e2d7a9.js +1 -0
  517. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-55e398bd20e2d7a9.js +1 -0
  518. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-55e398bd20e2d7a9.js +1 -0
  519. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-55e398bd20e2d7a9.js +1 -0
  520. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-55e398bd20e2d7a9.js +1 -0
  521. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-55e398bd20e2d7a9.js +1 -0
  522. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-55e398bd20e2d7a9.js +1 -0
  523. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-55e398bd20e2d7a9.js +1 -0
  524. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-55e398bd20e2d7a9.js +1 -0
  525. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-55e398bd20e2d7a9.js +1 -0
  526. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-55e398bd20e2d7a9.js +1 -0
  527. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-55e398bd20e2d7a9.js +1 -0
  528. package/.next/static/chunks/app/api/worktrees/route-55e398bd20e2d7a9.js +1 -0
  529. package/.next/static/chunks/app/chat/page-83a2238ab453afaa.js +1 -0
  530. package/.next/static/chunks/app/manifest.webmanifest/route-55e398bd20e2d7a9.js +1 -0
  531. package/.next/static/chunks/app/more/{page-082d4ae496f9a36e.js → page-1619018cac999bbc.js} +1 -1
  532. package/.next/static/chunks/app/proxy/[...path]/route-55e398bd20e2d7a9.js +1 -0
  533. package/.next/static/chunks/app/repositories/page-3c4fb889da48ce24.js +1 -0
  534. package/.next/static/chunks/app/skills/[skillId]/page-6008b904225ebb25.js +1 -0
  535. package/.next/static/chunks/app/skills/installed/page-6641f95e6a6e5f9d.js +1 -0
  536. package/.next/static/chunks/app/skills/page-184f8e23e31a3667.js +1 -0
  537. package/.next/static/chunks/app/worktrees/[id]/files/[...path]/{page-6a45f3744da50d95.js → page-6041d3c3db326317.js} +1 -1
  538. package/.next/static/chunks/app/worktrees/[id]/page-59a63a2c013ec1eb.js +1 -0
  539. package/.next/static/chunks/webpack-180bebdee221b6f4.js +1 -0
  540. package/.next/static/css/d3453a6876553d32.css +1 -0
  541. package/.next/trace +11 -11
  542. package/.next/types/app/api/fs/browse/route.ts +347 -0
  543. package/.next/types/app/api/fs/recent-paths/route.ts +347 -0
  544. package/.next/types/app/api/repositories/validate-path/route.ts +347 -0
  545. package/.next/types/app/api/skills/installations/route.ts +347 -0
  546. package/.next/types/app/api/skills/operations/route.ts +347 -0
  547. package/.next/types/app/api/skills/reindex/route.ts +347 -0
  548. package/.next/types/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.ts +347 -0
  549. package/.next/types/app/skills/installed/page.ts +84 -0
  550. package/.next/types/routes.d.ts +10 -2
  551. package/.next/types/validator.ts +72 -0
  552. package/dist/cli/commands/init.d.ts.map +1 -1
  553. package/dist/cli/commands/init.js +15 -0
  554. package/dist/cli/commands/skill.d.ts +2 -1
  555. package/dist/cli/commands/skill.d.ts.map +1 -1
  556. package/dist/cli/commands/skill.js +136 -2
  557. package/dist/cli/types/api-responses.d.ts +40 -0
  558. package/dist/cli/types/api-responses.d.ts.map +1 -1
  559. package/dist/cli/types/index.d.ts +12 -0
  560. package/dist/cli/types/index.d.ts.map +1 -1
  561. package/dist/cli/utils/env-setup.d.ts +8 -0
  562. package/dist/cli/utils/env-setup.d.ts.map +1 -1
  563. package/dist/cli/utils/env-setup.js +23 -0
  564. package/dist/server/src/lib/db/migrations/index.js +2 -0
  565. package/dist/server/src/lib/db/migrations/runner.js +1 -1
  566. package/dist/server/src/lib/db/migrations/v48-skill-operations-audit-index.js +117 -0
  567. package/dist/server/src/lib/git/git-exec.js +48 -1
  568. package/dist/server/src/lib/selected-agents-validator.js +3 -2
  569. package/dist/server/src/lib/skills/compatibility-matrix.js +256 -0
  570. package/dist/server/src/lib/skills/compatibility.js +132 -11
  571. package/dist/server/src/lib/skills/operation-audit.js +85 -15
  572. package/dist/server/src/lib/skills/operation-journal.js +14 -1
  573. package/dist/server/src/types/markdown-editor.js +13 -1
  574. package/package.json +1 -1
  575. package/.next/server/chunks/1808.js +0 -1
  576. package/.next/server/chunks/186.js +0 -1
  577. package/.next/server/chunks/5226.js +0 -28
  578. package/.next/server/chunks/5306.js +0 -2
  579. package/.next/server/chunks/7013.js +0 -1
  580. package/.next/server/chunks/9067.js +0 -1
  581. package/.next/server/chunks/9192.js +0 -1
  582. package/.next/static/1WyelLMRgPnhvA2HmhZmm/_buildManifest.js +0 -1
  583. package/.next/static/chunks/1668-e703b8b55775844b.js +0 -1
  584. package/.next/static/chunks/2069-c55de93eb6403961.js +0 -1
  585. package/.next/static/chunks/3418-7e47651340d940b0.js +0 -1
  586. package/.next/static/chunks/4027-000402aee1e3520b.js +0 -1
  587. package/.next/static/chunks/530.e377b0f1a7a89620.js +0 -1
  588. package/.next/static/chunks/6007-de36119357dcd418.js +0 -1
  589. package/.next/static/chunks/6497-ea466b22a6c1ae89.js +0 -1
  590. package/.next/static/chunks/8361.4bf062be2d2962f4.js +0 -1
  591. package/.next/static/chunks/8566-9da32e46c9d3fd54.js +0 -1
  592. package/.next/static/chunks/934-a37509667baa86ee.js +0 -1
  593. package/.next/static/chunks/app/api/app/update/route-56dad0523d3c4a92.js +0 -1
  594. package/.next/static/chunks/app/api/app/update-check/route-56dad0523d3c4a92.js +0 -1
  595. package/.next/static/chunks/app/api/assistant/conversation/route-56dad0523d3c4a92.js +0 -1
  596. package/.next/static/chunks/app/api/assistant/current-output/route-56dad0523d3c4a92.js +0 -1
  597. package/.next/static/chunks/app/api/assistant/messages/route-56dad0523d3c4a92.js +0 -1
  598. package/.next/static/chunks/app/api/assistant/session/route-56dad0523d3c4a92.js +0 -1
  599. package/.next/static/chunks/app/api/assistant/start/route-56dad0523d3c4a92.js +0 -1
  600. package/.next/static/chunks/app/api/assistant/terminal/route-56dad0523d3c4a92.js +0 -1
  601. package/.next/static/chunks/app/api/assistant/tools/route-56dad0523d3c4a92.js +0 -1
  602. package/.next/static/chunks/app/api/auth/login/route-56dad0523d3c4a92.js +0 -1
  603. package/.next/static/chunks/app/api/auth/logout/route-56dad0523d3c4a92.js +0 -1
  604. package/.next/static/chunks/app/api/auth/status/route-56dad0523d3c4a92.js +0 -1
  605. package/.next/static/chunks/app/api/daily-summary/route-56dad0523d3c4a92.js +0 -1
  606. package/.next/static/chunks/app/api/daily-summary/status/route-56dad0523d3c4a92.js +0 -1
  607. package/.next/static/chunks/app/api/external-apps/[id]/health/route-56dad0523d3c4a92.js +0 -1
  608. package/.next/static/chunks/app/api/external-apps/[id]/route-56dad0523d3c4a92.js +0 -1
  609. package/.next/static/chunks/app/api/external-apps/route-56dad0523d3c4a92.js +0 -1
  610. package/.next/static/chunks/app/api/hooks/claude-done/route-56dad0523d3c4a92.js +0 -1
  611. package/.next/static/chunks/app/api/ollama/models/route-56dad0523d3c4a92.js +0 -1
  612. package/.next/static/chunks/app/api/push/subscriptions/route-56dad0523d3c4a92.js +0 -1
  613. package/.next/static/chunks/app/api/push/vapid/route-56dad0523d3c4a92.js +0 -1
  614. package/.next/static/chunks/app/api/repositories/[id]/route-56dad0523d3c4a92.js +0 -1
  615. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-56dad0523d3c4a92.js +0 -1
  616. package/.next/static/chunks/app/api/repositories/[id]/todos/route-56dad0523d3c4a92.js +0 -1
  617. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-56dad0523d3c4a92.js +0 -1
  618. package/.next/static/chunks/app/api/repositories/clone/route-56dad0523d3c4a92.js +0 -1
  619. package/.next/static/chunks/app/api/repositories/excluded/route-56dad0523d3c4a92.js +0 -1
  620. package/.next/static/chunks/app/api/repositories/restore/route-56dad0523d3c4a92.js +0 -1
  621. package/.next/static/chunks/app/api/repositories/route-56dad0523d3c4a92.js +0 -1
  622. package/.next/static/chunks/app/api/repositories/scan/route-56dad0523d3c4a92.js +0 -1
  623. package/.next/static/chunks/app/api/repositories/sync/route-56dad0523d3c4a92.js +0 -1
  624. package/.next/static/chunks/app/api/sidebar/group-order/route-56dad0523d3c4a92.js +0 -1
  625. package/.next/static/chunks/app/api/skills/[id]/route-56dad0523d3c4a92.js +0 -1
  626. package/.next/static/chunks/app/api/skills/route-56dad0523d3c4a92.js +0 -1
  627. package/.next/static/chunks/app/api/slash-commands/route-56dad0523d3c4a92.js +0 -1
  628. package/.next/static/chunks/app/api/templates/[id]/route-56dad0523d3c4a92.js +0 -1
  629. package/.next/static/chunks/app/api/templates/route-56dad0523d3c4a92.js +0 -1
  630. package/.next/static/chunks/app/api/todos/route-56dad0523d3c4a92.js +0 -1
  631. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-56dad0523d3c4a92.js +0 -1
  632. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-56dad0523d3c4a92.js +0 -1
  633. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-56dad0523d3c4a92.js +0 -1
  634. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-56dad0523d3c4a92.js +0 -1
  635. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-56dad0523d3c4a92.js +0 -1
  636. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-56dad0523d3c4a92.js +0 -1
  637. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-56dad0523d3c4a92.js +0 -1
  638. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-56dad0523d3c4a92.js +0 -1
  639. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-56dad0523d3c4a92.js +0 -1
  640. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-56dad0523d3c4a92.js +0 -1
  641. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-56dad0523d3c4a92.js +0 -1
  642. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-56dad0523d3c4a92.js +0 -1
  643. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-56dad0523d3c4a92.js +0 -1
  644. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-56dad0523d3c4a92.js +0 -1
  645. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-56dad0523d3c4a92.js +0 -1
  646. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-56dad0523d3c4a92.js +0 -1
  647. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-56dad0523d3c4a92.js +0 -1
  648. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-56dad0523d3c4a92.js +0 -1
  649. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-56dad0523d3c4a92.js +0 -1
  650. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-56dad0523d3c4a92.js +0 -1
  651. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-56dad0523d3c4a92.js +0 -1
  652. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-56dad0523d3c4a92.js +0 -1
  653. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-56dad0523d3c4a92.js +0 -1
  654. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-56dad0523d3c4a92.js +0 -1
  655. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-56dad0523d3c4a92.js +0 -1
  656. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-56dad0523d3c4a92.js +0 -1
  657. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-56dad0523d3c4a92.js +0 -1
  658. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-56dad0523d3c4a92.js +0 -1
  659. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-56dad0523d3c4a92.js +0 -1
  660. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-56dad0523d3c4a92.js +0 -1
  661. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-56dad0523d3c4a92.js +0 -1
  662. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-56dad0523d3c4a92.js +0 -1
  663. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-56dad0523d3c4a92.js +0 -1
  664. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-56dad0523d3c4a92.js +0 -1
  665. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-56dad0523d3c4a92.js +0 -1
  666. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-56dad0523d3c4a92.js +0 -1
  667. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-56dad0523d3c4a92.js +0 -1
  668. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-56dad0523d3c4a92.js +0 -1
  669. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-56dad0523d3c4a92.js +0 -1
  670. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-56dad0523d3c4a92.js +0 -1
  671. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-56dad0523d3c4a92.js +0 -1
  672. package/.next/static/chunks/app/api/worktrees/[id]/route-56dad0523d3c4a92.js +0 -1
  673. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-56dad0523d3c4a92.js +0 -1
  674. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-56dad0523d3c4a92.js +0 -1
  675. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-56dad0523d3c4a92.js +0 -1
  676. package/.next/static/chunks/app/api/worktrees/[id]/search/route-56dad0523d3c4a92.js +0 -1
  677. package/.next/static/chunks/app/api/worktrees/[id]/send/route-56dad0523d3c4a92.js +0 -1
  678. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-56dad0523d3c4a92.js +0 -1
  679. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-56dad0523d3c4a92.js +0 -1
  680. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-56dad0523d3c4a92.js +0 -1
  681. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-56dad0523d3c4a92.js +0 -1
  682. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-56dad0523d3c4a92.js +0 -1
  683. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-56dad0523d3c4a92.js +0 -1
  684. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-56dad0523d3c4a92.js +0 -1
  685. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-56dad0523d3c4a92.js +0 -1
  686. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-56dad0523d3c4a92.js +0 -1
  687. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-56dad0523d3c4a92.js +0 -1
  688. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-56dad0523d3c4a92.js +0 -1
  689. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-56dad0523d3c4a92.js +0 -1
  690. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-56dad0523d3c4a92.js +0 -1
  691. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-56dad0523d3c4a92.js +0 -1
  692. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-56dad0523d3c4a92.js +0 -1
  693. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-56dad0523d3c4a92.js +0 -1
  694. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-56dad0523d3c4a92.js +0 -1
  695. package/.next/static/chunks/app/api/worktrees/route-56dad0523d3c4a92.js +0 -1
  696. package/.next/static/chunks/app/chat/page-623f5cb9040de639.js +0 -1
  697. package/.next/static/chunks/app/manifest.webmanifest/route-56dad0523d3c4a92.js +0 -1
  698. package/.next/static/chunks/app/proxy/[...path]/route-56dad0523d3c4a92.js +0 -1
  699. package/.next/static/chunks/app/repositories/page-70d4b997492884b8.js +0 -1
  700. package/.next/static/chunks/app/skills/[skillId]/page-68ed5e9186efe56d.js +0 -1
  701. package/.next/static/chunks/app/skills/page-46242c428ee8bccf.js +0 -1
  702. package/.next/static/chunks/app/worktrees/[id]/page-983a80ece6289026.js +0 -1
  703. package/.next/static/chunks/webpack-e655374fed175528.js +0 -1
  704. package/.next/static/css/b4bdb1f3457fe9a7.css +0 -1
  705. /package/.next/static/{1WyelLMRgPnhvA2HmhZmm → AKqbAyuzbFfg05qpbCI_K}/_ssgManifest.js +0 -0
@@ -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
- * is always an explicit argument so UI, API and CLI can evaluate the same
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
- /** Attach the shared i18n label key to each Agent support claim. */
126
- function describeAgentCompatibility(agents) {
127
- return agents.map((entry) => ({
128
- agent: entry.agent,
129
- support: entry.support,
130
- labelKey: constants_1.AGENT_SUPPORT_LABEL_KEYS[entry.support],
131
- evidence: entry.evidence,
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
@@ -16,9 +16,11 @@
16
16
  * @module lib/skills/operation-audit
17
17
  */
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.SKILL_AUDIT_MAX_LIMIT = exports.SKILL_AUDIT_DEFAULT_LIMIT = void 0;
19
20
  exports.buildSkillOperationAuditInput = buildSkillOperationAuditInput;
20
21
  exports.recordSkillOperationAudit = recordSkillOperationAudit;
21
22
  exports.getSkillOperationAuditByOperationId = getSkillOperationAuditByOperationId;
23
+ exports.querySkillOperationAudit = querySkillOperationAudit;
22
24
  exports.listSkillOperationAudit = listSkillOperationAudit;
23
25
  const crypto_1 = require("crypto");
24
26
  const operation_store_1 = require("../../lib/skills/operation-store");
@@ -36,6 +38,8 @@ function mapRow(row) {
36
38
  worktreeId: row.worktree_id,
37
39
  skillId: row.skill_id,
38
40
  skillVersion: row.skill_version,
41
+ fromVersion: row.from_version,
42
+ toVersion: row.to_version,
39
43
  sourceOrigin: row.source_origin,
40
44
  sourceRepository: row.source_repository,
41
45
  sourceRef: row.source_ref,
@@ -48,15 +52,23 @@ function mapRow(row) {
48
52
  }
49
53
  const SELECT_COLUMNS = `
50
54
  id, operation_id, idempotency_key, binding_hash, operation, state, result,
51
- actor_type, actor_id, worktree_id, skill_id, skill_version,
55
+ actor_type, actor_id, worktree_id, skill_id, skill_version, from_version, to_version,
52
56
  source_origin, source_repository, source_ref, source_commit, artifact_sha256,
53
57
  error_code, error_message, recorded_at
54
58
  `;
55
59
  /**
56
60
  * Build an audit input from a journal entry, so the two records cannot drift.
57
61
  * The journal already holds the actor, target, source and typed error.
62
+ *
63
+ * The version transition (#1248) is derived from the journal rather than passed
64
+ * in, because for the two operations that exist today the journal fully
65
+ * determines it: an install ends at its target version and starts nowhere, an
66
+ * uninstall starts at the version it removes and ends nowhere. An `update` is
67
+ * the one case where `fromVersion` is not derivable — it has no writer yet
68
+ * (#1243/#1244), and whoever adds one has to supply the replaced version here.
58
69
  */
59
70
  function buildSkillOperationAuditInput(entry, result, recordedAt) {
71
+ const isUninstall = entry.operation === 'uninstall';
60
72
  return {
61
73
  operationId: entry.operationId,
62
74
  idempotencyKey: entry.idempotencyKey,
@@ -69,6 +81,8 @@ function buildSkillOperationAuditInput(entry, result, recordedAt) {
69
81
  worktreeId: entry.target.worktreeId,
70
82
  skillId: entry.target.skillId,
71
83
  skillVersion: entry.target.version,
84
+ fromVersion: isUninstall ? entry.target.version : null,
85
+ toVersion: isUninstall ? null : entry.target.version,
72
86
  sourceOrigin: entry.source?.origin ?? null,
73
87
  sourceRepository: entry.source?.repository ?? null,
74
88
  sourceRef: entry.source?.ref ?? null,
@@ -89,10 +103,10 @@ function recordSkillOperationAudit(db, input) {
89
103
  };
90
104
  db.prepare(`INSERT INTO skill_operations (
91
105
  id, operation_id, idempotency_key, binding_hash, operation, state, result,
92
- actor_type, actor_id, worktree_id, skill_id, skill_version,
106
+ actor_type, actor_id, worktree_id, skill_id, skill_version, from_version, to_version,
93
107
  source_origin, source_repository, source_ref, source_commit, artifact_sha256,
94
108
  error_code, error_message, recorded_at
95
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(record.id, record.operationId, record.idempotencyKey, record.bindingHash, record.operation, record.state, record.result, record.actorType, record.actorId, record.worktreeId, record.skillId, record.skillVersion, record.sourceOrigin, record.sourceRepository, record.sourceRef, record.sourceCommit, record.artifactSha256, record.errorCode, record.errorMessage, record.recordedAt);
109
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(record.id, record.operationId, record.idempotencyKey, record.bindingHash, record.operation, record.state, record.result, record.actorType, record.actorId, record.worktreeId, record.skillId, record.skillVersion, record.fromVersion, record.toVersion, record.sourceOrigin, record.sourceRepository, record.sourceRef, record.sourceCommit, record.artifactSha256, record.errorCode, record.errorMessage, record.recordedAt);
96
110
  return record;
97
111
  }
98
112
  /** Audit trail of one operation, oldest first. */
@@ -103,18 +117,74 @@ function getSkillOperationAuditByOperationId(db, operationId) {
103
117
  .all(operationId);
104
118
  return rows.map(mapRow);
105
119
  }
120
+ /** Default page size for an audit query. */
121
+ exports.SKILL_AUDIT_DEFAULT_LIMIT = 50;
122
+ /** Hard ceiling on one audit page, so a client cannot ask for the whole log. */
123
+ exports.SKILL_AUDIT_MAX_LIMIT = 200;
124
+ function buildAuditWhere(query) {
125
+ const conditions = [];
126
+ const params = [];
127
+ if (query.worktreeId !== undefined) {
128
+ conditions.push('worktree_id = ?');
129
+ params.push(query.worktreeId);
130
+ }
131
+ if (query.skillId !== undefined) {
132
+ conditions.push('skill_id = ?');
133
+ params.push(query.skillId);
134
+ }
135
+ if (query.operation !== undefined) {
136
+ conditions.push('operation = ?');
137
+ params.push(query.operation);
138
+ }
139
+ if (query.result !== undefined) {
140
+ conditions.push('result = ?');
141
+ params.push(query.result);
142
+ }
143
+ if (query.since !== undefined) {
144
+ conditions.push('recorded_at >= ?');
145
+ params.push(query.since);
146
+ }
147
+ if (query.until !== undefined) {
148
+ conditions.push('recorded_at < ?');
149
+ params.push(query.until);
150
+ }
151
+ if (query.after !== undefined) {
152
+ conditions.push('(recorded_at < ? OR (recorded_at = ? AND id < ?))');
153
+ params.push(query.after.recordedAt, query.after.recordedAt, query.after.id);
154
+ }
155
+ return {
156
+ clause: conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '',
157
+ params,
158
+ };
159
+ }
160
+ /**
161
+ * One page of the audit feed, newest first.
162
+ *
163
+ * Fetches one row beyond the page to decide `hasMore` without a second COUNT
164
+ * over a table that only ever grows.
165
+ */
166
+ function querySkillOperationAudit(db, query = {}) {
167
+ const limit = Math.min(Math.max(1, Math.trunc(query.limit ?? exports.SKILL_AUDIT_DEFAULT_LIMIT)), exports.SKILL_AUDIT_MAX_LIMIT);
168
+ const { clause, params } = buildAuditWhere(query);
169
+ const rows = db
170
+ .prepare(`SELECT ${SELECT_COLUMNS} FROM skill_operations
171
+ ${clause}
172
+ ORDER BY recorded_at DESC, id DESC LIMIT ?`)
173
+ .all(...params, limit + 1);
174
+ const hasMore = rows.length > limit;
175
+ const records = (hasMore ? rows.slice(0, limit) : rows).map(mapRow);
176
+ const last = records[records.length - 1];
177
+ return {
178
+ records,
179
+ hasMore,
180
+ nextCursor: hasMore && last ? { recordedAt: last.recordedAt, id: last.id } : null,
181
+ };
182
+ }
106
183
  /** Audit trail for one Skill in one worktree, newest first. */
107
184
  function listSkillOperationAudit(db, filter) {
108
- const limit = filter.limit ?? 100;
109
- const rows = (filter.skillId === undefined
110
- ? db
111
- .prepare(`SELECT ${SELECT_COLUMNS} FROM skill_operations
112
- WHERE worktree_id = ? ORDER BY recorded_at DESC, id DESC LIMIT ?`)
113
- .all(filter.worktreeId, limit)
114
- : db
115
- .prepare(`SELECT ${SELECT_COLUMNS} FROM skill_operations
116
- WHERE worktree_id = ? AND skill_id = ?
117
- ORDER BY recorded_at DESC, id DESC LIMIT ?`)
118
- .all(filter.worktreeId, filter.skillId, limit));
119
- return rows.map(mapRow);
185
+ return querySkillOperationAudit(db, {
186
+ worktreeId: filter.worktreeId,
187
+ skillId: filter.skillId,
188
+ limit: filter.limit ?? 100,
189
+ }).records;
120
190
  }
@@ -207,6 +207,15 @@ function pruneExpiredSkillOperationJournal(options = {}) {
207
207
  *
208
208
  * A replay hands back the recorded entry so the caller can answer with the
209
209
  * original outcome instead of writing the payload a second time.
210
+ *
211
+ * `isReplayable` is how the caller says the recorded outcome is no longer true
212
+ * of the world (Issue #1552). A derived key is a function of the binding alone,
213
+ * so a genuinely new request — the install that follows an uninstall — arrives
214
+ * under the key of the old one; without this it would be answered from an entry
215
+ * describing a payload that is no longer there. An entry rejected this way is
216
+ * superseded: it is dropped and a fresh operation is opened, because the request
217
+ * really is new work. A PREPARING entry is never superseded, whatever the
218
+ * predicate says: the operation that owns it may still be running.
210
219
  */
211
220
  function beginSkillOperation(input, options = {}) {
212
221
  const bindingHash = computeSkillOperationBindingHash(input.binding);
@@ -216,7 +225,11 @@ function beginSkillOperation(input, options = {}) {
216
225
  if (existing.bindingHash !== bindingHash) {
217
226
  return { ok: false, reason: 'IDEMPOTENCY_KEY_CONFLICT', entry: existing };
218
227
  }
219
- return { ok: true, entry: existing, replayed: true };
228
+ const supersede = existing.state !== 'PREPARING' && input.isReplayable?.(existing) === false;
229
+ if (!supersede) {
230
+ return { ok: true, entry: existing, replayed: true };
231
+ }
232
+ deleteSkillOperationJournal(idempotencyKey, options);
220
233
  }
221
234
  const now = options.now ?? Date.now();
222
235
  const entry = {
@@ -5,7 +5,7 @@
5
5
  * @module types/markdown-editor
6
6
  */
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.DEFAULT_LAYOUT_STATE = exports.AUTO_SAVE_DEBOUNCE_MS = exports.LOCAL_STORAGE_KEY_AUTO_SAVE = exports.MAX_SPLIT_RATIO = exports.MIN_SPLIT_RATIO = exports.DEFAULT_SPLIT_RATIO = exports.FILE_SIZE_LIMITS = exports.PREVIEW_DEBOUNCE_MS = exports.LOCAL_STORAGE_KEY_MAXIMIZED = exports.LOCAL_STORAGE_KEY_SPLIT_RATIO = exports.LOCAL_STORAGE_KEY = exports.VIEW_MODE_STRATEGIES = void 0;
8
+ exports.DEFAULT_LAYOUT_STATE = exports.INDENT_UNIT = exports.LOCAL_STORAGE_KEY_TAB_MOVES_FOCUS = exports.AUTO_SAVE_DEBOUNCE_MS = exports.LOCAL_STORAGE_KEY_AUTO_SAVE = exports.MAX_SPLIT_RATIO = exports.MIN_SPLIT_RATIO = exports.DEFAULT_SPLIT_RATIO = exports.FILE_SIZE_LIMITS = exports.PREVIEW_DEBOUNCE_MS = exports.LOCAL_STORAGE_KEY_MAXIMIZED = exports.LOCAL_STORAGE_KEY_SPLIT_RATIO = exports.LOCAL_STORAGE_KEY = exports.VIEW_MODE_STRATEGIES = void 0;
9
9
  exports.isValidSplitRatio = isValidSplitRatio;
10
10
  exports.isValidBoolean = isValidBoolean;
11
11
  /**
@@ -79,6 +79,18 @@ exports.LOCAL_STORAGE_KEY_AUTO_SAVE = 'commandmate:md-editor-auto-save';
79
79
  * Auto-save debounce delay (3 seconds)
80
80
  */
81
81
  exports.AUTO_SAVE_DEBOUNCE_MS = 3000;
82
+ /**
83
+ * Local storage key for the "Tab moves focus" accessibility toggle (Issue #1518)
84
+ */
85
+ exports.LOCAL_STORAGE_KEY_TAB_MOVES_FOCUS = 'commandmate:md-editor-tab-moves-focus';
86
+ /**
87
+ * Indent unit inserted by Tab (Issue #1518).
88
+ *
89
+ * Spaces, never a tab character: the same textarea edits YAML in text mode and
90
+ * YAML forbids tabs, and a literal tab renders at the browser's default 8-column
91
+ * `tab-size` which breaks Markdown nested lists.
92
+ */
93
+ exports.INDENT_UNIT = ' ';
82
94
  /**
83
95
  * Default editor layout state
84
96
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "commandmate",
3
- "version": "0.14.1",
3
+ "version": "0.16.0",
4
4
  "description": "A local control plane for agent CLIs — orchestration and visibility for Claude Code, Codex, Gemini CLI, and more across Git worktrees",
5
5
  "keywords": [
6
6
  "claude-code",