commandmate 0.11.3 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (595) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +392 -300
  3. package/.next/app-path-routes-manifest.json +30 -21
  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.js +1 -1
  12. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/app/update-check/route.js +1 -1
  14. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  18. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  24. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/daily-summary/route.js +1 -1
  26. package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
  27. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/daily-summary/status/route.js +1 -1
  29. package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
  30. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/push/subscriptions/route.js +1 -1
  37. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
  41. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
  43. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/skills/[id]/route.js +1 -0
  53. package/.next/server/app/api/skills/[id]/route.js.nft.json +1 -0
  54. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -0
  55. package/.next/server/app/api/skills/route.js +1 -0
  56. package/.next/server/app/api/skills/route.js.nft.json +1 -0
  57. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -0
  58. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/todos/route.js +1 -1
  62. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  66. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
  68. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  71. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
  73. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
  76. package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js.nft.json +1 -1
  77. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
  79. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js.nft.json +1 -1
  80. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
  82. package/.next/server/app/api/worktrees/[id]/git/branches/route.js.nft.json +1 -1
  83. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
  85. package/.next/server/app/api/worktrees/[id]/git/checkout/route.js.nft.json +1 -1
  86. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
  88. package/.next/server/app/api/worktrees/[id]/git/commit/route.js.nft.json +1 -1
  89. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
  91. package/.next/server/app/api/worktrees/[id]/git/diff/route.js.nft.json +1 -1
  92. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
  94. package/.next/server/app/api/worktrees/[id]/git/fetch/route.js.nft.json +1 -1
  95. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
  97. package/.next/server/app/api/worktrees/[id]/git/log/route.js.nft.json +1 -1
  98. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
  100. package/.next/server/app/api/worktrees/[id]/git/pull/route.js.nft.json +1 -1
  101. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
  103. package/.next/server/app/api/worktrees/[id]/git/push/route.js.nft.json +1 -1
  104. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
  106. package/.next/server/app/api/worktrees/[id]/git/reset/route.js.nft.json +1 -1
  107. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
  109. package/.next/server/app/api/worktrees/[id]/git/revert/route.js.nft.json +1 -1
  110. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
  112. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js.nft.json +1 -1
  113. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/git/stage/route.js.nft.json +1 -1
  116. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
  118. package/.next/server/app/api/worktrees/[id]/git/staged/route.js.nft.json +1 -1
  119. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
  121. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js.nft.json +1 -1
  122. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js.nft.json +1 -1
  125. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js.nft.json +1 -1
  128. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js.nft.json +1 -1
  131. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/git/stash/route.js.nft.json +1 -1
  134. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/git/status/route.js.nft.json +1 -1
  137. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/git/unstage/route.js.nft.json +1 -1
  140. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js.nft.json +1 -1
  143. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/worktrees/[id]/logs/route.js +1 -1
  149. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
  151. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  152. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
  153. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  154. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
  155. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  156. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  157. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  158. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  159. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  160. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  161. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  162. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  163. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -1
  164. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  165. package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
  166. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  167. package/.next/server/app/api/worktrees/[id]/schedules/route.js +1 -1
  168. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  169. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  170. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  171. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  172. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  173. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -0
  174. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -0
  175. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -0
  176. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -0
  177. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -0
  178. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -0
  179. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -0
  180. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -0
  181. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -0
  182. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -0
  183. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -0
  184. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -0
  185. package/.next/server/app/api/worktrees/[id]/skills/route.js +23 -0
  186. package/.next/server/app/api/worktrees/[id]/skills/route.js.nft.json +1 -0
  187. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -0
  188. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  189. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  190. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  191. package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
  192. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  193. package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
  194. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  195. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  196. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
  197. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  198. package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
  199. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  200. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
  201. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  202. package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
  203. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  204. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  205. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
  206. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  207. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  208. package/.next/server/app/chat/page.js +2 -2
  209. package/.next/server/app/chat/page.js.nft.json +1 -1
  210. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  211. package/.next/server/app/login/page.js.nft.json +1 -1
  212. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  213. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  214. package/.next/server/app/more/page.js +2 -2
  215. package/.next/server/app/more/page.js.nft.json +1 -1
  216. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  217. package/.next/server/app/offline/page.js.nft.json +1 -1
  218. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  219. package/.next/server/app/page.js +1 -1
  220. package/.next/server/app/page.js.nft.json +1 -1
  221. package/.next/server/app/page_client-reference-manifest.js +1 -1
  222. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  223. package/.next/server/app/repositories/page.js +1 -1
  224. package/.next/server/app/repositories/page.js.nft.json +1 -1
  225. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  226. package/.next/server/app/review/page.js +1 -1
  227. package/.next/server/app/review/page.js.nft.json +1 -1
  228. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  229. package/.next/server/app/sessions/page.js +1 -1
  230. package/.next/server/app/sessions/page.js.nft.json +1 -1
  231. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  232. package/.next/server/app/skills/[skillId]/page.js +2 -0
  233. package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -0
  234. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -0
  235. package/.next/server/app/skills/page.js +2 -0
  236. package/.next/server/app/skills/page.js.nft.json +1 -0
  237. package/.next/server/app/skills/page_client-reference-manifest.js +1 -0
  238. package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
  239. package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
  240. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  241. package/.next/server/app/worktrees/[id]/page.js +9 -9
  242. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
  243. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  244. package/.next/server/app/worktrees/[id]/terminal/page.js +3 -3
  245. package/.next/server/app/worktrees/[id]/terminal/page.js.nft.json +1 -1
  246. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  247. package/.next/server/app-paths-manifest.json +30 -21
  248. package/.next/server/chunks/1117.js +1 -1
  249. package/.next/server/chunks/120.js +1 -0
  250. package/.next/server/chunks/1808.js +1 -0
  251. package/.next/server/chunks/186.js +1 -0
  252. package/.next/server/chunks/2119.js +1 -1
  253. package/.next/server/chunks/22.js +1 -0
  254. package/.next/server/chunks/2328.js +1 -0
  255. package/.next/server/chunks/2445.js +1 -1
  256. package/.next/server/chunks/3042.js +2 -0
  257. package/.next/server/chunks/3543.js +1 -1
  258. package/.next/server/chunks/3708.js +1 -0
  259. package/.next/server/chunks/3945.js +1 -1
  260. package/.next/server/chunks/5064.js +1 -0
  261. package/.next/server/chunks/5226.js +28 -0
  262. package/.next/server/chunks/5306.js +2 -0
  263. package/.next/server/chunks/5312.js +1 -0
  264. package/.next/server/chunks/5326.js +1 -0
  265. package/.next/server/chunks/5381.js +1 -1
  266. package/.next/server/chunks/5456.js +1 -0
  267. package/.next/server/chunks/5571.js +1 -1
  268. package/.next/server/chunks/5959.js +2 -2
  269. package/.next/server/chunks/6065.js +1 -0
  270. package/.next/server/chunks/6130.js +1 -0
  271. package/.next/server/chunks/6285.js +1 -1
  272. package/.next/server/chunks/646.js +6 -6
  273. package/.next/server/chunks/{9968.js → 7587.js} +1 -1
  274. package/.next/server/chunks/8584.js +1 -0
  275. package/.next/server/chunks/8681.js +1 -1
  276. package/.next/server/chunks/8807.js +950 -804
  277. package/.next/server/chunks/9123.js +1 -1
  278. package/.next/server/middleware-build-manifest.js +1 -1
  279. package/.next/server/middleware-manifest.json +5 -5
  280. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  281. package/.next/server/pages/500.html +1 -1
  282. package/.next/server/server-reference-manifest.json +1 -1
  283. package/.next/static/D-aoE4gWfuCUN0GqEPIX3/_buildManifest.js +1 -0
  284. package/.next/static/chunks/1668-7484081c45a44f89.js +1 -0
  285. package/.next/static/chunks/3418-7e47651340d940b0.js +1 -0
  286. package/.next/static/chunks/4027-0c529b322be7d4d8.js +1 -0
  287. package/.next/static/chunks/{4560-64b1461fd996127a.js → 4560-04e5aebcab96bfa1.js} +1 -1
  288. package/.next/static/chunks/6007-de36119357dcd418.js +1 -0
  289. package/.next/static/chunks/{6488-8819e6905355caea.js → 6488-e257111ca7389d05.js} +1 -1
  290. package/.next/static/chunks/{8965-872d8de254196cec.js → 6497-dc26c6c6b0b15adf.js} +1 -1
  291. package/.next/static/chunks/790-d8e6acd26e03679c.js +1 -0
  292. package/.next/static/chunks/8361.4bf062be2d2962f4.js +1 -0
  293. package/.next/static/chunks/app/api/app/update/route-56dad0523d3c4a92.js +1 -0
  294. package/.next/static/chunks/app/api/app/update-check/route-56dad0523d3c4a92.js +1 -0
  295. package/.next/static/chunks/app/api/assistant/conversation/route-56dad0523d3c4a92.js +1 -0
  296. package/.next/static/chunks/app/api/assistant/current-output/route-56dad0523d3c4a92.js +1 -0
  297. package/.next/static/chunks/app/api/assistant/messages/route-56dad0523d3c4a92.js +1 -0
  298. package/.next/static/chunks/app/api/assistant/session/route-56dad0523d3c4a92.js +1 -0
  299. package/.next/static/chunks/app/api/assistant/start/route-56dad0523d3c4a92.js +1 -0
  300. package/.next/static/chunks/app/api/assistant/terminal/route-56dad0523d3c4a92.js +1 -0
  301. package/.next/static/chunks/app/api/assistant/tools/route-56dad0523d3c4a92.js +1 -0
  302. package/.next/static/chunks/app/api/auth/login/route-56dad0523d3c4a92.js +1 -0
  303. package/.next/static/chunks/app/api/auth/logout/route-56dad0523d3c4a92.js +1 -0
  304. package/.next/static/chunks/app/api/auth/status/route-56dad0523d3c4a92.js +1 -0
  305. package/.next/static/chunks/app/api/daily-summary/route-56dad0523d3c4a92.js +1 -0
  306. package/.next/static/chunks/app/api/daily-summary/status/route-56dad0523d3c4a92.js +1 -0
  307. package/.next/static/chunks/app/api/external-apps/[id]/health/route-56dad0523d3c4a92.js +1 -0
  308. package/.next/static/chunks/app/api/external-apps/[id]/route-56dad0523d3c4a92.js +1 -0
  309. package/.next/static/chunks/app/api/external-apps/route-56dad0523d3c4a92.js +1 -0
  310. package/.next/static/chunks/app/api/hooks/claude-done/route-56dad0523d3c4a92.js +1 -0
  311. package/.next/static/chunks/app/api/ollama/models/route-56dad0523d3c4a92.js +1 -0
  312. package/.next/static/chunks/app/api/push/subscriptions/route-56dad0523d3c4a92.js +1 -0
  313. package/.next/static/chunks/app/api/push/vapid/route-56dad0523d3c4a92.js +1 -0
  314. package/.next/static/chunks/app/api/repositories/[id]/route-56dad0523d3c4a92.js +1 -0
  315. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-56dad0523d3c4a92.js +1 -0
  316. package/.next/static/chunks/app/api/repositories/[id]/todos/route-56dad0523d3c4a92.js +1 -0
  317. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-56dad0523d3c4a92.js +1 -0
  318. package/.next/static/chunks/app/api/repositories/clone/route-56dad0523d3c4a92.js +1 -0
  319. package/.next/static/chunks/app/api/repositories/excluded/route-56dad0523d3c4a92.js +1 -0
  320. package/.next/static/chunks/app/api/repositories/restore/route-56dad0523d3c4a92.js +1 -0
  321. package/.next/static/chunks/app/api/repositories/route-56dad0523d3c4a92.js +1 -0
  322. package/.next/static/chunks/app/api/repositories/scan/route-56dad0523d3c4a92.js +1 -0
  323. package/.next/static/chunks/app/api/repositories/sync/route-56dad0523d3c4a92.js +1 -0
  324. package/.next/static/chunks/app/api/sidebar/group-order/route-56dad0523d3c4a92.js +1 -0
  325. package/.next/static/chunks/app/api/skills/[id]/route-56dad0523d3c4a92.js +1 -0
  326. package/.next/static/chunks/app/api/skills/route-56dad0523d3c4a92.js +1 -0
  327. package/.next/static/chunks/app/api/slash-commands/route-56dad0523d3c4a92.js +1 -0
  328. package/.next/static/chunks/app/api/templates/[id]/route-56dad0523d3c4a92.js +1 -0
  329. package/.next/static/chunks/app/api/templates/route-56dad0523d3c4a92.js +1 -0
  330. package/.next/static/chunks/app/api/todos/route-56dad0523d3c4a92.js +1 -0
  331. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-56dad0523d3c4a92.js +1 -0
  332. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-56dad0523d3c4a92.js +1 -0
  333. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-56dad0523d3c4a92.js +1 -0
  334. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-56dad0523d3c4a92.js +1 -0
  335. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-56dad0523d3c4a92.js +1 -0
  336. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-56dad0523d3c4a92.js +1 -0
  337. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-56dad0523d3c4a92.js +1 -0
  338. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-56dad0523d3c4a92.js +1 -0
  339. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-56dad0523d3c4a92.js +1 -0
  340. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-56dad0523d3c4a92.js +1 -0
  341. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-56dad0523d3c4a92.js +1 -0
  342. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-56dad0523d3c4a92.js +1 -0
  343. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-56dad0523d3c4a92.js +1 -0
  344. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-56dad0523d3c4a92.js +1 -0
  345. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-56dad0523d3c4a92.js +1 -0
  346. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-56dad0523d3c4a92.js +1 -0
  347. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-56dad0523d3c4a92.js +1 -0
  348. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-56dad0523d3c4a92.js +1 -0
  349. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-56dad0523d3c4a92.js +1 -0
  350. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-56dad0523d3c4a92.js +1 -0
  351. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-56dad0523d3c4a92.js +1 -0
  352. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-56dad0523d3c4a92.js +1 -0
  353. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-56dad0523d3c4a92.js +1 -0
  354. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-56dad0523d3c4a92.js +1 -0
  355. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-56dad0523d3c4a92.js +1 -0
  356. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-56dad0523d3c4a92.js +1 -0
  357. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-56dad0523d3c4a92.js +1 -0
  358. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-56dad0523d3c4a92.js +1 -0
  359. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-56dad0523d3c4a92.js +1 -0
  360. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-56dad0523d3c4a92.js +1 -0
  361. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-56dad0523d3c4a92.js +1 -0
  362. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-56dad0523d3c4a92.js +1 -0
  363. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-56dad0523d3c4a92.js +1 -0
  364. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-56dad0523d3c4a92.js +1 -0
  365. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-56dad0523d3c4a92.js +1 -0
  366. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-56dad0523d3c4a92.js +1 -0
  367. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-56dad0523d3c4a92.js +1 -0
  368. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-56dad0523d3c4a92.js +1 -0
  369. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-56dad0523d3c4a92.js +1 -0
  370. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-56dad0523d3c4a92.js +1 -0
  371. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-56dad0523d3c4a92.js +1 -0
  372. package/.next/static/chunks/app/api/worktrees/[id]/route-56dad0523d3c4a92.js +1 -0
  373. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-56dad0523d3c4a92.js +1 -0
  374. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-56dad0523d3c4a92.js +1 -0
  375. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-56dad0523d3c4a92.js +1 -0
  376. package/.next/static/chunks/app/api/worktrees/[id]/search/route-56dad0523d3c4a92.js +1 -0
  377. package/.next/static/chunks/app/api/worktrees/[id]/send/route-56dad0523d3c4a92.js +1 -0
  378. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-56dad0523d3c4a92.js +1 -0
  379. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-56dad0523d3c4a92.js +1 -0
  380. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-56dad0523d3c4a92.js +1 -0
  381. package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-56dad0523d3c4a92.js +1 -0
  382. package/.next/static/chunks/app/api/worktrees/[id]/skills/route-56dad0523d3c4a92.js +1 -0
  383. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-56dad0523d3c4a92.js +1 -0
  384. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-56dad0523d3c4a92.js +1 -0
  385. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-56dad0523d3c4a92.js +1 -0
  386. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-56dad0523d3c4a92.js +1 -0
  387. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-56dad0523d3c4a92.js +1 -0
  388. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-56dad0523d3c4a92.js +1 -0
  389. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-56dad0523d3c4a92.js +1 -0
  390. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-56dad0523d3c4a92.js +1 -0
  391. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-56dad0523d3c4a92.js +1 -0
  392. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-56dad0523d3c4a92.js +1 -0
  393. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-56dad0523d3c4a92.js +1 -0
  394. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-56dad0523d3c4a92.js +1 -0
  395. package/.next/static/chunks/app/api/worktrees/route-56dad0523d3c4a92.js +1 -0
  396. package/.next/static/chunks/app/chat/{page-9ed2ffd98eb4ae18.js → page-9cf4ba62e21d9074.js} +1 -1
  397. package/.next/static/chunks/app/manifest.webmanifest/route-56dad0523d3c4a92.js +1 -0
  398. package/.next/static/chunks/app/more/{page-a496425bba427b48.js → page-082d4ae496f9a36e.js} +1 -1
  399. package/.next/static/chunks/app/{page-15bfd76bcf65842d.js → page-af457ca5876ed616.js} +1 -1
  400. package/.next/static/chunks/app/proxy/[...path]/route-56dad0523d3c4a92.js +1 -0
  401. package/.next/static/chunks/app/repositories/{page-d214522ab8792ce7.js → page-75f0d70452c6b6c0.js} +1 -1
  402. package/.next/static/chunks/app/review/{page-1dadf0b5d7129598.js → page-f431d630097c2e85.js} +1 -1
  403. package/.next/static/chunks/app/sessions/{page-96f007d986c5f327.js → page-20f07a99db64d2ca.js} +1 -1
  404. package/.next/static/chunks/app/skills/[skillId]/page-68ed5e9186efe56d.js +1 -0
  405. package/.next/static/chunks/app/skills/page-46242c428ee8bccf.js +1 -0
  406. package/.next/static/chunks/app/worktrees/[id]/page-bf811e793052c917.js +1 -0
  407. package/.next/static/chunks/app/worktrees/[id]/terminal/page-a75fe180a7233b2b.js +1 -0
  408. package/.next/static/chunks/webpack-0f9275e279c058eb.js +1 -0
  409. package/.next/static/css/b4bdb1f3457fe9a7.css +1 -0
  410. package/.next/trace +11 -10
  411. package/.next/types/app/api/skills/[id]/route.ts +347 -0
  412. package/.next/types/app/api/skills/route.ts +347 -0
  413. package/.next/types/app/api/worktrees/[id]/skills/[skillId]/install/route.ts +347 -0
  414. package/.next/types/app/api/worktrees/[id]/skills/[skillId]/plan/route.ts +347 -0
  415. package/.next/types/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.ts +347 -0
  416. package/.next/types/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.ts +347 -0
  417. package/.next/types/app/api/worktrees/[id]/skills/route.ts +347 -0
  418. package/.next/types/app/skills/[skillId]/page.ts +84 -0
  419. package/.next/types/app/skills/page.ts +84 -0
  420. package/.next/types/routes.d.ts +11 -2
  421. package/.next/types/validator.ts +81 -0
  422. package/dist/cli/commands/skill-format.d.ts +28 -0
  423. package/dist/cli/commands/skill-format.d.ts.map +1 -0
  424. package/dist/cli/commands/skill-format.js +163 -0
  425. package/dist/cli/commands/skill-guards.d.ts +53 -0
  426. package/dist/cli/commands/skill-guards.d.ts.map +1 -0
  427. package/dist/cli/commands/skill-guards.js +188 -0
  428. package/dist/cli/commands/skill.d.ts +24 -0
  429. package/dist/cli/commands/skill.d.ts.map +1 -0
  430. package/dist/cli/commands/skill.js +365 -0
  431. package/dist/cli/docs/agent-operations.d.ts +1 -1
  432. package/dist/cli/docs/agent-operations.d.ts.map +1 -1
  433. package/dist/cli/docs/agent-operations.js +36 -0
  434. package/dist/cli/program.d.ts.map +1 -1
  435. package/dist/cli/program.js +11 -0
  436. package/dist/cli/types/api-responses.d.ts +215 -0
  437. package/dist/cli/types/api-responses.d.ts.map +1 -1
  438. package/dist/cli/types/index.d.ts +60 -0
  439. package/dist/cli/types/index.d.ts.map +1 -1
  440. package/dist/cli/types/index.js +23 -1
  441. package/dist/cli/utils/api-client.d.ts +19 -1
  442. package/dist/cli/utils/api-client.d.ts.map +1 -1
  443. package/dist/cli/utils/api-client.js +41 -4
  444. package/dist/cli/utils/npx-runner.d.ts +14 -0
  445. package/dist/cli/utils/npx-runner.d.ts.map +1 -1
  446. package/dist/cli/utils/npx-runner.js +20 -0
  447. package/dist/server/server.js +57 -0
  448. package/dist/server/src/config/activity-bar-config.js +2 -0
  449. package/dist/server/src/config/git-status-config.js +83 -0
  450. package/dist/server/src/config/skill-security-config.js +139 -0
  451. package/dist/server/src/lib/db/migrations/index.js +8 -0
  452. package/dist/server/src/lib/db/migrations/runner.js +1 -1
  453. package/dist/server/src/lib/db/migrations/v44-skill-operations.js +81 -0
  454. package/dist/server/src/lib/db/migrations/v45-skill-installations.js +59 -0
  455. package/dist/server/src/lib/db/migrations/v46-skill-installations-cascade.js +107 -0
  456. package/dist/server/src/lib/db/migrations/v47-skill-installations-roots.js +70 -0
  457. package/dist/server/src/lib/db/worktree-db.js +9 -4
  458. package/dist/server/src/lib/git/git-errors.js +336 -0
  459. package/dist/server/src/lib/git/git-exec.js +285 -0
  460. package/dist/server/src/lib/skills/compatibility.js +194 -0
  461. package/dist/server/src/lib/skills/constants.js +252 -0
  462. package/dist/server/src/lib/skills/errors.js +82 -0
  463. package/dist/server/src/lib/skills/index.js +91 -0
  464. package/dist/server/src/lib/skills/install-apply.js +670 -0
  465. package/dist/server/src/lib/skills/install-plan.js +582 -0
  466. package/dist/server/src/lib/skills/installed-state.js +127 -0
  467. package/dist/server/src/lib/skills/integrity.js +225 -0
  468. package/dist/server/src/lib/skills/json-schema.js +365 -0
  469. package/dist/server/src/lib/skills/operation-audit.js +120 -0
  470. package/dist/server/src/lib/skills/operation-journal.js +286 -0
  471. package/dist/server/src/lib/skills/operation-lock.js +339 -0
  472. package/dist/server/src/lib/skills/operation-reconciler.js +107 -0
  473. package/dist/server/src/lib/skills/operation-store.js +153 -0
  474. package/dist/server/src/lib/skills/package-reader.js +495 -0
  475. package/dist/server/src/lib/skills/package-validator.js +451 -0
  476. package/dist/server/src/lib/skills/preview-diff.js +627 -0
  477. package/dist/server/src/lib/skills/safe-yaml.js +593 -0
  478. package/dist/server/src/lib/skills/schema.js +1248 -0
  479. package/dist/server/src/lib/skills/semver.js +193 -0
  480. package/dist/server/src/lib/skills/snapshot-store.js +334 -0
  481. package/dist/server/src/lib/skills/startup-reconcile.js +138 -0
  482. package/dist/server/src/lib/skills/uninstall-apply.js +495 -0
  483. package/dist/server/src/lib/skills/uninstall-plan.js +479 -0
  484. package/dist/server/src/types/skills.js +17 -0
  485. package/package.json +1 -1
  486. package/.next/server/chunks/129.js +0 -1
  487. package/.next/server/chunks/2478.js +0 -1
  488. package/.next/server/chunks/9886.js +0 -1
  489. package/.next/static/chunks/3165-87bf884f7f3d15cf.js +0 -1
  490. package/.next/static/chunks/6416.6756b7ad06dd96f7.js +0 -1
  491. package/.next/static/chunks/8676.57260a06f6554e7e.js +0 -1
  492. package/.next/static/chunks/app/api/app/update/route-7536041a7a89616d.js +0 -1
  493. package/.next/static/chunks/app/api/app/update-check/route-7536041a7a89616d.js +0 -1
  494. package/.next/static/chunks/app/api/assistant/conversation/route-7536041a7a89616d.js +0 -1
  495. package/.next/static/chunks/app/api/assistant/current-output/route-7536041a7a89616d.js +0 -1
  496. package/.next/static/chunks/app/api/assistant/messages/route-7536041a7a89616d.js +0 -1
  497. package/.next/static/chunks/app/api/assistant/session/route-7536041a7a89616d.js +0 -1
  498. package/.next/static/chunks/app/api/assistant/start/route-7536041a7a89616d.js +0 -1
  499. package/.next/static/chunks/app/api/assistant/terminal/route-7536041a7a89616d.js +0 -1
  500. package/.next/static/chunks/app/api/assistant/tools/route-7536041a7a89616d.js +0 -1
  501. package/.next/static/chunks/app/api/auth/login/route-7536041a7a89616d.js +0 -1
  502. package/.next/static/chunks/app/api/auth/logout/route-7536041a7a89616d.js +0 -1
  503. package/.next/static/chunks/app/api/auth/status/route-7536041a7a89616d.js +0 -1
  504. package/.next/static/chunks/app/api/daily-summary/route-7536041a7a89616d.js +0 -1
  505. package/.next/static/chunks/app/api/daily-summary/status/route-7536041a7a89616d.js +0 -1
  506. package/.next/static/chunks/app/api/external-apps/[id]/health/route-7536041a7a89616d.js +0 -1
  507. package/.next/static/chunks/app/api/external-apps/[id]/route-7536041a7a89616d.js +0 -1
  508. package/.next/static/chunks/app/api/external-apps/route-7536041a7a89616d.js +0 -1
  509. package/.next/static/chunks/app/api/hooks/claude-done/route-7536041a7a89616d.js +0 -1
  510. package/.next/static/chunks/app/api/ollama/models/route-7536041a7a89616d.js +0 -1
  511. package/.next/static/chunks/app/api/push/subscriptions/route-7536041a7a89616d.js +0 -1
  512. package/.next/static/chunks/app/api/push/vapid/route-7536041a7a89616d.js +0 -1
  513. package/.next/static/chunks/app/api/repositories/[id]/route-7536041a7a89616d.js +0 -1
  514. package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-7536041a7a89616d.js +0 -1
  515. package/.next/static/chunks/app/api/repositories/[id]/todos/route-7536041a7a89616d.js +0 -1
  516. package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-7536041a7a89616d.js +0 -1
  517. package/.next/static/chunks/app/api/repositories/clone/route-7536041a7a89616d.js +0 -1
  518. package/.next/static/chunks/app/api/repositories/excluded/route-7536041a7a89616d.js +0 -1
  519. package/.next/static/chunks/app/api/repositories/restore/route-7536041a7a89616d.js +0 -1
  520. package/.next/static/chunks/app/api/repositories/route-7536041a7a89616d.js +0 -1
  521. package/.next/static/chunks/app/api/repositories/scan/route-7536041a7a89616d.js +0 -1
  522. package/.next/static/chunks/app/api/repositories/sync/route-7536041a7a89616d.js +0 -1
  523. package/.next/static/chunks/app/api/sidebar/group-order/route-7536041a7a89616d.js +0 -1
  524. package/.next/static/chunks/app/api/slash-commands/route-7536041a7a89616d.js +0 -1
  525. package/.next/static/chunks/app/api/templates/[id]/route-7536041a7a89616d.js +0 -1
  526. package/.next/static/chunks/app/api/templates/route-7536041a7a89616d.js +0 -1
  527. package/.next/static/chunks/app/api/todos/route-7536041a7a89616d.js +0 -1
  528. package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-7536041a7a89616d.js +0 -1
  529. package/.next/static/chunks/app/api/worktrees/[id]/capture/route-7536041a7a89616d.js +0 -1
  530. package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-7536041a7a89616d.js +0 -1
  531. package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-7536041a7a89616d.js +0 -1
  532. package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-7536041a7a89616d.js +0 -1
  533. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-7536041a7a89616d.js +0 -1
  534. package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-7536041a7a89616d.js +0 -1
  535. package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-7536041a7a89616d.js +0 -1
  536. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-7536041a7a89616d.js +0 -1
  537. package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-7536041a7a89616d.js +0 -1
  538. package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-7536041a7a89616d.js +0 -1
  539. package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-7536041a7a89616d.js +0 -1
  540. package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-7536041a7a89616d.js +0 -1
  541. package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-7536041a7a89616d.js +0 -1
  542. package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-7536041a7a89616d.js +0 -1
  543. package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-7536041a7a89616d.js +0 -1
  544. package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-7536041a7a89616d.js +0 -1
  545. package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-7536041a7a89616d.js +0 -1
  546. package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-7536041a7a89616d.js +0 -1
  547. package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-7536041a7a89616d.js +0 -1
  548. package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-7536041a7a89616d.js +0 -1
  549. package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-7536041a7a89616d.js +0 -1
  550. package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-7536041a7a89616d.js +0 -1
  551. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-7536041a7a89616d.js +0 -1
  552. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-7536041a7a89616d.js +0 -1
  553. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-7536041a7a89616d.js +0 -1
  554. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-7536041a7a89616d.js +0 -1
  555. package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-7536041a7a89616d.js +0 -1
  556. package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-7536041a7a89616d.js +0 -1
  557. package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-7536041a7a89616d.js +0 -1
  558. package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-7536041a7a89616d.js +0 -1
  559. package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-7536041a7a89616d.js +0 -1
  560. package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-7536041a7a89616d.js +0 -1
  561. package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-7536041a7a89616d.js +0 -1
  562. package/.next/static/chunks/app/api/worktrees/[id]/logs/route-7536041a7a89616d.js +0 -1
  563. package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-7536041a7a89616d.js +0 -1
  564. package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-7536041a7a89616d.js +0 -1
  565. package/.next/static/chunks/app/api/worktrees/[id]/memos/route-7536041a7a89616d.js +0 -1
  566. package/.next/static/chunks/app/api/worktrees/[id]/messages/route-7536041a7a89616d.js +0 -1
  567. package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-7536041a7a89616d.js +0 -1
  568. package/.next/static/chunks/app/api/worktrees/[id]/respond/route-7536041a7a89616d.js +0 -1
  569. package/.next/static/chunks/app/api/worktrees/[id]/route-7536041a7a89616d.js +0 -1
  570. package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-7536041a7a89616d.js +0 -1
  571. package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-7536041a7a89616d.js +0 -1
  572. package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-7536041a7a89616d.js +0 -1
  573. package/.next/static/chunks/app/api/worktrees/[id]/search/route-7536041a7a89616d.js +0 -1
  574. package/.next/static/chunks/app/api/worktrees/[id]/send/route-7536041a7a89616d.js +0 -1
  575. package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-7536041a7a89616d.js +0 -1
  576. package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-7536041a7a89616d.js +0 -1
  577. package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-7536041a7a89616d.js +0 -1
  578. package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-7536041a7a89616d.js +0 -1
  579. package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-7536041a7a89616d.js +0 -1
  580. package/.next/static/chunks/app/api/worktrees/[id]/timers/route-7536041a7a89616d.js +0 -1
  581. package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-7536041a7a89616d.js +0 -1
  582. package/.next/static/chunks/app/api/worktrees/[id]/todos/route-7536041a7a89616d.js +0 -1
  583. package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-7536041a7a89616d.js +0 -1
  584. package/.next/static/chunks/app/api/worktrees/[id]/tree/route-7536041a7a89616d.js +0 -1
  585. package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-7536041a7a89616d.js +0 -1
  586. package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-7536041a7a89616d.js +0 -1
  587. package/.next/static/chunks/app/api/worktrees/route-7536041a7a89616d.js +0 -1
  588. package/.next/static/chunks/app/manifest.webmanifest/route-7536041a7a89616d.js +0 -1
  589. package/.next/static/chunks/app/proxy/[...path]/route-7536041a7a89616d.js +0 -1
  590. package/.next/static/chunks/app/worktrees/[id]/page-6105a3470b279527.js +0 -1
  591. package/.next/static/chunks/app/worktrees/[id]/terminal/page-ed4590b024edd8d6.js +0 -1
  592. package/.next/static/chunks/webpack-2e3739a831868daa.js +0 -1
  593. package/.next/static/css/d7e2e8d1b8d69d36.css +0 -1
  594. package/.next/static/i8mdUwheg9j9sU_lI_ZSf/_buildManifest.js +0 -1
  595. /package/.next/static/{i8mdUwheg9j9sU_lI_ZSf → 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
+ }