@skaile/workspaces 5.9.0 → 5.10.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 (296) hide show
  1. package/CHANGELOG.md +96 -0
  2. package/dist/{asset-feeds-XMKKUUK6.js → asset-feeds-ELEBTNUS.js} +18 -18
  3. package/dist/{asset-feeds-XMKKUUK6.js.map → asset-feeds-ELEBTNUS.js.map} +1 -1
  4. package/dist/asset-manager/catalog-deployer.js +8 -8
  5. package/dist/asset-manager/index.js +14 -14
  6. package/dist/asset-manager/installer.js +10 -10
  7. package/dist/asset-manager/renderers.js +9 -9
  8. package/dist/asset-manager/src/index.d.ts +300 -36
  9. package/dist/asset-manager/src/index.d.ts.map +1 -1
  10. package/dist/asset-manager/src/install-agent.d.ts +3 -1
  11. package/dist/asset-manager/src/install-agent.d.ts.map +1 -1
  12. package/dist/asset-manager/src/install-instances.d.ts +31 -1
  13. package/dist/asset-manager/src/install-instances.d.ts.map +1 -1
  14. package/dist/asset-manager/src/installer.d.ts +20 -0
  15. package/dist/asset-manager/src/installer.d.ts.map +1 -1
  16. package/dist/asset-manager/src/renderers.d.ts +4 -5
  17. package/dist/asset-manager/src/renderers.d.ts.map +1 -1
  18. package/dist/bridge/drivers/claude-sdk.js +11 -11
  19. package/dist/bridge/drivers/codex.js +11 -11
  20. package/dist/bridge/drivers/continue.js +10 -10
  21. package/dist/bridge/drivers/echo.js +2 -2
  22. package/dist/bridge/drivers/gemini.js +7 -7
  23. package/dist/bridge/drivers/goose.js +10 -10
  24. package/dist/bridge/drivers/omp.js +3 -3
  25. package/dist/bridge/drivers/opencode.js +10 -10
  26. package/dist/bridge/drivers/qwen.js +7 -7
  27. package/dist/bridge/index.js +12 -12
  28. package/dist/{chunk-36AFURKZ.js → chunk-2FMEGSBN.js} +38 -11
  29. package/dist/chunk-2FMEGSBN.js.map +1 -0
  30. package/dist/{chunk-IMKSM5NL.js → chunk-2JMLDZLP.js} +1069 -182
  31. package/dist/chunk-2JMLDZLP.js.map +1 -0
  32. package/dist/{chunk-B6GIW55K.js → chunk-32XKCNCL.js} +6 -3
  33. package/dist/chunk-32XKCNCL.js.map +1 -0
  34. package/dist/{chunk-4MQS7CAF.js → chunk-3BEY4WK3.js} +371 -175
  35. package/dist/chunk-3BEY4WK3.js.map +1 -0
  36. package/dist/{chunk-FYXZRVID.js → chunk-3KHYGOEY.js} +3 -3
  37. package/dist/{chunk-FYXZRVID.js.map → chunk-3KHYGOEY.js.map} +1 -1
  38. package/dist/{chunk-CGT45WN7.js → chunk-3MKPZZRE.js} +3 -3
  39. package/dist/{chunk-CGT45WN7.js.map → chunk-3MKPZZRE.js.map} +1 -1
  40. package/dist/{chunk-QVNRCDTV.js → chunk-4OV5DSBB.js} +4 -4
  41. package/dist/chunk-4OV5DSBB.js.map +1 -0
  42. package/dist/{chunk-GKMZ6THE.js → chunk-4P3KTUZH.js} +33 -33
  43. package/dist/chunk-4P3KTUZH.js.map +1 -0
  44. package/dist/{chunk-ZTBAYUDY.js → chunk-5QI2JYJC.js} +2 -2
  45. package/dist/{chunk-ZTBAYUDY.js.map → chunk-5QI2JYJC.js.map} +1 -1
  46. package/dist/{chunk-EF7NPDDU.js → chunk-6HHE63CO.js} +31 -17
  47. package/dist/chunk-6HHE63CO.js.map +1 -0
  48. package/dist/{chunk-TTRYE6AC.js → chunk-7CR6HT2X.js} +8 -8
  49. package/dist/{chunk-TTRYE6AC.js.map → chunk-7CR6HT2X.js.map} +1 -1
  50. package/dist/{chunk-FZNG4V4J.js → chunk-7I5VRVDP.js} +3 -3
  51. package/dist/{chunk-FZNG4V4J.js.map → chunk-7I5VRVDP.js.map} +1 -1
  52. package/dist/{chunk-P67WJVP4.js → chunk-CLTHEKHR.js} +10 -9
  53. package/dist/chunk-CLTHEKHR.js.map +1 -0
  54. package/dist/{chunk-UMVKJM4Q.js → chunk-DALV4HHP.js} +18 -3
  55. package/dist/chunk-DALV4HHP.js.map +1 -0
  56. package/dist/{chunk-IR33D6EP.js → chunk-FRPBSUFH.js} +5 -5
  57. package/dist/{chunk-IR33D6EP.js.map → chunk-FRPBSUFH.js.map} +1 -1
  58. package/dist/{chunk-W5DWWE4Y.js → chunk-G54USEUP.js} +4 -4
  59. package/dist/{chunk-W5DWWE4Y.js.map → chunk-G54USEUP.js.map} +1 -1
  60. package/dist/{chunk-Y7QA2OLD.js → chunk-GEWAIQZ5.js} +24 -20
  61. package/dist/chunk-GEWAIQZ5.js.map +1 -0
  62. package/dist/{chunk-GB7WDMH2.js → chunk-GFCXNFTW.js} +4 -4
  63. package/dist/{chunk-GB7WDMH2.js.map → chunk-GFCXNFTW.js.map} +1 -1
  64. package/dist/{chunk-5NNNV76P.js → chunk-HJ5MCB3L.js} +2 -2
  65. package/dist/{chunk-5NNNV76P.js.map → chunk-HJ5MCB3L.js.map} +1 -1
  66. package/dist/{chunk-2LWYNQK7.js → chunk-HOHUEKES.js} +3 -3
  67. package/dist/{chunk-2LWYNQK7.js.map → chunk-HOHUEKES.js.map} +1 -1
  68. package/dist/{chunk-UM7RIAHO.js → chunk-IJHH4DSW.js} +8 -8
  69. package/dist/{chunk-UM7RIAHO.js.map → chunk-IJHH4DSW.js.map} +1 -1
  70. package/dist/{chunk-BTE2V4IW.js → chunk-IXWODEED.js} +40 -7
  71. package/dist/chunk-IXWODEED.js.map +1 -0
  72. package/dist/{chunk-K3CVFRVS.js → chunk-JFXQEVLF.js} +3 -3
  73. package/dist/{chunk-K3CVFRVS.js.map → chunk-JFXQEVLF.js.map} +1 -1
  74. package/dist/{chunk-JAKOMFC6.js → chunk-JZCSNEHK.js} +77 -31
  75. package/dist/chunk-JZCSNEHK.js.map +1 -0
  76. package/dist/{chunk-CKQEIY43.js → chunk-MVQ3Q2HM.js} +4 -4
  77. package/dist/{chunk-CKQEIY43.js.map → chunk-MVQ3Q2HM.js.map} +1 -1
  78. package/dist/{chunk-LAMCXQGA.js → chunk-NRDSGLCQ.js} +31 -24
  79. package/dist/chunk-NRDSGLCQ.js.map +1 -0
  80. package/dist/{chunk-V2DXZYBB.js → chunk-NWDSLXOX.js} +3 -3
  81. package/dist/{chunk-V2DXZYBB.js.map → chunk-NWDSLXOX.js.map} +1 -1
  82. package/dist/{chunk-MR5HBOUF.js → chunk-OBVJ7RPW.js} +3 -3
  83. package/dist/{chunk-MR5HBOUF.js.map → chunk-OBVJ7RPW.js.map} +1 -1
  84. package/dist/{chunk-J7U3PIOE.js → chunk-OOWHXOK6.js} +4 -4
  85. package/dist/{chunk-J7U3PIOE.js.map → chunk-OOWHXOK6.js.map} +1 -1
  86. package/dist/{chunk-YSHVQGUS.js → chunk-PE36IF2D.js} +119 -30
  87. package/dist/chunk-PE36IF2D.js.map +1 -0
  88. package/dist/{chunk-S53LOR7B.js → chunk-QG3HOJEK.js} +3 -3
  89. package/dist/{chunk-S53LOR7B.js.map → chunk-QG3HOJEK.js.map} +1 -1
  90. package/dist/{chunk-2FRUUDZY.js → chunk-SBFW3CJH.js} +5 -5
  91. package/dist/{chunk-2FRUUDZY.js.map → chunk-SBFW3CJH.js.map} +1 -1
  92. package/dist/{chunk-UAROCOXF.js → chunk-SX5U422E.js} +3 -3
  93. package/dist/{chunk-UAROCOXF.js.map → chunk-SX5U422E.js.map} +1 -1
  94. package/dist/{chunk-QVEKLSEH.js → chunk-TH4CTXHX.js} +6 -6
  95. package/dist/{chunk-QVEKLSEH.js.map → chunk-TH4CTXHX.js.map} +1 -1
  96. package/dist/{chunk-JZ5EHBPI.js → chunk-TRSQP3JD.js} +3 -3
  97. package/dist/{chunk-JZ5EHBPI.js.map → chunk-TRSQP3JD.js.map} +1 -1
  98. package/dist/{chunk-FVJK4QWM.js → chunk-V5TZH4GF.js} +4 -4
  99. package/dist/{chunk-FVJK4QWM.js.map → chunk-V5TZH4GF.js.map} +1 -1
  100. package/dist/{chunk-GXLQLPE5.js → chunk-V7PQZOBR.js} +5 -5
  101. package/dist/{chunk-GXLQLPE5.js.map → chunk-V7PQZOBR.js.map} +1 -1
  102. package/dist/{chunk-DNZYOKOJ.js → chunk-VLXDXRRX.js} +3 -3
  103. package/dist/{chunk-DNZYOKOJ.js.map → chunk-VLXDXRRX.js.map} +1 -1
  104. package/dist/{chunk-Y4N2NUZD.js → chunk-WBYDAL6X.js} +4 -4
  105. package/dist/{chunk-Y4N2NUZD.js.map → chunk-WBYDAL6X.js.map} +1 -1
  106. package/dist/{chunk-SCOT677Q.js → chunk-XCNK4UE5.js} +5 -5
  107. package/dist/{chunk-SCOT677Q.js.map → chunk-XCNK4UE5.js.map} +1 -1
  108. package/dist/{chunk-GTILM2CI.js → chunk-Y34MSWEZ.js} +43 -12
  109. package/dist/chunk-Y34MSWEZ.js.map +1 -0
  110. package/dist/{chunk-4PTSR4UU.js → chunk-Y63UQZ7P.js} +3 -3
  111. package/dist/{chunk-4PTSR4UU.js.map → chunk-Y63UQZ7P.js.map} +1 -1
  112. package/dist/chunk-YBQONMH2.js +465 -0
  113. package/dist/chunk-YBQONMH2.js.map +1 -0
  114. package/dist/{chunk-7AI3Q5AQ.js → chunk-Z2K6BGUR.js} +71 -24
  115. package/dist/chunk-Z2K6BGUR.js.map +1 -0
  116. package/dist/{chunk-UO7WPLDY.js → chunk-ZGQTS3Y4.js} +3 -3
  117. package/dist/{chunk-UO7WPLDY.js.map → chunk-ZGQTS3Y4.js.map} +1 -1
  118. package/dist/cli/index.js +910 -717
  119. package/dist/cli/index.js.map +1 -1
  120. package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
  121. package/dist/cli/src/commands/catalog.d.ts +8 -5
  122. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  123. package/dist/cli/src/commands/diff.d.ts +3 -1
  124. package/dist/cli/src/commands/diff.d.ts.map +1 -1
  125. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  126. package/dist/cli/src/commands/library-index.d.ts +34 -2
  127. package/dist/cli/src/commands/library-index.d.ts.map +1 -1
  128. package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
  129. package/dist/cli/src/commands/manage.d.ts +6 -5
  130. package/dist/cli/src/commands/manage.d.ts.map +1 -1
  131. package/dist/cli/src/commands/migrate-assets.d.ts.map +1 -1
  132. package/dist/cli/src/commands/outdated.d.ts +7 -5
  133. package/dist/cli/src/commands/outdated.d.ts.map +1 -1
  134. package/dist/cli/src/commands/project.d.ts +11 -8
  135. package/dist/cli/src/commands/project.d.ts.map +1 -1
  136. package/dist/cli/src/commands/source.d.ts +30 -1
  137. package/dist/cli/src/commands/source.d.ts.map +1 -1
  138. package/dist/cli/src/commands/update.d.ts.map +1 -1
  139. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  140. package/dist/cli/src/commands/why.d.ts.map +1 -1
  141. package/dist/cli/src/skill-checks.d.ts +47 -2
  142. package/dist/cli/src/skill-checks.d.ts.map +1 -1
  143. package/dist/connectors/config.js +5 -5
  144. package/dist/connectors/index.js +15 -15
  145. package/dist/{connectors-C7UQ73BK.js → connectors-OXP2JBGI.js} +18 -18
  146. package/dist/{connectors-C7UQ73BK.js.map → connectors-OXP2JBGI.js.map} +1 -1
  147. package/dist/core/index.js +7 -7
  148. package/dist/core/logging.js +1 -1
  149. package/dist/core/manifest.js +2 -2
  150. package/dist/core/models.js +1 -1
  151. package/dist/core/publish-manifest.js +2 -2
  152. package/dist/core/ref.js +1 -1
  153. package/dist/core/runtime-assets.js +5 -5
  154. package/dist/core/src/index.d.ts +2 -1
  155. package/dist/core/src/index.d.ts.map +1 -1
  156. package/dist/core/src/lock.d.ts +5 -2
  157. package/dist/core/src/lock.d.ts.map +1 -1
  158. package/dist/core/src/logging/sinks/sqlite-runtime.d.ts.map +1 -1
  159. package/dist/core/src/manifest.d.ts.map +1 -1
  160. package/dist/core/src/models.d.ts +21 -5
  161. package/dist/core/src/models.d.ts.map +1 -1
  162. package/dist/core/src/publish-manifest.d.ts +19 -3
  163. package/dist/core/src/publish-manifest.d.ts.map +1 -1
  164. package/dist/core/src/repo-manager.d.ts.map +1 -1
  165. package/dist/core/src/requirements.d.ts +26 -0
  166. package/dist/core/src/requirements.d.ts.map +1 -0
  167. package/dist/core/src/walker.d.ts.map +1 -1
  168. package/dist/core/src/workspace-config.d.ts +18 -0
  169. package/dist/core/src/workspace-config.d.ts.map +1 -1
  170. package/dist/core/src/workspace-yaml-editor.d.ts +4 -1
  171. package/dist/core/src/workspace-yaml-editor.d.ts.map +1 -1
  172. package/dist/core/workspace-config.js +4 -4
  173. package/dist/deploy/index.js +7 -7
  174. package/dist/discovery/index.js +5 -5
  175. package/dist/discovery/src/builtin-providers.d.ts.map +1 -1
  176. package/dist/discovery/src/discover-manifest.d.ts.map +1 -1
  177. package/dist/discovery/src/discover.d.ts.map +1 -1
  178. package/dist/discovery/src/source-config.d.ts.map +1 -1
  179. package/dist/discovery/src/tree-entries.d.ts.map +1 -1
  180. package/dist/{ensure-sources-SRC2DVR5.js → ensure-sources-5ISVIA4T.js} +17 -17
  181. package/dist/{ensure-sources-SRC2DVR5.js.map → ensure-sources-5ISVIA4T.js.map} +1 -1
  182. package/dist/factory-assets/connectors/box.js +15 -15
  183. package/dist/factory-assets/connectors/deploy.js +15 -15
  184. package/dist/factory-assets/connectors/devserver.js +15 -15
  185. package/dist/factory-assets/connectors/flow/adapter.js +15 -15
  186. package/dist/factory-assets/connectors/flow/engine.js +8 -8
  187. package/dist/factory-assets/connectors/flow/run-flow.js +17 -17
  188. package/dist/factory-assets/connectors/flow.js +15 -15
  189. package/dist/factory-assets/connectors/git.js +15 -15
  190. package/dist/factory-assets/connectors/gmail.js +15 -15
  191. package/dist/factory-assets/connectors/googledrive.js +15 -15
  192. package/dist/factory-assets/connectors/local.js +15 -15
  193. package/dist/factory-assets/connectors/mattermost.js +15 -15
  194. package/dist/factory-assets/connectors/memory.js +15 -15
  195. package/dist/factory-assets/connectors/minio.js +15 -15
  196. package/dist/factory-assets/connectors/postgres.js +15 -15
  197. package/dist/factory-assets/connectors/s3.js +15 -15
  198. package/dist/factory-assets/connectors/sharepoint.js +15 -15
  199. package/dist/factory-assets/connectors/sqlite.js +15 -15
  200. package/dist/factory-assets/connectors/static-server.js +15 -15
  201. package/dist/factory-assets/connectors/tunnel.js +15 -15
  202. package/dist/factory-assets/connectors/webdav.js +15 -15
  203. package/dist/factory-assets/connectors/xstate-store.js +15 -15
  204. package/dist/factory-assets/connectors/xstate.js +15 -15
  205. package/dist/factory-assets/skills/authoring-skaile-manifests/SKILL.md +9 -3
  206. package/dist/{flows-CBYRSAGS.js → flows-HMSE76PO.js} +12 -12
  207. package/dist/{flows-CBYRSAGS.js.map → flows-HMSE76PO.js.map} +1 -1
  208. package/dist/{helpers-XAEKCZKT.js → helpers-X6URBGSF.js} +17 -17
  209. package/dist/{helpers-XAEKCZKT.js.map → helpers-X6URBGSF.js.map} +1 -1
  210. package/dist/library/index.js +11 -11
  211. package/dist/library/install.js +3 -3
  212. package/dist/library/src/index.d.ts +2 -1
  213. package/dist/library/src/index.d.ts.map +1 -1
  214. package/dist/library/src/local/library-dir.d.ts +42 -0
  215. package/dist/library/src/local/library-dir.d.ts.map +1 -0
  216. package/dist/library/src/local/library-manager.d.ts +10 -1
  217. package/dist/library/src/local/library-manager.d.ts.map +1 -1
  218. package/dist/library/src/local/library.d.ts +2 -2
  219. package/dist/library/src/local/library.d.ts.map +1 -1
  220. package/dist/library/src/local/local-catalog-source.d.ts +9 -0
  221. package/dist/library/src/local/local-catalog-source.d.ts.map +1 -1
  222. package/dist/library/src/manifest-writer.d.ts +55 -4
  223. package/dist/library/src/manifest-writer.d.ts.map +1 -1
  224. package/dist/library/src/remote/cache.d.ts +18 -1
  225. package/dist/library/src/remote/cache.d.ts.map +1 -1
  226. package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
  227. package/dist/library/src/remote/rest-catalog-source.d.ts.map +1 -1
  228. package/dist/library/src/sync/git-driver.d.ts +5 -6
  229. package/dist/library/src/sync/git-driver.d.ts.map +1 -1
  230. package/dist/{library-publish-VJSWMOLH.js → library-publish-OS3JDW4S.js} +123 -41
  231. package/dist/library-publish-OS3JDW4S.js.map +1 -0
  232. package/dist/open-library-4QSUORI6.js +40 -0
  233. package/dist/{open-library-DB2PNL2X.js.map → open-library-4QSUORI6.js.map} +1 -1
  234. package/dist/open-registry-VCKS3MP5.js +32 -0
  235. package/dist/{open-registry-ZUZJ7MS7.js.map → open-registry-VCKS3MP5.js.map} +1 -1
  236. package/dist/paths-BVO56A25.js +22 -0
  237. package/dist/{paths-FQ64OLJG.js.map → paths-BVO56A25.js.map} +1 -1
  238. package/dist/{plugin-store-MPAMD5OT.js → plugin-store-X7GPWGBG.js} +9 -9
  239. package/dist/{plugin-store-MPAMD5OT.js.map → plugin-store-X7GPWGBG.js.map} +1 -1
  240. package/dist/{project-I6NX3NFB.js → project-PAXP46RD.js} +20 -20
  241. package/dist/{project-I6NX3NFB.js.map → project-PAXP46RD.js.map} +1 -1
  242. package/dist/resolver/index.js +8 -8
  243. package/dist/runner/index.js +29 -29
  244. package/dist/runner/src/agent.d.ts.map +1 -1
  245. package/dist/sdk/asset-manager.js +14 -14
  246. package/dist/sdk/bridge.js +12 -12
  247. package/dist/sdk/core.js +7 -7
  248. package/dist/sdk/flow.js +8 -8
  249. package/dist/sdk/index.js +29 -29
  250. package/dist/sdk/resolver.js +8 -8
  251. package/dist/sdk/runner.js +29 -29
  252. package/dist/{setup-B7JUHYJW.js → setup-BV55VHWC.js} +22 -22
  253. package/dist/{setup-B7JUHYJW.js.map → setup-BV55VHWC.js.map} +1 -1
  254. package/dist/{skills-TVO26Y4V.js → skills-EDFUCJPX.js} +13 -13
  255. package/dist/{skills-TVO26Y4V.js.map → skills-EDFUCJPX.js.map} +1 -1
  256. package/dist/source-E4VAT5RZ.js +41 -0
  257. package/dist/{source-PJBMDCKX.js.map → source-E4VAT5RZ.js.map} +1 -1
  258. package/dist/{source-manifest-publish-LLJWXGID.js → source-manifest-publish-CLEE6TNH.js} +23 -23
  259. package/dist/{source-manifest-publish-LLJWXGID.js.map → source-manifest-publish-CLEE6TNH.js.map} +1 -1
  260. package/dist/tui/index.js +29 -29
  261. package/dist/types/manifests.js +1 -1
  262. package/dist/types/src/manifests/agent.d.ts +2 -0
  263. package/dist/types/src/manifests/agent.d.ts.map +1 -1
  264. package/dist/types/src/manifests/contract.d.ts +2 -0
  265. package/dist/types/src/manifests/contract.d.ts.map +1 -1
  266. package/dist/types/src/manifests/index.d.ts +3 -3
  267. package/dist/types/src/manifests/index.d.ts.map +1 -1
  268. package/dist/types/src/manifests/prompt.d.ts +2 -0
  269. package/dist/types/src/manifests/prompt.d.ts.map +1 -1
  270. package/dist/workspace-plugin/adapters/mcp.js +22 -22
  271. package/dist/workspace-plugin/adapters/omp.js +14 -14
  272. package/dist/workspace-plugin/index.js +2 -2
  273. package/package.json +1 -1
  274. package/dist/chunk-36AFURKZ.js.map +0 -1
  275. package/dist/chunk-4MQS7CAF.js.map +0 -1
  276. package/dist/chunk-7AI3Q5AQ.js.map +0 -1
  277. package/dist/chunk-B6GIW55K.js.map +0 -1
  278. package/dist/chunk-BTE2V4IW.js.map +0 -1
  279. package/dist/chunk-EF7NPDDU.js.map +0 -1
  280. package/dist/chunk-GKMZ6THE.js.map +0 -1
  281. package/dist/chunk-GTILM2CI.js.map +0 -1
  282. package/dist/chunk-IMKSM5NL.js.map +0 -1
  283. package/dist/chunk-JAKOMFC6.js.map +0 -1
  284. package/dist/chunk-LAMCXQGA.js.map +0 -1
  285. package/dist/chunk-P67WJVP4.js.map +0 -1
  286. package/dist/chunk-QVNRCDTV.js.map +0 -1
  287. package/dist/chunk-UMVKJM4Q.js.map +0 -1
  288. package/dist/chunk-Y7QA2OLD.js.map +0 -1
  289. package/dist/chunk-YSHVQGUS.js.map +0 -1
  290. package/dist/chunk-ZAOGFXDO.js +0 -112
  291. package/dist/chunk-ZAOGFXDO.js.map +0 -1
  292. package/dist/library-publish-VJSWMOLH.js.map +0 -1
  293. package/dist/open-library-DB2PNL2X.js +0 -40
  294. package/dist/open-registry-ZUZJ7MS7.js +0 -32
  295. package/dist/paths-FQ64OLJG.js +0 -22
  296. package/dist/source-PJBMDCKX.js +0 -41
@@ -1 +1 @@
1
- {"version":3,"sources":["../cli/src/store-publisher.ts"],"names":[],"mappings":";;;AA+FO,SAAS,uBAAA,CACd,MAAA,GAAsB,cAAA,EAAe,EACrC,YAAY,GAAA,EACK;AAGjB,EAAA,MAAM,IAAA,GAAO,OACX,IAAA,EACA,IAAA,KACe;AACf,IAAA,MAAM,GAAA,GAAM,MAAM,aAAA,EAAc;AAChC,IAAA,OAAO,UAAA,CAAc,EAAE,GAAG,MAAA,EAAQ,GAAA,EAAI,EAAG,IAAA,EAAM,EAAE,SAAA,EAAW,GAAG,IAAA,EAAM,CAAA;AAAA,EACvE,CAAA;AACA,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,MAAM,IAAA,CAAK,YAAY,CAAA;AAAA,IAC3B,UAAA,EAAY,CAAC,IAAA,KAAS,IAAA,CAAK,mBAAmB,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,CAAA;AAAA,IACtE,WAAA,EAAa,MAAM,IAAA,CAAK,iBAAiB,CAAA;AAAA,IACzC,UAAA,EAAY,CAAC,EAAA,KAAO,IAAA,CAAK,CAAA,gBAAA,EAAmB,EAAE,CAAA,KAAA,CAAA,EAAS,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,IAAI,CAAA;AAAA,IACnF,QAAQ,CAAC,KAAA,KAAU,IAAA,CAAK,CAAA,aAAA,EAAgB,KAAK,CAAA,CAAE,CAAA;AAAA,IAC/C,kBAAkB,CAAC,EAAA,KAAO,IAAA,CAAK,CAAA,gBAAA,EAAmB,EAAE,CAAA,WAAA,CAAa,CAAA;AAAA,IACjE,cAAc,CAAC,EAAA,KAAO,IAAA,CAAK,CAAA,eAAA,EAAkB,EAAE,CAAA,QAAA,CAAU,CAAA;AAAA,IACzD,YAAA,EAAc,CAAC,EAAA,EAAI,IAAA,EAAM,WACvB,IAAA,CAAK,CAAA,eAAA,EAAkB,EAAE,CAAA,QAAA,CAAA,EAAY;AAAA,MACnC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA;AAAA,MACA,GAAI,SAAS,EAAE,MAAA,EAAQ,EAAE,MAAA,EAAQ,GAAA,EAAI,EAAE,GAAI;AAAC,KAC7C,CAAA;AAAA,IACH,cAAA,EAAgB,CAAC,EAAA,KAAO,IAAA,CAAK,CAAA,eAAA,EAAkB,EAAE,CAAA,UAAA,CAAA,EAAc,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,IAAI,CAAA;AAAA,IAC3F,qBAAA,EAAuB,CAAC,EAAA,KACtB,IAAA,CAAK,sBAAsB,kBAAA,CAAmB,EAAE,CAAC,CAAA,aAAA,CAAe;AAAA,GACpE;AACF","file":"chunk-K3CVFRVS.js","sourcesContent":["/**\n * Typed REST client for the AI Asset Store **publisher** surface — the\n * curator-publish flow (`skaile source manifest publish` / `yank`). Thin\n * wrappers over {@link storeFetch}; every method maps 1:1 to an `/api/v1/…`\n * endpoint. The {@link PublisherClient} interface is injectable so the\n * orchestration in `commands/source-manifest-publish.ts` can be unit-tested\n * against a fake without a live store.\n *\n * @docLink cli/dev-guide#store-publisher\n */\n\nimport { getStoreConfig, getStoreToken, type StoreConfig, storeFetch } from \"./store-client.ts\";\n\n/**\n * The publisher REST surface used by the curator-publish flow. Kept minimal —\n * only the endpoints `runPublish` / `runYank` actually call. Response shapes\n * are narrowed to the fields the orchestration reads (the server returns more).\n */\nexport interface PublisherClient {\n /**\n * Identity of the caller. `username` is the Keycloak login (personal-tier\n * namespace); `githubLogin` is the verified GitHub handle when connected —\n * the namespace to publish under when it differs from the login.\n */\n me(): Promise<{ username: string; githubLogin?: string | null }>;\n /** Register (or re-register) a source; returns the created/existing row id. */\n sourcesAdd(body: {\n url: string;\n ref: string;\n sidecarUrl?: string;\n sidecarRef?: string;\n /**\n * Target publisher namespace (the manifest's `publisher`). When it differs\n * from the caller's login username, the store resolves the CLAIMED Publisher\n * for it (the store must already have the claim). Omitted → the store\n * defaults to `@<username>` (personal).\n */\n namespace?: string;\n }): Promise<{ id: string }>;\n /** List sources — used to recover an id when `sourcesAdd` rejects a dup url. */\n sourcesList(): Promise<Array<{ id: string; url: string }>>;\n /** Kick off a source sync; returns the async job id to poll. */\n sourceSync(id: string): Promise<{ jobId: string }>;\n /** Poll a job's terminal status + per-item results. */\n jobGet(\n jobId: string,\n ): Promise<{ status: string; items?: Array<{ label: string; status: string; error?: string }> }>;\n /** Discovered publishable candidates for a synced source. */\n sourceCandidates(id: string): Promise<\n Array<{\n id: string;\n name: string;\n version: string;\n kind: string;\n published: boolean;\n assetRoot: string;\n }>\n >;\n /** Per-asset preview — the discovered file set + resolved candidate metadata. */\n assetPreview(id: string): Promise<{\n discoveredFiles: string[];\n candidate: { name: string; version: string; kind: string; publisherNamespace: string };\n }>;\n /**\n * Publish one asset. `dryRun` returns the would-be `{ manifest }` without\n * launching a job; the normal path returns `{ jobId }`.\n */\n assetPublish(\n id: string,\n body: { ref: string; files: string[] },\n dryRun?: boolean,\n ): Promise<{ jobId?: string; manifest?: unknown }>;\n /** Retract a published asset. Response body is ignored. */\n assetUnpublish(id: string): Promise<unknown>;\n /**\n * Read-only \"can I publish under `@<ns>` right now, and if not, what's the\n * path?\" probe. Backs the `publish --dry-run` namespace status line; its\n * `message` is store-authored and meant to be surfaced verbatim.\n */\n namespaceAvailability(ns: string): Promise<{\n namespace: string;\n status: \"owned-by-you\" | \"claimable-by-you\" | \"reserved\" | \"available\";\n claimMethod?: string;\n message: string;\n }>;\n}\n\n/**\n * Construct the real HTTP-backed {@link PublisherClient}. Every call carries a\n * longer timeout than the default store client because publish/sync trigger\n * server-side clone work.\n *\n * @param config - Store connection config; defaults to {@link getStoreConfig}.\n * @param timeoutMs - Per-request abort timeout (default 20s).\n */\nexport function makeHttpPublisherClient(\n config: StoreConfig = getStoreConfig(),\n timeoutMs = 20_000,\n): PublisherClient {\n // Acquire a fresh Keycloak token per call (device-flow session in\n // ~/.skaile/auth.json, refreshed on demand) rather than a static config.jwt.\n const call = async <T>(\n path: string,\n opts?: { method?: string; body?: unknown; params?: Record<string, string> },\n ): Promise<T> => {\n const jwt = await getStoreToken();\n return storeFetch<T>({ ...config, jwt }, path, { timeoutMs, ...opts });\n };\n return {\n me: () => call(\"/api/v1/me\"),\n sourcesAdd: (body) => call(\"/api/v1/sources\", { method: \"POST\", body }),\n sourcesList: () => call(\"/api/v1/sources\"),\n sourceSync: (id) => call(`/api/v1/sources/${id}/sync`, { method: \"POST\", body: {} }),\n jobGet: (jobId) => call(`/api/v1/jobs/${jobId}`),\n sourceCandidates: (id) => call(`/api/v1/sources/${id}/candidates`),\n assetPreview: (id) => call(`/api/v1/assets/${id}/preview`),\n assetPublish: (id, body, dryRun) =>\n call(`/api/v1/assets/${id}/publish`, {\n method: \"POST\",\n body,\n ...(dryRun ? { params: { dryRun: \"1\" } } : {}),\n }),\n assetUnpublish: (id) => call(`/api/v1/assets/${id}/unpublish`, { method: \"POST\", body: {} }),\n namespaceAvailability: (ns) =>\n call(`/api/v1/namespaces/${encodeURIComponent(ns)}/availability`),\n };\n}\n"]}
1
+ {"version":3,"sources":["../cli/src/store-publisher.ts"],"names":[],"mappings":";;;AA+FO,SAAS,uBAAA,CACd,MAAA,GAAsB,cAAA,EAAe,EACrC,YAAY,GAAA,EACK;AAGjB,EAAA,MAAM,IAAA,GAAO,OACX,IAAA,EACA,IAAA,KACe;AACf,IAAA,MAAM,GAAA,GAAM,MAAM,aAAA,EAAc;AAChC,IAAA,OAAO,UAAA,CAAc,EAAE,GAAG,MAAA,EAAQ,GAAA,EAAI,EAAG,IAAA,EAAM,EAAE,SAAA,EAAW,GAAG,IAAA,EAAM,CAAA;AAAA,EACvE,CAAA;AACA,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,MAAM,IAAA,CAAK,YAAY,CAAA;AAAA,IAC3B,UAAA,EAAY,CAAC,IAAA,KAAS,IAAA,CAAK,mBAAmB,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,CAAA;AAAA,IACtE,WAAA,EAAa,MAAM,IAAA,CAAK,iBAAiB,CAAA;AAAA,IACzC,UAAA,EAAY,CAAC,EAAA,KAAO,IAAA,CAAK,CAAA,gBAAA,EAAmB,EAAE,CAAA,KAAA,CAAA,EAAS,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,IAAI,CAAA;AAAA,IACnF,QAAQ,CAAC,KAAA,KAAU,IAAA,CAAK,CAAA,aAAA,EAAgB,KAAK,CAAA,CAAE,CAAA;AAAA,IAC/C,kBAAkB,CAAC,EAAA,KAAO,IAAA,CAAK,CAAA,gBAAA,EAAmB,EAAE,CAAA,WAAA,CAAa,CAAA;AAAA,IACjE,cAAc,CAAC,EAAA,KAAO,IAAA,CAAK,CAAA,eAAA,EAAkB,EAAE,CAAA,QAAA,CAAU,CAAA;AAAA,IACzD,YAAA,EAAc,CAAC,EAAA,EAAI,IAAA,EAAM,WACvB,IAAA,CAAK,CAAA,eAAA,EAAkB,EAAE,CAAA,QAAA,CAAA,EAAY;AAAA,MACnC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA;AAAA,MACA,GAAI,SAAS,EAAE,MAAA,EAAQ,EAAE,MAAA,EAAQ,GAAA,EAAI,EAAE,GAAI;AAAC,KAC7C,CAAA;AAAA,IACH,cAAA,EAAgB,CAAC,EAAA,KAAO,IAAA,CAAK,CAAA,eAAA,EAAkB,EAAE,CAAA,UAAA,CAAA,EAAc,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,IAAI,CAAA;AAAA,IAC3F,qBAAA,EAAuB,CAAC,EAAA,KACtB,IAAA,CAAK,sBAAsB,kBAAA,CAAmB,EAAE,CAAC,CAAA,aAAA,CAAe;AAAA,GACpE;AACF","file":"chunk-JFXQEVLF.js","sourcesContent":["/**\n * Typed REST client for the AI Asset Store **publisher** surface — the\n * curator-publish flow (`skaile source manifest publish` / `yank`). Thin\n * wrappers over {@link storeFetch}; every method maps 1:1 to an `/api/v1/…`\n * endpoint. The {@link PublisherClient} interface is injectable so the\n * orchestration in `commands/source-manifest-publish.ts` can be unit-tested\n * against a fake without a live store.\n *\n * @docLink cli/dev-guide#store-publisher\n */\n\nimport { getStoreConfig, getStoreToken, type StoreConfig, storeFetch } from \"./store-client.ts\";\n\n/**\n * The publisher REST surface used by the curator-publish flow. Kept minimal —\n * only the endpoints `runPublish` / `runYank` actually call. Response shapes\n * are narrowed to the fields the orchestration reads (the server returns more).\n */\nexport interface PublisherClient {\n /**\n * Identity of the caller. `username` is the Keycloak login (personal-tier\n * namespace); `githubLogin` is the verified GitHub handle when connected —\n * the namespace to publish under when it differs from the login.\n */\n me(): Promise<{ username: string; githubLogin?: string | null }>;\n /** Register (or re-register) a source; returns the created/existing row id. */\n sourcesAdd(body: {\n url: string;\n ref: string;\n sidecarUrl?: string;\n sidecarRef?: string;\n /**\n * Target publisher namespace (the manifest's `publisher`). When it differs\n * from the caller's login username, the store resolves the CLAIMED Publisher\n * for it (the store must already have the claim). Omitted → the store\n * defaults to `@<username>` (personal).\n */\n namespace?: string;\n }): Promise<{ id: string }>;\n /** List sources — used to recover an id when `sourcesAdd` rejects a dup url. */\n sourcesList(): Promise<Array<{ id: string; url: string }>>;\n /** Kick off a source sync; returns the async job id to poll. */\n sourceSync(id: string): Promise<{ jobId: string }>;\n /** Poll a job's terminal status + per-item results. */\n jobGet(\n jobId: string,\n ): Promise<{ status: string; items?: Array<{ label: string; status: string; error?: string }> }>;\n /** Discovered publishable candidates for a synced source. */\n sourceCandidates(id: string): Promise<\n Array<{\n id: string;\n name: string;\n version: string;\n kind: string;\n published: boolean;\n assetRoot: string;\n }>\n >;\n /** Per-asset preview — the discovered file set + resolved candidate metadata. */\n assetPreview(id: string): Promise<{\n discoveredFiles: string[];\n candidate: { name: string; version: string; kind: string; publisherNamespace: string };\n }>;\n /**\n * Publish one asset. `dryRun` returns the would-be `{ manifest }` without\n * launching a job; the normal path returns `{ jobId }`.\n */\n assetPublish(\n id: string,\n body: { ref: string; files: string[] },\n dryRun?: boolean,\n ): Promise<{ jobId?: string; manifest?: unknown }>;\n /** Retract a published asset. Response body is ignored. */\n assetUnpublish(id: string): Promise<unknown>;\n /**\n * Read-only \"can I publish under `@<ns>` right now, and if not, what's the\n * path?\" probe. Backs the `publish --dry-run` namespace status line; its\n * `message` is store-authored and meant to be surfaced verbatim.\n */\n namespaceAvailability(ns: string): Promise<{\n namespace: string;\n status: \"owned-by-you\" | \"claimable-by-you\" | \"reserved\" | \"available\";\n claimMethod?: string;\n message: string;\n }>;\n}\n\n/**\n * Construct the real HTTP-backed {@link PublisherClient}. Every call carries a\n * longer timeout than the default store client because publish/sync trigger\n * server-side clone work.\n *\n * @param config - Store connection config; defaults to {@link getStoreConfig}.\n * @param timeoutMs - Per-request abort timeout (default 20s).\n */\nexport function makeHttpPublisherClient(\n config: StoreConfig = getStoreConfig(),\n timeoutMs = 20_000,\n): PublisherClient {\n // Acquire a fresh Keycloak token per call (device-flow session in\n // ~/.skaile/auth.json, refreshed on demand) rather than a static config.jwt.\n const call = async <T>(\n path: string,\n opts?: { method?: string; body?: unknown; params?: Record<string, string> },\n ): Promise<T> => {\n const jwt = await getStoreToken();\n return storeFetch<T>({ ...config, jwt }, path, { timeoutMs, ...opts });\n };\n return {\n me: () => call(\"/api/v1/me\"),\n sourcesAdd: (body) => call(\"/api/v1/sources\", { method: \"POST\", body }),\n sourcesList: () => call(\"/api/v1/sources\"),\n sourceSync: (id) => call(`/api/v1/sources/${id}/sync`, { method: \"POST\", body: {} }),\n jobGet: (jobId) => call(`/api/v1/jobs/${jobId}`),\n sourceCandidates: (id) => call(`/api/v1/sources/${id}/candidates`),\n assetPreview: (id) => call(`/api/v1/assets/${id}/preview`),\n assetPublish: (id, body, dryRun) =>\n call(`/api/v1/assets/${id}/publish`, {\n method: \"POST\",\n body,\n ...(dryRun ? { params: { dryRun: \"1\" } } : {}),\n }),\n assetUnpublish: (id) => call(`/api/v1/assets/${id}/unpublish`, { method: \"POST\", body: {} }),\n namespaceAvailability: (ns) =>\n call(`/api/v1/namespaces/${encodeURIComponent(ns)}/availability`),\n };\n}\n"]}
@@ -1,9 +1,9 @@
1
1
  import { globalCacheRoot, globalSkaileDir, mergeLegacyEntriesInto, mergeLegacyEntriesKeyed } from './chunk-L5VSIPQD.js';
2
2
  import { SUPPORTED_DRIVER_TARGETS, globalHarnessRoot } from './chunk-CPSIPIX7.js';
3
- import { decodeSkaileManifest, compositeSha256, listAssetFiles, SKAILE_MANIFEST_FILENAME, sha256Hex } from './chunk-BTE2V4IW.js';
3
+ import { decodeSkaileManifest, compositeSha256, listAssetFiles, SKAILE_MANIFEST_FILENAME, sha256Hex } from './chunk-IXWODEED.js';
4
4
  import { readPluginGroupings } from './chunk-RVRB27AN.js';
5
- import { scanDirectory, parseFrontmatter, assetDepRefs, fromMcpServerMdContent, withFsDeadline, tryWithFsDeadline, fsDeadlineMs } from './chunk-GTILM2CI.js';
6
- import { isValidAssetName, slugifyAssetName, parseAssetRef, assetRefToStr } from './chunk-QVNRCDTV.js';
5
+ import { scanDirectory, parseFrontmatter, parseRequires, dedupeRequirementRefs, fromMcpServerMdContent, withFsDeadline, tryWithFsDeadline, fsDeadlineMs, assetDepRefs } from './chunk-Y34MSWEZ.js';
6
+ import { isValidAssetName, slugifyAssetName, depToStr, parseAssetRef, assetRefToStr } from './chunk-4OV5DSBB.js';
7
7
  import { isRetentionValue } from './chunk-C3CAXQMA.js';
8
8
  import { existsSync, readFileSync, mkdirSync, writeFileSync, lstatSync, symlinkSync, rmSync, readdirSync, constants, statSync } from 'fs';
9
9
  import { readdir, stat, cp, rm, open, readFile } from 'fs/promises';
@@ -11,7 +11,7 @@ import { join, posix, relative, resolve, dirname, sep, parse as parse$1, basenam
11
11
  import { parse, stringify } from 'yaml';
12
12
  import { spawnSync } from 'child_process';
13
13
  import { createHash } from 'crypto';
14
- import semver from 'semver';
14
+ import semver2 from 'semver';
15
15
  import fg from 'fast-glob';
16
16
 
17
17
  // core/src/type-guards.ts
@@ -328,10 +328,11 @@ async function walkWithManifest(clone, manifestPath, index) {
328
328
  );
329
329
  }
330
330
  const curatedSource = a.source ?? manifest.source;
331
- const version = a.version ?? manifestVersion;
331
+ const entryVersion = a.version ?? manifestVersion;
332
332
  const name = canonicalAssetName(a.name);
333
333
  const resolved = resolveAssetBytes(clone, repoRoot, a, curatedSource);
334
334
  const { files } = resolved;
335
+ const version = declaredFileVersion(resolved.frontmatter) ?? entryVersion;
335
336
  const candidate = {
336
337
  publisher: assetPublisher,
337
338
  kind: a.kind,
@@ -342,13 +343,21 @@ async function walkWithManifest(clone, manifestPath, index) {
342
343
  files,
343
344
  sha256: a.sha256 ?? compositeSha256(files),
344
345
  metadata: resolved.metadata,
345
- ...a.dependencies ? { deps: a.dependencies } : await manifestDeps(repoRoot, files, a.kind)
346
+ ...await candidateDeps(repoRoot, files, a.kind, assetPublisher, a.dependencies)
346
347
  };
347
348
  applyStoreListingMetadata(candidate, a, manifest, resolved.frontmatter);
348
349
  push(index, `${assetPublisher}/${a.kind}:${name}`, candidate);
349
350
  }
350
351
  return true;
351
352
  }
353
+ function declaredFileVersion(frontmatter) {
354
+ if (!frontmatter) return void 0;
355
+ const scalar = (v) => typeof v === "string" ? v : typeof v === "number" ? String(v) : void 0;
356
+ const meta = frontmatter.metadata;
357
+ const nested = meta !== null && typeof meta === "object" ? scalar(meta.version) : void 0;
358
+ const version = scalar(frontmatter.version) ?? nested;
359
+ return version !== void 0 && semver2.valid(version) ? version : void 0;
360
+ }
352
361
  function canonicalAssetName(raw) {
353
362
  if (isValidAssetName(raw)) return raw;
354
363
  try {
@@ -453,7 +462,7 @@ async function walkFilenameConvention(clone, index, knownKinds) {
453
462
  files,
454
463
  sha256: compositeSha256(files),
455
464
  metadata: readMetadata(clone.localPath, files, e.kind),
456
- ...await manifestDeps(clone.localPath, files, e.kind)
465
+ ...await candidateDeps(clone.localPath, files, e.kind, publisher)
457
466
  };
458
467
  push(index, `${publisher}/${e.kind}:${e.name}`, candidate);
459
468
  }
@@ -497,6 +506,14 @@ async function manifestDeps(repoRoot, files, kind) {
497
506
  const { refs, skipped } = await assetDepRefs(join(repoRoot, mf.path));
498
507
  return kind === "preset" ? { deps: refs, skippedItems: skipped } : { deps: refs };
499
508
  }
509
+ async function candidateDeps(repoRoot, files, kind, publisher, explicit) {
510
+ const base = explicit ? { deps: explicit } : await manifestDeps(repoRoot, files, kind);
511
+ if (kind === "preset" || kind === "flow") return base;
512
+ const frontmatter = readContentFrontmatter(repoRoot, files, kind);
513
+ const declared = frontmatter ? parseRequires(frontmatter).map(depToStr) : [];
514
+ if (declared.length === 0) return base;
515
+ return { ...base, deps: dedupeRequirementRefs([...base.deps ?? [], ...declared], publisher) };
516
+ }
500
517
  function push(index, key, candidate) {
501
518
  const arr = index.get(key) ?? [];
502
519
  arr.push(candidate);
@@ -576,6 +593,14 @@ function gitFailure(r) {
576
593
  }
577
594
  function pullRepoResult(dest, branch) {
578
595
  attachToBranch(dest, branch);
596
+ const ahead = spawnSync("git", ["-C", dest, "rev-list", "--count", `origin/${branch}..HEAD`], {
597
+ encoding: "utf8",
598
+ stdio: "pipe",
599
+ env: GIT_ENV
600
+ });
601
+ if (ahead.status === 0 && Number(ahead.stdout.trim()) > 0) {
602
+ return { ok: false, error: "Not possible to fast-forward, aborting." };
603
+ }
579
604
  const pull = spawnSync("git", ["-C", dest, "pull", "--depth=1", "--ff-only"], {
580
605
  stdio: "pipe",
581
606
  env: GIT_ENV
@@ -992,7 +1017,7 @@ async function resolveAll(deps, opts) {
992
1017
  return;
993
1018
  }
994
1019
  const versions = Array.from(new Set(filtered.map((c) => c.version)));
995
- const best = versions.sort((a, b) => semver.rcompare(coerceVersion(a), coerceVersion(b)))[0];
1020
+ const best = versions.sort((a, b) => semver2.rcompare(coerceVersion(a), coerceVersion(b)))[0];
996
1021
  const finalists = filtered.filter((c) => c.version === best);
997
1022
  const canonicalRef = assetRefToStr({ ...ref, pin: best });
998
1023
  const chosen = selectChosenCandidate(
@@ -1105,7 +1130,7 @@ async function crossCheckStoreDigest(chosen, finalists, canonicalRef, best, sour
1105
1130
  }
1106
1131
  }
1107
1132
  function coerceVersion(v) {
1108
- return semver.valid(v) ? v : semver.coerce(v)?.version ?? "0.0.0";
1133
+ return semver2.valid(v) ? v : semver2.coerce(v)?.version ?? "0.0.0";
1109
1134
  }
1110
1135
  function matchPin(pin, version) {
1111
1136
  if (!pin) return true;
@@ -1115,17 +1140,17 @@ function matchPin(pin, version) {
1115
1140
  if (version.startsWith("0.0.0-sha.")) {
1116
1141
  return version === pin;
1117
1142
  }
1118
- if (!semver.valid(version)) return version === pin;
1119
- return semver.satisfies(version, pin, { includePrerelease: false });
1143
+ if (!semver2.valid(version)) return version === pin;
1144
+ return semver2.satisfies(version, pin, { includePrerelease: false });
1120
1145
  }
1121
1146
  function needsStoreVersionDiscovery(pin) {
1122
1147
  if (!pin) return true;
1123
1148
  if (SHA_PIN_RE.test(pin)) return false;
1124
- return !semver.valid(pin);
1149
+ return !semver2.valid(pin);
1125
1150
  }
1126
1151
  function enumerateVersionsForPin(pin, sourceVersionsHint) {
1127
1152
  if (!pin) return sourceVersionsHint.length > 0 ? sourceVersionsHint : [];
1128
- if (semver.valid(pin)) return [pin];
1153
+ if (semver2.valid(pin)) return [pin];
1129
1154
  return sourceVersionsHint;
1130
1155
  }
1131
1156
  function checkRepoStatus(decl, name, reposDir, projectDir) {
@@ -1192,6 +1217,27 @@ function checkRepoStatus(decl, name, reposDir, projectDir) {
1192
1217
  }
1193
1218
 
1194
1219
  // core/src/workspace-config.ts
1220
+ var SourceEntryError = class extends Error {
1221
+ constructor(message) {
1222
+ super(message);
1223
+ this.name = "SourceEntryError";
1224
+ }
1225
+ };
1226
+ function parseSourceEntries(raw) {
1227
+ return raw.map((item, i) => {
1228
+ const s = item && typeof item === "object" && !Array.isArray(item) ? item : void 0;
1229
+ const url = s?.url;
1230
+ if (typeof url !== "string" || url.trim() === "") {
1231
+ throw new SourceEntryError(
1232
+ `sources[${i}] has no url: ${JSON.stringify(item)} (write it as "- url: <git url>")`
1233
+ );
1234
+ }
1235
+ const entry = { url };
1236
+ const pin = s.pin;
1237
+ if (typeof pin === "string" && pin.length > 0) entry.pin = pin;
1238
+ return entry;
1239
+ });
1240
+ }
1195
1241
  var DEFAULT_RECIPE_ATTR = "default";
1196
1242
  function validateAssetRecipeFlake(flake) {
1197
1243
  if (typeof flake !== "string" || flake.length === 0) {
@@ -1302,12 +1348,17 @@ function listSkWorkspaceConfigs(dir) {
1302
1348
  }
1303
1349
  return configs.sort((a, b) => a.name.localeCompare(b.name));
1304
1350
  }
1351
+ function rejectedKeyError(d) {
1352
+ return d.code === "invalid_source_entry" ? new SourceEntryError(d.message) : new Error(d.message);
1353
+ }
1305
1354
  function resolveSkWorkspaceConfig(projectDir, opts) {
1306
1355
  const name = opts?.name ?? SK_WORKSPACE_DEFAULT_NAME;
1307
1356
  const configs = [];
1308
1357
  const assertNoLegacyKey = (file) => {
1309
- const d = file?.diagnostics?.find((x) => x.code === "legacy_key_rejected");
1310
- if (d) throw new Error(d.message);
1358
+ const d = file?.diagnostics?.find(
1359
+ (x) => x.code === "legacy_key_rejected" || x.code === "invalid_source_entry"
1360
+ );
1361
+ if (d) throw rejectedKeyError(d);
1311
1362
  };
1312
1363
  const userConfig = loadSkWorkspaceConfig(globalSkaileDir(), name);
1313
1364
  assertNoLegacyKey(userConfig);
@@ -1325,8 +1376,10 @@ function resolveSkWorkspaceConfig(projectDir, opts) {
1325
1376
  }
1326
1377
  function resolveGlobalSkWorkspaceConfig() {
1327
1378
  const file = loadSkWorkspaceConfig(globalSkaileDir(), SK_WORKSPACE_DEFAULT_NAME);
1328
- const legacy = file?.diagnostics?.find((x) => x.code === "legacy_key_rejected");
1329
- if (legacy) throw new Error(legacy.message);
1379
+ const legacy = file?.diagnostics?.find(
1380
+ (x) => x.code === "legacy_key_rejected" || x.code === "invalid_source_entry"
1381
+ );
1382
+ if (legacy) throw rejectedKeyError(legacy);
1330
1383
  return file?.config ?? {};
1331
1384
  }
1332
1385
  function resolveGlobalHarnesses() {
@@ -1758,16 +1811,7 @@ function normalizeDependencySection(raw, config) {
1758
1811
  if (valid.length > 0) config.global_harnesses = [...new Set(valid)];
1759
1812
  }
1760
1813
  if (Array.isArray(raw.sources)) {
1761
- const entries = [];
1762
- for (const item of raw.sources) {
1763
- if (!item || typeof item !== "object" || Array.isArray(item)) continue;
1764
- const s = item;
1765
- const url = typeof s.url === "string" ? s.url : "";
1766
- if (!url) continue;
1767
- const entry = { url };
1768
- if (typeof s.pin === "string" && s.pin.length > 0) entry.pin = s.pin;
1769
- entries.push(entry);
1770
- }
1814
+ const entries = parseSourceEntries(raw.sources);
1771
1815
  if (entries.length > 0) config.sources = entries;
1772
1816
  }
1773
1817
  if (raw.telemetry && typeof raw.telemetry === "object" && !Array.isArray(raw.telemetry)) {
@@ -1826,7 +1870,9 @@ function decodeSkaileYaml(text) {
1826
1870
  config: {},
1827
1871
  diagnostics: [
1828
1872
  {
1829
- code: "legacy_key_rejected",
1873
+ // A url-less `sources:` item is its own code so the runtime boundary can re-throw
1874
+ // the typed error the CLI prints as one line.
1875
+ code: err instanceof SourceEntryError ? "invalid_source_entry" : "legacy_key_rejected",
1830
1876
  severity: "error",
1831
1877
  message: err instanceof Error ? err.message : String(err)
1832
1878
  }
@@ -2591,6 +2637,6 @@ function resolveAgentDefinitionDir(projectDir, definition) {
2591
2637
  return resolve(projectDir, definition);
2592
2638
  }
2593
2639
 
2594
- export { AGENT_INSTANCE_ID_PATTERN, AGENT_INSTANCE_LIFECYCLES, AGENT_INSTANCE_MEMORY_SCOPES, AGENT_INSTANCE_TRIGGER_KINDS, AgentRefResolutionError, COMPACTION_DEFAULTS, CanonicalRefConflictError, DEFAULT_AGENT_INSTANCE_ID, DEFAULT_RECIPE_ATTR, MAX_PRESET_DEPTH, PresetDepthError, SKAILE_YAML_DEFAULT, SKAILE_YAML_SUFFIX, SKILL_ALLOWLIST_FILE, SKILL_ALLOWLIST_VERSION, SK_WORKSPACE_DEFAULT_NAME, SK_WORKSPACE_SUFFIX, STAGED_SKILL_MARKER, UnknownAssetKindError, agentInstanceDiagnostics, agentSourceCacheDir, attachToBranch, buildProvenanceIndex, checkRepoStatus, checkoutPin, cloneRepo, coerceVersion, decodeSkaileYaml, deriveSingleMaterializedMcpDeclaration, effectiveAgentInstances, encodeSkaileYaml, ensureRepo, findWorkspaceRoot, getGlobalCacheDir, getRepoCommit, isStagedSkillMarkerFor, isWorkspaceConfigFilename, legacySourceCacheKey, linkRepo, listSkWorkspaceConfigs, loadMcpServerDeclarations, loadSkWorkspaceConfig, matchPin, mergeAgentInstances, mergeAgentPermissions, mergeSkWorkspaceConfigs, normalizeAgentInstances, normalizeConfig, pullRepo, pullRepoResult, readLinks, readSkillAllowList, resolveAgentDefinitionDir, resolveAgentDir, resolveAll, resolveAsset, resolveCompactionThresholdPercent, resolveGlobalHarnesses, resolveGlobalSkWorkspaceConfig, resolveSkWorkspaceConfig, resolveSourcePublisher, saveSkWorkspaceConfig, scanRepo, sourceCacheKey, sourceShortName, stageMaterializedSkills, stagedSkillMarkerState, storeManifestSlug, unlinkRepo, unstageSkill, validateAssetRecipeAttr, validateAssetRecipeFlake, workspaceConfigFilename, workspaceNameFromFilename, writeLinks };
2595
- //# sourceMappingURL=chunk-JAKOMFC6.js.map
2596
- //# sourceMappingURL=chunk-JAKOMFC6.js.map
2640
+ export { AGENT_INSTANCE_ID_PATTERN, AGENT_INSTANCE_LIFECYCLES, AGENT_INSTANCE_MEMORY_SCOPES, AGENT_INSTANCE_TRIGGER_KINDS, AgentRefResolutionError, COMPACTION_DEFAULTS, CanonicalRefConflictError, DEFAULT_AGENT_INSTANCE_ID, DEFAULT_RECIPE_ATTR, MAX_PRESET_DEPTH, PresetDepthError, SKAILE_YAML_DEFAULT, SKAILE_YAML_SUFFIX, SKILL_ALLOWLIST_FILE, SKILL_ALLOWLIST_VERSION, SK_WORKSPACE_DEFAULT_NAME, SK_WORKSPACE_SUFFIX, STAGED_SKILL_MARKER, SourceEntryError, UnknownAssetKindError, agentInstanceDiagnostics, agentSourceCacheDir, attachToBranch, buildProvenanceIndex, checkRepoStatus, checkoutPin, cloneRepo, coerceVersion, decodeSkaileYaml, deriveSingleMaterializedMcpDeclaration, effectiveAgentInstances, encodeSkaileYaml, ensureRepo, findWorkspaceRoot, getGlobalCacheDir, getRepoCommit, isStagedSkillMarkerFor, isWorkspaceConfigFilename, legacySourceCacheKey, linkRepo, listSkWorkspaceConfigs, loadMcpServerDeclarations, loadSkWorkspaceConfig, matchPin, mergeAgentInstances, mergeAgentPermissions, mergeSkWorkspaceConfigs, normalizeAgentInstances, normalizeConfig, parseSourceEntries, pullRepo, pullRepoResult, readLinks, readSkillAllowList, resolveAgentDefinitionDir, resolveAgentDir, resolveAll, resolveAsset, resolveCompactionThresholdPercent, resolveGlobalHarnesses, resolveGlobalSkWorkspaceConfig, resolveSkWorkspaceConfig, resolveSourcePublisher, saveSkWorkspaceConfig, scanRepo, sourceCacheKey, sourceShortName, stageMaterializedSkills, stagedSkillMarkerState, storeManifestSlug, unlinkRepo, unstageSkill, validateAssetRecipeAttr, validateAssetRecipeFlake, workspaceConfigFilename, workspaceNameFromFilename, writeLinks };
2641
+ //# sourceMappingURL=chunk-JZCSNEHK.js.map
2642
+ //# sourceMappingURL=chunk-JZCSNEHK.js.map