@skaile/workspaces 6.0.0 → 6.2.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 (431) hide show
  1. package/CHANGELOG.md +98 -0
  2. package/dist/{asset-feeds-PXUWCXVI.js → asset-feeds-KPKCE64E.js} +31 -23
  3. package/dist/asset-feeds-KPKCE64E.js.map +1 -0
  4. package/dist/asset-manager/catalog-deployer.js +10 -10
  5. package/dist/asset-manager/fragments.js +1 -1
  6. package/dist/asset-manager/index.js +19 -19
  7. package/dist/asset-manager/installer.js +13 -13
  8. package/dist/asset-manager/renderers.js +11 -11
  9. package/dist/asset-manager/src/index.d.ts +339 -19
  10. package/dist/asset-manager/src/index.d.ts.map +1 -1
  11. package/dist/asset-manager/src/installer.d.ts +40 -0
  12. package/dist/asset-manager/src/installer.d.ts.map +1 -1
  13. package/dist/asset-manager/src/mcp-config.d.ts +21 -0
  14. package/dist/asset-manager/src/mcp-config.d.ts.map +1 -1
  15. package/dist/asset-manager/src/renderers.d.ts +7 -0
  16. package/dist/asset-manager/src/renderers.d.ts.map +1 -1
  17. package/dist/bridge/harnesses/claude-sdk.js +18 -22
  18. package/dist/bridge/harnesses/claude-sdk.js.map +1 -1
  19. package/dist/bridge/harnesses/codex.js +24 -17
  20. package/dist/bridge/harnesses/codex.js.map +1 -1
  21. package/dist/bridge/harnesses/continue.js +14 -14
  22. package/dist/bridge/harnesses/echo.js +4 -4
  23. package/dist/bridge/harnesses/gemini.js +10 -10
  24. package/dist/bridge/harnesses/goose.js +14 -14
  25. package/dist/bridge/harnesses/omp.js +15 -8
  26. package/dist/bridge/harnesses/omp.js.map +1 -1
  27. package/dist/bridge/harnesses/opencode.js +14 -14
  28. package/dist/bridge/harnesses/qwen.js +10 -10
  29. package/dist/bridge/index.js +19 -19
  30. package/dist/bridge/src/claude-sdk-surface.d.ts +17 -0
  31. package/dist/bridge/src/claude-sdk-surface.d.ts.map +1 -0
  32. package/dist/bridge/src/harness-model-check.d.ts +30 -0
  33. package/dist/bridge/src/harness-model-check.d.ts.map +1 -1
  34. package/dist/bridge/src/harnesses/_subprocess-cli.d.ts.map +1 -1
  35. package/dist/bridge/src/harnesses/claude-sdk.d.ts.map +1 -1
  36. package/dist/bridge/src/harnesses/codex.d.ts.map +1 -1
  37. package/dist/bridge/src/harnesses/omp.d.ts.map +1 -1
  38. package/dist/bridge/src/index.d.ts +2 -1
  39. package/dist/bridge/src/index.d.ts.map +1 -1
  40. package/dist/bridge/src/normalizer.d.ts +3 -1
  41. package/dist/bridge/src/normalizer.d.ts.map +1 -1
  42. package/dist/bridge/src/runner-private-env.d.ts +7 -0
  43. package/dist/bridge/src/runner-private-env.d.ts.map +1 -1
  44. package/dist/{chunk-HK7HMEPT.js → chunk-27SXN33H.js} +13 -5
  45. package/dist/chunk-27SXN33H.js.map +1 -0
  46. package/dist/{chunk-TKHJXPSB.js → chunk-2XM3ZH36.js} +183 -33
  47. package/dist/chunk-2XM3ZH36.js.map +1 -0
  48. package/dist/{chunk-E3GPGTW3.js → chunk-3HACK2Z7.js} +142 -28
  49. package/dist/chunk-3HACK2Z7.js.map +1 -0
  50. package/dist/{chunk-T2BDID2J.js → chunk-5JPW27BI.js} +10 -9
  51. package/dist/chunk-5JPW27BI.js.map +1 -0
  52. package/dist/{chunk-2UUKCROR.js → chunk-5LQ62LNT.js} +4 -4
  53. package/dist/{chunk-2UUKCROR.js.map → chunk-5LQ62LNT.js.map} +1 -1
  54. package/dist/{chunk-UL22SDGR.js → chunk-6CYKTHNT.js} +194 -127
  55. package/dist/chunk-6CYKTHNT.js.map +1 -0
  56. package/dist/{chunk-XFIEVEU7.js → chunk-6OHZUUR7.js} +5 -4
  57. package/dist/chunk-6OHZUUR7.js.map +1 -0
  58. package/dist/{chunk-E572OHGY.js → chunk-76FLBODK.js} +4 -3
  59. package/dist/chunk-76FLBODK.js.map +1 -0
  60. package/dist/{chunk-GN4VVSAA.js → chunk-7DRFKAJZ.js} +7 -7
  61. package/dist/{chunk-GN4VVSAA.js.map → chunk-7DRFKAJZ.js.map} +1 -1
  62. package/dist/chunk-7H6XRCPG.js +31 -0
  63. package/dist/chunk-7H6XRCPG.js.map +1 -0
  64. package/dist/{chunk-MCUJTNY5.js → chunk-7Y6S4XLL.js} +3 -3
  65. package/dist/{chunk-MCUJTNY5.js.map → chunk-7Y6S4XLL.js.map} +1 -1
  66. package/dist/{chunk-DHYSUJ3H.js → chunk-BEYNH2LS.js} +4 -4
  67. package/dist/{chunk-DHYSUJ3H.js.map → chunk-BEYNH2LS.js.map} +1 -1
  68. package/dist/{chunk-GEQSUC6U.js → chunk-BOT64P3U.js} +4 -4
  69. package/dist/{chunk-GEQSUC6U.js.map → chunk-BOT64P3U.js.map} +1 -1
  70. package/dist/{chunk-L4YKW5AY.js → chunk-BRK5QZKI.js} +121 -20
  71. package/dist/chunk-BRK5QZKI.js.map +1 -0
  72. package/dist/{chunk-YGRZNFRO.js → chunk-BY5WIRCU.js} +58 -5
  73. package/dist/chunk-BY5WIRCU.js.map +1 -0
  74. package/dist/{chunk-Z7ZEZZB6.js → chunk-C5HFK34M.js} +3 -3
  75. package/dist/chunk-C5HFK34M.js.map +1 -0
  76. package/dist/{chunk-DUMTLYSO.js → chunk-COAFAYBS.js} +31 -7
  77. package/dist/chunk-COAFAYBS.js.map +1 -0
  78. package/dist/{chunk-7XSAW5OC.js → chunk-E5NQRHEB.js} +30 -7
  79. package/dist/chunk-E5NQRHEB.js.map +1 -0
  80. package/dist/{chunk-BFMYYNDT.js → chunk-F3D25RGM.js} +11 -3
  81. package/dist/chunk-F3D25RGM.js.map +1 -0
  82. package/dist/{chunk-VBI7HGHB.js → chunk-GF5JXQIZ.js} +3 -3
  83. package/dist/{chunk-VBI7HGHB.js.map → chunk-GF5JXQIZ.js.map} +1 -1
  84. package/dist/{chunk-ZFUZ5AKM.js → chunk-I7LC5TDY.js} +3 -3
  85. package/dist/{chunk-ZFUZ5AKM.js.map → chunk-I7LC5TDY.js.map} +1 -1
  86. package/dist/{chunk-3IXIEHUB.js → chunk-ICSGNT5P.js} +7 -7
  87. package/dist/{chunk-3IXIEHUB.js.map → chunk-ICSGNT5P.js.map} +1 -1
  88. package/dist/{chunk-WEH33JSG.js → chunk-ITFCWMOY.js} +93 -29
  89. package/dist/chunk-ITFCWMOY.js.map +1 -0
  90. package/dist/{chunk-WDXZA7QW.js → chunk-IZQOO6MN.js} +2 -2
  91. package/dist/{chunk-WDXZA7QW.js.map → chunk-IZQOO6MN.js.map} +1 -1
  92. package/dist/{chunk-WDAIWDLK.js → chunk-JFLQICIU.js} +5 -5
  93. package/dist/{chunk-WDAIWDLK.js.map → chunk-JFLQICIU.js.map} +1 -1
  94. package/dist/{chunk-ARWKK325.js → chunk-JJJ2G4K2.js} +5 -5
  95. package/dist/{chunk-ARWKK325.js.map → chunk-JJJ2G4K2.js.map} +1 -1
  96. package/dist/{chunk-GOCWM7FN.js → chunk-JMIKGAUA.js} +43 -4
  97. package/dist/chunk-JMIKGAUA.js.map +1 -0
  98. package/dist/{chunk-X3RMRJNR.js → chunk-JRN5QF4C.js} +8 -3
  99. package/dist/chunk-JRN5QF4C.js.map +1 -0
  100. package/dist/{chunk-SNEE6UGY.js → chunk-K3R2UKG7.js} +18 -12
  101. package/dist/chunk-K3R2UKG7.js.map +1 -0
  102. package/dist/{chunk-VXEYX73S.js → chunk-KB56WBQ3.js} +4 -4
  103. package/dist/{chunk-VXEYX73S.js.map → chunk-KB56WBQ3.js.map} +1 -1
  104. package/dist/{chunk-OHNKYHRR.js → chunk-KJSC2ZD6.js} +264 -18
  105. package/dist/chunk-KJSC2ZD6.js.map +1 -0
  106. package/dist/{chunk-UQ33Y4DM.js → chunk-KPKGWXUJ.js} +4 -4
  107. package/dist/{chunk-UQ33Y4DM.js.map → chunk-KPKGWXUJ.js.map} +1 -1
  108. package/dist/{chunk-AF432MS3.js → chunk-KXJMQTOU.js} +3 -3
  109. package/dist/{chunk-AF432MS3.js.map → chunk-KXJMQTOU.js.map} +1 -1
  110. package/dist/chunk-LRBP3234.js +302 -0
  111. package/dist/chunk-LRBP3234.js.map +1 -0
  112. package/dist/{chunk-UVVVR4XO.js → chunk-M4OG2YN4.js} +4 -4
  113. package/dist/{chunk-UVVVR4XO.js.map → chunk-M4OG2YN4.js.map} +1 -1
  114. package/dist/{chunk-QOM5Z62G.js → chunk-MAZ3UXJK.js} +17 -24
  115. package/dist/chunk-MAZ3UXJK.js.map +1 -0
  116. package/dist/{chunk-Y2TO2U7W.js → chunk-MM4YO3EL.js} +3 -3
  117. package/dist/{chunk-Y2TO2U7W.js.map → chunk-MM4YO3EL.js.map} +1 -1
  118. package/dist/{chunk-OULSJRXV.js → chunk-OCQNUV4T.js} +7 -7
  119. package/dist/{chunk-OULSJRXV.js.map → chunk-OCQNUV4T.js.map} +1 -1
  120. package/dist/{chunk-SZXGRHQQ.js → chunk-PJJSBZZP.js} +4 -4
  121. package/dist/{chunk-SZXGRHQQ.js.map → chunk-PJJSBZZP.js.map} +1 -1
  122. package/dist/{chunk-OAHVKSQJ.js → chunk-PKBLJI23.js} +1471 -126
  123. package/dist/chunk-PKBLJI23.js.map +1 -0
  124. package/dist/{chunk-NOA6EJXE.js → chunk-PKE3PXOK.js} +3 -3
  125. package/dist/{chunk-NOA6EJXE.js.map → chunk-PKE3PXOK.js.map} +1 -1
  126. package/dist/{chunk-WYHQUCHR.js → chunk-PMWRM4EJ.js} +109 -48
  127. package/dist/chunk-PMWRM4EJ.js.map +1 -0
  128. package/dist/{chunk-H6UVIKQ2.js → chunk-PNUM7GUY.js} +3 -3
  129. package/dist/{chunk-H6UVIKQ2.js.map → chunk-PNUM7GUY.js.map} +1 -1
  130. package/dist/{chunk-SRODW6M2.js → chunk-Q5RN4PWV.js} +3 -3
  131. package/dist/{chunk-SRODW6M2.js.map → chunk-Q5RN4PWV.js.map} +1 -1
  132. package/dist/{chunk-LN6QB7XI.js → chunk-QIHL3YPL.js} +4 -4
  133. package/dist/{chunk-LN6QB7XI.js.map → chunk-QIHL3YPL.js.map} +1 -1
  134. package/dist/{chunk-U56GGCC2.js → chunk-QK7AG5AV.js} +4 -4
  135. package/dist/{chunk-U56GGCC2.js.map → chunk-QK7AG5AV.js.map} +1 -1
  136. package/dist/{chunk-OTIB4D2K.js → chunk-QPWR3YMY.js} +15 -5
  137. package/dist/chunk-QPWR3YMY.js.map +1 -0
  138. package/dist/{chunk-4DWBSTYA.js → chunk-QXKUFROW.js} +22 -5
  139. package/dist/chunk-QXKUFROW.js.map +1 -0
  140. package/dist/{chunk-4XWLB7JB.js → chunk-RQMIZONH.js} +95 -35
  141. package/dist/chunk-RQMIZONH.js.map +1 -0
  142. package/dist/{chunk-LSI2IVFT.js → chunk-RXGPFAMN.js} +4 -3
  143. package/dist/chunk-RXGPFAMN.js.map +1 -0
  144. package/dist/{chunk-3JKGY2YC.js → chunk-S2H3RBK7.js} +182 -33
  145. package/dist/chunk-S2H3RBK7.js.map +1 -0
  146. package/dist/{chunk-VJRTDKXS.js → chunk-SJNZ4WPA.js} +165 -106
  147. package/dist/chunk-SJNZ4WPA.js.map +1 -0
  148. package/dist/{chunk-KX2PT5Q4.js → chunk-T2VBPVWZ.js} +77 -18
  149. package/dist/chunk-T2VBPVWZ.js.map +1 -0
  150. package/dist/{chunk-6Z5KTFJT.js → chunk-TSTRH4SM.js} +3 -3
  151. package/dist/{chunk-6Z5KTFJT.js.map → chunk-TSTRH4SM.js.map} +1 -1
  152. package/dist/{chunk-7CV3HFWJ.js → chunk-TZERN27L.js} +5 -5
  153. package/dist/{chunk-7CV3HFWJ.js.map → chunk-TZERN27L.js.map} +1 -1
  154. package/dist/{chunk-JDR6ILCW.js → chunk-U673DB5U.js} +4 -4
  155. package/dist/{chunk-JDR6ILCW.js.map → chunk-U673DB5U.js.map} +1 -1
  156. package/dist/{chunk-FKU57Q5Q.js → chunk-URCJIV7T.js} +3 -3
  157. package/dist/{chunk-FKU57Q5Q.js.map → chunk-URCJIV7T.js.map} +1 -1
  158. package/dist/{chunk-ADPM6AYF.js → chunk-VSX2G7LA.js} +3 -3
  159. package/dist/{chunk-ADPM6AYF.js.map → chunk-VSX2G7LA.js.map} +1 -1
  160. package/dist/{chunk-F2GOZMRA.js → chunk-X37JUNEW.js} +49 -49
  161. package/dist/chunk-X37JUNEW.js.map +1 -0
  162. package/dist/{chunk-NMI2TWMH.js → chunk-Z3IRZBXB.js} +158 -344
  163. package/dist/chunk-Z3IRZBXB.js.map +1 -0
  164. package/dist/{chunk-7TPYPVAH.js → chunk-ZWJCRHP3.js} +3 -3
  165. package/dist/{chunk-7TPYPVAH.js.map → chunk-ZWJCRHP3.js.map} +1 -1
  166. package/dist/{claude-code-VJGYBXQR.js → claude-code-BBMNVH2J.js} +5 -5
  167. package/dist/{claude-code-VJGYBXQR.js.map → claude-code-BBMNVH2J.js.map} +1 -1
  168. package/dist/cli/index.js +964 -501
  169. package/dist/cli/index.js.map +1 -1
  170. package/dist/cli/src/agent-pins.d.ts +11 -0
  171. package/dist/cli/src/agent-pins.d.ts.map +1 -1
  172. package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
  173. package/dist/cli/src/commands/catalog.d.ts +1 -1
  174. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  175. package/dist/cli/src/commands/config.d.ts.map +1 -1
  176. package/dist/cli/src/commands/diff.d.ts.map +1 -1
  177. package/dist/cli/src/commands/harness.d.ts +24 -0
  178. package/dist/cli/src/commands/harness.d.ts.map +1 -0
  179. package/dist/cli/src/commands/integration.d.ts.map +1 -1
  180. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  181. package/dist/cli/src/commands/library-index.d.ts +28 -3
  182. package/dist/cli/src/commands/library-index.d.ts.map +1 -1
  183. package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
  184. package/dist/cli/src/commands/migrate-assets.d.ts.map +1 -1
  185. package/dist/cli/src/commands/outdated.d.ts.map +1 -1
  186. package/dist/cli/src/commands/plugin-registry-cmd.d.ts.map +1 -1
  187. package/dist/cli/src/commands/project.d.ts +19 -1
  188. package/dist/cli/src/commands/project.d.ts.map +1 -1
  189. package/dist/cli/src/commands/rebuild.d.ts.map +1 -1
  190. package/dist/cli/src/commands/run.d.ts.map +1 -1
  191. package/dist/cli/src/commands/serve-preflight.d.ts +31 -1
  192. package/dist/cli/src/commands/serve-preflight.d.ts.map +1 -1
  193. package/dist/cli/src/commands/serve.d.ts +10 -0
  194. package/dist/cli/src/commands/serve.d.ts.map +1 -1
  195. package/dist/cli/src/commands/session-logs/local-query.d.ts +2 -0
  196. package/dist/cli/src/commands/session-logs/local-query.d.ts.map +1 -1
  197. package/dist/cli/src/commands/source-manifest-publish.d.ts.map +1 -1
  198. package/dist/cli/src/commands/source-manifest.d.ts +19 -7
  199. package/dist/cli/src/commands/source-manifest.d.ts.map +1 -1
  200. package/dist/cli/src/commands/source.d.ts +9 -2
  201. package/dist/cli/src/commands/source.d.ts.map +1 -1
  202. package/dist/cli/src/commands/store.d.ts.map +1 -1
  203. package/dist/cli/src/commands/update.d.ts.map +1 -1
  204. package/dist/cli/src/commands/validate-instances.d.ts.map +1 -1
  205. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  206. package/dist/cli/src/commands/why.d.ts.map +1 -1
  207. package/dist/cli/src/config-checks.d.ts +55 -0
  208. package/dist/cli/src/config-checks.d.ts.map +1 -0
  209. package/dist/cli/src/harness-error.d.ts +12 -1
  210. package/dist/cli/src/harness-error.d.ts.map +1 -1
  211. package/dist/cli/src/helpers.d.ts +18 -8
  212. package/dist/cli/src/helpers.d.ts.map +1 -1
  213. package/dist/cli/src/plugin-store/index.d.ts +10 -1
  214. package/dist/cli/src/plugin-store/index.d.ts.map +1 -1
  215. package/dist/cli/src/plugin-store/spec.d.ts +8 -0
  216. package/dist/cli/src/plugin-store/spec.d.ts.map +1 -1
  217. package/dist/cli/src/skill-checks.d.ts +27 -0
  218. package/dist/cli/src/skill-checks.d.ts.map +1 -1
  219. package/dist/cli/src/store-addable.d.ts +11 -0
  220. package/dist/cli/src/store-addable.d.ts.map +1 -1
  221. package/dist/connectors/config.js +5 -5
  222. package/dist/connectors/index.js +23 -23
  223. package/dist/connectors/src/connector-manager.d.ts.map +1 -1
  224. package/dist/connectors-47EM6C2P.js +48 -0
  225. package/dist/{connectors-CXZLXAFZ.js.map → connectors-47EM6C2P.js.map} +1 -1
  226. package/dist/core/framework.js +1 -1
  227. package/dist/core/index.js +9 -9
  228. package/dist/core/manifest.js +2 -2
  229. package/dist/core/models.js +1 -1
  230. package/dist/core/provider-registry-credentials.js +2 -2
  231. package/dist/core/provider-registry.js +1 -1
  232. package/dist/core/publish-manifest.js +3 -3
  233. package/dist/core/ref.js +1 -1
  234. package/dist/core/runtime-assets.js +5 -5
  235. package/dist/core/src/agent-instances.d.ts.map +1 -1
  236. package/dist/core/src/config-key-diagnostics.d.ts +9 -0
  237. package/dist/core/src/config-key-diagnostics.d.ts.map +1 -0
  238. package/dist/core/src/framework.d.ts +5 -3
  239. package/dist/core/src/framework.d.ts.map +1 -1
  240. package/dist/core/src/index.d.ts +3 -2
  241. package/dist/core/src/index.d.ts.map +1 -1
  242. package/dist/core/src/lock.d.ts +12 -0
  243. package/dist/core/src/lock.d.ts.map +1 -1
  244. package/dist/core/src/manifest.d.ts +25 -0
  245. package/dist/core/src/manifest.d.ts.map +1 -1
  246. package/dist/core/src/models.d.ts +15 -0
  247. package/dist/core/src/models.d.ts.map +1 -1
  248. package/dist/core/src/provider-registry.d.ts +6 -0
  249. package/dist/core/src/provider-registry.d.ts.map +1 -1
  250. package/dist/core/src/workspace-config.d.ts +18 -1
  251. package/dist/core/src/workspace-config.d.ts.map +1 -1
  252. package/dist/core/src/workspace-yaml-editor.d.ts +9 -2
  253. package/dist/core/src/workspace-yaml-editor.d.ts.map +1 -1
  254. package/dist/core/workspace-config.js +4 -4
  255. package/dist/deploy/index.js +9 -9
  256. package/dist/discovery/index.js +5 -5
  257. package/dist/discovery/src/builtin-providers.d.ts.map +1 -1
  258. package/dist/discovery/src/parse-manifest.d.ts.map +1 -1
  259. package/dist/{ensure-sources-UPTHZKGF.js → ensure-sources-K5EFNC3L.js} +36 -22
  260. package/dist/ensure-sources-K5EFNC3L.js.map +1 -0
  261. package/dist/factory-assets/connectors/box.js +23 -23
  262. package/dist/factory-assets/connectors/deploy.js +23 -23
  263. package/dist/factory-assets/connectors/devserver.js +23 -23
  264. package/dist/factory-assets/connectors/flow/adapter.js +23 -23
  265. package/dist/factory-assets/connectors/flow/contract/normalize.d.ts.map +1 -1
  266. package/dist/factory-assets/connectors/flow/contract.js +1 -1
  267. package/dist/factory-assets/connectors/flow/engine.js +11 -11
  268. package/dist/factory-assets/connectors/flow/run-flow.d.ts.map +1 -1
  269. package/dist/factory-assets/connectors/flow/run-flow.js +25 -25
  270. package/dist/factory-assets/connectors/flow.js +23 -23
  271. package/dist/factory-assets/connectors/git.js +23 -23
  272. package/dist/factory-assets/connectors/gmail.js +23 -23
  273. package/dist/factory-assets/connectors/googledrive.js +23 -23
  274. package/dist/factory-assets/connectors/local.js +23 -23
  275. package/dist/factory-assets/connectors/mattermost.js +23 -23
  276. package/dist/factory-assets/connectors/memory.js +23 -23
  277. package/dist/factory-assets/connectors/minio.js +23 -23
  278. package/dist/factory-assets/connectors/postgres.js +23 -23
  279. package/dist/factory-assets/connectors/s3.js +23 -23
  280. package/dist/factory-assets/connectors/sharepoint.js +23 -23
  281. package/dist/factory-assets/connectors/sqlite.js +23 -23
  282. package/dist/factory-assets/connectors/static-server.js +23 -23
  283. package/dist/factory-assets/connectors/tunnel.js +23 -23
  284. package/dist/factory-assets/connectors/webdav.js +23 -23
  285. package/dist/factory-assets/connectors/xstate-store.js +23 -23
  286. package/dist/factory-assets/connectors/xstate.js +23 -23
  287. package/dist/factory-assets/skills/authoring-skaile-assets/SKILL.md +1 -1
  288. package/dist/factory-assets/skills/authoring-skaile-manifests/SKILL.md +2 -2
  289. package/dist/factory-assets/skills/authoring-skaile-manifests/references/dependency-standard.md +3 -3
  290. package/dist/flows-KLBNSKLO.js +26 -0
  291. package/dist/{flows-TJQIMGUX.js.map → flows-KLBNSKLO.js.map} +1 -1
  292. package/dist/helpers-LUSV2ICC.js +52 -0
  293. package/dist/{helpers-DE53KG3E.js.map → helpers-LUSV2ICC.js.map} +1 -1
  294. package/dist/library/index.js +14 -14
  295. package/dist/library/install.js +5 -5
  296. package/dist/library/src/index.d.ts +2 -2
  297. package/dist/library/src/index.d.ts.map +1 -1
  298. package/dist/library/src/install/index.d.ts +1 -1
  299. package/dist/library/src/install/index.d.ts.map +1 -1
  300. package/dist/library/src/install/install-from-manifest.d.ts +13 -0
  301. package/dist/library/src/install/install-from-manifest.d.ts.map +1 -1
  302. package/dist/library/src/install/source-fetch-github.d.ts.map +1 -1
  303. package/dist/library/src/local/library-dir.d.ts +22 -5
  304. package/dist/library/src/local/library-dir.d.ts.map +1 -1
  305. package/dist/library/src/local/local-catalog-source.d.ts.map +1 -1
  306. package/dist/library/src/manifest-writer.d.ts.map +1 -1
  307. package/dist/library/src/remote/remote-catalog-source.d.ts +8 -0
  308. package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
  309. package/dist/library/src/remote/rest-catalog-source.d.ts +3 -2
  310. package/dist/library/src/remote/rest-catalog-source.d.ts.map +1 -1
  311. package/dist/{library-publish-KKQ2ULLX.js → library-publish-XMRCKRNR.js} +59 -58
  312. package/dist/library-publish-XMRCKRNR.js.map +1 -0
  313. package/dist/model-endpoint/index.js +12 -12
  314. package/dist/model-endpoint/src/openai-chat.d.ts +7 -2
  315. package/dist/model-endpoint/src/openai-chat.d.ts.map +1 -1
  316. package/dist/model-endpoint/src/openai-shared.d.ts +8 -0
  317. package/dist/model-endpoint/src/openai-shared.d.ts.map +1 -1
  318. package/dist/model-endpoint/src/server.d.ts.map +1 -1
  319. package/dist/model-endpoint/src/types.d.ts +1 -1
  320. package/dist/model-endpoint/src/types.d.ts.map +1 -1
  321. package/dist/model-endpoint/src/usage-cost.d.ts +23 -0
  322. package/dist/model-endpoint/src/usage-cost.d.ts.map +1 -0
  323. package/dist/open-library-XBR46DJL.js +56 -0
  324. package/dist/{open-library-RJGJIW5H.js.map → open-library-XBR46DJL.js.map} +1 -1
  325. package/dist/open-registry-W562DCDL.js +32 -0
  326. package/dist/{open-registry-3QS3J7KO.js.map → open-registry-W562DCDL.js.map} +1 -1
  327. package/dist/paths-2AZXB3QL.js +22 -0
  328. package/dist/{paths-QAV4C3KX.js.map → paths-2AZXB3QL.js.map} +1 -1
  329. package/dist/plugin-store-36SIL4TV.js +23 -0
  330. package/dist/{plugin-store-MSH6GK6T.js.map → plugin-store-36SIL4TV.js.map} +1 -1
  331. package/dist/project-D7GN7WLS.js +86 -0
  332. package/dist/{project-HZW2MZPA.js.map → project-D7GN7WLS.js.map} +1 -1
  333. package/dist/resolver/index.js +10 -10
  334. package/dist/runner/index.js +40 -40
  335. package/dist/runner/src/capability-roundtrip.d.ts +7 -6
  336. package/dist/runner/src/capability-roundtrip.d.ts.map +1 -1
  337. package/dist/runner/src/composition/content-source.d.ts.map +1 -1
  338. package/dist/runner/src/composition/errors.d.ts +16 -1
  339. package/dist/runner/src/composition/errors.d.ts.map +1 -1
  340. package/dist/runner/src/credential-notice.d.ts +3 -3
  341. package/dist/runner/src/credential-notice.d.ts.map +1 -1
  342. package/dist/runner/src/serve.d.ts +20 -7
  343. package/dist/runner/src/serve.d.ts.map +1 -1
  344. package/dist/sdk/asset-manager.js +19 -19
  345. package/dist/sdk/bridge.js +19 -19
  346. package/dist/sdk/core.js +9 -9
  347. package/dist/sdk/flow.js +11 -11
  348. package/dist/sdk/index.js +40 -40
  349. package/dist/sdk/resolver.js +10 -10
  350. package/dist/sdk/runner.js +40 -40
  351. package/dist/sdk/transport/ws/server.js +10 -10
  352. package/dist/sdk/transport/ws.js +10 -10
  353. package/dist/sdk/transport.js +10 -10
  354. package/dist/serve-preflight-CGA5G3AE.js +135 -0
  355. package/dist/serve-preflight-CGA5G3AE.js.map +1 -0
  356. package/dist/{setup-AGYB4PKR.js → setup-IBDNJAOU.js} +32 -32
  357. package/dist/{setup-AGYB4PKR.js.map → setup-IBDNJAOU.js.map} +1 -1
  358. package/dist/skills-CTTO7SZK.js +26 -0
  359. package/dist/{skills-2LMQ2IAD.js.map → skills-CTTO7SZK.js.map} +1 -1
  360. package/dist/source-2DJ5KNOI.js +85 -0
  361. package/dist/{source-GBMYD3RO.js.map → source-2DJ5KNOI.js.map} +1 -1
  362. package/dist/source-fetch-github-RWHV4I5Z.js +4 -0
  363. package/dist/{source-fetch-github-ST4MFL3D.js.map → source-fetch-github-RWHV4I5Z.js.map} +1 -1
  364. package/dist/{source-manifest-publish-FK22TVQT.js → source-manifest-publish-IYWUMUCY.js} +55 -57
  365. package/dist/source-manifest-publish-IYWUMUCY.js.map +1 -0
  366. package/dist/transport/index.js +10 -10
  367. package/dist/transport/ws/server.js +10 -10
  368. package/dist/transport/ws.js +10 -10
  369. package/dist/tui/index.js +48 -41
  370. package/dist/tui/index.js.map +1 -1
  371. package/dist/tui/src/repl.d.ts.map +1 -1
  372. package/dist/types/manifests.js +1 -1
  373. package/dist/types/src/install-manifest.d.ts +1 -1
  374. package/dist/types/src/install-manifest.d.ts.map +1 -1
  375. package/dist/types/src/manifests/index.d.ts +1 -1
  376. package/dist/types/src/manifests/index.d.ts.map +1 -1
  377. package/dist/types/src/manifests/scaffold-body.d.ts +2 -0
  378. package/dist/types/src/manifests/scaffold-body.d.ts.map +1 -1
  379. package/dist/workspace-plugin/adapters/mcp.js +30 -30
  380. package/dist/workspace-plugin/adapters/omp.js +15 -15
  381. package/dist/workspace-plugin/index.js +2 -2
  382. package/package.json +1 -1
  383. package/dist/asset-feeds-PXUWCXVI.js.map +0 -1
  384. package/dist/chunk-3JKGY2YC.js.map +0 -1
  385. package/dist/chunk-4DWBSTYA.js.map +0 -1
  386. package/dist/chunk-4XWLB7JB.js.map +0 -1
  387. package/dist/chunk-7XSAW5OC.js.map +0 -1
  388. package/dist/chunk-BFMYYNDT.js.map +0 -1
  389. package/dist/chunk-DUMTLYSO.js.map +0 -1
  390. package/dist/chunk-E3GPGTW3.js.map +0 -1
  391. package/dist/chunk-E572OHGY.js.map +0 -1
  392. package/dist/chunk-F2GOZMRA.js.map +0 -1
  393. package/dist/chunk-GOCWM7FN.js.map +0 -1
  394. package/dist/chunk-HK7HMEPT.js.map +0 -1
  395. package/dist/chunk-KX2PT5Q4.js.map +0 -1
  396. package/dist/chunk-L4YKW5AY.js.map +0 -1
  397. package/dist/chunk-LSI2IVFT.js.map +0 -1
  398. package/dist/chunk-NMI2TWMH.js.map +0 -1
  399. package/dist/chunk-OAHVKSQJ.js.map +0 -1
  400. package/dist/chunk-OHNKYHRR.js.map +0 -1
  401. package/dist/chunk-OTIB4D2K.js.map +0 -1
  402. package/dist/chunk-PUK7TQT4.js +0 -13
  403. package/dist/chunk-PUK7TQT4.js.map +0 -1
  404. package/dist/chunk-QOM5Z62G.js.map +0 -1
  405. package/dist/chunk-SNEE6UGY.js.map +0 -1
  406. package/dist/chunk-T2BDID2J.js.map +0 -1
  407. package/dist/chunk-TKHJXPSB.js.map +0 -1
  408. package/dist/chunk-UL22SDGR.js.map +0 -1
  409. package/dist/chunk-VJRTDKXS.js.map +0 -1
  410. package/dist/chunk-WEH33JSG.js.map +0 -1
  411. package/dist/chunk-WYHQUCHR.js.map +0 -1
  412. package/dist/chunk-X3RMRJNR.js.map +0 -1
  413. package/dist/chunk-XFIEVEU7.js.map +0 -1
  414. package/dist/chunk-YGRZNFRO.js.map +0 -1
  415. package/dist/chunk-Z7ZEZZB6.js.map +0 -1
  416. package/dist/connectors-CXZLXAFZ.js +0 -48
  417. package/dist/ensure-sources-UPTHZKGF.js.map +0 -1
  418. package/dist/flows-TJQIMGUX.js +0 -26
  419. package/dist/helpers-DE53KG3E.js +0 -38
  420. package/dist/library-publish-KKQ2ULLX.js.map +0 -1
  421. package/dist/open-library-RJGJIW5H.js +0 -42
  422. package/dist/open-registry-3QS3J7KO.js +0 -32
  423. package/dist/paths-QAV4C3KX.js +0 -22
  424. package/dist/plugin-store-MSH6GK6T.js +0 -23
  425. package/dist/project-HZW2MZPA.js +0 -84
  426. package/dist/serve-preflight-L4POEHNQ.js +0 -108
  427. package/dist/serve-preflight-L4POEHNQ.js.map +0 -1
  428. package/dist/skills-2LMQ2IAD.js +0 -26
  429. package/dist/source-GBMYD3RO.js +0 -85
  430. package/dist/source-fetch-github-ST4MFL3D.js +0 -4
  431. package/dist/source-manifest-publish-FK22TVQT.js.map +0 -1
@@ -79,7 +79,7 @@ function connectorUsageFragment(ctx) {
79
79
  "",
80
80
  ...rows,
81
81
  "",
82
- "Access via `skaile res <id> <operation>` or the registered tool functions.",
82
+ "Access via `skaile connector ops <id>` to list a source's operations and `skaile connector run <id> <operation>` to run one, or the registered tool functions.",
83
83
  "Respect the declared access level \u2014 read-only resources must not be written to."
84
84
  ].join("\n");
85
85
  }
@@ -122,5 +122,5 @@ function loadPromptExtensions(paths, workspaceRoot) {
122
122
  }
123
123
 
124
124
  export { BUILT_IN_FRAGMENTS, loadPromptExtensions, resolveFragments };
125
- //# sourceMappingURL=chunk-NOA6EJXE.js.map
126
- //# sourceMappingURL=chunk-NOA6EJXE.js.map
125
+ //# sourceMappingURL=chunk-PKE3PXOK.js.map
126
+ //# sourceMappingURL=chunk-PKE3PXOK.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../asset-manager/src/fragments.ts"],"names":[],"mappings":"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","file":"chunk-NOA6EJXE.js","sourcesContent":["/**\n * Framework fragments — conditional system prompt sections injected by the\n * agent renderer at install time.\n *\n * Each fragment explains a specific aspect of the agent framework to the agent.\n * Fragments are conditional (return null when context is empty) and overridable\n * per project via skaile.yaml `agent.fragments`.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\n/**\n * A skill installed into the agent's ability directory, referenced in the system prompt.\n *\n * @docLink packages/asset-manager/api-reference#fragments\n */\nexport interface AbilityRef {\n /** Skill name used as the slash command (e.g. `\"code-review\"`). */\n name: string;\n /** One-line description shown in the `## Installed Abilities` section. */\n description: string;\n}\n\n/**\n * A contract file installed alongside skills, referenced by path in the system prompt.\n *\n * @docLink packages/asset-manager/api-reference#fragments\n */\nexport interface ContractRef {\n /** Contract name for display purposes. */\n name: string;\n /** Path relative to workspace root, e.g. `\".claude/skills/iron-laws/CONTRACT.md\"`. */\n relativePath: string;\n}\n\n/**\n * A data connector declared in `skaile.yaml` resources.\n *\n * @docLink packages/asset-manager/api-reference#fragments\n */\nexport interface ConnectorRef {\n /** Connector ID as declared in `skaile.yaml`. */\n id: string;\n /** Connector driver type (e.g. `\"postgres\"`, `\"redis\"`, `\"sqlite\"`). */\n driver: string;\n /** Declared access level (`\"read-only\"` or `\"read-write\"`). */\n access: string;\n}\n\n/**\n * Context passed to each fragment function at render time.\n *\n * @docLink packages/asset-manager/api-reference#fragments\n */\nexport interface FragmentContext {\n /** Agent framework ID (e.g. `\"claude-code\"`, `\"omp\"`, `\"codex\"`). */\n framework: string;\n /** Relative path to the framework's skill/ability directory, e.g. `\".claude/skills\"`. */\n skillsDir: string;\n /** Relative path to the framework's agent directory, e.g. `\".claude/agents\"`. */\n agentsDir: string;\n /** Sub-agent names from `manifest.requires[]`. */\n subAgents: string[];\n /**\n * `true` when the agent is rendered to be called by another agent (a `delegate` sub-agent, or a\n * `role`): it is told it is a sub-agent, not the workspace's only agent.\n */\n subAgent?: boolean;\n /** Connectors declared in `skaile.yaml`. */\n connectors: ConnectorRef[];\n /** Resolved ability refs (installed skills). */\n abilityRefs: AbilityRef[];\n /** Resolved contract refs (installed alongside skills). */\n contractRefs: ContractRef[];\n}\n\n/**\n * Identifier for a built-in system prompt fragment.\n * - `\"agent-mode\"` — describes whether the agent is a sole agent or an orchestrator.\n * - `\"handoff\"` — delegation guidelines injected when sub-agents are declared.\n * - `\"skill-discovery\"` — skill directory location injected when abilities are installed.\n * - `\"connector-usage\"` — connected resources list injected when connectors are declared.\n *\n * @docLink packages/asset-manager/api-reference#fragments\n */\nexport type FragmentId = \"agent-mode\" | \"handoff\" | \"skill-discovery\" | \"connector-usage\";\n\n// ── Built-in fragments ────────────────────────────────────────────────────────\n\nfunction agentModeFragment(ctx: FragmentContext): string | null {\n if (ctx.subAgents.length === 0) {\n if (ctx.subAgent) {\n return [\n \"## Operating Mode\",\n \"\",\n \"You are a sub-agent: another agent hands you one task at a time. Do exactly that\",\n \"task with your installed abilities, and answer in the output format it asks for.\",\n \"Do not take over the conversation or assume you are the only agent in the workspace.\",\n ].join(\"\\n\");\n }\n return [\n \"## Operating Mode\",\n \"\",\n \"You are the sole agent for this workspace. Complete tasks autonomously\",\n \"using your installed abilities and connected resources.\",\n ].join(\"\\n\");\n }\n\n const list = ctx.subAgents.map((n) => `- \\`${n}\\``).join(\"\\n\");\n return [\n \"## Operating Mode\",\n \"\",\n \"You are the orchestrator for this workspace. Coordinate specialized\",\n \"sub-agents when tasks fall within their expertise:\",\n \"\",\n list,\n \"\",\n \"Delegate clearly: describe the task, expected output format, and any\",\n \"constraints. Synthesize results before presenting to the user.\",\n ].join(\"\\n\");\n}\n\nfunction handoffFragment(ctx: FragmentContext): string | null {\n if (ctx.subAgents.length === 0) return null;\n\n const lines = [\n \"## Delegation\",\n \"\",\n \"When delegating to a sub-agent:\",\n \"1. State the specific task and its acceptance criteria.\",\n \"2. Provide relevant context the sub-agent cannot infer on its own.\",\n \"3. Specify the expected output format.\",\n \"4. If the result is incomplete, refine and retry once before escalating.\",\n ];\n\n if (ctx.framework === \"claude-code\") {\n lines.push(\"\", `Use the Agent tool to dispatch. Sub-agents are in \\`${ctx.agentsDir}/\\`.`);\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction skillDiscoveryFragment(ctx: FragmentContext): string | null {\n if (ctx.abilityRefs.length === 0 && ctx.contractRefs.length === 0) return null;\n\n const lines = [\n \"## Skills and Abilities\",\n \"\",\n `Your specialized abilities are installed in \\`${ctx.skillsDir}/\\`.`,\n \"Read a skill's SKILL.md before executing a task that matches its purpose.\",\n ];\n\n if (ctx.framework === \"claude-code\") {\n lines.push(\"Abilities are also available as slash commands.\");\n }\n\n if (ctx.contractRefs.length > 0) {\n lines.push(\n \"\",\n `Operational contracts are co-located in \\`${ctx.skillsDir}/\\`. Read the`,\n \"relevant CONTRACT.md before acting on any constrained task.\",\n );\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction connectorUsageFragment(ctx: FragmentContext): string | null {\n if (ctx.connectors.length === 0) return null;\n\n const rows = ctx.connectors.map((c) => `- \\`${c.id}\\` (${c.driver}, ${c.access})`);\n\n return [\n \"## Connected Resources\",\n \"\",\n \"The following data sources are connected to this workspace:\",\n \"\",\n ...rows,\n \"\",\n \"Access via `skaile res <id> <operation>` or the registered tool functions.\",\n \"Respect the declared access level — read-only resources must not be written to.\",\n ].join(\"\\n\");\n}\n\n/**\n * Registry of all built-in fragment functions keyed by {@link FragmentId}.\n *\n * Each function receives a {@link FragmentContext} and returns the fragment markdown\n * to inject, or `null` when the fragment's condition is not met (e.g. `\"handoff\"`\n * returns `null` when there are no sub-agents).\n *\n * @docLink packages/asset-manager/api-reference#fragments\n */\nexport const BUILT_IN_FRAGMENTS: Record<FragmentId, (ctx: FragmentContext) => string | null> = {\n \"agent-mode\": agentModeFragment,\n handoff: handoffFragment,\n \"skill-discovery\": skillDiscoveryFragment,\n \"connector-usage\": connectorUsageFragment,\n};\n\n// ── Resolution ────────────────────────────────────────────────────────────────\n\n/**\n * Resolve all framework fragments for the rendered system prompt.\n *\n * Applies per-project overrides from `skaile.yaml` `agent.fragments`:\n * - `true` / absent → include built-in fragment (default)\n * - `false` → omit fragment\n * - `string` → load markdown from path relative to `workspaceRoot`\n *\n * @param ctx - Fragment context built from the agent manifest and workspace config.\n * @param overrides - Per-project overrides map from `skaile.yaml` `agent.fragments`.\n * @param workspaceRoot - Absolute path to the workspace root (for resolving custom fragment paths).\n * @returns Ordered list of resolved fragment markdown strings to inject into the system prompt.\n * @docLink packages/asset-manager/api-reference#fragments\n */\nexport function resolveFragments(\n ctx: FragmentContext,\n overrides: Record<string, boolean | string> | undefined,\n workspaceRoot: string,\n): string[] {\n const results: string[] = [];\n\n for (const id of [\n \"agent-mode\",\n \"handoff\",\n \"skill-discovery\",\n \"connector-usage\",\n ] as FragmentId[]) {\n const override = overrides?.[id];\n\n if (override === false) continue;\n\n if (typeof override === \"string\") {\n const filePath = resolve(workspaceRoot, override);\n if (existsSync(filePath)) {\n const content = readFileSync(filePath, \"utf-8\").trim();\n if (content) results.push(content);\n }\n continue;\n }\n\n // true or absent — use built-in\n const fragment = BUILT_IN_FRAGMENTS[id](ctx);\n if (fragment) results.push(fragment);\n }\n\n return results;\n}\n\n/**\n * Load prompt-extension files declared under `skaile.yaml` `agent.prompt-extensions`.\n *\n * Paths are relative to `workspaceRoot`. Missing files are silently skipped.\n *\n * @param paths - Array of relative file paths from `skaile.yaml` `agent.prompt-extensions`.\n * @param workspaceRoot - Absolute path to the workspace root.\n * @returns Non-empty content strings for each file that exists and is non-empty.\n * @docLink packages/asset-manager/api-reference#fragments\n */\nexport function loadPromptExtensions(paths: string[] | undefined, workspaceRoot: string): string[] {\n if (!paths?.length) return [];\n return paths\n .map((p) => {\n const filePath = resolve(workspaceRoot, p);\n if (!existsSync(filePath)) return null;\n return readFileSync(filePath, \"utf-8\").trim();\n })\n .filter((s): s is string => s !== null && s.length > 0);\n}\n"]}
1
+ {"version":3,"sources":["../asset-manager/src/fragments.ts"],"names":[],"mappings":"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","file":"chunk-PKE3PXOK.js","sourcesContent":["/**\n * Framework fragments — conditional system prompt sections injected by the\n * agent renderer at install time.\n *\n * Each fragment explains a specific aspect of the agent framework to the agent.\n * Fragments are conditional (return null when context is empty) and overridable\n * per project via skaile.yaml `agent.fragments`.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\n/**\n * A skill installed into the agent's ability directory, referenced in the system prompt.\n *\n * @docLink packages/asset-manager/api-reference#fragments\n */\nexport interface AbilityRef {\n /** Skill name used as the slash command (e.g. `\"code-review\"`). */\n name: string;\n /** One-line description shown in the `## Installed Abilities` section. */\n description: string;\n}\n\n/**\n * A contract file installed alongside skills, referenced by path in the system prompt.\n *\n * @docLink packages/asset-manager/api-reference#fragments\n */\nexport interface ContractRef {\n /** Contract name for display purposes. */\n name: string;\n /** Path relative to workspace root, e.g. `\".claude/skills/iron-laws/CONTRACT.md\"`. */\n relativePath: string;\n}\n\n/**\n * A data connector declared in `skaile.yaml` resources.\n *\n * @docLink packages/asset-manager/api-reference#fragments\n */\nexport interface ConnectorRef {\n /** Connector ID as declared in `skaile.yaml`. */\n id: string;\n /** Connector driver type (e.g. `\"postgres\"`, `\"redis\"`, `\"sqlite\"`). */\n driver: string;\n /** Declared access level (`\"read-only\"` or `\"read-write\"`). */\n access: string;\n}\n\n/**\n * Context passed to each fragment function at render time.\n *\n * @docLink packages/asset-manager/api-reference#fragments\n */\nexport interface FragmentContext {\n /** Agent framework ID (e.g. `\"claude-code\"`, `\"omp\"`, `\"codex\"`). */\n framework: string;\n /** Relative path to the framework's skill/ability directory, e.g. `\".claude/skills\"`. */\n skillsDir: string;\n /** Relative path to the framework's agent directory, e.g. `\".claude/agents\"`. */\n agentsDir: string;\n /** Sub-agent names from `manifest.requires[]`. */\n subAgents: string[];\n /**\n * `true` when the agent is rendered to be called by another agent (a `delegate` sub-agent, or a\n * `role`): it is told it is a sub-agent, not the workspace's only agent.\n */\n subAgent?: boolean;\n /** Connectors declared in `skaile.yaml`. */\n connectors: ConnectorRef[];\n /** Resolved ability refs (installed skills). */\n abilityRefs: AbilityRef[];\n /** Resolved contract refs (installed alongside skills). */\n contractRefs: ContractRef[];\n}\n\n/**\n * Identifier for a built-in system prompt fragment.\n * - `\"agent-mode\"` — describes whether the agent is a sole agent or an orchestrator.\n * - `\"handoff\"` — delegation guidelines injected when sub-agents are declared.\n * - `\"skill-discovery\"` — skill directory location injected when abilities are installed.\n * - `\"connector-usage\"` — connected resources list injected when connectors are declared.\n *\n * @docLink packages/asset-manager/api-reference#fragments\n */\nexport type FragmentId = \"agent-mode\" | \"handoff\" | \"skill-discovery\" | \"connector-usage\";\n\n// ── Built-in fragments ────────────────────────────────────────────────────────\n\nfunction agentModeFragment(ctx: FragmentContext): string | null {\n if (ctx.subAgents.length === 0) {\n if (ctx.subAgent) {\n return [\n \"## Operating Mode\",\n \"\",\n \"You are a sub-agent: another agent hands you one task at a time. Do exactly that\",\n \"task with your installed abilities, and answer in the output format it asks for.\",\n \"Do not take over the conversation or assume you are the only agent in the workspace.\",\n ].join(\"\\n\");\n }\n return [\n \"## Operating Mode\",\n \"\",\n \"You are the sole agent for this workspace. Complete tasks autonomously\",\n \"using your installed abilities and connected resources.\",\n ].join(\"\\n\");\n }\n\n const list = ctx.subAgents.map((n) => `- \\`${n}\\``).join(\"\\n\");\n return [\n \"## Operating Mode\",\n \"\",\n \"You are the orchestrator for this workspace. Coordinate specialized\",\n \"sub-agents when tasks fall within their expertise:\",\n \"\",\n list,\n \"\",\n \"Delegate clearly: describe the task, expected output format, and any\",\n \"constraints. Synthesize results before presenting to the user.\",\n ].join(\"\\n\");\n}\n\nfunction handoffFragment(ctx: FragmentContext): string | null {\n if (ctx.subAgents.length === 0) return null;\n\n const lines = [\n \"## Delegation\",\n \"\",\n \"When delegating to a sub-agent:\",\n \"1. State the specific task and its acceptance criteria.\",\n \"2. Provide relevant context the sub-agent cannot infer on its own.\",\n \"3. Specify the expected output format.\",\n \"4. If the result is incomplete, refine and retry once before escalating.\",\n ];\n\n if (ctx.framework === \"claude-code\") {\n lines.push(\"\", `Use the Agent tool to dispatch. Sub-agents are in \\`${ctx.agentsDir}/\\`.`);\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction skillDiscoveryFragment(ctx: FragmentContext): string | null {\n if (ctx.abilityRefs.length === 0 && ctx.contractRefs.length === 0) return null;\n\n const lines = [\n \"## Skills and Abilities\",\n \"\",\n `Your specialized abilities are installed in \\`${ctx.skillsDir}/\\`.`,\n \"Read a skill's SKILL.md before executing a task that matches its purpose.\",\n ];\n\n if (ctx.framework === \"claude-code\") {\n lines.push(\"Abilities are also available as slash commands.\");\n }\n\n if (ctx.contractRefs.length > 0) {\n lines.push(\n \"\",\n `Operational contracts are co-located in \\`${ctx.skillsDir}/\\`. Read the`,\n \"relevant CONTRACT.md before acting on any constrained task.\",\n );\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction connectorUsageFragment(ctx: FragmentContext): string | null {\n if (ctx.connectors.length === 0) return null;\n\n const rows = ctx.connectors.map((c) => `- \\`${c.id}\\` (${c.driver}, ${c.access})`);\n\n return [\n \"## Connected Resources\",\n \"\",\n \"The following data sources are connected to this workspace:\",\n \"\",\n ...rows,\n \"\",\n \"Access via `skaile connector ops <id>` to list a source's operations and `skaile connector run <id> <operation>` to run one, or the registered tool functions.\",\n \"Respect the declared access level — read-only resources must not be written to.\",\n ].join(\"\\n\");\n}\n\n/**\n * Registry of all built-in fragment functions keyed by {@link FragmentId}.\n *\n * Each function receives a {@link FragmentContext} and returns the fragment markdown\n * to inject, or `null` when the fragment's condition is not met (e.g. `\"handoff\"`\n * returns `null` when there are no sub-agents).\n *\n * @docLink packages/asset-manager/api-reference#fragments\n */\nexport const BUILT_IN_FRAGMENTS: Record<FragmentId, (ctx: FragmentContext) => string | null> = {\n \"agent-mode\": agentModeFragment,\n handoff: handoffFragment,\n \"skill-discovery\": skillDiscoveryFragment,\n \"connector-usage\": connectorUsageFragment,\n};\n\n// ── Resolution ────────────────────────────────────────────────────────────────\n\n/**\n * Resolve all framework fragments for the rendered system prompt.\n *\n * Applies per-project overrides from `skaile.yaml` `agent.fragments`:\n * - `true` / absent → include built-in fragment (default)\n * - `false` → omit fragment\n * - `string` → load markdown from path relative to `workspaceRoot`\n *\n * @param ctx - Fragment context built from the agent manifest and workspace config.\n * @param overrides - Per-project overrides map from `skaile.yaml` `agent.fragments`.\n * @param workspaceRoot - Absolute path to the workspace root (for resolving custom fragment paths).\n * @returns Ordered list of resolved fragment markdown strings to inject into the system prompt.\n * @docLink packages/asset-manager/api-reference#fragments\n */\nexport function resolveFragments(\n ctx: FragmentContext,\n overrides: Record<string, boolean | string> | undefined,\n workspaceRoot: string,\n): string[] {\n const results: string[] = [];\n\n for (const id of [\n \"agent-mode\",\n \"handoff\",\n \"skill-discovery\",\n \"connector-usage\",\n ] as FragmentId[]) {\n const override = overrides?.[id];\n\n if (override === false) continue;\n\n if (typeof override === \"string\") {\n const filePath = resolve(workspaceRoot, override);\n if (existsSync(filePath)) {\n const content = readFileSync(filePath, \"utf-8\").trim();\n if (content) results.push(content);\n }\n continue;\n }\n\n // true or absent — use built-in\n const fragment = BUILT_IN_FRAGMENTS[id](ctx);\n if (fragment) results.push(fragment);\n }\n\n return results;\n}\n\n/**\n * Load prompt-extension files declared under `skaile.yaml` `agent.prompt-extensions`.\n *\n * Paths are relative to `workspaceRoot`. Missing files are silently skipped.\n *\n * @param paths - Array of relative file paths from `skaile.yaml` `agent.prompt-extensions`.\n * @param workspaceRoot - Absolute path to the workspace root.\n * @returns Non-empty content strings for each file that exists and is non-empty.\n * @docLink packages/asset-manager/api-reference#fragments\n */\nexport function loadPromptExtensions(paths: string[] | undefined, workspaceRoot: string): string[] {\n if (!paths?.length) return [];\n return paths\n .map((p) => {\n const filePath = resolve(workspaceRoot, p);\n if (!existsSync(filePath)) return null;\n return readFileSync(filePath, \"utf-8\").trim();\n })\n .filter((s): s is string => s !== null && s.length > 0);\n}\n"]}
@@ -1,15 +1,15 @@
1
- import { requireValidPublisherOrExit } from './chunk-TKHJXPSB.js';
2
- import { openLibraryManager } from './chunk-DHYSUJ3H.js';
3
- import { logErr, logWarn, logInfo, logOk, S } from './chunk-KX2PT5Q4.js';
4
- import { getKindRegistry, getKnownKinds } from './chunk-ARWKK325.js';
5
- import { AssetManager } from './chunk-OAHVKSQJ.js';
6
- import { getStoreManifestsDir, storeManifestFile, LocalCatalogSource, curatedManifestOverlay, writeCuratedManifest, commitStoreManifest } from './chunk-UL22SDGR.js';
7
- import { computeDeterministicHash, discoverAssetsInTree } from './chunk-QOM5Z62G.js';
8
- import { WorkspaceYamlEditor } from './chunk-L4YKW5AY.js';
9
- import { findWorkspaceRoot, workspaceConfigFilename, sourceShortName, sourceCacheKey, getGlobalCacheDir, attachToBranch, resolveSourcePublisher, resolveSkWorkspaceConfig, priorSourceCacheKeys, buildProvenanceIndex, getRepoCommit } from './chunk-OHNKYHRR.js';
1
+ import { requireValidPublisherOrExit } from './chunk-2XM3ZH36.js';
2
+ import { openLibraryManager } from './chunk-BEYNH2LS.js';
3
+ import { S, logErr, logWarn, logInfo, logOk } from './chunk-T2VBPVWZ.js';
4
+ import { getKindRegistry, getKnownKinds } from './chunk-JJJ2G4K2.js';
5
+ import { AssetManager } from './chunk-PKBLJI23.js';
6
+ import { getStoreManifestsDir, storeManifestFile, LocalCatalogSource, curatedManifestOverlay, writeCuratedManifest, commitStoreManifest } from './chunk-6CYKTHNT.js';
7
+ import { computeDeterministicHash, discoverAssetsInTree } from './chunk-MAZ3UXJK.js';
8
+ import { WorkspaceYamlEditor } from './chunk-BRK5QZKI.js';
9
+ import { findWorkspaceRoot, workspaceConfigFilename, sourceShortName, sourceCacheKey, getGlobalCacheDir, attachToBranch, resolveSourcePublisher, resolveSkWorkspaceConfig, priorSourceCacheKeys, buildProvenanceIndex, getRepoCommit } from './chunk-KJSC2ZD6.js';
10
10
  import { globalCacheRoot } from './chunk-L5VSIPQD.js';
11
- import { decodeSkaileManifest, encodeSkaileManifest } from './chunk-UQ33Y4DM.js';
12
- import { parseAssetRef } from './chunk-WDXZA7QW.js';
11
+ import { decodeSkaileManifest, encodeSkaileManifest } from './chunk-KPKGWXUJ.js';
12
+ import { parseAssetRef } from './chunk-IZQOO6MN.js';
13
13
  import { spawnSync } from 'child_process';
14
14
  import { existsSync, realpathSync, rmSync, renameSync, mkdirSync, statSync, readdirSync, rmdirSync, readFileSync, writeFileSync } from 'fs';
15
15
  import * as os from 'os';
@@ -22,11 +22,12 @@ function notWired(verb) {
22
22
  logErr(`${NOT_WIRED_MSG} (verb: source manifest ${verb})`);
23
23
  process.exit(2);
24
24
  }
25
- function resolveSourceArg(arg, projectDir) {
25
+ function resolveSourceArg(arg, projectDir, opts = {}) {
26
26
  const root = findWorkspaceRoot(projectDir);
27
27
  const registered = root ? readProjectSources(path2.join(root, workspaceConfigFilename())) : [];
28
28
  const match = registered.find((e) => sourceMatchesKey(e, arg));
29
- const bySlug = !match ? resolveByStoreSlug(arg) : void 0;
29
+ const found = !match ? resolveByStoreSlug(arg, opts.byName ?? true) : void 0;
30
+ const bySlug = found && "url" in found ? found : void 0;
30
31
  const url = match ? match.url : bySlug?.url ?? normalizeSourceUrl(arg);
31
32
  const slug = sourceShortName(url);
32
33
  const dest = sourceClonePath(sourceCacheKey(url));
@@ -35,16 +36,49 @@ function resolveSourceArg(arg, projectDir) {
35
36
  slug,
36
37
  dest,
37
38
  manifestFile: bySlug?.manifestFile ?? storeManifestPath(url),
38
- guessed: !match && !bySlug
39
+ guessed: !match && !bySlug,
40
+ ...found && "ambiguous" in found ? { ambiguous: found.ambiguous } : {}
39
41
  };
40
42
  }
41
- function resolveByStoreSlug(arg) {
42
- if (!/^[\w.-]+__[\w.-]+/.test(arg) || /[/:\\]/.test(arg)) return void 0;
43
- const manifestFile = path2.join(getStoreManifestsDir(), `${arg}.yaml`);
44
- if (!existsSync(manifestFile)) return void 0;
45
- const [host, owner, repo] = arg.split("__");
46
- const url = host && owner && repo ? `https://${host}/${owner}/${repo}` : arg;
47
- return { url, manifestFile };
43
+ function storeManifestSlugs() {
44
+ try {
45
+ return readdirSync(getStoreManifestsDir()).filter((f) => f.endsWith(".yaml")).map((f) => f.slice(0, -".yaml".length));
46
+ } catch {
47
+ return [];
48
+ }
49
+ }
50
+ function cloneOriginUrl(key) {
51
+ const dest = sourceClonePath(key);
52
+ if (!existsSync(dest)) return void 0;
53
+ const r = spawnSync("git", ["-C", dest, "remote", "get-url", "origin"], { encoding: "utf8" });
54
+ const out = r.status === 0 ? r.stdout.trim() : "";
55
+ return out || void 0;
56
+ }
57
+ function resolveByStoreSlug(arg, byName) {
58
+ if (!/^[\w.-]+$/.test(arg)) return void 0;
59
+ const slugs = storeManifestSlugs();
60
+ let slug = slugs.includes(arg) ? arg : void 0;
61
+ if (!slug && byName) {
62
+ const named = slugs.filter(
63
+ (s) => s.startsWith(`${arg}-`) && /^[0-9a-f]{8}$/.test(s.slice(arg.length + 1))
64
+ );
65
+ if (named.length === 1) slug = named[0];
66
+ else if (named.length > 1) return { ambiguous: [...named].sort() };
67
+ }
68
+ if (!slug) return void 0;
69
+ const manifestFile = path2.join(getStoreManifestsDir(), `${slug}.yaml`);
70
+ if (slug.includes("__")) {
71
+ const [host, owner, repo] = slug.split("__");
72
+ return { url: host && owner && repo ? `https://${host}/${owner}/${repo}` : slug, manifestFile };
73
+ }
74
+ const origin = cloneOriginUrl(slug);
75
+ return origin ? { url: origin, manifestFile } : void 0;
76
+ }
77
+ function missingManifestMessage(slug, manifestFile, ambiguous) {
78
+ if (ambiguous?.length) {
79
+ return `"${slug}" matches several curated manifests: ${ambiguous.join(", ")} \u2014 pass one of these slugs or the full source URL.`;
80
+ }
81
+ return `No curated manifest for "${slug}" at ${S.dim(manifestFile)} \u2014 run \`skaile source manifest init\` first.`;
48
82
  }
49
83
  function storeManifestPath(url) {
50
84
  return storeManifestFile(url);
@@ -63,7 +97,14 @@ function isTestFixtureAsset(relativePath) {
63
97
  }
64
98
  async function runInit(arg, opts) {
65
99
  const projectDir = path2.resolve(opts.projectDir);
66
- const { url, dest, manifestFile: target, guessed } = resolveSourceArg(arg, projectDir);
100
+ const {
101
+ url,
102
+ dest,
103
+ manifestFile: target,
104
+ guessed
105
+ } = resolveSourceArg(arg, projectDir, {
106
+ byName: false
107
+ });
67
108
  if (guessed && /^[\w.-]+$/.test(arg.trim().replace(/\.git$/, ""))) {
68
109
  logErr(
69
110
  `"${arg}" is not a git URL or an owner/repo shorthand. Use \`skaile source manifest init <owner>/<repo>\` or the full URL.`
@@ -146,11 +187,9 @@ function entryRef(entry) {
146
187
  }
147
188
  async function runRebuild(arg, opts) {
148
189
  const projectDir = path2.resolve(opts.projectDir);
149
- const { url, dest, slug, manifestFile: target } = resolveSourceArg(arg, projectDir);
190
+ const { url, dest, slug, manifestFile: target, ambiguous } = resolveSourceArg(arg, projectDir);
150
191
  if (!existsSync(target)) {
151
- logErr(
152
- `No curated manifest for "${slug}" at ${S.dim(target)} \u2014 run \`skaile source manifest init\` first.`
153
- );
192
+ logErr(missingManifestMessage(slug, target, ambiguous));
154
193
  process.exit(1);
155
194
  }
156
195
  const entry = { url };
@@ -234,11 +273,9 @@ async function runRebuild(arg, opts) {
234
273
  }
235
274
  async function runVerify(arg, opts) {
236
275
  const projectDir = path2.resolve(opts.projectDir);
237
- const { url, dest, slug, manifestFile: target } = resolveSourceArg(arg, projectDir);
276
+ const { url, dest, slug, manifestFile: target, ambiguous } = resolveSourceArg(arg, projectDir);
238
277
  if (!existsSync(target)) {
239
- logErr(
240
- `No curated manifest for "${slug}" at ${S.dim(target)} \u2014 run \`skaile source manifest init\` first.`
241
- );
278
+ logErr(missingManifestMessage(slug, target, ambiguous));
242
279
  process.exit(1);
243
280
  }
244
281
  ensureClone({ url });
@@ -309,11 +346,9 @@ function resolveEditorCommand(editorEnv, target) {
309
346
  }
310
347
  function runEdit(arg, opts, spawn = spawnSync) {
311
348
  const projectDir = path2.resolve(opts.projectDir);
312
- const { slug, manifestFile: target } = resolveSourceArg(arg, projectDir);
349
+ const { slug, manifestFile: target, ambiguous } = resolveSourceArg(arg, projectDir);
313
350
  if (!existsSync(target)) {
314
- logErr(
315
- `No curated manifest for "${slug}" at ${target}. Run \`skaile source manifest init\` first.`
316
- );
351
+ logErr(missingManifestMessage(slug, target, ambiguous));
317
352
  process.exit(1);
318
353
  }
319
354
  const { command, args } = resolveEditorCommand(process.env.VISUAL || process.env.EDITOR, target);
@@ -345,12 +380,12 @@ function addSourceManifestCommands(src) {
345
380
  ).option("-C, --project-dir <dir>", "Project directory", process.cwd()).option("--publisher <name>", "Override the publisher (--overwrite only)").option("--dev", "Include assets under the source's dev_paths", false).option("--overwrite", "Discard curation and re-scan the full inventory", false).action((arg, opts) => runRebuild(arg, opts));
346
381
  manifest.command("verify <src>").description("Verify hashes, deps, and schema (read-only)").option("-C, --project-dir <dir>", "Project directory", process.cwd()).option("--strict", "Fail on advisory checks (warnings force a nonzero exit)", false).action((arg, opts) => runVerify(arg, opts));
347
382
  manifest.command("publish <src>").description("Push the curated sidecar manifest and publish it to the store").option("-C, --project-dir <dir>", "Project directory", process.cwd()).option("--as <namespace>", "Publisher namespace (default: your store username)").option("--sidecar-repo <url>", "Public GitHub repo you own to hold the curated manifest").option("--ref <gitref>", "Foreign source ref to ingest (branch/sha; default: main)").option("--dry-run", "Print the publish plan without pushing or calling the store", false).action(async (arg, opts) => {
348
- const { runPublish } = await import('./source-manifest-publish-FK22TVQT.js');
383
+ const { runPublish } = await import('./source-manifest-publish-IYWUMUCY.js');
349
384
  await runPublish(arg, opts);
350
385
  });
351
386
  manifest.command("propose <src>").description("Open a PR to upstream with the sidecar manifest").action(() => notWired("propose"));
352
387
  manifest.command("yank <src>").description("Retract the source's published assets from the store").option("-C, --project-dir <dir>", "Project directory", process.cwd()).option("--asset <ref>", "Yank only the asset matching this ref/name").action(async (arg, opts) => {
353
- const { runYank } = await import('./source-manifest-publish-FK22TVQT.js');
388
+ const { runYank } = await import('./source-manifest-publish-IYWUMUCY.js');
354
389
  await runYank(arg, opts);
355
390
  });
356
391
  }
@@ -410,11 +445,15 @@ function sourceLabel(entry, all) {
410
445
  const shared = all.some((s) => s.url !== entry.url && sourceShortName(s.url) === short);
411
446
  return shared ? sourceCacheKey(entry.url) : short;
412
447
  }
448
+ function isLocalSourceUrl(url) {
449
+ return url.startsWith("/") || url.startsWith("file://");
450
+ }
413
451
  function resolveSource(sources, key) {
414
452
  const tiers = [
415
453
  (s) => s.url === key,
416
454
  (s) => sourceCacheKey(s.url) === key,
417
- (s) => sourceShortName(s.url) === key || s.url === normalizeSourceUrl(key)
455
+ (s) => sourceShortName(s.url) === key || s.url === normalizeSourceUrl(key),
456
+ (s) => isLocalSourceUrl(key) && isLocalSourceUrl(s.url) && realLocalCacheKey(s.url) === realLocalCacheKey(normalizeSourceUrl(key))
418
457
  ];
419
458
  for (const tier of tiers) {
420
459
  const hits = sources.filter(tier);
@@ -445,8 +484,18 @@ function logAdvisories(advisories, verbose, slug) {
445
484
  }
446
485
  }
447
486
  function findCacheKeyCollision(sources, url) {
448
- const key = sourceCacheKey(url);
449
- return sources.find((s) => s.url !== url && sourceCacheKey(s.url) === key);
487
+ const key = realLocalCacheKey(url);
488
+ return sources.find((s) => s.url !== url && realLocalCacheKey(s.url) === key);
489
+ }
490
+ function realLocalCacheKey(url) {
491
+ const local = url.startsWith("file://") ? url.slice("file://".length) : url;
492
+ if (local.startsWith("/") && existsSync(local)) {
493
+ try {
494
+ return sourceCacheKey(realpathSync(local));
495
+ } catch {
496
+ }
497
+ }
498
+ return sourceCacheKey(url);
450
499
  }
451
500
  function requireProjectYamlPath() {
452
501
  const root = findWorkspaceRoot(process.cwd());
@@ -458,10 +507,19 @@ function requireProjectYamlPath() {
458
507
  }
459
508
  return path2.join(root, workspaceConfigFilename());
460
509
  }
510
+ function loadProjectEditor(yamlPath) {
511
+ try {
512
+ return WorkspaceYamlEditor.load(yamlPath);
513
+ } catch (err) {
514
+ const message = err instanceof Error ? err.message : String(err);
515
+ logErr(/ — parse error: /.test(message) ? message : `Could not read ${yamlPath}: ${message}`);
516
+ process.exit(1);
517
+ }
518
+ }
461
519
  function readProjectSources(yamlPath) {
462
520
  if (!existsSync(yamlPath)) return [];
463
521
  try {
464
- return WorkspaceYamlEditor.load(yamlPath).getSources();
522
+ return loadProjectEditor(yamlPath).getSources();
465
523
  } catch (err) {
466
524
  logErr(`Could not read ${yamlPath}: ${err instanceof Error ? err.message : String(err)}`);
467
525
  process.exit(1);
@@ -768,10 +826,12 @@ function makeSourceCommand() {
768
826
  process.exitCode = 1;
769
827
  return;
770
828
  }
771
- const url = normalizeSourceUrl(source);
829
+ let url = normalizeSourceUrl(source);
772
830
  const yamlPath = requireProjectYamlPath();
773
831
  const collision = findCacheKeyCollision(readProjectSources(yamlPath), url);
774
- if (collision) {
832
+ if (collision && isLocalSourceUrl(collision.url) && isLocalSourceUrl(url)) {
833
+ url = collision.url;
834
+ } else if (collision) {
775
835
  logErr(
776
836
  `"${url}" maps to the same cache key (${sourceCacheKey(url)}) as already-registered "${collision.url}". Remove that source first (skaile source remove) or re-use its exact URL to update it.`
777
837
  );
@@ -790,7 +850,8 @@ function makeSourceCommand() {
790
850
  if (opts.publisher) entry.publisher = requireValidPublisherOrExit(opts.publisher);
791
851
  const registered = readProjectSources(yamlPath).find((s) => s.url === url);
792
852
  const clonedAt = sourceClonePath(sourceCacheKey(url));
793
- const publisherNow = registered && existsSync(clonedAt) ? resolveSourcePublisher(clonedAt, registered.publisher) : registered?.publisher;
853
+ const urlOrg = registered ? /github\.com[/:]([^/]+)\/[^/]+/.exec(registered.url)?.[1]?.toLowerCase() : void 0;
854
+ const publisherNow = registered && existsSync(clonedAt) ? resolveSourcePublisher(clonedAt, registered.publisher ?? urlOrg) : registered?.publisher ?? urlOrg;
794
855
  const publisherThen = registered && entry.publisher !== void 0 && existsSync(clonedAt) ? resolveSourcePublisher(clonedAt, entry.publisher) : entry.publisher;
795
856
  if (registered && publisherNow !== void 0 && entry.publisher !== void 0 && publisherNow !== publisherThen && !opts.force) {
796
857
  let declared = [];
@@ -826,7 +887,7 @@ function makeSourceCommand() {
826
887
  } else {
827
888
  logOk(`Cloned ${url} \u2192 ${dest}`);
828
889
  }
829
- const editor = WorkspaceYamlEditor.load(yamlPath);
890
+ const editor = loadProjectEditor(yamlPath);
830
891
  editor.setSource(entry);
831
892
  editor.save();
832
893
  const result = await refreshManifestCache(entry, opts.dev);
@@ -902,7 +963,7 @@ function makeSourceCommand() {
902
963
  false
903
964
  ).option("--force", "Remove the source although a locked asset still comes from it", false).action(async (key, opts) => {
904
965
  const yamlPath = requireProjectYamlPath();
905
- const editor = WorkspaceYamlEditor.load(yamlPath);
966
+ const editor = loadProjectEditor(yamlPath);
906
967
  const all = editor.getSources();
907
968
  const resolved = resolveSource(all, key);
908
969
  if (resolved.kind === "none") {
@@ -1011,6 +1072,6 @@ function makeSourceCommand() {
1011
1072
  return cmd;
1012
1073
  }
1013
1074
 
1014
- export { autoSyncForSearch, divergedSourceClones, ensureClone, findCacheKeyCollision, indexingHadFailures, legacySourceConfigHint, localPathNotASource, makeSourceCommand, normalizeSourceUrl, pullSourceClone, readProjectSources, resolveSource, resolveSourceArg, restoreSourceReaders, sourceClonePath, sourceLabel, sourceMatchesKey, syncProjectSources };
1015
- //# sourceMappingURL=chunk-WYHQUCHR.js.map
1016
- //# sourceMappingURL=chunk-WYHQUCHR.js.map
1075
+ export { autoSyncForSearch, divergedSourceClones, ensureClone, findCacheKeyCollision, indexingHadFailures, legacySourceConfigHint, loadProjectEditor, localPathNotASource, makeSourceCommand, missingManifestMessage, normalizeSourceUrl, pullSourceClone, readProjectSources, resolveSource, resolveSourceArg, restoreSourceReaders, sourceClonePath, sourceLabel, sourceMatchesKey, syncProjectSources };
1076
+ //# sourceMappingURL=chunk-PMWRM4EJ.js.map
1077
+ //# sourceMappingURL=chunk-PMWRM4EJ.js.map