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,593 @@
1
+ "use strict";
2
+ /**
3
+ * Restricted YAML reader for Skill manifests (Issue #1230)
4
+ *
5
+ * `SKILL_YAML_SAFE_PROFILE` (#1228) fixed the limits a manifest parser must
6
+ * enforce but deliberately left the implementation open. This module closes it
7
+ * with a parser for a *subset* of YAML rather than a configured general-purpose
8
+ * one, for two reasons:
9
+ *
10
+ * - No dependency in the tree can enforce the profile. `js-yaml` (reachable
11
+ * only transitively, through `gray-matter`) has no depth, node-count or
12
+ * scalar-size bound and resolves anchors and merge keys by default, which is
13
+ * exactly the parser-bomb surface the profile exists to remove.
14
+ * - A manifest is a closed document: schema_version 1 has no field that needs
15
+ * anchors, tags, flow collections or multiple documents. Everything outside
16
+ * the subset is therefore a rejection, not a parse.
17
+ *
18
+ * The subset is: one document, block mappings, block sequences, plain and
19
+ * quoted scalars, literal/folded block scalars, empty flow collections and
20
+ * comments. Anchors, aliases, merge keys, tags, non-empty flow collections,
21
+ * complex keys and additional documents are refused with their own code so a
22
+ * caller can tell "malicious" from "malformed".
23
+ *
24
+ * Parsed mappings have a null prototype: `__proto__` is rejected by the profile
25
+ * *and* is inert if that check is ever weakened.
26
+ *
27
+ * @module lib/skills/safe-yaml
28
+ */
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.SkillYamlError = exports.SkillYamlErrorCode = void 0;
31
+ exports.isSkillYamlError = isSkillYamlError;
32
+ exports.parseSkillYaml = parseSkillYaml;
33
+ exports.parseSkillFrontmatter = parseSkillFrontmatter;
34
+ const skills_1 = require("../../lib/skills");
35
+ // =============================================================================
36
+ // Error vocabulary
37
+ // =============================================================================
38
+ /** Stable, client-safe reason codes for a rejected YAML document. */
39
+ exports.SkillYamlErrorCode = {
40
+ /** Document is larger than the profile's byte budget. */
41
+ BYTES_LIMIT: 'SKILL_YAML_BYTES_LIMIT',
42
+ /** Nesting is deeper than the profile allows. */
43
+ DEPTH_LIMIT: 'SKILL_YAML_DEPTH_LIMIT',
44
+ /** Document has more nodes than the profile allows. */
45
+ NODE_LIMIT: 'SKILL_YAML_NODE_LIMIT',
46
+ /** A single scalar is longer than the profile allows. */
47
+ SCALAR_LIMIT: 'SKILL_YAML_SCALAR_LIMIT',
48
+ /** An anchor (`&`) or alias (`*`) was used. */
49
+ ALIAS_FORBIDDEN: 'SKILL_YAML_ALIAS_FORBIDDEN',
50
+ /** A merge key (`<<`) was used. */
51
+ MERGE_KEY_FORBIDDEN: 'SKILL_YAML_MERGE_KEY_FORBIDDEN',
52
+ /** An explicit tag (`!`/`!!`) was used. */
53
+ TAG_FORBIDDEN: 'SKILL_YAML_TAG_FORBIDDEN',
54
+ /** The same key appears twice in one mapping. */
55
+ DUPLICATE_KEY: 'SKILL_YAML_DUPLICATE_KEY',
56
+ /** A key on the profile's forbidden list (prototype pollution) was used. */
57
+ FORBIDDEN_KEY: 'SKILL_YAML_FORBIDDEN_KEY',
58
+ /** The stream carries more than one document. */
59
+ MULTIPLE_DOCUMENTS: 'SKILL_YAML_MULTIPLE_DOCUMENTS',
60
+ /** Bytes are not valid UTF-8, or carry a BOM or a control character. */
61
+ ENCODING: 'SKILL_YAML_ENCODING',
62
+ /** A construct outside the supported subset was used. */
63
+ UNSUPPORTED: 'SKILL_YAML_UNSUPPORTED',
64
+ /** The document does not parse as the supported subset. */
65
+ SYNTAX: 'SKILL_YAML_SYNTAX',
66
+ };
67
+ const MESSAGES = {
68
+ [exports.SkillYamlErrorCode.BYTES_LIMIT]: 'YAML document exceeds the size limit',
69
+ [exports.SkillYamlErrorCode.DEPTH_LIMIT]: 'YAML document is nested too deeply',
70
+ [exports.SkillYamlErrorCode.NODE_LIMIT]: 'YAML document has too many nodes',
71
+ [exports.SkillYamlErrorCode.SCALAR_LIMIT]: 'YAML scalar exceeds the length limit',
72
+ [exports.SkillYamlErrorCode.ALIAS_FORBIDDEN]: 'YAML anchors and aliases are not accepted',
73
+ [exports.SkillYamlErrorCode.MERGE_KEY_FORBIDDEN]: 'YAML merge keys are not accepted',
74
+ [exports.SkillYamlErrorCode.TAG_FORBIDDEN]: 'YAML tags are not accepted',
75
+ [exports.SkillYamlErrorCode.DUPLICATE_KEY]: 'YAML mapping declares the same key twice',
76
+ [exports.SkillYamlErrorCode.FORBIDDEN_KEY]: 'YAML mapping uses a forbidden key',
77
+ [exports.SkillYamlErrorCode.MULTIPLE_DOCUMENTS]: 'YAML stream carries more than one document',
78
+ [exports.SkillYamlErrorCode.ENCODING]: 'YAML document is not valid UTF-8 text',
79
+ [exports.SkillYamlErrorCode.UNSUPPORTED]: 'YAML document uses an unsupported construct',
80
+ [exports.SkillYamlErrorCode.SYNTAX]: 'YAML document could not be parsed',
81
+ };
82
+ /**
83
+ * A rejected YAML document.
84
+ *
85
+ * Carries a line number but never the offending text: a manifest can embed
86
+ * anything, and echoing it back would turn the parser into a reflection gadget.
87
+ */
88
+ class SkillYamlError extends Error {
89
+ code;
90
+ /** 1-based line the rejection was raised at, when known. */
91
+ line;
92
+ constructor(code, line) {
93
+ super(MESSAGES[code]);
94
+ this.name = 'SkillYamlError';
95
+ this.code = code;
96
+ if (line !== undefined)
97
+ this.line = line;
98
+ }
99
+ }
100
+ exports.SkillYamlError = SkillYamlError;
101
+ /** Narrow an unknown thrown value to a {@link SkillYamlError}. */
102
+ function isSkillYamlError(value) {
103
+ return value instanceof SkillYamlError;
104
+ }
105
+ const KEY_HEAD = /^(?:"(?:[^"\\]|\\.)*"|'(?:[^']|'')*'|[A-Za-z_][A-Za-z0-9_.-]*)[ \t]*:(?:[ \t]|$)/;
106
+ function decodeUtf8(input, maxBytes) {
107
+ const byteLength = typeof input === 'string' ? Buffer.byteLength(input, 'utf8') : input.byteLength;
108
+ if (byteLength > maxBytes)
109
+ throw new SkillYamlError(exports.SkillYamlErrorCode.BYTES_LIMIT);
110
+ if (typeof input === 'string')
111
+ return input;
112
+ try {
113
+ return new TextDecoder('utf-8', { fatal: true, ignoreBOM: false }).decode(input);
114
+ }
115
+ catch {
116
+ throw new SkillYamlError(exports.SkillYamlErrorCode.ENCODING);
117
+ }
118
+ }
119
+ /** Split into lines, rejecting anything that is not plain UTF-8 text. */
120
+ function toLines(text) {
121
+ if (text.includes('\uFEFF'))
122
+ throw new SkillYamlError(exports.SkillYamlErrorCode.ENCODING);
123
+ const normalized = text.replace(/\r\n/g, '\n');
124
+ if (normalized.includes('\r'))
125
+ throw new SkillYamlError(exports.SkillYamlErrorCode.ENCODING);
126
+ const lines = [];
127
+ const rawLines = normalized.split('\n');
128
+ for (let i = 0; i < rawLines.length; i++) {
129
+ const raw = rawLines[i];
130
+ const number = i + 1;
131
+ for (let j = 0; j < raw.length; j++) {
132
+ const code = raw.charCodeAt(j);
133
+ if ((code < 0x20 && code !== 0x09) || code === 0x7f) {
134
+ throw new SkillYamlError(exports.SkillYamlErrorCode.ENCODING, number);
135
+ }
136
+ }
137
+ let indent = 0;
138
+ while (indent < raw.length && raw[indent] === ' ')
139
+ indent++;
140
+ if (raw[indent] === '\t')
141
+ throw new SkillYamlError(exports.SkillYamlErrorCode.SYNTAX, number);
142
+ const content = raw.slice(indent);
143
+ lines.push({
144
+ number,
145
+ raw,
146
+ indent,
147
+ content,
148
+ significant: content.length > 0 && !content.startsWith('#'),
149
+ });
150
+ }
151
+ return lines;
152
+ }
153
+ /**
154
+ * Drop a trailing comment, honouring quotes.
155
+ *
156
+ * `summary: "a # b"` keeps its hash; `summary: a # b` does not.
157
+ */
158
+ function stripComment(text) {
159
+ let quote = null;
160
+ for (let i = 0; i < text.length; i++) {
161
+ const ch = text[i];
162
+ if (quote === '"') {
163
+ if (ch === '\\')
164
+ i++;
165
+ else if (ch === '"')
166
+ quote = null;
167
+ }
168
+ else if (quote === "'") {
169
+ if (ch === "'")
170
+ quote = null;
171
+ }
172
+ else if (ch === '"' || ch === "'") {
173
+ quote = ch;
174
+ }
175
+ else if (ch === '#' && (i === 0 || text[i - 1] === ' ' || text[i - 1] === '\t')) {
176
+ return text.slice(0, i);
177
+ }
178
+ }
179
+ return text;
180
+ }
181
+ // =============================================================================
182
+ // Parser
183
+ // =============================================================================
184
+ class Parser {
185
+ lines;
186
+ profile;
187
+ cursor = 0;
188
+ nodes = 0;
189
+ documentEnded = false;
190
+ documentStarted = false;
191
+ constructor(lines, profile) {
192
+ this.lines = lines;
193
+ this.profile = profile;
194
+ }
195
+ parseDocument() {
196
+ const first = this.peek();
197
+ if (!first)
198
+ return null;
199
+ if (first.indent !== 0)
200
+ throw new SkillYamlError(exports.SkillYamlErrorCode.SYNTAX, first.number);
201
+ const value = this.parseNode(0, 1);
202
+ this.skipToSignificant();
203
+ const trailing = this.peek();
204
+ if (trailing)
205
+ throw new SkillYamlError(exports.SkillYamlErrorCode.SYNTAX, trailing.number);
206
+ return value;
207
+ }
208
+ // ---------------------------------------------------------------------------
209
+ // Cursor
210
+ // ---------------------------------------------------------------------------
211
+ skipToSignificant() {
212
+ while (this.cursor < this.lines.length) {
213
+ const line = this.lines[this.cursor];
214
+ if (!line.significant) {
215
+ this.cursor++;
216
+ continue;
217
+ }
218
+ const trimmed = line.content.trim();
219
+ if (trimmed === '...') {
220
+ this.documentEnded = true;
221
+ this.cursor++;
222
+ continue;
223
+ }
224
+ if (trimmed === '---') {
225
+ // Only the marker that opens the stream is a document start; a later one
226
+ // begins a second document, which this parser never accepts.
227
+ if (this.documentStarted) {
228
+ throw new SkillYamlError(exports.SkillYamlErrorCode.MULTIPLE_DOCUMENTS, line.number);
229
+ }
230
+ this.documentStarted = true;
231
+ this.cursor++;
232
+ continue;
233
+ }
234
+ if (this.documentEnded) {
235
+ throw new SkillYamlError(exports.SkillYamlErrorCode.MULTIPLE_DOCUMENTS, line.number);
236
+ }
237
+ this.documentStarted = true;
238
+ return;
239
+ }
240
+ }
241
+ peek() {
242
+ this.skipToSignificant();
243
+ return this.cursor < this.lines.length ? this.lines[this.cursor] : null;
244
+ }
245
+ countNode(line) {
246
+ this.nodes++;
247
+ if (this.nodes > this.profile.maxNodes) {
248
+ throw new SkillYamlError(exports.SkillYamlErrorCode.NODE_LIMIT, line.number);
249
+ }
250
+ }
251
+ checkDepth(depth, line) {
252
+ if (depth > this.profile.maxDepth) {
253
+ throw new SkillYamlError(exports.SkillYamlErrorCode.DEPTH_LIMIT, line.number);
254
+ }
255
+ }
256
+ // ---------------------------------------------------------------------------
257
+ // Collections
258
+ // ---------------------------------------------------------------------------
259
+ parseNode(indent, depth) {
260
+ const line = this.peek();
261
+ if (!line)
262
+ return null;
263
+ this.checkDepth(depth, line);
264
+ return this.isSequenceEntry(line.content)
265
+ ? this.parseSequence(indent, depth)
266
+ : this.parseMapping(indent, depth);
267
+ }
268
+ isSequenceEntry(content) {
269
+ return content === '-' || content.startsWith('- ');
270
+ }
271
+ parseMapping(indent, depth) {
272
+ const result = Object.create(null);
273
+ const seen = new Set();
274
+ for (;;) {
275
+ const line = this.peek();
276
+ if (!line || line.indent < indent)
277
+ break;
278
+ if (line.indent > indent)
279
+ throw new SkillYamlError(exports.SkillYamlErrorCode.SYNTAX, line.number);
280
+ if (this.isSequenceEntry(line.content)) {
281
+ throw new SkillYamlError(exports.SkillYamlErrorCode.SYNTAX, line.number);
282
+ }
283
+ this.countNode(line);
284
+ const key = this.readKey(line);
285
+ if (seen.has(key) && !this.profile.allowDuplicateKeys) {
286
+ throw new SkillYamlError(exports.SkillYamlErrorCode.DUPLICATE_KEY, line.number);
287
+ }
288
+ seen.add(key);
289
+ const colon = line.content.indexOf(':', this.keyTokenLength(line.content));
290
+ const rest = stripComment(line.content.slice(colon + 1)).trim();
291
+ this.cursor++;
292
+ result[key] = this.parseValue(rest, indent, depth, line);
293
+ }
294
+ return result;
295
+ }
296
+ parseSequence(indent, depth) {
297
+ const result = [];
298
+ for (;;) {
299
+ const line = this.peek();
300
+ if (!line || line.indent < indent)
301
+ break;
302
+ if (line.indent > indent)
303
+ throw new SkillYamlError(exports.SkillYamlErrorCode.SYNTAX, line.number);
304
+ if (!this.isSequenceEntry(line.content))
305
+ break;
306
+ this.countNode(line);
307
+ const rest = line.content === '-' ? '' : line.content.slice(2);
308
+ const offset = line.content.length - rest.length;
309
+ const trimmedRest = stripComment(rest).trim();
310
+ if (trimmedRest === '') {
311
+ this.cursor++;
312
+ result.push(this.parseIndentedValue(indent, depth + 1, line));
313
+ continue;
314
+ }
315
+ if (this.isSequenceEntry(trimmedRest)) {
316
+ throw new SkillYamlError(exports.SkillYamlErrorCode.UNSUPPORTED, line.number);
317
+ }
318
+ if (KEY_HEAD.test(rest.trimStart())) {
319
+ // Re-anchor `- key: value` as a mapping line at the item's own indent so
320
+ // its sibling keys on following lines line up with it.
321
+ const itemIndent = indent + offset + (rest.length - rest.trimStart().length);
322
+ line.indent = itemIndent;
323
+ line.content = rest.trimStart();
324
+ this.checkDepth(depth + 1, line);
325
+ result.push(this.parseMapping(itemIndent, depth + 1));
326
+ continue;
327
+ }
328
+ this.cursor++;
329
+ this.countNode(line);
330
+ result.push(this.parseScalar(trimmedRest, line));
331
+ }
332
+ return result;
333
+ }
334
+ // ---------------------------------------------------------------------------
335
+ // Keys and values
336
+ // ---------------------------------------------------------------------------
337
+ keyTokenLength(content) {
338
+ if (content.startsWith('"') || content.startsWith("'")) {
339
+ const quote = content[0];
340
+ for (let i = 1; i < content.length; i++) {
341
+ if (quote === '"' && content[i] === '\\') {
342
+ i++;
343
+ continue;
344
+ }
345
+ if (content[i] === quote)
346
+ return i + 1;
347
+ }
348
+ }
349
+ return 0;
350
+ }
351
+ readKey(line) {
352
+ const content = line.content;
353
+ if (content.startsWith('<<')) {
354
+ throw new SkillYamlError(exports.SkillYamlErrorCode.MERGE_KEY_FORBIDDEN, line.number);
355
+ }
356
+ if (content.startsWith('&') || content.startsWith('*')) {
357
+ throw new SkillYamlError(exports.SkillYamlErrorCode.ALIAS_FORBIDDEN, line.number);
358
+ }
359
+ if (content.startsWith('!')) {
360
+ throw new SkillYamlError(exports.SkillYamlErrorCode.TAG_FORBIDDEN, line.number);
361
+ }
362
+ if (content.startsWith('?') || content.startsWith('[') || content.startsWith('{')) {
363
+ throw new SkillYamlError(exports.SkillYamlErrorCode.UNSUPPORTED, line.number);
364
+ }
365
+ if (!KEY_HEAD.test(content)) {
366
+ throw new SkillYamlError(exports.SkillYamlErrorCode.SYNTAX, line.number);
367
+ }
368
+ const tokenLength = this.keyTokenLength(content);
369
+ const colon = content.indexOf(':', tokenLength);
370
+ const rawKey = content.slice(0, colon).trim();
371
+ const key = rawKey.startsWith('"') || rawKey.startsWith("'")
372
+ ? this.parseQuoted(rawKey, line)
373
+ : rawKey;
374
+ if (key.length > this.profile.maxScalarLength) {
375
+ throw new SkillYamlError(exports.SkillYamlErrorCode.SCALAR_LIMIT, line.number);
376
+ }
377
+ if (this.profile.forbiddenKeys.includes(key)) {
378
+ throw new SkillYamlError(exports.SkillYamlErrorCode.FORBIDDEN_KEY, line.number);
379
+ }
380
+ return key;
381
+ }
382
+ parseValue(rest, indent, depth, line) {
383
+ if (rest === '') {
384
+ const next = this.peek();
385
+ if (next && next.indent === indent && this.isSequenceEntry(next.content)) {
386
+ this.checkDepth(depth + 1, next);
387
+ return this.parseSequence(indent, depth + 1);
388
+ }
389
+ return this.parseIndentedValue(indent, depth + 1, line);
390
+ }
391
+ if (rest[0] === '|' || rest[0] === '>') {
392
+ return this.parseBlockScalar(rest, indent, line);
393
+ }
394
+ this.countNode(line);
395
+ return this.parseScalar(rest, line);
396
+ }
397
+ /** Read the nested block owned by a line, or null when there is none. */
398
+ parseIndentedValue(indent, depth, owner) {
399
+ const next = this.peek();
400
+ if (!next || next.indent <= indent) {
401
+ this.countNode(owner);
402
+ return null;
403
+ }
404
+ this.checkDepth(depth, next);
405
+ return this.parseNode(next.indent, depth);
406
+ }
407
+ // ---------------------------------------------------------------------------
408
+ // Scalars
409
+ // ---------------------------------------------------------------------------
410
+ parseScalar(raw, line) {
411
+ if (raw.startsWith('&') || raw.startsWith('*')) {
412
+ throw new SkillYamlError(exports.SkillYamlErrorCode.ALIAS_FORBIDDEN, line.number);
413
+ }
414
+ if (raw.startsWith('!')) {
415
+ throw new SkillYamlError(exports.SkillYamlErrorCode.TAG_FORBIDDEN, line.number);
416
+ }
417
+ if (raw === '[]') {
418
+ this.countNode(line);
419
+ return [];
420
+ }
421
+ if (raw === '{}') {
422
+ this.countNode(line);
423
+ return Object.create(null);
424
+ }
425
+ if (raw.startsWith('[') || raw.startsWith('{') || raw.startsWith('%') || raw.startsWith('`')) {
426
+ throw new SkillYamlError(exports.SkillYamlErrorCode.UNSUPPORTED, line.number);
427
+ }
428
+ if (raw.startsWith('"') || raw.startsWith("'")) {
429
+ const value = this.parseQuoted(raw, line);
430
+ this.checkScalarLength(value, line);
431
+ return value;
432
+ }
433
+ this.checkScalarLength(raw, line);
434
+ return this.resolvePlain(raw);
435
+ }
436
+ checkScalarLength(value, line) {
437
+ if (value.length > this.profile.maxScalarLength) {
438
+ throw new SkillYamlError(exports.SkillYamlErrorCode.SCALAR_LIMIT, line.number);
439
+ }
440
+ }
441
+ resolvePlain(raw) {
442
+ if (raw === '~' || raw === 'null' || raw === 'Null' || raw === 'NULL')
443
+ return null;
444
+ if (raw === 'true' || raw === 'True' || raw === 'TRUE')
445
+ return true;
446
+ if (raw === 'false' || raw === 'False' || raw === 'FALSE')
447
+ return false;
448
+ if (/^-?(?:0|[1-9][0-9]*)$/.test(raw)) {
449
+ const parsed = Number(raw);
450
+ return Number.isSafeInteger(parsed) ? parsed : raw;
451
+ }
452
+ if (/^-?(?:0|[1-9][0-9]*)\.[0-9]+$/.test(raw))
453
+ return Number(raw);
454
+ return raw;
455
+ }
456
+ parseQuoted(raw, line) {
457
+ const quote = raw[0];
458
+ if (raw.length < 2 || !raw.endsWith(quote)) {
459
+ throw new SkillYamlError(exports.SkillYamlErrorCode.SYNTAX, line.number);
460
+ }
461
+ const body = raw.slice(1, -1);
462
+ if (quote === "'") {
463
+ let out = '';
464
+ for (let i = 0; i < body.length; i++) {
465
+ if (body[i] === "'") {
466
+ if (body[i + 1] !== "'")
467
+ throw new SkillYamlError(exports.SkillYamlErrorCode.SYNTAX, line.number);
468
+ i++;
469
+ }
470
+ out += body[i];
471
+ }
472
+ return out;
473
+ }
474
+ let out = '';
475
+ for (let i = 0; i < body.length; i++) {
476
+ const ch = body[i];
477
+ if (ch !== '\\') {
478
+ if (ch === '"')
479
+ throw new SkillYamlError(exports.SkillYamlErrorCode.SYNTAX, line.number);
480
+ out += ch;
481
+ continue;
482
+ }
483
+ const escape = body[++i];
484
+ switch (escape) {
485
+ case '"':
486
+ case '\\':
487
+ case '/':
488
+ out += escape;
489
+ break;
490
+ case 'n':
491
+ out += '\n';
492
+ break;
493
+ case 't':
494
+ out += '\t';
495
+ break;
496
+ case 'r':
497
+ out += '\r';
498
+ break;
499
+ case 'u': {
500
+ const hex = body.slice(i + 1, i + 5);
501
+ if (!/^[0-9a-fA-F]{4}$/.test(hex)) {
502
+ throw new SkillYamlError(exports.SkillYamlErrorCode.SYNTAX, line.number);
503
+ }
504
+ out += String.fromCharCode(parseInt(hex, 16));
505
+ i += 4;
506
+ break;
507
+ }
508
+ default:
509
+ throw new SkillYamlError(exports.SkillYamlErrorCode.UNSUPPORTED, line.number);
510
+ }
511
+ }
512
+ return out;
513
+ }
514
+ /** Literal (`|`) and folded (`>`) block scalars with `-`/`+` chomping. */
515
+ parseBlockScalar(header, indent, owner) {
516
+ const match = /^([|>])([-+]?)$/.exec(header.trim());
517
+ if (!match)
518
+ throw new SkillYamlError(exports.SkillYamlErrorCode.UNSUPPORTED, owner.number);
519
+ const [, style, chomp] = match;
520
+ const collected = [];
521
+ let blockIndent = -1;
522
+ while (this.cursor < this.lines.length) {
523
+ const line = this.lines[this.cursor];
524
+ const isBlank = line.raw.trim() === '';
525
+ if (!isBlank && line.indent <= indent)
526
+ break;
527
+ if (!isBlank && blockIndent === -1)
528
+ blockIndent = line.indent;
529
+ collected.push(isBlank ? '' : line.raw.slice(blockIndent));
530
+ this.cursor++;
531
+ }
532
+ while (collected.length > 0 && collected[collected.length - 1] === '')
533
+ collected.pop();
534
+ this.countNode(owner);
535
+ let body;
536
+ if (style === '|') {
537
+ body = collected.join('\n');
538
+ }
539
+ else {
540
+ body = collected.reduce((acc, current, index) => {
541
+ if (index === 0)
542
+ return current;
543
+ const previous = collected[index - 1];
544
+ if (current === '' || previous === '')
545
+ return `${acc}\n${current}`;
546
+ return `${acc} ${current}`;
547
+ }, '');
548
+ }
549
+ if (chomp !== '-' && collected.length > 0)
550
+ body += '\n';
551
+ this.checkScalarLength(body, owner);
552
+ return body;
553
+ }
554
+ }
555
+ // =============================================================================
556
+ // Public API
557
+ // =============================================================================
558
+ /**
559
+ * Parse a YAML document under the safe profile.
560
+ *
561
+ * @param input Document bytes or text
562
+ * @param profile Bounds to enforce; defaults to {@link SKILL_YAML_SAFE_PROFILE}
563
+ * @returns The parsed value; mappings have a null prototype
564
+ * @throws SkillYamlError for every rejection, including plain syntax errors
565
+ */
566
+ function parseSkillYaml(input, profile = skills_1.SKILL_YAML_SAFE_PROFILE) {
567
+ if (profile.allowAliases || profile.allowCustomTags) {
568
+ // The subset has no way to honour aliases or tags, so a profile that asks
569
+ // for them would silently under-enforce rather than parse them.
570
+ throw new SkillYamlError(exports.SkillYamlErrorCode.UNSUPPORTED);
571
+ }
572
+ const text = decodeUtf8(input, profile.maxBytes);
573
+ return new Parser(toLines(text), profile).parseDocument();
574
+ }
575
+ /**
576
+ * Extract and parse the YAML frontmatter of a Markdown document.
577
+ *
578
+ * Used for `SKILL.md`, whose frontmatter must agree with the manifest. The
579
+ * frontmatter is parsed under the same profile as the manifest: it is authored
580
+ * by the same untrusted publisher.
581
+ *
582
+ * @returns The parsed frontmatter, or null when the document has none
583
+ * @throws SkillYamlError when frontmatter is present but violates the profile
584
+ */
585
+ function parseSkillFrontmatter(markdown, profile = skills_1.SKILL_YAML_SAFE_PROFILE) {
586
+ const normalized = markdown.replace(/\r\n/g, '\n');
587
+ if (!normalized.startsWith('---\n'))
588
+ return null;
589
+ const end = normalized.indexOf('\n---', 3);
590
+ if (end === -1)
591
+ return null;
592
+ return parseSkillYaml(normalized.slice(4, end + 1), profile);
593
+ }