commandmate 0.11.4 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (591) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +395 -303
  3. package/.next/app-path-routes-manifest.json +31 -22
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +12 -12
  6. package/.next/react-loadable-manifest.json +8 -6
  7. package/.next/required-server-files.json +1 -1
  8. package/.next/routes-manifest.json +66 -0
  9. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  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_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  18. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  24. package/.next/server/app/api/daily-summary/route.js +1 -1
  25. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  26. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  28. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  29. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  36. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
  40. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
  42. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/skills/[id]/route.js +1 -0
  52. package/.next/server/app/api/skills/[id]/route.js.nft.json +1 -0
  53. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -0
  54. package/.next/server/app/api/skills/route.js +1 -0
  55. package/.next/server/app/api/skills/route.js.nft.json +1 -0
  56. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -0
  57. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/todos/route.js +1 -1
  61. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  65. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  66. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
  67. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  70. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
  72. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  75. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js.nft.json +1 -1
  76. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  78. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js.nft.json +1 -1
  79. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  81. package/.next/server/app/api/worktrees/[id]/git/branches/route.js.nft.json +1 -1
  82. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  84. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js.nft.json +1 -1
  85. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  87. package/.next/server/app/api/worktrees/[id]/git/commit/route.js.nft.json +1 -1
  88. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
  90. package/.next/server/app/api/worktrees/[id]/git/diff/route.js.nft.json +1 -1
  91. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  93. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js.nft.json +1 -1
  94. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  96. package/.next/server/app/api/worktrees/[id]/git/log/route.js.nft.json +1 -1
  97. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  99. package/.next/server/app/api/worktrees/[id]/git/pull/route.js.nft.json +1 -1
  100. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  102. package/.next/server/app/api/worktrees/[id]/git/push/route.js.nft.json +1 -1
  103. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  105. package/.next/server/app/api/worktrees/[id]/git/reset/route.js.nft.json +1 -1
  106. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  108. package/.next/server/app/api/worktrees/[id]/git/revert/route.js.nft.json +1 -1
  109. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
  111. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js.nft.json +1 -1
  112. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/git/stage/route.js.nft.json +1 -1
  115. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  117. package/.next/server/app/api/worktrees/[id]/git/staged/route.js.nft.json +1 -1
  118. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js.nft.json +1 -1
  121. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js.nft.json +1 -1
  124. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js.nft.json +1 -1
  127. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js.nft.json +1 -1
  130. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/git/stash/route.js.nft.json +1 -1
  133. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/git/status/route.js.nft.json +1 -1
  136. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js.nft.json +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js.nft.json +1 -1
  142. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/logs/route.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  161. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  162. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/schedules/route.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  171. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  172. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -0
  173. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -0
  174. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -0
  175. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -0
  176. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -0
  177. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -0
  178. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -0
  179. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -0
  180. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -0
  181. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -0
  182. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -0
  183. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -0
  184. package/.next/server/app/api/worktrees/[id]/skills/route.js +23 -0
  185. package/.next/server/app/api/worktrees/[id]/skills/route.js.nft.json +1 -0
  186. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -0
  187. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  188. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  206. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/chat/page.js +2 -2
  208. package/.next/server/app/chat/page.js.nft.json +1 -1
  209. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  210. package/.next/server/app/login/page.js.nft.json +1 -1
  211. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  212. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  213. package/.next/server/app/more/page.js +2 -2
  214. package/.next/server/app/more/page.js.nft.json +1 -1
  215. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  216. package/.next/server/app/offline/page.js.nft.json +1 -1
  217. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  218. package/.next/server/app/page.js +1 -1
  219. package/.next/server/app/page.js.nft.json +1 -1
  220. package/.next/server/app/page_client-reference-manifest.js +1 -1
  221. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  222. package/.next/server/app/repositories/page.js +1 -1
  223. package/.next/server/app/repositories/page.js.nft.json +1 -1
  224. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  225. package/.next/server/app/review/page.js +1 -1
  226. package/.next/server/app/review/page.js.nft.json +1 -1
  227. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  228. package/.next/server/app/sessions/page.js +1 -1
  229. package/.next/server/app/sessions/page.js.nft.json +1 -1
  230. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  231. package/.next/server/app/skills/[skillId]/page.js +2 -0
  232. package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -0
  233. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -0
  234. package/.next/server/app/skills/page.js +2 -0
  235. package/.next/server/app/skills/page.js.nft.json +1 -0
  236. package/.next/server/app/skills/page_client-reference-manifest.js +1 -0
  237. package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
  238. package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
  239. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  240. package/.next/server/app/worktrees/[id]/page.js +9 -9
  241. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  242. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  243. package/.next/server/app/worktrees/[id]/terminal/page.js +3 -3
  244. package/.next/server/app/worktrees/[id]/terminal/page.js.nft.json +1 -1
  245. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  246. package/.next/server/app-paths-manifest.json +31 -22
  247. package/.next/server/chunks/1117.js +1 -1
  248. package/.next/server/chunks/120.js +1 -0
  249. package/.next/server/chunks/1808.js +1 -0
  250. package/.next/server/chunks/186.js +1 -0
  251. package/.next/server/chunks/2119.js +1 -1
  252. package/.next/server/chunks/22.js +1 -0
  253. package/.next/server/chunks/2328.js +1 -0
  254. package/.next/server/chunks/2445.js +1 -1
  255. package/.next/server/chunks/3042.js +2 -0
  256. package/.next/server/chunks/3543.js +1 -1
  257. package/.next/server/chunks/3708.js +1 -0
  258. package/.next/server/chunks/3945.js +1 -1
  259. package/.next/server/chunks/5064.js +1 -0
  260. package/.next/server/chunks/5226.js +28 -0
  261. package/.next/server/chunks/5306.js +2 -0
  262. package/.next/server/chunks/5312.js +1 -0
  263. package/.next/server/chunks/5326.js +1 -0
  264. package/.next/server/chunks/5381.js +1 -1
  265. package/.next/server/chunks/5456.js +1 -0
  266. package/.next/server/chunks/5571.js +1 -1
  267. package/.next/server/chunks/5959.js +2 -2
  268. package/.next/server/chunks/6065.js +1 -0
  269. package/.next/server/chunks/6130.js +1 -0
  270. package/.next/server/chunks/6285.js +1 -1
  271. package/.next/server/chunks/646.js +6 -6
  272. package/.next/server/chunks/{9968.js → 7587.js} +1 -1
  273. package/.next/server/chunks/8584.js +1 -0
  274. package/.next/server/chunks/8681.js +1 -1
  275. package/.next/server/chunks/8807.js +950 -804
  276. package/.next/server/chunks/9123.js +1 -1
  277. package/.next/server/middleware-build-manifest.js +1 -1
  278. package/.next/server/middleware-manifest.json +5 -5
  279. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  280. package/.next/server/pages/500.html +1 -1
  281. package/.next/server/server-reference-manifest.json +1 -1
  282. package/.next/static/D-aoE4gWfuCUN0GqEPIX3/_buildManifest.js +1 -0
  283. package/.next/static/chunks/1668-7484081c45a44f89.js +1 -0
  284. package/.next/static/chunks/3418-7e47651340d940b0.js +1 -0
  285. package/.next/static/chunks/4027-0c529b322be7d4d8.js +1 -0
  286. package/.next/static/chunks/{4560-64b1461fd996127a.js → 4560-04e5aebcab96bfa1.js} +1 -1
  287. package/.next/static/chunks/6007-de36119357dcd418.js +1 -0
  288. package/.next/static/chunks/{6488-76295bf0184b101f.js → 6488-e257111ca7389d05.js} +1 -1
  289. package/.next/static/chunks/{8965-872d8de254196cec.js → 6497-dc26c6c6b0b15adf.js} +1 -1
  290. package/.next/static/chunks/790-d8e6acd26e03679c.js +1 -0
  291. package/.next/static/chunks/8361.4bf062be2d2962f4.js +1 -0
  292. package/.next/static/chunks/app/api/app/update/route-56dad0523d3c4a92.js +1 -0
  293. package/.next/static/chunks/app/api/app/update-check/route-56dad0523d3c4a92.js +1 -0
  294. package/.next/static/chunks/app/api/assistant/conversation/route-56dad0523d3c4a92.js +1 -0
  295. package/.next/static/chunks/app/api/assistant/current-output/route-56dad0523d3c4a92.js +1 -0
  296. package/.next/static/chunks/app/api/assistant/messages/route-56dad0523d3c4a92.js +1 -0
  297. package/.next/static/chunks/app/api/assistant/session/route-56dad0523d3c4a92.js +1 -0
  298. package/.next/static/chunks/app/api/assistant/start/route-56dad0523d3c4a92.js +1 -0
  299. package/.next/static/chunks/app/api/assistant/terminal/route-56dad0523d3c4a92.js +1 -0
  300. package/.next/static/chunks/app/api/assistant/tools/route-56dad0523d3c4a92.js +1 -0
  301. package/.next/static/chunks/app/api/auth/login/route-56dad0523d3c4a92.js +1 -0
  302. package/.next/static/chunks/app/api/auth/logout/route-56dad0523d3c4a92.js +1 -0
  303. package/.next/static/chunks/app/api/auth/status/route-56dad0523d3c4a92.js +1 -0
  304. package/.next/static/chunks/app/api/daily-summary/route-56dad0523d3c4a92.js +1 -0
  305. package/.next/static/chunks/app/api/daily-summary/status/route-56dad0523d3c4a92.js +1 -0
  306. package/.next/static/chunks/app/api/external-apps/[id]/health/route-56dad0523d3c4a92.js +1 -0
  307. package/.next/static/chunks/app/api/external-apps/[id]/route-56dad0523d3c4a92.js +1 -0
  308. package/.next/static/chunks/app/api/external-apps/route-56dad0523d3c4a92.js +1 -0
  309. package/.next/static/chunks/app/api/hooks/claude-done/route-56dad0523d3c4a92.js +1 -0
  310. package/.next/static/chunks/app/api/ollama/models/route-56dad0523d3c4a92.js +1 -0
  311. package/.next/static/chunks/app/api/push/subscriptions/route-56dad0523d3c4a92.js +1 -0
  312. package/.next/static/chunks/app/api/push/vapid/route-56dad0523d3c4a92.js +1 -0
  313. package/.next/static/chunks/app/api/repositories/[id]/route-56dad0523d3c4a92.js +1 -0
  314. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-56dad0523d3c4a92.js +1 -0
  315. package/.next/static/chunks/app/api/repositories/[id]/todos/route-56dad0523d3c4a92.js +1 -0
  316. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-56dad0523d3c4a92.js +1 -0
  317. package/.next/static/chunks/app/api/repositories/clone/route-56dad0523d3c4a92.js +1 -0
  318. package/.next/static/chunks/app/api/repositories/excluded/route-56dad0523d3c4a92.js +1 -0
  319. package/.next/static/chunks/app/api/repositories/restore/route-56dad0523d3c4a92.js +1 -0
  320. package/.next/static/chunks/app/api/repositories/route-56dad0523d3c4a92.js +1 -0
  321. package/.next/static/chunks/app/api/repositories/scan/route-56dad0523d3c4a92.js +1 -0
  322. package/.next/static/chunks/app/api/repositories/sync/route-56dad0523d3c4a92.js +1 -0
  323. package/.next/static/chunks/app/api/sidebar/group-order/route-56dad0523d3c4a92.js +1 -0
  324. package/.next/static/chunks/app/api/skills/[id]/route-56dad0523d3c4a92.js +1 -0
  325. package/.next/static/chunks/app/api/skills/route-56dad0523d3c4a92.js +1 -0
  326. package/.next/static/chunks/app/api/slash-commands/route-56dad0523d3c4a92.js +1 -0
  327. package/.next/static/chunks/app/api/templates/[id]/route-56dad0523d3c4a92.js +1 -0
  328. package/.next/static/chunks/app/api/templates/route-56dad0523d3c4a92.js +1 -0
  329. package/.next/static/chunks/app/api/todos/route-56dad0523d3c4a92.js +1 -0
  330. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-56dad0523d3c4a92.js +1 -0
  331. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-56dad0523d3c4a92.js +1 -0
  332. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-56dad0523d3c4a92.js +1 -0
  333. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-56dad0523d3c4a92.js +1 -0
  334. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-56dad0523d3c4a92.js +1 -0
  335. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-56dad0523d3c4a92.js +1 -0
  336. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-56dad0523d3c4a92.js +1 -0
  337. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-56dad0523d3c4a92.js +1 -0
  338. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-56dad0523d3c4a92.js +1 -0
  339. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-56dad0523d3c4a92.js +1 -0
  340. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-56dad0523d3c4a92.js +1 -0
  341. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-56dad0523d3c4a92.js +1 -0
  342. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-56dad0523d3c4a92.js +1 -0
  343. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-56dad0523d3c4a92.js +1 -0
  344. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-56dad0523d3c4a92.js +1 -0
  345. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-56dad0523d3c4a92.js +1 -0
  346. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-56dad0523d3c4a92.js +1 -0
  347. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-56dad0523d3c4a92.js +1 -0
  348. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-56dad0523d3c4a92.js +1 -0
  349. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-56dad0523d3c4a92.js +1 -0
  350. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-56dad0523d3c4a92.js +1 -0
  351. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-56dad0523d3c4a92.js +1 -0
  352. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-56dad0523d3c4a92.js +1 -0
  353. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-56dad0523d3c4a92.js +1 -0
  354. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-56dad0523d3c4a92.js +1 -0
  355. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-56dad0523d3c4a92.js +1 -0
  356. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-56dad0523d3c4a92.js +1 -0
  357. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-56dad0523d3c4a92.js +1 -0
  358. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-56dad0523d3c4a92.js +1 -0
  359. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-56dad0523d3c4a92.js +1 -0
  360. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-56dad0523d3c4a92.js +1 -0
  361. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-56dad0523d3c4a92.js +1 -0
  362. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-56dad0523d3c4a92.js +1 -0
  363. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-56dad0523d3c4a92.js +1 -0
  364. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-56dad0523d3c4a92.js +1 -0
  365. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-56dad0523d3c4a92.js +1 -0
  366. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-56dad0523d3c4a92.js +1 -0
  367. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-56dad0523d3c4a92.js +1 -0
  368. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-56dad0523d3c4a92.js +1 -0
  369. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-56dad0523d3c4a92.js +1 -0
  370. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-56dad0523d3c4a92.js +1 -0
  371. package/.next/static/chunks/app/api/worktrees/[id]/route-56dad0523d3c4a92.js +1 -0
  372. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-56dad0523d3c4a92.js +1 -0
  373. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-56dad0523d3c4a92.js +1 -0
  374. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-56dad0523d3c4a92.js +1 -0
  375. package/.next/static/chunks/app/api/worktrees/[id]/search/route-56dad0523d3c4a92.js +1 -0
  376. package/.next/static/chunks/app/api/worktrees/[id]/send/route-56dad0523d3c4a92.js +1 -0
  377. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-56dad0523d3c4a92.js +1 -0
  378. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-56dad0523d3c4a92.js +1 -0
  379. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-56dad0523d3c4a92.js +1 -0
  380. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-56dad0523d3c4a92.js +1 -0
  381. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-56dad0523d3c4a92.js +1 -0
  382. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-56dad0523d3c4a92.js +1 -0
  383. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-56dad0523d3c4a92.js +1 -0
  384. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-56dad0523d3c4a92.js +1 -0
  385. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-56dad0523d3c4a92.js +1 -0
  386. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-56dad0523d3c4a92.js +1 -0
  387. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-56dad0523d3c4a92.js +1 -0
  388. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-56dad0523d3c4a92.js +1 -0
  389. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-56dad0523d3c4a92.js +1 -0
  390. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-56dad0523d3c4a92.js +1 -0
  391. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-56dad0523d3c4a92.js +1 -0
  392. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-56dad0523d3c4a92.js +1 -0
  393. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-56dad0523d3c4a92.js +1 -0
  394. package/.next/static/chunks/app/api/worktrees/route-56dad0523d3c4a92.js +1 -0
  395. package/.next/static/chunks/app/chat/{page-9ed2ffd98eb4ae18.js → page-9cf4ba62e21d9074.js} +1 -1
  396. package/.next/static/chunks/app/manifest.webmanifest/route-56dad0523d3c4a92.js +1 -0
  397. package/.next/static/chunks/app/more/{page-a496425bba427b48.js → page-082d4ae496f9a36e.js} +1 -1
  398. package/.next/static/chunks/app/{page-15bfd76bcf65842d.js → page-af457ca5876ed616.js} +1 -1
  399. package/.next/static/chunks/app/proxy/[...path]/route-56dad0523d3c4a92.js +1 -0
  400. package/.next/static/chunks/app/repositories/{page-d214522ab8792ce7.js → page-75f0d70452c6b6c0.js} +1 -1
  401. package/.next/static/chunks/app/review/{page-1dadf0b5d7129598.js → page-f431d630097c2e85.js} +1 -1
  402. package/.next/static/chunks/app/sessions/{page-96f007d986c5f327.js → page-20f07a99db64d2ca.js} +1 -1
  403. package/.next/static/chunks/app/skills/[skillId]/page-68ed5e9186efe56d.js +1 -0
  404. package/.next/static/chunks/app/skills/page-46242c428ee8bccf.js +1 -0
  405. package/.next/static/chunks/app/worktrees/[id]/page-bf811e793052c917.js +1 -0
  406. package/.next/static/chunks/app/worktrees/[id]/terminal/page-a75fe180a7233b2b.js +1 -0
  407. package/.next/static/chunks/webpack-0f9275e279c058eb.js +1 -0
  408. package/.next/static/css/b4bdb1f3457fe9a7.css +1 -0
  409. package/.next/trace +11 -10
  410. package/.next/types/app/api/skills/[id]/route.ts +347 -0
  411. package/.next/types/app/api/skills/route.ts +347 -0
  412. package/.next/types/app/api/worktrees/[id]/skills/[skillId]/install/route.ts +347 -0
  413. package/.next/types/app/api/worktrees/[id]/skills/[skillId]/plan/route.ts +347 -0
  414. package/.next/types/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.ts +347 -0
  415. package/.next/types/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.ts +347 -0
  416. package/.next/types/app/api/worktrees/[id]/skills/route.ts +347 -0
  417. package/.next/types/app/skills/[skillId]/page.ts +84 -0
  418. package/.next/types/app/skills/page.ts +84 -0
  419. package/.next/types/routes.d.ts +11 -2
  420. package/.next/types/validator.ts +81 -0
  421. package/dist/cli/commands/skill-format.d.ts +28 -0
  422. package/dist/cli/commands/skill-format.d.ts.map +1 -0
  423. package/dist/cli/commands/skill-format.js +163 -0
  424. package/dist/cli/commands/skill-guards.d.ts +53 -0
  425. package/dist/cli/commands/skill-guards.d.ts.map +1 -0
  426. package/dist/cli/commands/skill-guards.js +188 -0
  427. package/dist/cli/commands/skill.d.ts +24 -0
  428. package/dist/cli/commands/skill.d.ts.map +1 -0
  429. package/dist/cli/commands/skill.js +365 -0
  430. package/dist/cli/docs/agent-operations.d.ts +1 -1
  431. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  432. package/dist/cli/docs/agent-operations.js +36 -0
  433. package/dist/cli/program.d.ts.map +1 -1
  434. package/dist/cli/program.js +11 -0
  435. package/dist/cli/types/api-responses.d.ts +215 -0
  436. package/dist/cli/types/api-responses.d.ts.map +1 -1
  437. package/dist/cli/types/index.d.ts +60 -0
  438. package/dist/cli/types/index.d.ts.map +1 -1
  439. package/dist/cli/types/index.js +23 -1
  440. package/dist/cli/utils/api-client.d.ts +19 -1
  441. package/dist/cli/utils/api-client.d.ts.map +1 -1
  442. package/dist/cli/utils/api-client.js +41 -4
  443. package/dist/server/server.js +57 -0
  444. package/dist/server/src/config/activity-bar-config.js +2 -0
  445. package/dist/server/src/config/git-status-config.js +83 -0
  446. package/dist/server/src/config/skill-security-config.js +139 -0
  447. package/dist/server/src/lib/db/migrations/index.js +8 -0
  448. package/dist/server/src/lib/db/migrations/runner.js +1 -1
  449. package/dist/server/src/lib/db/migrations/v44-skill-operations.js +81 -0
  450. package/dist/server/src/lib/db/migrations/v45-skill-installations.js +59 -0
  451. package/dist/server/src/lib/db/migrations/v46-skill-installations-cascade.js +107 -0
  452. package/dist/server/src/lib/db/migrations/v47-skill-installations-roots.js +70 -0
  453. package/dist/server/src/lib/db/worktree-db.js +9 -4
  454. package/dist/server/src/lib/git/git-errors.js +336 -0
  455. package/dist/server/src/lib/git/git-exec.js +285 -0
  456. package/dist/server/src/lib/skills/compatibility.js +194 -0
  457. package/dist/server/src/lib/skills/constants.js +252 -0
  458. package/dist/server/src/lib/skills/errors.js +82 -0
  459. package/dist/server/src/lib/skills/index.js +91 -0
  460. package/dist/server/src/lib/skills/install-apply.js +670 -0
  461. package/dist/server/src/lib/skills/install-plan.js +582 -0
  462. package/dist/server/src/lib/skills/installed-state.js +127 -0
  463. package/dist/server/src/lib/skills/integrity.js +225 -0
  464. package/dist/server/src/lib/skills/json-schema.js +365 -0
  465. package/dist/server/src/lib/skills/operation-audit.js +120 -0
  466. package/dist/server/src/lib/skills/operation-journal.js +286 -0
  467. package/dist/server/src/lib/skills/operation-lock.js +339 -0
  468. package/dist/server/src/lib/skills/operation-reconciler.js +107 -0
  469. package/dist/server/src/lib/skills/operation-store.js +153 -0
  470. package/dist/server/src/lib/skills/package-reader.js +495 -0
  471. package/dist/server/src/lib/skills/package-validator.js +451 -0
  472. package/dist/server/src/lib/skills/preview-diff.js +627 -0
  473. package/dist/server/src/lib/skills/safe-yaml.js +593 -0
  474. package/dist/server/src/lib/skills/schema.js +1248 -0
  475. package/dist/server/src/lib/skills/semver.js +193 -0
  476. package/dist/server/src/lib/skills/snapshot-store.js +334 -0
  477. package/dist/server/src/lib/skills/startup-reconcile.js +138 -0
  478. package/dist/server/src/lib/skills/uninstall-apply.js +495 -0
  479. package/dist/server/src/lib/skills/uninstall-plan.js +479 -0
  480. package/dist/server/src/types/skills.js +17 -0
  481. package/package.json +1 -1
  482. package/.next/server/chunks/129.js +0 -1
  483. package/.next/server/chunks/2478.js +0 -1
  484. package/.next/server/chunks/9886.js +0 -1
  485. package/.next/static/0_lnKsT0DH-MnHhnV5n-l/_buildManifest.js +0 -1
  486. package/.next/static/chunks/3165-87bf884f7f3d15cf.js +0 -1
  487. package/.next/static/chunks/6416.6756b7ad06dd96f7.js +0 -1
  488. package/.next/static/chunks/8676.57260a06f6554e7e.js +0 -1
  489. package/.next/static/chunks/app/api/app/update/route-7536041a7a89616d.js +0 -1
  490. package/.next/static/chunks/app/api/app/update-check/route-7536041a7a89616d.js +0 -1
  491. package/.next/static/chunks/app/api/assistant/conversation/route-7536041a7a89616d.js +0 -1
  492. package/.next/static/chunks/app/api/assistant/current-output/route-7536041a7a89616d.js +0 -1
  493. package/.next/static/chunks/app/api/assistant/messages/route-7536041a7a89616d.js +0 -1
  494. package/.next/static/chunks/app/api/assistant/session/route-7536041a7a89616d.js +0 -1
  495. package/.next/static/chunks/app/api/assistant/start/route-7536041a7a89616d.js +0 -1
  496. package/.next/static/chunks/app/api/assistant/terminal/route-7536041a7a89616d.js +0 -1
  497. package/.next/static/chunks/app/api/assistant/tools/route-7536041a7a89616d.js +0 -1
  498. package/.next/static/chunks/app/api/auth/login/route-7536041a7a89616d.js +0 -1
  499. package/.next/static/chunks/app/api/auth/logout/route-7536041a7a89616d.js +0 -1
  500. package/.next/static/chunks/app/api/auth/status/route-7536041a7a89616d.js +0 -1
  501. package/.next/static/chunks/app/api/daily-summary/route-7536041a7a89616d.js +0 -1
  502. package/.next/static/chunks/app/api/daily-summary/status/route-7536041a7a89616d.js +0 -1
  503. package/.next/static/chunks/app/api/external-apps/[id]/health/route-7536041a7a89616d.js +0 -1
  504. package/.next/static/chunks/app/api/external-apps/[id]/route-7536041a7a89616d.js +0 -1
  505. package/.next/static/chunks/app/api/external-apps/route-7536041a7a89616d.js +0 -1
  506. package/.next/static/chunks/app/api/hooks/claude-done/route-7536041a7a89616d.js +0 -1
  507. package/.next/static/chunks/app/api/ollama/models/route-7536041a7a89616d.js +0 -1
  508. package/.next/static/chunks/app/api/push/subscriptions/route-7536041a7a89616d.js +0 -1
  509. package/.next/static/chunks/app/api/push/vapid/route-7536041a7a89616d.js +0 -1
  510. package/.next/static/chunks/app/api/repositories/[id]/route-7536041a7a89616d.js +0 -1
  511. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-7536041a7a89616d.js +0 -1
  512. package/.next/static/chunks/app/api/repositories/[id]/todos/route-7536041a7a89616d.js +0 -1
  513. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-7536041a7a89616d.js +0 -1
  514. package/.next/static/chunks/app/api/repositories/clone/route-7536041a7a89616d.js +0 -1
  515. package/.next/static/chunks/app/api/repositories/excluded/route-7536041a7a89616d.js +0 -1
  516. package/.next/static/chunks/app/api/repositories/restore/route-7536041a7a89616d.js +0 -1
  517. package/.next/static/chunks/app/api/repositories/route-7536041a7a89616d.js +0 -1
  518. package/.next/static/chunks/app/api/repositories/scan/route-7536041a7a89616d.js +0 -1
  519. package/.next/static/chunks/app/api/repositories/sync/route-7536041a7a89616d.js +0 -1
  520. package/.next/static/chunks/app/api/sidebar/group-order/route-7536041a7a89616d.js +0 -1
  521. package/.next/static/chunks/app/api/slash-commands/route-7536041a7a89616d.js +0 -1
  522. package/.next/static/chunks/app/api/templates/[id]/route-7536041a7a89616d.js +0 -1
  523. package/.next/static/chunks/app/api/templates/route-7536041a7a89616d.js +0 -1
  524. package/.next/static/chunks/app/api/todos/route-7536041a7a89616d.js +0 -1
  525. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-7536041a7a89616d.js +0 -1
  526. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-7536041a7a89616d.js +0 -1
  527. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-7536041a7a89616d.js +0 -1
  528. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-7536041a7a89616d.js +0 -1
  529. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-7536041a7a89616d.js +0 -1
  530. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-7536041a7a89616d.js +0 -1
  531. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-7536041a7a89616d.js +0 -1
  532. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-7536041a7a89616d.js +0 -1
  533. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-7536041a7a89616d.js +0 -1
  534. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-7536041a7a89616d.js +0 -1
  535. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-7536041a7a89616d.js +0 -1
  536. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-7536041a7a89616d.js +0 -1
  537. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-7536041a7a89616d.js +0 -1
  538. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-7536041a7a89616d.js +0 -1
  539. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-7536041a7a89616d.js +0 -1
  540. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-7536041a7a89616d.js +0 -1
  541. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-7536041a7a89616d.js +0 -1
  542. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-7536041a7a89616d.js +0 -1
  543. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-7536041a7a89616d.js +0 -1
  544. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-7536041a7a89616d.js +0 -1
  545. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-7536041a7a89616d.js +0 -1
  546. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-7536041a7a89616d.js +0 -1
  547. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-7536041a7a89616d.js +0 -1
  548. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-7536041a7a89616d.js +0 -1
  549. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-7536041a7a89616d.js +0 -1
  550. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-7536041a7a89616d.js +0 -1
  551. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-7536041a7a89616d.js +0 -1
  552. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-7536041a7a89616d.js +0 -1
  553. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-7536041a7a89616d.js +0 -1
  554. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-7536041a7a89616d.js +0 -1
  555. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-7536041a7a89616d.js +0 -1
  556. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-7536041a7a89616d.js +0 -1
  557. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-7536041a7a89616d.js +0 -1
  558. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-7536041a7a89616d.js +0 -1
  559. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-7536041a7a89616d.js +0 -1
  560. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-7536041a7a89616d.js +0 -1
  561. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-7536041a7a89616d.js +0 -1
  562. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-7536041a7a89616d.js +0 -1
  563. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-7536041a7a89616d.js +0 -1
  564. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-7536041a7a89616d.js +0 -1
  565. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-7536041a7a89616d.js +0 -1
  566. package/.next/static/chunks/app/api/worktrees/[id]/route-7536041a7a89616d.js +0 -1
  567. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-7536041a7a89616d.js +0 -1
  568. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-7536041a7a89616d.js +0 -1
  569. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-7536041a7a89616d.js +0 -1
  570. package/.next/static/chunks/app/api/worktrees/[id]/search/route-7536041a7a89616d.js +0 -1
  571. package/.next/static/chunks/app/api/worktrees/[id]/send/route-7536041a7a89616d.js +0 -1
  572. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-7536041a7a89616d.js +0 -1
  573. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-7536041a7a89616d.js +0 -1
  574. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-7536041a7a89616d.js +0 -1
  575. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-7536041a7a89616d.js +0 -1
  576. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-7536041a7a89616d.js +0 -1
  577. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-7536041a7a89616d.js +0 -1
  578. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-7536041a7a89616d.js +0 -1
  579. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-7536041a7a89616d.js +0 -1
  580. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-7536041a7a89616d.js +0 -1
  581. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-7536041a7a89616d.js +0 -1
  582. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-7536041a7a89616d.js +0 -1
  583. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-7536041a7a89616d.js +0 -1
  584. package/.next/static/chunks/app/api/worktrees/route-7536041a7a89616d.js +0 -1
  585. package/.next/static/chunks/app/manifest.webmanifest/route-7536041a7a89616d.js +0 -1
  586. package/.next/static/chunks/app/proxy/[...path]/route-7536041a7a89616d.js +0 -1
  587. package/.next/static/chunks/app/worktrees/[id]/page-9a4ce51e697baac6.js +0 -1
  588. package/.next/static/chunks/app/worktrees/[id]/terminal/page-ed4590b024edd8d6.js +0 -1
  589. package/.next/static/chunks/webpack-2e3739a831868daa.js +0 -1
  590. package/.next/static/css/d7e2e8d1b8d69d36.css +0 -1
  591. /package/.next/static/{0_lnKsT0DH-MnHhnV5n-l → D-aoE4gWfuCUN0GqEPIX3}/_ssgManifest.js +0 -0
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ /**
3
+ * Installed-Skill index (Issue #1235)
4
+ *
5
+ * A lookup table over what the receipts already say. The receipt inside
6
+ * `.agents/skills/<id>/` is the truth; this table exists so "what is installed
7
+ * in this worktree" does not require walking every registered worktree.
8
+ *
9
+ * That ordering is the whole point. The row is written *after* the atomic
10
+ * rename, so a crash in between leaves a worktree that is installed and a table
11
+ * that has not caught up — which #1234 reconciliation converges forward from the
12
+ * receipt. Writing the row first would create the opposite and unrecoverable
13
+ * state: a table claiming an install that does not exist.
14
+ *
15
+ * {@link upsertSkillInstallation} is therefore idempotent by construction, so
16
+ * reconciliation may replay it any number of times.
17
+ *
18
+ * @module lib/skills/installed-state
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.upsertSkillInstallation = upsertSkillInstallation;
22
+ exports.getSkillInstallation = getSkillInstallation;
23
+ exports.listSkillInstallations = listSkillInstallations;
24
+ exports.deleteSkillInstallation = deleteSkillInstallation;
25
+ const crypto_1 = require("crypto");
26
+ const SELECT_COLUMNS = `
27
+ id, worktree_id, skill_id, version, install_root, install_roots, receipt_sha256,
28
+ source_repository, source_ref, source_commit, artifact_sha256,
29
+ effective_risk, operation_id, installed_at, updated_at
30
+ `;
31
+ /** Parse the JSON `install_roots` column, falling back to the single primary root. */
32
+ function parseInstallRoots(raw, installRoot) {
33
+ if (raw === null)
34
+ return [installRoot];
35
+ try {
36
+ const parsed = JSON.parse(raw);
37
+ if (Array.isArray(parsed) &&
38
+ parsed.length > 0 &&
39
+ parsed.every((item) => typeof item === 'string')) {
40
+ return parsed;
41
+ }
42
+ }
43
+ catch {
44
+ // Fall through to the single-root reading below.
45
+ }
46
+ return [installRoot];
47
+ }
48
+ function mapRow(row) {
49
+ return {
50
+ id: row.id,
51
+ worktreeId: row.worktree_id,
52
+ skillId: row.skill_id,
53
+ version: row.version,
54
+ installRoot: row.install_root,
55
+ installRoots: parseInstallRoots(row.install_roots, row.install_root),
56
+ receiptSha256: row.receipt_sha256,
57
+ sourceRepository: row.source_repository,
58
+ sourceRef: row.source_ref,
59
+ sourceCommit: row.source_commit,
60
+ artifactSha256: row.artifact_sha256,
61
+ effectiveRisk: row.effective_risk,
62
+ operationId: row.operation_id,
63
+ installedAt: row.installed_at,
64
+ updatedAt: row.updated_at,
65
+ };
66
+ }
67
+ /**
68
+ * Record an install, replacing any earlier row for the same (worktree, skill).
69
+ *
70
+ * Idempotent: replaying the same operation rewrites the same values, so
71
+ * reconciliation can call this without first having to know whether an earlier
72
+ * attempt got this far. `installed_at` is preserved across replays so the
73
+ * original commit time is not rewritten by a later convergence.
74
+ */
75
+ function upsertSkillInstallation(db, input) {
76
+ const { receipt } = input;
77
+ // Primary first; a pre-#1460 receipt with no install_roots is read as its
78
+ // single install_root, so the column is always a non-empty JSON array.
79
+ const installRoots = receipt.install_roots && receipt.install_roots.length > 0
80
+ ? receipt.install_roots
81
+ : [receipt.install_root];
82
+ db.prepare(`INSERT INTO skill_installations (
83
+ id, worktree_id, skill_id, version, install_root, install_roots, receipt_sha256,
84
+ source_repository, source_ref, source_commit, artifact_sha256,
85
+ effective_risk, operation_id, installed_at, updated_at
86
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
87
+ ON CONFLICT (worktree_id, skill_id) DO UPDATE SET
88
+ version = excluded.version,
89
+ install_root = excluded.install_root,
90
+ install_roots = excluded.install_roots,
91
+ receipt_sha256 = excluded.receipt_sha256,
92
+ source_repository = excluded.source_repository,
93
+ source_ref = excluded.source_ref,
94
+ source_commit = excluded.source_commit,
95
+ artifact_sha256 = excluded.artifact_sha256,
96
+ effective_risk = excluded.effective_risk,
97
+ operation_id = excluded.operation_id,
98
+ updated_at = excluded.updated_at`).run((0, crypto_1.randomUUID)(), input.worktreeId, receipt.skill_id, receipt.version, receipt.install_root, JSON.stringify(installRoots), input.receiptSha256, receipt.source.repository, receipt.source.ref, receipt.source.commit, receipt.artifact.sha256, receipt.effective_risk, input.operationId, input.installedAt, input.installedAt);
99
+ const record = getSkillInstallation(db, input.worktreeId, receipt.skill_id);
100
+ if (record === null) {
101
+ throw new Error('Skill installation row disappeared immediately after being written');
102
+ }
103
+ return record;
104
+ }
105
+ /** The indexed install for one Skill in one worktree, or null. */
106
+ function getSkillInstallation(db, worktreeId, skillId) {
107
+ const row = db
108
+ .prepare(`SELECT ${SELECT_COLUMNS} FROM skill_installations
109
+ WHERE worktree_id = ? AND skill_id = ?`)
110
+ .get(worktreeId, skillId);
111
+ return row ? mapRow(row) : null;
112
+ }
113
+ /** Every indexed install in one worktree, by Skill ID. */
114
+ function listSkillInstallations(db, worktreeId) {
115
+ const rows = db
116
+ .prepare(`SELECT ${SELECT_COLUMNS} FROM skill_installations
117
+ WHERE worktree_id = ? ORDER BY skill_id ASC`)
118
+ .all(worktreeId);
119
+ return rows.map(mapRow);
120
+ }
121
+ /** Drop an index row. Returns whether a row was removed. */
122
+ function deleteSkillInstallation(db, worktreeId, skillId) {
123
+ const result = db
124
+ .prepare('DELETE FROM skill_installations WHERE worktree_id = ? AND skill_id = ?')
125
+ .run(worktreeId, skillId);
126
+ return result.changes > 0;
127
+ }
@@ -0,0 +1,225 @@
1
+ "use strict";
2
+ /**
3
+ * Integrity verification and failure vocabulary for Skill fetching (Issue #1229)
4
+ *
5
+ * Two responsibilities that belong together: deciding whether a byte stream is
6
+ * the artifact the Catalog promised, and naming the ways that decision can fail.
7
+ *
8
+ * The error type is deliberately separate from `SkillContractError` (#1228):
9
+ * that one describes a *document* that failed validation and is addressed by a
10
+ * JSON pointer. These describe a *transfer or storage* failure and carry a
11
+ * retryability hint instead, because that is the question the UI has to answer
12
+ * ("can I press retry?", UX-09). Messages are derived from the code alone, so
13
+ * no token, signed query or machine-absolute path can leak through them.
14
+ *
15
+ * @module lib/skills/integrity
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.SkillFetchError = exports.SkillFetchErrorCode = void 0;
19
+ exports.isSkillFetchError = isSkillFetchError;
20
+ exports.redactUrlForLog = redactUrlForLog;
21
+ exports.createSha256Accumulator = createSha256Accumulator;
22
+ exports.computeSha256Hex = computeSha256Hex;
23
+ exports.digestMatches = digestMatches;
24
+ exports.assertArtifactBinding = assertArtifactBinding;
25
+ exports.verifyArtifactIntegrity = verifyArtifactIntegrity;
26
+ const crypto_1 = require("crypto");
27
+ const skills_1 = require("../../lib/skills");
28
+ // =============================================================================
29
+ // Error vocabulary
30
+ // =============================================================================
31
+ /** Stable, client-safe reason codes for fetch and snapshot failures. */
32
+ exports.SkillFetchErrorCode = {
33
+ /** URL is syntactically unusable (not absolute, not HTTPS, carries userinfo, …). */
34
+ URL_INVALID: 'SKILL_FETCH_URL_INVALID',
35
+ /** URL points outside the official allowlist for its document kind. */
36
+ SOURCE_NOT_ALLOWED: 'SKILL_FETCH_SOURCE_NOT_ALLOWED',
37
+ /** A redirect response was malformed or had no usable `Location`. */
38
+ REDIRECT_INVALID: 'SKILL_FETCH_REDIRECT_INVALID',
39
+ /** More redirect hops than the policy permits. */
40
+ REDIRECT_LIMIT_EXCEEDED: 'SKILL_FETCH_REDIRECT_LIMIT_EXCEEDED',
41
+ /** Server answered with a non-success status. */
42
+ HTTP_STATUS: 'SKILL_FETCH_HTTP_STATUS',
43
+ /** Response media type is not the one this document kind requires. */
44
+ CONTENT_TYPE_INVALID: 'SKILL_FETCH_CONTENT_TYPE_INVALID',
45
+ /** Response had no readable body. */
46
+ BODY_MISSING: 'SKILL_FETCH_BODY_MISSING',
47
+ /** Declared or measured size exceeded the policy limit. */
48
+ SIZE_LIMIT_EXCEEDED: 'SKILL_FETCH_SIZE_LIMIT_EXCEEDED',
49
+ /** Transferred size did not match the size the Catalog declared. */
50
+ SIZE_MISMATCH: 'SKILL_FETCH_SIZE_MISMATCH',
51
+ /** SHA-256 over the received bytes did not match the Catalog digest. */
52
+ CHECKSUM_MISMATCH: 'SKILL_FETCH_CHECKSUM_MISMATCH',
53
+ /** Catalog version is not bound to an immutable commit and exact version. */
54
+ BINDING_INVALID: 'SKILL_FETCH_BINDING_INVALID',
55
+ /** Request exceeded the header or total timeout. */
56
+ TIMEOUT: 'SKILL_FETCH_TIMEOUT',
57
+ /** Caller aborted the operation. */
58
+ ABORTED: 'SKILL_FETCH_ABORTED',
59
+ /** Transport-level failure (DNS, TLS, connection reset, …). */
60
+ NETWORK: 'SKILL_FETCH_NETWORK',
61
+ /** Snapshot ID is unknown, already released or malformed. */
62
+ SNAPSHOT_NOT_FOUND: 'SKILL_SNAPSHOT_NOT_FOUND',
63
+ /** Snapshot exists but its TTL has elapsed. */
64
+ SNAPSHOT_EXPIRED: 'SKILL_SNAPSHOT_EXPIRED',
65
+ /** Storing the snapshot would exceed the disk or count quota. */
66
+ QUOTA_EXCEEDED: 'SKILL_SNAPSHOT_QUOTA_EXCEEDED',
67
+ /** Snapshot store could not read or write the service-owned data root. */
68
+ STORE_IO: 'SKILL_SNAPSHOT_STORE_IO',
69
+ /** Snapshot store was used before initialization. */
70
+ STORE_UNINITIALIZED: 'SKILL_SNAPSHOT_STORE_UNINITIALIZED',
71
+ };
72
+ /**
73
+ * Codes worth retrying without user intervention.
74
+ *
75
+ * A checksum mismatch or a disallowed source is *not* here on purpose: retrying
76
+ * either one would just re-download bytes we already decided not to trust.
77
+ */
78
+ const RETRYABLE_CODES = new Set([
79
+ exports.SkillFetchErrorCode.TIMEOUT,
80
+ exports.SkillFetchErrorCode.NETWORK,
81
+ exports.SkillFetchErrorCode.HTTP_STATUS,
82
+ exports.SkillFetchErrorCode.STORE_IO,
83
+ ]);
84
+ /** Human-readable text per code. Contains no interpolated runtime value. */
85
+ const MESSAGES = {
86
+ [exports.SkillFetchErrorCode.URL_INVALID]: 'Skill source URL is not a usable HTTPS URL',
87
+ [exports.SkillFetchErrorCode.SOURCE_NOT_ALLOWED]: 'Skill source is not on the official allowlist',
88
+ [exports.SkillFetchErrorCode.REDIRECT_INVALID]: 'Skill source redirect was malformed',
89
+ [exports.SkillFetchErrorCode.REDIRECT_LIMIT_EXCEEDED]: 'Skill source exceeded the redirect limit',
90
+ [exports.SkillFetchErrorCode.HTTP_STATUS]: 'Skill source responded with an error status',
91
+ [exports.SkillFetchErrorCode.CONTENT_TYPE_INVALID]: 'Skill source returned an unexpected media type',
92
+ [exports.SkillFetchErrorCode.BODY_MISSING]: 'Skill source response had no body',
93
+ [exports.SkillFetchErrorCode.SIZE_LIMIT_EXCEEDED]: 'Skill source response exceeded the size limit',
94
+ [exports.SkillFetchErrorCode.SIZE_MISMATCH]: 'Skill artifact size did not match the catalog',
95
+ [exports.SkillFetchErrorCode.CHECKSUM_MISMATCH]: 'Skill artifact checksum did not match the catalog',
96
+ [exports.SkillFetchErrorCode.BINDING_INVALID]: 'Skill catalog version is not bound to an immutable source',
97
+ [exports.SkillFetchErrorCode.TIMEOUT]: 'Skill source request timed out',
98
+ [exports.SkillFetchErrorCode.ABORTED]: 'Skill source request was aborted',
99
+ [exports.SkillFetchErrorCode.NETWORK]: 'Skill source could not be reached',
100
+ [exports.SkillFetchErrorCode.SNAPSHOT_NOT_FOUND]: 'Skill snapshot is unknown or already released',
101
+ [exports.SkillFetchErrorCode.SNAPSHOT_EXPIRED]: 'Skill snapshot has expired',
102
+ [exports.SkillFetchErrorCode.QUOTA_EXCEEDED]: 'Skill snapshot store quota exceeded',
103
+ [exports.SkillFetchErrorCode.STORE_IO]: 'Skill snapshot store could not be accessed',
104
+ [exports.SkillFetchErrorCode.STORE_UNINITIALIZED]: 'Skill snapshot store is not initialized',
105
+ };
106
+ /** A fetch or snapshot failure, safe to surface to API clients and logs. */
107
+ class SkillFetchError extends Error {
108
+ code;
109
+ /** Whether a plain retry could plausibly succeed. */
110
+ retryable;
111
+ detail;
112
+ constructor(code, detail) {
113
+ super(MESSAGES[code]);
114
+ this.name = 'SkillFetchError';
115
+ this.code = code;
116
+ this.retryable = RETRYABLE_CODES.has(code);
117
+ if (detail)
118
+ this.detail = detail;
119
+ }
120
+ }
121
+ exports.SkillFetchError = SkillFetchError;
122
+ /** Narrow an unknown thrown value to a {@link SkillFetchError}. */
123
+ function isSkillFetchError(value) {
124
+ return value instanceof SkillFetchError;
125
+ }
126
+ // =============================================================================
127
+ // Redaction
128
+ // =============================================================================
129
+ /**
130
+ * Reduce a URL to its origin for logging.
131
+ *
132
+ * Release asset URLs carry signed query parameters that are credentials in
133
+ * everything but name, and the path can identify a private repository. Only the
134
+ * origin is ever safe to record.
135
+ */
136
+ function redactUrlForLog(rawUrl) {
137
+ try {
138
+ return new URL(rawUrl).origin;
139
+ }
140
+ catch {
141
+ return '<invalid-url>';
142
+ }
143
+ }
144
+ /** Create an incremental SHA-256 accumulator. */
145
+ function createSha256Accumulator() {
146
+ const hash = (0, crypto_1.createHash)('sha256');
147
+ return {
148
+ update(chunk) {
149
+ hash.update(chunk);
150
+ },
151
+ hex() {
152
+ return hash.digest('hex');
153
+ },
154
+ };
155
+ }
156
+ /** Lowercase hex SHA-256 of a complete buffer. */
157
+ function computeSha256Hex(bytes) {
158
+ return (0, crypto_1.createHash)('sha256').update(bytes).digest('hex');
159
+ }
160
+ /**
161
+ * Compare two lowercase hex SHA-256 digests without leaking timing.
162
+ *
163
+ * Malformed input is a mismatch rather than a throw, so no caller can turn a
164
+ * bad digest into an accepted artifact by catching the wrong exception.
165
+ */
166
+ function digestMatches(expected, actual) {
167
+ if (!skills_1.SHA256_HEX_PATTERN.test(expected) || !skills_1.SHA256_HEX_PATTERN.test(actual))
168
+ return false;
169
+ return (0, crypto_1.timingSafeEqual)(Buffer.from(expected, 'hex'), Buffer.from(actual, 'hex'));
170
+ }
171
+ // =============================================================================
172
+ // Catalog binding
173
+ // =============================================================================
174
+ /**
175
+ * Assert that a Catalog version identifies one immutable artifact.
176
+ *
177
+ * `validateSkillCatalog` (#1228) already proves the document is well-formed.
178
+ * This is the separate question of whether the entry pins its bytes: an exact
179
+ * SemVer, a resolved 40-hex commit, the conventional asset name, and the one
180
+ * artifact format and media type this build accepts.
181
+ *
182
+ * @throws SkillFetchError with `BINDING_INVALID`
183
+ */
184
+ function assertArtifactBinding(skillId, version) {
185
+ const fail = (field) => {
186
+ throw new SkillFetchError(exports.SkillFetchErrorCode.BINDING_INVALID, { field });
187
+ };
188
+ if (!(0, skills_1.isValidSemVer)(version.version))
189
+ fail('version');
190
+ if (!skills_1.GIT_COMMIT_SHA_PATTERN.test(version.source.commit))
191
+ fail('source.commit');
192
+ if (version.artifact.asset_name !== (0, skills_1.buildSkillAssetName)(skillId, version.version)) {
193
+ fail('artifact.asset_name');
194
+ }
195
+ if (version.artifact.format !== skills_1.SKILL_ARTIFACT_FORMAT)
196
+ fail('artifact.format');
197
+ if (version.artifact.content_type !== skills_1.SKILL_ARTIFACT_CONTENT_TYPE)
198
+ fail('artifact.content_type');
199
+ if (!skills_1.SHA256_HEX_PATTERN.test(version.artifact.sha256))
200
+ fail('artifact.sha256');
201
+ if (!Number.isSafeInteger(version.artifact.size) ||
202
+ version.artifact.size <= 0 ||
203
+ version.artifact.size > skills_1.SKILL_ARTIFACT_MAX_SIZE) {
204
+ fail('artifact.size');
205
+ }
206
+ }
207
+ /**
208
+ * Verify transferred bytes against the Catalog record.
209
+ *
210
+ * Size is checked first so a truncated transfer reports the useful reason
211
+ * rather than the digest mismatch it also causes.
212
+ *
213
+ * @throws SkillFetchError with `SIZE_MISMATCH` or `CHECKSUM_MISMATCH`
214
+ */
215
+ function verifyArtifactIntegrity(input) {
216
+ if (input.actualSize !== input.expectedSize) {
217
+ throw new SkillFetchError(exports.SkillFetchErrorCode.SIZE_MISMATCH, {
218
+ expected: input.expectedSize,
219
+ actual: input.actualSize,
220
+ });
221
+ }
222
+ if (!digestMatches(input.expectedSha256, input.actualSha256)) {
223
+ throw new SkillFetchError(exports.SkillFetchErrorCode.CHECKSUM_MISMATCH);
224
+ }
225
+ }