@skaile/workspaces 6.1.0 → 6.3.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 (406) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/dist/ai-sdk.d.ts +2 -0
  3. package/dist/ai-sdk.js +111 -0
  4. package/dist/ai-sdk.js.map +1 -0
  5. package/dist/{asset-feeds-HJFV7UPW.js → asset-feeds-3YO2352Y.js} +26 -26
  6. package/dist/{asset-feeds-HJFV7UPW.js.map → asset-feeds-3YO2352Y.js.map} +1 -1
  7. package/dist/asset-manager/catalog-deployer.js +10 -10
  8. package/dist/asset-manager/fragments.js +1 -1
  9. package/dist/asset-manager/index.js +18 -18
  10. package/dist/asset-manager/installer.js +13 -13
  11. package/dist/asset-manager/renderers.js +11 -11
  12. package/dist/asset-manager/src/index.d.ts +149 -16
  13. package/dist/asset-manager/src/index.d.ts.map +1 -1
  14. package/dist/asset-manager/src/installer.d.ts +9 -0
  15. package/dist/asset-manager/src/installer.d.ts.map +1 -1
  16. package/dist/asset-manager/src/renderers.d.ts +7 -0
  17. package/dist/asset-manager/src/renderers.d.ts.map +1 -1
  18. package/dist/bridge/harnesses/claude-sdk.js +16 -15
  19. package/dist/bridge/harnesses/claude-sdk.js.map +1 -1
  20. package/dist/bridge/harnesses/codex.js +25 -17
  21. package/dist/bridge/harnesses/codex.js.map +1 -1
  22. package/dist/bridge/harnesses/continue.js +15 -14
  23. package/dist/bridge/harnesses/continue.js.map +1 -1
  24. package/dist/bridge/harnesses/echo.js +5 -4
  25. package/dist/bridge/harnesses/echo.js.map +1 -1
  26. package/dist/bridge/harnesses/gemini.js +11 -10
  27. package/dist/bridge/harnesses/goose.js +15 -14
  28. package/dist/bridge/harnesses/goose.js.map +1 -1
  29. package/dist/bridge/harnesses/omp.js +16 -8
  30. package/dist/bridge/harnesses/omp.js.map +1 -1
  31. package/dist/bridge/harnesses/opencode.js +15 -14
  32. package/dist/bridge/harnesses/opencode.js.map +1 -1
  33. package/dist/bridge/harnesses/qwen.js +11 -10
  34. package/dist/bridge/harnesses/qwen.js.map +1 -1
  35. package/dist/bridge/index.js +21 -19
  36. package/dist/bridge/src/ai-sdk.d.ts +46 -0
  37. package/dist/bridge/src/ai-sdk.d.ts.map +1 -0
  38. package/dist/bridge/src/harness-model-check.d.ts +15 -0
  39. package/dist/bridge/src/harness-model-check.d.ts.map +1 -1
  40. package/dist/bridge/src/harnesses/_subprocess-cli.d.ts.map +1 -1
  41. package/dist/bridge/src/harnesses/codex.d.ts.map +1 -1
  42. package/dist/bridge/src/harnesses/omp.d.ts.map +1 -1
  43. package/dist/bridge/src/index.d.ts +2 -1
  44. package/dist/bridge/src/index.d.ts.map +1 -1
  45. package/dist/bridge/src/provider-registry-load.d.ts +30 -0
  46. package/dist/bridge/src/provider-registry-load.d.ts.map +1 -0
  47. package/dist/bridge/src/runner-private-env.d.ts +7 -0
  48. package/dist/bridge/src/runner-private-env.d.ts.map +1 -1
  49. package/dist/{chunk-SVTMNSPI.js → chunk-2TFKXSB5.js} +5 -5
  50. package/dist/{chunk-SVTMNSPI.js.map → chunk-2TFKXSB5.js.map} +1 -1
  51. package/dist/{chunk-NB7SYQYP.js → chunk-32FYVSSW.js} +9 -28
  52. package/dist/chunk-32FYVSSW.js.map +1 -0
  53. package/dist/{chunk-QAKUD6QN.js → chunk-4QRJBY2P.js} +3 -3
  54. package/dist/{chunk-QAKUD6QN.js.map → chunk-4QRJBY2P.js.map} +1 -1
  55. package/dist/{chunk-XFIEVEU7.js → chunk-6OHZUUR7.js} +5 -4
  56. package/dist/chunk-6OHZUUR7.js.map +1 -0
  57. package/dist/{chunk-ILLTBKDJ.js → chunk-6UP2EDFN.js} +4 -313
  58. package/dist/chunk-6UP2EDFN.js.map +1 -0
  59. package/dist/{chunk-ZDLUQLI6.js → chunk-6WH2WE4B.js} +15 -5
  60. package/dist/chunk-6WH2WE4B.js.map +1 -0
  61. package/dist/{chunk-HPMQRAIF.js → chunk-72NT2TJU.js} +8 -7
  62. package/dist/chunk-72NT2TJU.js.map +1 -0
  63. package/dist/{chunk-E572OHGY.js → chunk-76FLBODK.js} +4 -3
  64. package/dist/chunk-76FLBODK.js.map +1 -0
  65. package/dist/{chunk-5Y2KGB4H.js → chunk-7MV3NHPT.js} +35 -9
  66. package/dist/chunk-7MV3NHPT.js.map +1 -0
  67. package/dist/{chunk-QEULL4Q3.js → chunk-7QG2WRSN.js} +77 -18
  68. package/dist/chunk-7QG2WRSN.js.map +1 -0
  69. package/dist/{chunk-6YR4ALVX.js → chunk-7RH6E332.js} +7 -7
  70. package/dist/{chunk-6YR4ALVX.js.map → chunk-7RH6E332.js.map} +1 -1
  71. package/dist/{chunk-BBBCJSSU.js → chunk-7TSNR5H5.js} +4 -4
  72. package/dist/{chunk-BBBCJSSU.js.map → chunk-7TSNR5H5.js.map} +1 -1
  73. package/dist/{chunk-3GMOPFWH.js → chunk-AMJ6KEV7.js} +4 -4
  74. package/dist/{chunk-3GMOPFWH.js.map → chunk-AMJ6KEV7.js.map} +1 -1
  75. package/dist/{chunk-X3YGUKCG.js → chunk-BPTWWKGF.js} +3 -3
  76. package/dist/{chunk-X3YGUKCG.js.map → chunk-BPTWWKGF.js.map} +1 -1
  77. package/dist/{chunk-Z7ZEZZB6.js → chunk-C5HFK34M.js} +3 -3
  78. package/dist/chunk-C5HFK34M.js.map +1 -0
  79. package/dist/{chunk-EJPMNDTP.js → chunk-COUJOTAJ.js} +3 -3
  80. package/dist/{chunk-EJPMNDTP.js.map → chunk-COUJOTAJ.js.map} +1 -1
  81. package/dist/{chunk-J72MO2WA.js → chunk-DU26AVK2.js} +10 -9
  82. package/dist/chunk-DU26AVK2.js.map +1 -0
  83. package/dist/{chunk-YLLVSR2U.js → chunk-E5NQRHEB.js} +30 -7
  84. package/dist/chunk-E5NQRHEB.js.map +1 -0
  85. package/dist/{chunk-XGULGQA3.js → chunk-ELSGFI3I.js} +5 -4
  86. package/dist/chunk-ELSGFI3I.js.map +1 -0
  87. package/dist/{chunk-IHFGPHCT.js → chunk-EQNIBBB6.js} +49 -25
  88. package/dist/chunk-EQNIBBB6.js.map +1 -0
  89. package/dist/{chunk-BFMYYNDT.js → chunk-F3D25RGM.js} +11 -3
  90. package/dist/chunk-F3D25RGM.js.map +1 -0
  91. package/dist/{chunk-GNZBFSRB.js → chunk-H622YULS.js} +5 -4
  92. package/dist/chunk-H622YULS.js.map +1 -0
  93. package/dist/{chunk-FKQNBCDW.js → chunk-HDVLBEEX.js} +4 -4
  94. package/dist/{chunk-FKQNBCDW.js.map → chunk-HDVLBEEX.js.map} +1 -1
  95. package/dist/{chunk-AATHJRKL.js → chunk-HGOJEVHY.js} +4 -4
  96. package/dist/{chunk-AATHJRKL.js.map → chunk-HGOJEVHY.js.map} +1 -1
  97. package/dist/{chunk-CEKW3KXP.js → chunk-HH2H2ZV7.js} +18 -15
  98. package/dist/chunk-HH2H2ZV7.js.map +1 -0
  99. package/dist/{chunk-ZFUZ5AKM.js → chunk-HTGTNN2B.js} +3 -3
  100. package/dist/{chunk-ZFUZ5AKM.js.map → chunk-HTGTNN2B.js.map} +1 -1
  101. package/dist/{chunk-LSSYC5IC.js → chunk-IZQOO6MN.js} +2 -2
  102. package/dist/{chunk-LSSYC5IC.js.map → chunk-IZQOO6MN.js.map} +1 -1
  103. package/dist/{chunk-VMVDAZLA.js → chunk-J5JRGBKK.js} +108 -19
  104. package/dist/chunk-J5JRGBKK.js.map +1 -0
  105. package/dist/{chunk-7LP7RCZI.js → chunk-JGH7NB47.js} +5 -5
  106. package/dist/{chunk-7LP7RCZI.js.map → chunk-JGH7NB47.js.map} +1 -1
  107. package/dist/{chunk-RHN5MRQO.js → chunk-JMIKGAUA.js} +27 -5
  108. package/dist/chunk-JMIKGAUA.js.map +1 -0
  109. package/dist/{chunk-HWNK3F3X.js → chunk-KGHYXXXV.js} +588 -76
  110. package/dist/chunk-KGHYXXXV.js.map +1 -0
  111. package/dist/{chunk-7HX6FNKL.js → chunk-KIPCBIFJ.js} +41 -56
  112. package/dist/chunk-KIPCBIFJ.js.map +1 -0
  113. package/dist/{chunk-ZBHZLWV3.js → chunk-KPKGWXUJ.js} +4 -4
  114. package/dist/{chunk-ZBHZLWV3.js.map → chunk-KPKGWXUJ.js.map} +1 -1
  115. package/dist/{chunk-ABFPSVIS.js → chunk-LD6O6QKU.js} +31 -7
  116. package/dist/chunk-LD6O6QKU.js.map +1 -0
  117. package/dist/{chunk-AZ2H6R5I.js → chunk-LEJQAX7G.js} +74 -39
  118. package/dist/chunk-LEJQAX7G.js.map +1 -0
  119. package/dist/{chunk-ZAELRYKS.js → chunk-MD3FUZS3.js} +3 -3
  120. package/dist/{chunk-ZAELRYKS.js.map → chunk-MD3FUZS3.js.map} +1 -1
  121. package/dist/{chunk-NUA33BYO.js → chunk-MYXFR27L.js} +42 -15
  122. package/dist/chunk-MYXFR27L.js.map +1 -0
  123. package/dist/{chunk-KUQAJVYT.js → chunk-PHAMYCZH.js} +142 -28
  124. package/dist/chunk-PHAMYCZH.js.map +1 -0
  125. package/dist/{chunk-NOA6EJXE.js → chunk-PKE3PXOK.js} +3 -3
  126. package/dist/{chunk-NOA6EJXE.js.map → chunk-PKE3PXOK.js.map} +1 -1
  127. package/dist/{chunk-RDTLPOPD.js → chunk-PL52CI4U.js} +4 -4
  128. package/dist/{chunk-RDTLPOPD.js.map → chunk-PL52CI4U.js.map} +1 -1
  129. package/dist/{chunk-VYVTEMAW.js → chunk-PNUM7GUY.js} +3 -3
  130. package/dist/{chunk-VYVTEMAW.js.map → chunk-PNUM7GUY.js.map} +1 -1
  131. package/dist/{chunk-DIGFA7Z5.js → chunk-Q7CU5GQO.js} +13 -5
  132. package/dist/chunk-Q7CU5GQO.js.map +1 -0
  133. package/dist/chunk-QFFMFZIR.js +32 -0
  134. package/dist/chunk-QFFMFZIR.js.map +1 -0
  135. package/dist/{chunk-HMISULVD.js → chunk-QK7AG5AV.js} +4 -4
  136. package/dist/{chunk-HMISULVD.js.map → chunk-QK7AG5AV.js.map} +1 -1
  137. package/dist/{chunk-2LAPHLDH.js → chunk-QTLUZUF2.js} +45 -35
  138. package/dist/chunk-QTLUZUF2.js.map +1 -0
  139. package/dist/{chunk-4MUDQCBP.js → chunk-RFQONXET.js} +3 -3
  140. package/dist/{chunk-4MUDQCBP.js.map → chunk-RFQONXET.js.map} +1 -1
  141. package/dist/{chunk-AITJ7ELM.js → chunk-ROVZCGTN.js} +59 -23
  142. package/dist/chunk-ROVZCGTN.js.map +1 -0
  143. package/dist/{chunk-LSI2IVFT.js → chunk-RXGPFAMN.js} +4 -3
  144. package/dist/chunk-RXGPFAMN.js.map +1 -0
  145. package/dist/chunk-S6KZHPR4.js +315 -0
  146. package/dist/chunk-S6KZHPR4.js.map +1 -0
  147. package/dist/{chunk-EX3GLAL6.js → chunk-TGV2EWGL.js} +5 -5
  148. package/dist/{chunk-EX3GLAL6.js.map → chunk-TGV2EWGL.js.map} +1 -1
  149. package/dist/{chunk-QSYQOTWN.js → chunk-TO5SSMRI.js} +58 -5
  150. package/dist/chunk-TO5SSMRI.js.map +1 -0
  151. package/dist/{chunk-Z3VKUWAX.js → chunk-TSTRH4SM.js} +3 -3
  152. package/dist/{chunk-Z3VKUWAX.js.map → chunk-TSTRH4SM.js.map} +1 -1
  153. package/dist/{chunk-5J4NPGFM.js → chunk-U3SXCVR7.js} +5 -5
  154. package/dist/{chunk-5J4NPGFM.js.map → chunk-U3SXCVR7.js.map} +1 -1
  155. package/dist/{chunk-IRYKRKVQ.js → chunk-URCJIV7T.js} +3 -3
  156. package/dist/{chunk-IRYKRKVQ.js.map → chunk-URCJIV7T.js.map} +1 -1
  157. package/dist/{chunk-ASWTQQ7E.js → chunk-V5BPDB4J.js} +3 -3
  158. package/dist/{chunk-ASWTQQ7E.js.map → chunk-V5BPDB4J.js.map} +1 -1
  159. package/dist/{chunk-ADPM6AYF.js → chunk-VSX2G7LA.js} +3 -3
  160. package/dist/{chunk-ADPM6AYF.js.map → chunk-VSX2G7LA.js.map} +1 -1
  161. package/dist/{chunk-4FVIT5DI.js → chunk-VUWRGMT6.js} +3 -3
  162. package/dist/{chunk-4FVIT5DI.js.map → chunk-VUWRGMT6.js.map} +1 -1
  163. package/dist/{chunk-ZHGKAZJ7.js → chunk-XBQTXGY4.js} +56 -8
  164. package/dist/chunk-XBQTXGY4.js.map +1 -0
  165. package/dist/{chunk-UI745XC3.js → chunk-XEVFSDIF.js} +13 -7
  166. package/dist/chunk-XEVFSDIF.js.map +1 -0
  167. package/dist/{chunk-S2XHGWQC.js → chunk-Y3I4KGLX.js} +44 -15
  168. package/dist/chunk-Y3I4KGLX.js.map +1 -0
  169. package/dist/{chunk-COYF6IG2.js → chunk-YW4ASEUP.js} +5 -5
  170. package/dist/{chunk-COYF6IG2.js.map → chunk-YW4ASEUP.js.map} +1 -1
  171. package/dist/{chunk-DGTI65OC.js → chunk-ZEH4WFEG.js} +17 -11
  172. package/dist/chunk-ZEH4WFEG.js.map +1 -0
  173. package/dist/{claude-code-RE46FJXI.js → claude-code-EUKDGOOO.js} +5 -5
  174. package/dist/{claude-code-RE46FJXI.js.map → claude-code-EUKDGOOO.js.map} +1 -1
  175. package/dist/cli/index.js +350 -141
  176. package/dist/cli/index.js.map +1 -1
  177. package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
  178. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  179. package/dist/cli/src/commands/config.d.ts.map +1 -1
  180. package/dist/cli/src/commands/diff.d.ts.map +1 -1
  181. package/dist/cli/src/commands/harness.d.ts.map +1 -1
  182. package/dist/cli/src/commands/integration.d.ts.map +1 -1
  183. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  184. package/dist/cli/src/commands/library-index.d.ts +8 -1
  185. package/dist/cli/src/commands/library-index.d.ts.map +1 -1
  186. package/dist/cli/src/commands/migrate-assets.d.ts.map +1 -1
  187. package/dist/cli/src/commands/outdated.d.ts.map +1 -1
  188. package/dist/cli/src/commands/plugin-registry-cmd.d.ts.map +1 -1
  189. package/dist/cli/src/commands/project.d.ts.map +1 -1
  190. package/dist/cli/src/commands/providers.d.ts.map +1 -1
  191. package/dist/cli/src/commands/rebuild.d.ts.map +1 -1
  192. package/dist/cli/src/commands/run.d.ts.map +1 -1
  193. package/dist/cli/src/commands/serve-preflight.d.ts +31 -1
  194. package/dist/cli/src/commands/serve-preflight.d.ts.map +1 -1
  195. package/dist/cli/src/commands/serve.d.ts +10 -0
  196. package/dist/cli/src/commands/serve.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/validate-instances.d.ts.map +1 -1
  201. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  202. package/dist/cli/src/commands/why.d.ts.map +1 -1
  203. package/dist/cli/src/config-checks.d.ts +23 -5
  204. package/dist/cli/src/config-checks.d.ts.map +1 -1
  205. package/dist/cli/src/harness-error.d.ts +12 -1
  206. package/dist/cli/src/harness-error.d.ts.map +1 -1
  207. package/dist/cli/src/helpers.d.ts +18 -8
  208. package/dist/cli/src/helpers.d.ts.map +1 -1
  209. package/dist/cli/src/plugin-store/index.d.ts +10 -1
  210. package/dist/cli/src/plugin-store/index.d.ts.map +1 -1
  211. package/dist/cli/src/plugin-store/spec.d.ts +8 -0
  212. package/dist/cli/src/plugin-store/spec.d.ts.map +1 -1
  213. package/dist/cli/src/skill-checks.d.ts +2 -2
  214. package/dist/cli/src/skill-checks.d.ts.map +1 -1
  215. package/dist/connectors/config.js +5 -5
  216. package/dist/connectors/index.js +24 -22
  217. package/dist/connectors/src/connector-manager.d.ts.map +1 -1
  218. package/dist/connectors-XYPE2DCQ.js +50 -0
  219. package/dist/{connectors-7THEF7YA.js.map → connectors-XYPE2DCQ.js.map} +1 -1
  220. package/dist/core/framework.js +1 -1
  221. package/dist/core/index.js +9 -9
  222. package/dist/core/manifest.js +2 -2
  223. package/dist/core/models.js +1 -1
  224. package/dist/core/provider-registry-credentials.js +2 -2
  225. package/dist/core/provider-registry.js +1 -1
  226. package/dist/core/publish-manifest.js +3 -3
  227. package/dist/core/ref.js +1 -1
  228. package/dist/core/runtime-assets.js +5 -5
  229. package/dist/core/src/framework.d.ts +5 -3
  230. package/dist/core/src/framework.d.ts.map +1 -1
  231. package/dist/core/src/index.d.ts +2 -1
  232. package/dist/core/src/index.d.ts.map +1 -1
  233. package/dist/core/src/lock.d.ts +12 -0
  234. package/dist/core/src/lock.d.ts.map +1 -1
  235. package/dist/core/src/manifest.d.ts +15 -0
  236. package/dist/core/src/manifest.d.ts.map +1 -1
  237. package/dist/core/src/models.d.ts +7 -0
  238. package/dist/core/src/models.d.ts.map +1 -1
  239. package/dist/core/src/provider-registry.d.ts +6 -0
  240. package/dist/core/src/provider-registry.d.ts.map +1 -1
  241. package/dist/core/src/workspace-config.d.ts +10 -1
  242. package/dist/core/src/workspace-config.d.ts.map +1 -1
  243. package/dist/core/src/workspace-yaml-editor.d.ts.map +1 -1
  244. package/dist/core/workspace-config.js +4 -4
  245. package/dist/deploy/index.js +9 -9
  246. package/dist/discovery/index.js +5 -5
  247. package/dist/discovery/src/parse-manifest.d.ts.map +1 -1
  248. package/dist/{ensure-sources-IH7CHSJF.js → ensure-sources-IN3VKHUA.js} +37 -21
  249. package/dist/ensure-sources-IN3VKHUA.js.map +1 -0
  250. package/dist/factory-assets/connectors/box.js +24 -22
  251. package/dist/factory-assets/connectors/deploy.js +24 -22
  252. package/dist/factory-assets/connectors/devserver.js +24 -22
  253. package/dist/factory-assets/connectors/flow/adapter.js +24 -22
  254. package/dist/factory-assets/connectors/flow/engine.js +10 -10
  255. package/dist/factory-assets/connectors/flow/run-flow.d.ts.map +1 -1
  256. package/dist/factory-assets/connectors/flow/run-flow.js +26 -24
  257. package/dist/factory-assets/connectors/flow.js +24 -22
  258. package/dist/factory-assets/connectors/git.js +24 -22
  259. package/dist/factory-assets/connectors/gmail.js +24 -22
  260. package/dist/factory-assets/connectors/googledrive.js +24 -22
  261. package/dist/factory-assets/connectors/local.js +24 -22
  262. package/dist/factory-assets/connectors/mattermost.js +24 -22
  263. package/dist/factory-assets/connectors/memory.js +24 -22
  264. package/dist/factory-assets/connectors/minio.js +24 -22
  265. package/dist/factory-assets/connectors/postgres.js +24 -22
  266. package/dist/factory-assets/connectors/s3.js +24 -22
  267. package/dist/factory-assets/connectors/sharepoint.js +24 -22
  268. package/dist/factory-assets/connectors/sqlite.js +24 -22
  269. package/dist/factory-assets/connectors/static-server.js +24 -22
  270. package/dist/factory-assets/connectors/tunnel.js +24 -22
  271. package/dist/factory-assets/connectors/webdav.js +24 -22
  272. package/dist/factory-assets/connectors/xstate-store.js +24 -22
  273. package/dist/factory-assets/connectors/xstate.js +24 -22
  274. package/dist/flows-QAO63TDV.js +26 -0
  275. package/dist/{flows-4JZQ3XFK.js.map → flows-QAO63TDV.js.map} +1 -1
  276. package/dist/helpers-HDVGCF3M.js +54 -0
  277. package/dist/{helpers-JNMK3FC2.js.map → helpers-HDVGCF3M.js.map} +1 -1
  278. package/dist/library/index.js +14 -14
  279. package/dist/library/install.js +5 -5
  280. package/dist/library/src/index.d.ts +1 -1
  281. package/dist/library/src/index.d.ts.map +1 -1
  282. package/dist/library/src/install/index.d.ts +1 -1
  283. package/dist/library/src/install/index.d.ts.map +1 -1
  284. package/dist/library/src/install/install-from-manifest.d.ts +13 -0
  285. package/dist/library/src/install/install-from-manifest.d.ts.map +1 -1
  286. package/dist/library/src/install/source-fetch-github.d.ts.map +1 -1
  287. package/dist/library/src/manifest-writer.d.ts.map +1 -1
  288. package/dist/library/src/remote/remote-catalog-source.d.ts +3 -1
  289. package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
  290. package/dist/library/src/remote/rest-catalog-source.d.ts +3 -2
  291. package/dist/library/src/remote/rest-catalog-source.d.ts.map +1 -1
  292. package/dist/{library-publish-I3UWXAHI.js → library-publish-62OWCNB5.js} +56 -55
  293. package/dist/library-publish-62OWCNB5.js.map +1 -0
  294. package/dist/model-endpoint/index.js +13 -12
  295. package/dist/model-endpoint/src/openai-chat.d.ts +7 -2
  296. package/dist/model-endpoint/src/openai-chat.d.ts.map +1 -1
  297. package/dist/model-endpoint/src/openai-shared.d.ts +8 -0
  298. package/dist/model-endpoint/src/openai-shared.d.ts.map +1 -1
  299. package/dist/model-endpoint/src/server.d.ts.map +1 -1
  300. package/dist/model-endpoint/src/types.d.ts +1 -1
  301. package/dist/model-endpoint/src/types.d.ts.map +1 -1
  302. package/dist/model-endpoint/src/usage-cost.d.ts +23 -0
  303. package/dist/model-endpoint/src/usage-cost.d.ts.map +1 -0
  304. package/dist/open-library-TZ7OSDEJ.js +58 -0
  305. package/dist/{open-library-NKKUJLWA.js.map → open-library-TZ7OSDEJ.js.map} +1 -1
  306. package/dist/open-registry-RLZKTJG3.js +32 -0
  307. package/dist/{open-registry-BYAXSHUI.js.map → open-registry-RLZKTJG3.js.map} +1 -1
  308. package/dist/paths-D6LBQETQ.js +22 -0
  309. package/dist/{paths-UKWE35XS.js.map → paths-D6LBQETQ.js.map} +1 -1
  310. package/dist/plugin-store-A5J4TLCH.js +23 -0
  311. package/dist/{plugin-store-ABE35NRX.js.map → plugin-store-A5J4TLCH.js.map} +1 -1
  312. package/dist/project-4AVRES3M.js +88 -0
  313. package/dist/{project-BIPK47JK.js.map → project-4AVRES3M.js.map} +1 -1
  314. package/dist/resolver/index.js +10 -10
  315. package/dist/runner/index.js +41 -39
  316. package/dist/runner/src/capability-roundtrip.d.ts +7 -6
  317. package/dist/runner/src/capability-roundtrip.d.ts.map +1 -1
  318. package/dist/runner/src/serve.d.ts +6 -5
  319. package/dist/runner/src/serve.d.ts.map +1 -1
  320. package/dist/sdk/asset-manager.js +18 -18
  321. package/dist/sdk/bridge.js +21 -19
  322. package/dist/sdk/core.js +9 -9
  323. package/dist/sdk/flow.js +10 -10
  324. package/dist/sdk/index.js +41 -39
  325. package/dist/sdk/index.js.map +1 -1
  326. package/dist/sdk/resolver.js +10 -10
  327. package/dist/sdk/runner.js +41 -39
  328. package/dist/sdk/transport/ws/server.js +10 -10
  329. package/dist/sdk/transport/ws.js +10 -10
  330. package/dist/sdk/transport.js +10 -10
  331. package/dist/{serve-preflight-FLTIBTEX.js → serve-preflight-H2AYMGJ6.js} +65 -35
  332. package/dist/serve-preflight-H2AYMGJ6.js.map +1 -0
  333. package/dist/{setup-AG6NFHSN.js → setup-NSPQD4V4.js} +33 -31
  334. package/dist/setup-NSPQD4V4.js.map +1 -0
  335. package/dist/skills-B533SRVZ.js +26 -0
  336. package/dist/{skills-UQYUHVKO.js.map → skills-B533SRVZ.js.map} +1 -1
  337. package/dist/source-VTECABUO.js +87 -0
  338. package/dist/{source-ASEHI2XS.js.map → source-VTECABUO.js.map} +1 -1
  339. package/dist/source-fetch-github-RWHV4I5Z.js +4 -0
  340. package/dist/{source-fetch-github-ST4MFL3D.js.map → source-fetch-github-RWHV4I5Z.js.map} +1 -1
  341. package/dist/{source-manifest-publish-IEVV3W6J.js → source-manifest-publish-YORI42MN.js} +56 -56
  342. package/dist/source-manifest-publish-YORI42MN.js.map +1 -0
  343. package/dist/transport/index.js +10 -10
  344. package/dist/transport/ws/server.js +10 -10
  345. package/dist/transport/ws.js +10 -10
  346. package/dist/tui/index.js +49 -40
  347. package/dist/tui/index.js.map +1 -1
  348. package/dist/tui/src/repl.d.ts.map +1 -1
  349. package/dist/types/manifests.js +1 -1
  350. package/dist/types/src/manifests/index.d.ts +1 -1
  351. package/dist/types/src/manifests/index.d.ts.map +1 -1
  352. package/dist/types/src/manifests/scaffold-body.d.ts +2 -0
  353. package/dist/types/src/manifests/scaffold-body.d.ts.map +1 -1
  354. package/dist/workspace-plugin/adapters/mcp.js +31 -29
  355. package/dist/workspace-plugin/adapters/omp.js +15 -15
  356. package/dist/workspace-plugin/index.js +2 -2
  357. package/package.json +27 -1
  358. package/dist/chunk-2LAPHLDH.js.map +0 -1
  359. package/dist/chunk-5Y2KGB4H.js.map +0 -1
  360. package/dist/chunk-7HX6FNKL.js.map +0 -1
  361. package/dist/chunk-ABFPSVIS.js.map +0 -1
  362. package/dist/chunk-AITJ7ELM.js.map +0 -1
  363. package/dist/chunk-AZ2H6R5I.js.map +0 -1
  364. package/dist/chunk-BFMYYNDT.js.map +0 -1
  365. package/dist/chunk-CEKW3KXP.js.map +0 -1
  366. package/dist/chunk-DGTI65OC.js.map +0 -1
  367. package/dist/chunk-DIGFA7Z5.js.map +0 -1
  368. package/dist/chunk-E572OHGY.js.map +0 -1
  369. package/dist/chunk-GNZBFSRB.js.map +0 -1
  370. package/dist/chunk-HPMQRAIF.js.map +0 -1
  371. package/dist/chunk-HWNK3F3X.js.map +0 -1
  372. package/dist/chunk-IHFGPHCT.js.map +0 -1
  373. package/dist/chunk-ILLTBKDJ.js.map +0 -1
  374. package/dist/chunk-J72MO2WA.js.map +0 -1
  375. package/dist/chunk-KUQAJVYT.js.map +0 -1
  376. package/dist/chunk-LSI2IVFT.js.map +0 -1
  377. package/dist/chunk-NB7SYQYP.js.map +0 -1
  378. package/dist/chunk-NUA33BYO.js.map +0 -1
  379. package/dist/chunk-QEULL4Q3.js.map +0 -1
  380. package/dist/chunk-QSYQOTWN.js.map +0 -1
  381. package/dist/chunk-RHN5MRQO.js.map +0 -1
  382. package/dist/chunk-S2XHGWQC.js.map +0 -1
  383. package/dist/chunk-UI745XC3.js.map +0 -1
  384. package/dist/chunk-VMVDAZLA.js.map +0 -1
  385. package/dist/chunk-XFIEVEU7.js.map +0 -1
  386. package/dist/chunk-XGULGQA3.js.map +0 -1
  387. package/dist/chunk-YLLVSR2U.js.map +0 -1
  388. package/dist/chunk-Z7ZEZZB6.js.map +0 -1
  389. package/dist/chunk-ZDLUQLI6.js.map +0 -1
  390. package/dist/chunk-ZHGKAZJ7.js.map +0 -1
  391. package/dist/connectors-7THEF7YA.js +0 -48
  392. package/dist/ensure-sources-IH7CHSJF.js.map +0 -1
  393. package/dist/flows-4JZQ3XFK.js +0 -26
  394. package/dist/helpers-JNMK3FC2.js +0 -38
  395. package/dist/library-publish-I3UWXAHI.js.map +0 -1
  396. package/dist/open-library-NKKUJLWA.js +0 -42
  397. package/dist/open-registry-BYAXSHUI.js +0 -32
  398. package/dist/paths-UKWE35XS.js +0 -22
  399. package/dist/plugin-store-ABE35NRX.js +0 -23
  400. package/dist/project-BIPK47JK.js +0 -86
  401. package/dist/serve-preflight-FLTIBTEX.js.map +0 -1
  402. package/dist/setup-AG6NFHSN.js.map +0 -1
  403. package/dist/skills-UQYUHVKO.js +0 -26
  404. package/dist/source-ASEHI2XS.js +0 -85
  405. package/dist/source-fetch-github-ST4MFL3D.js +0 -4
  406. package/dist/source-manifest-publish-IEVV3W6J.js.map +0 -1
package/dist/cli/index.js CHANGED
@@ -1,95 +1,97 @@
1
1
  #!/usr/bin/env node
2
- import { makeValidateCommand, scanIdentities } from '../chunk-IHFGPHCT.js';
3
- import { storeNotInstallableReason, mcpNotRunnableHere } from '../chunk-EX3GLAL6.js';
4
- import { makeProvidersCommand, loadRegistryView, addProviderEntry, ProviderRegistryWriteError, removeProviderEntry } from '../chunk-NB7SYQYP.js';
5
- import { makeInstallCommand, makeCheckCommand, makeCleanCommand, pinComposedAgents, reportRewritten, reportReplaced, reportRelocked, reportMoved, reportStoreNotChecked, globalProblems, editedConventionFiles, supportsInstallManifest, runYamlInstall, REF_HINT, reportInstalledSoftDeps } from '../chunk-CEKW3KXP.js';
6
- import { unknownHarnessMessage, reportProjectConfig, driverAliasOption, foldDriverFlag, friendlyHarnessError, harnessErrorNotes, isRecord } from '../chunk-7HX6FNKL.js';
2
+ import { status, enable, disable, install, uninstall } from '../chunk-V5BPDB4J.js';
3
+ import { makeValidateCommand, scanIdentities } from '../chunk-EQNIBBB6.js';
4
+ import { storeNotInstallableReason, mcpNotRunnableHere } from '../chunk-TGV2EWGL.js';
5
+ import { makeProvidersCommand, loadRegistryView, addProviderEntry, ProviderRegistryWriteError, removeProviderEntry } from '../chunk-32FYVSSW.js';
6
+ import { makeInstallCommand, makeCheckCommand, makeCleanCommand, pinComposedAgents, reportRewritten, reportReplaced, reportRelocked, reportMoved, reportStoreNotChecked, globalProblems, editedConventionFiles, supportsInstallManifest, runYamlInstall, REF_HINT, reportInstalledSoftDeps } from '../chunk-HH2H2ZV7.js';
7
+ import { reportUnknownHarnesses, reportProjectConfig, agentInstanceErrorLines, isRecord } from '../chunk-KIPCBIFJ.js';
7
8
  import { createSpinner } from '../chunk-NESV47MF.js';
8
- import { loadDeclaredPlugins } from '../chunk-QSYQOTWN.js';
9
- import { getStoreConfig, storeFetch, isStoreAuthenticated, getStoreToken } from '../chunk-3GMOPFWH.js';
10
- import { makeSourceCommand, syncProjectSources, divergedSourceClones } from '../chunk-AZ2H6R5I.js';
11
- import { libraryAssetRefusals, deviceLogin, loadStoreAuthConfig, logout, hasStoredAuth, exitOnLibrarySymlinks, resolveLibraryPublisherDetailed, getStoreIdentity, warnLibraryNameFallback, indexLibrary, warnIgnoredDomainFiles, removedDomainOption, rejectRemovedDomainOption, requireValidPublisherOrExit, exitOnManifestPublisherProblems, findAssetManifestFile, checkAssetFile, registerLibraryAsset, DOMAIN_REMOVED_HINT, reportLibrarySymlinks, checkAsset, manifestPublisherProblems, exitOnManifestPathProblems, manifestRequiresProblems, composeRefContext, registeredAssetKeys, assetEntryRef, duplicateAssetMessage, manifestParseFailureLine, manifestParseErrorText, unresolvedManifestDependencies, findEntryManifestFile, unheldRequiresOfFile, warnLegacyBundleFiles, checkComposeKinds } from '../chunk-AITJ7ELM.js';
12
- import { openCatalogSource, LocalCatalogDisabledError, openLibraryManager, openLibrary } from '../chunk-RDTLPOPD.js';
13
- import { AI_RESOURCES } from '../chunk-AATHJRKL.js';
14
- import { status, enable, disable, install, uninstall } from '../chunk-ASWTQQ7E.js';
15
- import { logErr, S, logOk, logInfo, logWarn, TARGET_DEFAULT_HINT, parseHarnessFilter, requireProjectConfig, deferredWarnings, warnPlaceholderBodies, warnFilesOnlyDelegates, reportLegacyOmpCopies, logNoProject, warnLegacyClaudeCopies, kindColorPad, kindColor, colorRef, formatSoftDepSection, bareSoftDepName, formatSoftDepHint, formatRelativeTime, formatSoftDepRemovePreview, formatSoftDepAddPreview, fitWidth, KIND_COL_WIDTH } from '../chunk-QEULL4Q3.js';
16
- import { getKindRegistry, getKnownKinds } from '../chunk-COYF6IG2.js';
9
+ import { loadDeclaredPlugins } from '../chunk-TO5SSMRI.js';
10
+ import { getStoreConfig, storeFetch, isStoreAuthenticated, getStoreToken } from '../chunk-AMJ6KEV7.js';
11
+ import { makeSourceCommand, syncProjectSources, divergedSourceClones } from '../chunk-LEJQAX7G.js';
12
+ import { libraryAssetRefusals, manifestEntryRenames, deviceLogin, loadStoreAuthConfig, logout, hasStoredAuth, exitOnLibrarySymlinks, resolveLibraryPublisherDetailed, getStoreIdentity, warnLibraryNameFallback, indexLibrary, warnIgnoredDomainFiles, removedDomainOption, rejectRemovedDomainOption, requireValidPublisherOrExit, exitOnManifestPublisherProblems, findAssetManifestFile, checkAssetFile, registerLibraryAsset, DOMAIN_REMOVED_HINT, reportLibrarySymlinks, checkAsset, manifestPublisherProblems, exitOnManifestPathProblems, manifestRequiresProblems, composeRefContext, registeredAssetKeys, assetEntryRef, duplicateAssetMessage, manifestParseFailureLine, manifestParseErrorText, unresolvedManifestDependencies, findEntryManifestFile, unheldRequiresOfFile, warnLegacyBundleFiles, checkComposeKinds } from '../chunk-ROVZCGTN.js';
13
+ import { openCatalogSource, LocalCatalogDisabledError, openLibraryManager, openLibrary } from '../chunk-PL52CI4U.js';
14
+ import { getKindRegistry, getKnownKinds } from '../chunk-YW4ASEUP.js';
15
+ import { AI_RESOURCES } from '../chunk-HGOJEVHY.js';
16
+ import { logErr, unknownHarnessTargetMessage, S, logOk, logInfo, logWarnErr, unknownHarnessMessage, logWarn, TARGET_DEFAULT_HINT, parseHarnessFilter, requireProjectConfig, deferredWarnings, warnPlaceholderBodies, warnFilesOnlyDelegates, reportLegacyOmpCopies, logNoProject, warnStaleHarnessCopies, kindColorPad, kindColor, colorRef, formatSoftDepSection, bareSoftDepName, driverAliasOption, foldDriverFlag, friendlyHarnessError, harnessErrorNotes, formatSoftDepHint, formatRelativeTime, formatSoftDepRemovePreview, formatSoftDepAddPreview, fitWidth, KIND_COL_WIDTH } from '../chunk-7QG2WRSN.js';
17
17
  import { LocalSecretsProvider } from '../chunk-ILFGVSTJ.js';
18
- import { resolveInstanceAgentDir, instanceSessionOverrides, runAgentChat, isCompositionError, resolveSessionId, loadSessionById, loadSession, listSessions, setCurrentSession, deleteSession, clearSession, loadAgentManifest, hashAgentFiles, createCompositionContentSource, compileComposition, manifestModelForHarness, instanceForSession, resolveAgentInstance, describeComposition, MarkdownStreamer, createFinalTextFallback } from '../chunk-2LAPHLDH.js';
19
- import '../chunk-QAKUD6QN.js';
20
- import '../chunk-6YR4ALVX.js';
21
- import '../chunk-ZAELRYKS.js';
22
- import '../chunk-X3YGUKCG.js';
18
+ import { resolveInstanceAgentDir, instanceSessionOverrides, runAgentChat, isCompositionError, resolveSessionId, loadSessionById, loadSession, listSessions, setCurrentSession, deleteSession, clearSession, loadAgentManifest, hashAgentFiles, createCompositionContentSource, compileComposition, manifestModelForHarness, instanceForSession, resolveAgentInstance, describeComposition, MarkdownStreamer, createFinalTextFallback } from '../chunk-QTLUZUF2.js';
19
+ import '../chunk-4QRJBY2P.js';
20
+ import '../chunk-7RH6E332.js';
21
+ import '../chunk-MD3FUZS3.js';
22
+ import '../chunk-BPTWWKGF.js';
23
23
  import '../chunk-WYZXSJBK.js';
24
- import '../chunk-HMISULVD.js';
25
- import '../chunk-Z3VKUWAX.js';
24
+ import '../chunk-QK7AG5AV.js';
25
+ import '../chunk-TSTRH4SM.js';
26
26
  import '../chunk-KW37WNXY.js';
27
27
  import '../chunk-3MWQKQUB.js';
28
- import '../chunk-KUQAJVYT.js';
28
+ import '../chunk-PHAMYCZH.js';
29
29
  import '../chunk-O7SG5PC2.js';
30
30
  import '../chunk-7QBNJTTQ.js';
31
31
  import '../chunk-O2SYFJWP.js';
32
- import '../chunk-EJPMNDTP.js';
32
+ import '../chunk-COUJOTAJ.js';
33
33
  import '../chunk-32NA4TVC.js';
34
34
  import '../chunk-W3UDISS2.js';
35
- import '../chunk-ZFUZ5AKM.js';
36
- import { runFlow, resumeFlow } from '../chunk-J72MO2WA.js';
35
+ import '../chunk-HTGTNN2B.js';
36
+ import { runFlow, resumeFlow } from '../chunk-DU26AVK2.js';
37
37
  import '../chunk-4R6DROGN.js';
38
- import { parseSkillRequirements, validateRequirements } from '../chunk-IRYKRKVQ.js';
39
- import '../chunk-VYVTEMAW.js';
40
- import '../chunk-DGTI65OC.js';
38
+ import { parseSkillRequirements, validateRequirements } from '../chunk-URCJIV7T.js';
39
+ import '../chunk-PNUM7GUY.js';
40
+ import '../chunk-ZEH4WFEG.js';
41
41
  import '../chunk-6GWSDPBP.js';
42
- import '../chunk-BBBCJSSU.js';
43
- import { checkHarnessModel, checkModelProvider } from '../chunk-5Y2KGB4H.js';
44
- import '../chunk-7LP7RCZI.js';
45
- import '../chunk-SVTMNSPI.js';
46
- import '../chunk-XGULGQA3.js';
42
+ import '../chunk-7TSNR5H5.js';
43
+ import { checkHarnessModel, checkModelProvider } from '../chunk-7MV3NHPT.js';
44
+ import '../chunk-JGH7NB47.js';
45
+ import '../chunk-2TFKXSB5.js';
46
+ import '../chunk-ELSGFI3I.js';
47
47
  import '../chunk-LOO5CB5M.js';
48
48
  import '../chunk-BIRW3HOG.js';
49
- import '../chunk-5J4NPGFM.js';
50
- import '../chunk-GNZBFSRB.js';
51
- import '../chunk-XFIEVEU7.js';
49
+ import '../chunk-U3SXCVR7.js';
50
+ import '../chunk-H622YULS.js';
51
+ import '../chunk-6OHZUUR7.js';
52
52
  import '../chunk-7DN6JKP2.js';
53
- import '../chunk-FKQNBCDW.js';
54
- import { listHarnesses, getProviderPreset, AI_PROVIDER_PRESETS } from '../chunk-ILLTBKDJ.js';
53
+ import '../chunk-HDVLBEEX.js';
54
+ import { listHarnesses } from '../chunk-S6KZHPR4.js';
55
55
  import '../chunk-G5SUWZEU.js';
56
+ import '../chunk-QFFMFZIR.js';
57
+ import { getProviderPreset, AI_PROVIDER_PRESETS } from '../chunk-6UP2EDFN.js';
56
58
  import '../chunk-IFGTRL2I.js';
57
- import { loadFlow, flowLookupRoots, findFlowFileInRoots, loadAllFlowEntries } from '../chunk-4MUDQCBP.js';
59
+ import { loadFlow, flowLookupRoots, findFlowFileInRoots, loadAllFlowEntries } from '../chunk-RFQONXET.js';
58
60
  import '../chunk-WD3L5QSU.js';
59
- import { nodeLabel, nodeSkillAsset, nodeIsInert, nodeIsOptional, nodeRunKind } from '../chunk-7RGTAEG6.js';
61
+ import { nodeLabel, nodeSkillAsset, nodeIsInert, nodeIsOptional, nodeRunKind, nodeAssets } from '../chunk-7RGTAEG6.js';
60
62
  import '../chunk-JCPD4QRM.js';
61
- import { setLibraryAssetCheck, LibraryEntryError, AssetManager, parseRefTolerant, MissingManifestError, parseCanonicalLockKey, normalizeRepoUrl, FACTORY_SOURCE_URL } from '../chunk-HWNK3F3X.js';
62
- import { CatalogHttpError, libraryDirMissing, missingLibraryDirMessage, cloneOrInitGitRepo, trackOriginBranch, stampManifestPublisher, isGitRepo, ensureGitRepo, conflictingAssetRoot, scanUnlistedAssets, setManifestPublisher, LIBRARY_OWNERSHIPS, assertManifestEditable, installLibraryAsset, getStoreManifestsDir, assertValidLibraryName, unparsableAssetFiles, syncManifestWithDisk, renamedLibraryName, storeManifestFile, getDefaultValue, isSecretPlaceholder } from '../chunk-S2XHGWQC.js';
63
- import { flowFileNameError, SEMVER_RE } from '../chunk-UI745XC3.js';
64
- import '../chunk-YLLVSR2U.js';
65
- import '../chunk-BFMYYNDT.js';
63
+ import { setLibraryAssetCheck, setRenamedEntryLookup, LibraryEntryError, AssetManager, parseRefTolerant, MissingManifestError, parseCanonicalLockKey, normalizeRepoUrl } from '../chunk-KGHYXXXV.js';
64
+ import { CatalogHttpError, libraryDirMissing, missingLibraryDirMessage, cloneOrInitGitRepo, trackOriginBranch, stampManifestPublisher, isGitRepo, ensureGitRepo, conflictingAssetRoot, scanUnlistedAssets, setManifestPublisher, LIBRARY_OWNERSHIPS, assertManifestEditable, installLibraryAsset, getStoreManifestsDir, assertValidLibraryName, unparsableAssetFiles, syncManifestWithDisk, renamedLibraryName, storeManifestFile, getDefaultValue, isSecretPlaceholder } from '../chunk-Y3I4KGLX.js';
65
+ import { flowFileNameError, SEMVER_RE } from '../chunk-XEVFSDIF.js';
66
+ import '../chunk-E5NQRHEB.js';
67
+ import '../chunk-F3D25RGM.js';
66
68
  import '../chunk-3TXEJN4W.js';
67
69
  import '../chunk-ISHJITXJ.js';
68
70
  import '../chunk-LNFKL23K.js';
69
71
  import '../chunk-JRN5QF4C.js';
70
72
  import '../chunk-NUELZWCF.js';
71
- import { installTargetOf, SCAFFOLD_KINDS } from '../chunk-NUA33BYO.js';
72
- import '../chunk-NOA6EJXE.js';
73
+ import { installTargetOf, SCAFFOLD_KINDS } from '../chunk-MYXFR27L.js';
74
+ import '../chunk-PKE3PXOK.js';
73
75
  import '../chunk-KTBKW2FI.js';
74
76
  import '../chunk-UQ6LFBPZ.js';
75
- import '../chunk-ABFPSVIS.js';
76
- import { effectiveComposes, validatePreset, validateAgent, composeSlotDiagnostics, agentDeprecationDiagnostics, SLOT_ID_PATTERN } from '../chunk-E572OHGY.js';
77
- import { loadSettings, globalSettingsPath, resolveSettings, projectSettingsPath, saveSettings, WorkspaceYamlEditor, resolveLibraryDir, checkAgentSkillConformance, resolveSettingsWithSources, resolveConfiguredHarnessName, readLock, globalInstallDir, GLOBAL_INSTALL_DIR_NAME, workspaceProviderRegistryPath, userProviderRegistryPath, loadProviderRegistryFile, aiResourceRoots } from '../chunk-VMVDAZLA.js';
77
+ import '../chunk-LD6O6QKU.js';
78
+ import { effectiveComposes, validatePreset, validateAgent, composeSlotDiagnostics, agentDeprecationDiagnostics, SLOT_ID_PATTERN } from '../chunk-76FLBODK.js';
79
+ import { loadSettings, globalSettingsPath, resolveSettings, projectSettingsPath, saveSettings, WorkspaceYamlEditor, resolveLibraryDir, checkAgentSkillConformance, resolveSettingsWithSources, resolveConfiguredHarnessName, readLock, FACTORY_SOURCE_URL, globalInstallDir, GLOBAL_INSTALL_DIR_NAME, workspaceProviderRegistryPath, userProviderRegistryPath, loadProviderRegistryFile, aiResourceRoots } from '../chunk-J5JRGBKK.js';
78
80
  import '../chunk-4GY63JU6.js';
79
- import { factoryAssetRoots } from '../chunk-ZDLUQLI6.js';
81
+ import { factoryAssetRoots } from '../chunk-6WH2WE4B.js';
80
82
  import { deployedDir } from '../chunk-5KRMNUL4.js';
81
- import { DEFAULT_HARNESS_ID, HARNESS_DEFAULTS } from '../chunk-Z7ZEZZB6.js';
83
+ import { DEFAULT_HARNESS_ID, HARNESS_DEFAULTS } from '../chunk-C5HFK34M.js';
82
84
  import { findKindDirs } from '../chunk-MWXYN6NY.js';
83
- import { SourceEntryError, LegacyKeyError, resolveSkWorkspaceConfig, sourceCacheKey, getGlobalCacheDir, resolveAgentDir, AgentRefResolutionError, resolveAgentDefinitionDir, effectiveAgentInstances, matchPin, coerceVersion, loadSkWorkspaceConfig, findWorkspaceRoot, isWorkspaceConfigFilename, SKAILE_YAML_DEFAULT, AGENT_PROFILE_FIELDS } from '../chunk-ZHGKAZJ7.js';
85
+ import { SourceEntryError, LegacyKeyError, resolveSkWorkspaceConfig, sourceCacheKey, getGlobalCacheDir, resolveAgentDir, AgentRefResolutionError, resolveAgentDefinitionDir, effectiveAgentInstances, matchPin, coerceVersion, loadSkWorkspaceConfig, findWorkspaceRoot, isWorkspaceConfigFilename, SKAILE_YAML_DEFAULT, AGENT_PROFILE_FIELDS } from '../chunk-XBQTXGY4.js';
84
86
  import { globalCacheRoot, globalSkaileDir, userConfigPath } from '../chunk-L5VSIPQD.js';
85
87
  import { HARNESS_TARGETS, SUPPORTED_HARNESSES, harnessNameForHarnessId } from '../chunk-VTETQCR6.js';
86
- import { SKAILE_MANIFEST_FILENAME, loadSkPublishManifest, decodeSkaileManifest, LIBRARY_GITIGNORE, librarySymlinkMessage, isNonAssetPath, isNonAssetDir, encodeSkaileManifest } from '../chunk-ZBHZLWV3.js';
88
+ import { SKAILE_MANIFEST_FILENAME, loadSkPublishManifest, decodeSkaileManifest, LIBRARY_GITIGNORE, librarySymlinkMessage, isNonAssetPath, isNonAssetDir, encodeSkaileManifest } from '../chunk-KPKGWXUJ.js';
89
+ import { setWalkTruncationSink, dedupeRequirements, parseFrontmatter, scanDirectory, parseRequires } from '../chunk-JMIKGAUA.js';
87
90
  import { pluginTitle } from '../chunk-RVRB27AN.js';
88
- import { dedupeRequirements, parseFrontmatter, scanDirectory, parseRequires } from '../chunk-RHN5MRQO.js';
89
- import { parseAssetRef, isValidPublisher, PUBLISHER_HINT, isValidAssetName, ASSET_NAME_HINT, depToStr, assetRefToStr, slugifyAssetName, parseAssetRefLoose } from '../chunk-LSSYC5IC.js';
90
- import { portableSpawn, portableSpawnSync } from '../chunk-ADPM6AYF.js';
91
+ import { parseAssetRef, isValidPublisher, PUBLISHER_HINT, isValidAssetName, ASSET_NAME_HINT, depToStr, assetRefToStr, slugifyAssetName, parseAssetRefLoose } from '../chunk-IZQOO6MN.js';
92
+ import { portableSpawn, portableSpawnSync } from '../chunk-VSX2G7LA.js';
93
+ import { parseModelRef, resolveEntryBaseUrl } from '../chunk-RXGPFAMN.js';
91
94
  import { openSqlite } from '../chunk-DKXNKFKP.js';
92
- import { parseModelRef, resolveEntryBaseUrl } from '../chunk-LSI2IVFT.js';
93
95
  import '../chunk-C3CAXQMA.js';
94
96
  import { registerLogStore, LogStore, StdoutSink } from '../chunk-BOFL7GIF.js';
95
97
  import '../chunk-NSBPE2FW.js';
@@ -226,15 +228,17 @@ async function runSearch(kind, query, opts) {
226
228
  const showStore = !opts.local;
227
229
  const { resolveConfig } = await import('../library/index.js');
228
230
  const airGapped = resolveConfig({ projectDir: path19__default.resolve(opts.projectDir) }).catalog.cache_ttl === 0;
229
- if (showLocal) {
230
- await searchLocal(query, kind, opts, showStore, airGapped);
231
- }
232
- if (showStore) {
233
- await searchStore(query, kind, opts, airGapped);
231
+ const localHits = showLocal ? await searchLocal(query, kind, opts, showStore, airGapped) : false;
232
+ const store = showStore ? await searchStore(query, kind, opts, airGapped) : "skipped";
233
+ if (showLocal && showStore && !localHits && store !== "hits") {
234
+ const what = query ? ` for "${query}"` : kind ? ` for kind "${kind}"` : "";
235
+ logInfo(
236
+ store === "empty" ? `No results${what} (local and store).` : `No local results${what}; the store was not searched.`
237
+ );
234
238
  }
235
239
  }
236
240
  async function searchIndex(query, kind, projectDir) {
237
- const { openLibrary: openLibrary2 } = await import('../open-library-NKKUJLWA.js');
241
+ const { openLibrary: openLibrary2 } = await import('../open-library-TZ7OSDEJ.js');
238
242
  const library = await openLibrary2();
239
243
  try {
240
244
  const { libraryDirMissing: libraryDirMissing2 } = await import('../library/index.js');
@@ -409,14 +413,14 @@ async function withAddVersions(entries, projectDir) {
409
413
  }
410
414
  async function searchLocal(query, kind, opts, showStore, airGapped) {
411
415
  const projectDir = path19__default.resolve(opts.projectDir);
412
- const { restoreSourceReaders } = await import('../source-ASEHI2XS.js');
416
+ const { restoreSourceReaders } = await import('../source-VTECABUO.js');
413
417
  for (const name of await restoreSourceReaders(projectDir)) {
414
418
  logInfo(`Re-registered source "${name}" (its library entry was removed elsewhere).`);
415
419
  }
416
420
  const factory = await searchFactory(projectDir, query, kind);
417
421
  let entries = unionEntries(await searchIndex(query, kind, projectDir), factory);
418
422
  if (entries.length === 0 && !query && !kind && !airGapped) {
419
- const { autoSyncForSearch } = await import('../source-ASEHI2XS.js');
423
+ const { autoSyncForSearch } = await import('../source-VTECABUO.js');
420
424
  if (await autoSyncForSearch(projectDir)) {
421
425
  entries = unionEntries(await searchIndex(query, kind, projectDir), factory);
422
426
  }
@@ -427,7 +431,7 @@ async function searchLocal(query, kind, opts, showStore, airGapped) {
427
431
  query ? `No entries matching "${query}".` : kind ? `No "${kind}" assets found in this project's sources.` : "No assets found. Run `skaile source sync` first."
428
432
  );
429
433
  }
430
- return;
434
+ return false;
431
435
  }
432
436
  if (showStore) {
433
437
  console.log(`
@@ -439,6 +443,7 @@ async function searchLocal(query, kind, opts, showStore, airGapped) {
439
443
  projectDir
440
444
  )
441
445
  );
446
+ return true;
442
447
  }
443
448
  var MIN_LOCAL_DESCRIPTION_WIDTH = 10;
444
449
  function layoutLocalTable(rows, width, style = {}) {
@@ -531,9 +536,9 @@ function formatStoreRows(assets, indent, width = terminalWidth()) {
531
536
  async function searchStore(query, kind, opts, airGapped) {
532
537
  if (airGapped && !opts.store) {
533
538
  logInfo("air-gapped (cache_ttl: 0) \u2014 local sources only");
534
- return;
539
+ return "skipped";
535
540
  }
536
- const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-NKKUJLWA.js');
541
+ const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-TZ7OSDEJ.js');
537
542
  try {
538
543
  const remote = await openCatalogSource2({ projectDir: path19__default.resolve(opts.projectDir) });
539
544
  const assets = await remote.listAssets(kind ? { kind } : {});
@@ -546,6 +551,7 @@ async function searchStore(query, kind, opts, airGapped) {
546
551
  logInfo("No results in store");
547
552
  }
548
553
  for (const note of storeSelectionNotes(sel, " ")) console.log(note);
554
+ return sel.shown.length > 0 ? "hits" : "empty";
549
555
  } catch (e) {
550
556
  const local = e instanceof LocalCatalogDisabledError2;
551
557
  if (opts.store) {
@@ -558,6 +564,7 @@ async function searchStore(query, kind, opts, airGapped) {
558
564
  local ? "remote catalog disabled (catalog.url: local) \u2014 showing local results only" : "store unavailable \u2014 showing local results only (run with --store to see the error)"
559
565
  );
560
566
  }
567
+ return "skipped";
561
568
  }
562
569
  }
563
570
  async function describeStoreFailure(err, projectDir) {
@@ -642,6 +649,9 @@ function makeAddCommand() {
642
649
  return new Command("add").description("Add to skaile.yaml + deploy").argument("<ref>", "Asset reference (kind:@<publisher>/name#<version>)").option("--project-dir <path>", "Project directory", process.cwd()).option("--global", "Record in ~/.skaile/skaile.yaml + deploy to every global harness").option(
643
650
  "--harness <ids>",
644
651
  "Comma-separated global harnesses to deploy into (default: all resolved); implies --global"
652
+ ).option(
653
+ "--only",
654
+ "with --harness on an asset that is already global: replace its harness set (default: add to it)"
645
655
  ).option("--target <agent>", `Harness target (${TARGET_DEFAULT_HINT})`).option(
646
656
  "--link",
647
657
  "symlink local-path assets instead of copying (dev loop; machine-local, not for committing)"
@@ -660,6 +670,10 @@ function makeAddCommand() {
660
670
  process.exit(1);
661
671
  }
662
672
  const harnesses = parseHarnessFilter(opts.harness);
673
+ if (opts.only && harnesses === void 0) {
674
+ logErr("--only needs --harness: it replaces the set of harnesses the asset goes to.");
675
+ process.exit(1);
676
+ }
663
677
  if (!opts.global && harnesses === void 0) requireProjectConfig(opts.projectDir);
664
678
  const warnings = deferredWarnings();
665
679
  const collisionKeys = [];
@@ -687,6 +701,12 @@ function makeAddCommand() {
687
701
  const added = await am2.add(ref, {
688
702
  link: opts.link,
689
703
  force: opts.force,
704
+ only: opts.only === true,
705
+ onDroppedCopy: (droppedRef, harness, copy) => logInfo(
706
+ S.dim(
707
+ `${harness} is no longer in the set of ${droppedRef} but still holds ${copy.replace(homedir(), "~")} (delete it with skaile remove ${droppedRef} --global --harness ${harness})`
708
+ )
709
+ ),
690
710
  onLibraryOrigin: (deployedRef, library) => libraryOf.set(deployedRef, library),
691
711
  onPlaceholderBody: (deployedRef) => placeholderBodies.push(deployedRef),
692
712
  onPlaceholderDescription: (deployedRef) => placeholderDescriptions.push(deployedRef),
@@ -748,24 +768,24 @@ function makeAddCommand() {
748
768
  logInfo(
749
769
  `Recorded in skaile.yaml (store bytes are fetched + verified into .skaile/cache/store). ${kind} assets are not deployed into the harness target \u2014 they are composed when skaile runs the agent.`
750
770
  );
751
- else logInfo("Nothing to deploy (already up to date).");
771
+ else {
772
+ logInfo("Nothing to deploy (already up to date).");
773
+ if (am2.global) reportGlobalPaths(am2, [parsedRef]);
774
+ }
752
775
  } else {
753
776
  for (const a of added) {
754
777
  const library = libraryOf.get(a);
755
778
  logOk(library ? `${a} (library ${library})` : a);
756
779
  }
757
780
  warnPlaceholderBodies(placeholderBodies, placeholderDescriptions);
758
- if (!am2.global) warnFilesOnlyDelegates(am2.projectDir, am2.harness);
781
+ if (!am2.global && added.some((a) => a.startsWith("agent:"))) {
782
+ warnFilesOnlyDelegates(am2.projectDir, am2.harness);
783
+ }
759
784
  if (am2.global) {
760
- for (const a of added) {
761
- const { kind, name } = parseAssetRef(a);
762
- const component = installTargetOf(getKindRegistry(), kind);
763
- if (!component) continue;
764
- for (const harness of am2.deployTargets()) {
765
- const dir = deployedDir(component, name, harness, true);
766
- if (existsSync(dir)) logInfo(S.dim(`${harness}: ${dir.replace(homedir(), "~")}`));
767
- }
768
- }
785
+ reportGlobalPaths(
786
+ am2,
787
+ added.map((a) => parseAssetRef(a))
788
+ );
769
789
  reportLegacyOmpCopies(am2.takeLegacyCopiesRemoved(), am2.takeLegacyCopiesKept());
770
790
  }
771
791
  if (added.length > 1) {
@@ -794,12 +814,23 @@ function makeAddCommand() {
794
814
  }
795
815
  });
796
816
  }
817
+ function reportGlobalPaths(am2, assets) {
818
+ for (const { kind, name } of assets) {
819
+ const component = installTargetOf(getKindRegistry(), kind);
820
+ if (!component) continue;
821
+ for (const harness of am2.deployTargets()) {
822
+ const dir = deployedDir(component, name, harness, true);
823
+ if (existsSync(dir)) logInfo(S.dim(`${harness}: ${dir.replace(homedir(), "~")}`));
824
+ }
825
+ }
826
+ }
797
827
  function printAddPlan(plan) {
798
828
  const line = (item, label) => {
799
829
  logInfo(
800
830
  `${label} ${colorRef(item.ref)}${item.version ? `#${item.version}` : ""} (${item.origin})`
801
831
  );
802
832
  for (const folder of item.folders) console.log(` folder: ${S.dim(folder)}`);
833
+ for (const file of item.renders) console.log(` writes: ${S.dim(file)}`);
803
834
  if (item.files.length > 0) console.log(` files: ${S.dim(item.files.join(", "))}`);
804
835
  };
805
836
  for (const item of plan.filter((i) => i.requested)) line(item, "Would add");
@@ -853,7 +884,8 @@ function makeRemoveCommand() {
853
884
  ", "
854
885
  )} (lock entry) \u2014 it was kept; remove that asset to delete it, or \`skaile remove ${ref} --force\`` : void 0;
855
886
  if (!result.changed) {
856
- logErr(`Not deployed or declared: ${ref}`);
887
+ const otherKind = await am2.otherKindHint(ref);
888
+ logErr(`Not deployed or declared: ${ref}${otherKind ? `. ${otherKind}` : ""}`);
857
889
  if (keptNote) logInfo(keptNote);
858
890
  if (ownerNote) logInfo(ownerNote);
859
891
  process.exitCode = 1;
@@ -898,6 +930,7 @@ function makeListCommand() {
898
930
  runGlobalList(kind, opts, harnesses);
899
931
  return;
900
932
  }
933
+ if (await reportUnknownHarnesses(path19__default.resolve(opts.projectDir)) > 0) process.exit(1);
901
934
  const am2 = new AssetManager({
902
935
  registry: getKindRegistry(),
903
936
  projectDir: path19__default.resolve(opts.projectDir),
@@ -917,7 +950,7 @@ function makeListCommand() {
917
950
  }
918
951
  if (declared.length === 0) {
919
952
  logInfo("No dependencies declared in skaile.yaml.");
920
- warnLegacyClaudeCopies(am2);
953
+ warnStaleHarnessCopies(am2);
921
954
  return;
922
955
  }
923
956
  const kindW = Math.max(4, ...declared.map((e) => e.kind.length));
@@ -943,7 +976,7 @@ function makeListCommand() {
943
976
  const invalid = declared.filter((e) => e.state === "invalid").length;
944
977
  if (invalid > 0)
945
978
  logInfo(`${invalid} invalid \u2014 fix the ${S.cmd("skaile.yaml")} dependencies entry.`);
946
- warnLegacyClaudeCopies(am2);
979
+ warnStaleHarnessCopies(am2);
947
980
  console.log();
948
981
  });
949
982
  }
@@ -1069,7 +1102,7 @@ async function resolveInfoEntry(am2, ref, opts) {
1069
1102
  return { entry: match ?? deployed };
1070
1103
  }
1071
1104
  const lookup = opts.storeLookup ?? (async (filter) => {
1072
- const { resolveCatalogSource } = await import('../open-library-NKKUJLWA.js');
1105
+ const { resolveCatalogSource } = await import('../open-library-TZ7OSDEJ.js');
1073
1106
  const { source, close } = await resolveCatalogSource({ projectDir: opts.projectDir });
1074
1107
  try {
1075
1108
  return await source.listAssets(filter);
@@ -1085,7 +1118,7 @@ async function resolveInfoEntry(am2, ref, opts) {
1085
1118
  );
1086
1119
  return { entry: hit ? catalogAssetToEntry(hit) : null };
1087
1120
  } catch (err) {
1088
- const { LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-NKKUJLWA.js');
1121
+ const { LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-TZ7OSDEJ.js');
1089
1122
  const storeNote = err instanceof Error ? err.message : String(err);
1090
1123
  const disabled = err instanceof LocalCatalogDisabledError2 || /catalog\.url/i.test(storeNote);
1091
1124
  return { entry: null, storeNote, ...disabled ? { storeDisabled: true } : {} };
@@ -1113,7 +1146,8 @@ function makeInfoCommand() {
1113
1146
  }
1114
1147
  const entry = lookup.entry;
1115
1148
  if (!entry) {
1116
- logErr(infoNotFoundHint(ref, lookup));
1149
+ const otherKind = await am2.otherKindHint(ref);
1150
+ logErr(`${infoNotFoundHint(ref, lookup)}${otherKind ? ` ${otherKind}` : ""}`);
1117
1151
  process.exit(1);
1118
1152
  }
1119
1153
  const softDeps = await am2.softDepsOf([ref]);
@@ -1440,10 +1474,11 @@ function makeAssetCommand() {
1440
1474
  getKindRegistry(),
1441
1475
  norm.content
1442
1476
  );
1443
- if (checked.errors.length > 0) {
1444
- for (const f of checked.errors) logErr(`${norm.name}/SKILL.md [${f.tag}] \u2014 ${f.text}`);
1477
+ const refusals = [...checked.errors, ...checked.advisories.filter((f) => f.scaffoldBody)];
1478
+ if (refusals.length > 0) {
1479
+ for (const f of refusals) logErr(`${norm.name}/SKILL.md [${f.tag}] \u2014 ${f.text}`);
1445
1480
  logErr(
1446
- `Not imported: ${checked.errors.length} problem(s) in SKILL.md. Fix them in ${src.skillFile} (or drop --no-normalize) and run the import again.`
1481
+ `Not imported: ${refusals.length} problem(s) in SKILL.md. Fix them in ${src.skillFile} (or drop --no-normalize) and run the import again.`
1447
1482
  );
1448
1483
  process.exit(1);
1449
1484
  }
@@ -1807,7 +1842,7 @@ function makeCatalogCommand() {
1807
1842
  return catalog;
1808
1843
  }
1809
1844
  async function runLocalCatalogTest(projectDir) {
1810
- const { resolveCatalogSource } = await import('../open-library-NKKUJLWA.js');
1845
+ const { resolveCatalogSource } = await import('../open-library-TZ7OSDEJ.js');
1811
1846
  let resolved;
1812
1847
  try {
1813
1848
  resolved = await resolveCatalogSource({ projectDir });
@@ -1983,7 +2018,7 @@ async function scanLibraryFlowEntries() {
1983
2018
  const { LocalIndex, resolveIndexPath, scanAuthoringLibraries } = await import('../library/index.js');
1984
2019
  const indexPath = resolveIndexPath();
1985
2020
  if (!existsSync(indexPath)) return entries;
1986
- const { getKindRegistry: getKindRegistry2 } = await import('../open-registry-BYAXSHUI.js');
2021
+ const { getKindRegistry: getKindRegistry2 } = await import('../open-registry-RLZKTJG3.js');
1987
2022
  const index = new LocalIndex({ indexPath });
1988
2023
  try {
1989
2024
  for (const { library, assets } of await scanAuthoringLibraries(index, getKindRegistry2())) {
@@ -2248,6 +2283,12 @@ function printModelSelectionSection(config, projectDir) {
2248
2283
  console.log(
2249
2284
  ` ${S.dim("no AI provider is configured \u2014 add one with")} ${S.cmd("skaile providers add <id> --preset <preset>")}`
2250
2285
  );
2286
+ } else if (resolved.fallback) {
2287
+ console.log(` ${S.label("selector:".padEnd(16))} ${selector}`);
2288
+ console.log(
2289
+ ` ${S.label("passed on as:".padEnd(16))} the model id ${resolved.modelId ?? selector} ${S.dim("(no provider selected)")}`
2290
+ );
2291
+ for (const warning of resolved.warnings) logWarn(warning);
2251
2292
  } else {
2252
2293
  const entry = registry.providers[resolved.providerId];
2253
2294
  console.log(` ${S.label("selector:".padEnd(16))} ${selector}`);
@@ -2294,6 +2335,7 @@ async function showConfig(opts) {
2294
2335
  logErr(error instanceof Error ? error.message : String(error));
2295
2336
  process.exit(1);
2296
2337
  }
2338
+ if (await reportUnknownHarnesses(projectDir) > 0) process.exit(1);
2297
2339
  printEffectiveSection(config, sources);
2298
2340
  printWorkspaceDefaultsSection(wsDefaults);
2299
2341
  printModelSelectionSection(config, projectDir);
@@ -2432,6 +2474,13 @@ function makeConfigCommand() {
2432
2474
  logWarn(
2433
2475
  "no AI provider is configured yet \u2014 add one with `skaile providers add <id> --preset <preset>`"
2434
2476
  );
2477
+ } else if (resolved.fallback) {
2478
+ console.log(
2479
+ S.dim(
2480
+ ` \u2192 passed on as the model id ${resolved.modelId ?? value} (no provider selected)`
2481
+ )
2482
+ );
2483
+ for (const warning of resolved.warnings) logWarn(warning);
2435
2484
  } else {
2436
2485
  console.log(
2437
2486
  S.dim(
@@ -3115,7 +3164,7 @@ async function ensureTargetsRegistered(projectDir) {
3115
3164
  const { resolveSkWorkspaceConfig: resolveSkWorkspaceConfig2 } = await import('../core/index.js');
3116
3165
  const config = resolveSkWorkspaceConfig2(projectDir);
3117
3166
  if (config.plugins && config.plugins.length > 0) {
3118
- const { ensurePluginsLoaded } = await import('../plugin-store-ABE35NRX.js');
3167
+ const { ensurePluginsLoaded } = await import('../plugin-store-A5J4TLCH.js');
3119
3168
  const result = await ensurePluginsLoaded(projectDir, config.plugins, pluginRegistry);
3120
3169
  for (const f of result.failed) logWarn(f.error);
3121
3170
  }
@@ -3274,7 +3323,10 @@ function makeDiffCommand() {
3274
3323
  );
3275
3324
  switch (result.status) {
3276
3325
  case "not-found":
3277
- if (problems.length === 0) logErr(`Asset not found: ${ref}`);
3326
+ if (problems.length === 0) {
3327
+ const hint = await am2.otherKindHint(ref);
3328
+ logErr(`Asset not found: ${ref}${hint ? `. ${hint}` : ""}`);
3329
+ }
3278
3330
  break;
3279
3331
  case "not-deployed":
3280
3332
  if (problems.length === 0) {
@@ -3395,7 +3447,7 @@ function makeHarnessCommand() {
3395
3447
  async function runHarnessSet(name, projectDir) {
3396
3448
  const target = parseHarnessTarget(name);
3397
3449
  if (!target) {
3398
- logErr(`Unknown harness "${name}". Supported: ${SUPPORTED_HARNESSES.join(", ")}`);
3450
+ logErr(unknownHarnessTargetMessage(name));
3399
3451
  process.exit(1);
3400
3452
  }
3401
3453
  requireProjectConfig(projectDir);
@@ -3746,7 +3798,7 @@ var TOGGLE_SUPPORTED = ["claude-code"];
3746
3798
  function resolveHarness(harness) {
3747
3799
  if (harness === "all") return [...ALL_HARNESSES];
3748
3800
  if (harness === "claude-code" || harness === "omp" || harness === "codex") return [harness];
3749
- logErr(`Unknown harness "${harness}". Supported: ${ALL_HARNESSES.join(", ")}, all`);
3801
+ logErr(unknownHarnessTargetMessage(harness, ["all"]));
3750
3802
  return null;
3751
3803
  }
3752
3804
  function withHarness(raw, fallback) {
@@ -4350,6 +4402,16 @@ function warnUnlistedAssets(unlisted, name) {
4350
4402
  );
4351
4403
  }
4352
4404
  }
4405
+ function warnManifestNeedsCommit(libPath, name) {
4406
+ const status4 = spawnSync("git", ["status", "--porcelain", "--", SKAILE_MANIFEST_FILENAME], {
4407
+ cwd: libPath,
4408
+ encoding: "utf-8"
4409
+ });
4410
+ if (status4.status !== 0 || status4.stdout.trim() === "") return;
4411
+ logInfo(
4412
+ `${SKAILE_MANIFEST_FILENAME} was changed in the clone. Commit it with \`skaile library commit ${name}\`; \`pull\` and \`sync\` stop until you do.`
4413
+ );
4414
+ }
4353
4415
  function assertManifestEditableOrExit(libraryPath) {
4354
4416
  try {
4355
4417
  assertManifestEditable(libraryPath);
@@ -4603,7 +4665,7 @@ function remoteBranches(url) {
4603
4665
  return r.stdout.split("\n").map((line) => line.split(" ")[1]?.replace(/^refs\/heads\//, "")).filter((b) => !!b);
4604
4666
  }
4605
4667
  async function warnIfNotGithubRemote(name, url) {
4606
- const { isGithubRemote, notGithubRemoteMessage } = await import('../library-publish-I3UWXAHI.js');
4668
+ const { isGithubRemote, notGithubRemoteMessage } = await import('../library-publish-62OWCNB5.js');
4607
4669
  if (!isGithubRemote(url)) logWarn(notGithubRemoteMessage(name, url));
4608
4670
  }
4609
4671
  function scaffoldLibraryFiles(dir, name) {
@@ -4789,7 +4851,7 @@ function makeLibraryCommand() {
4789
4851
  ownership,
4790
4852
  isDefault
4791
4853
  });
4792
- const scaffolded = blank ? scaffoldLibraryFiles(libPath, name) : [];
4854
+ const scaffolded = blank && ownership !== "reader" ? scaffoldLibraryFiles(libPath, name) : [];
4793
4855
  logOk(
4794
4856
  `Library "${name}" ${blank ? "created" : "registered"} at ${libPath}${isDefault ? " (default)" : ""}`
4795
4857
  );
@@ -4806,8 +4868,9 @@ function makeLibraryCommand() {
4806
4868
  }
4807
4869
  if (!blank) {
4808
4870
  const lib = await manager.requireLibrary(name);
4809
- if (adoptWritesManifest(libPath)) {
4871
+ if (ownership === "owner" && adoptWritesManifest(libPath)) {
4810
4872
  await reindexLibrary(lib, library, name);
4873
+ warnManifestNeedsCommit(lib.path, name);
4811
4874
  return;
4812
4875
  }
4813
4876
  const unlisted = await countUnlistedAssets(libPath);
@@ -4818,8 +4881,9 @@ function makeLibraryCommand() {
4818
4881
  );
4819
4882
  }
4820
4883
  warnLibraryNameFallback(name, resolved);
4821
- if (resolved.source !== "manifest") {
4884
+ if (ownership === "owner" && resolved.source !== "manifest") {
4822
4885
  stampManifestPublisher(lib.path, resolved.publisher);
4886
+ warnManifestNeedsCommit(lib.path, name);
4823
4887
  }
4824
4888
  const res = await indexLibrary(lib, library);
4825
4889
  for (const e of res.errors) logWarn(e);
@@ -5334,16 +5398,16 @@ function makeLibraryCommand() {
5334
5398
  "With --create-repo: create the repo private (the store only accepts public repos)"
5335
5399
  ).option("--ref <gitref>", "Git ref to ingest (default: the library branch or main)").option("--dry-run", "Print the plan; push nothing and call no store endpoint").action(
5336
5400
  async (lib, opts) => {
5337
- const { runLibraryPublish } = await import('../library-publish-I3UWXAHI.js');
5401
+ const { runLibraryPublish } = await import('../library-publish-62OWCNB5.js');
5338
5402
  await withStoreErrorHandling(() => runLibraryPublish(lib, opts));
5339
5403
  }
5340
5404
  );
5341
5405
  cmd.command("register <lib>").description("Register the library's manifest without pushing (bytes already on github)").option("--asset <ref>", "Publish only the single asset matching this ref/name").option("--ref <gitref>", "Git ref to ingest (default: the library branch or main)").option("--dry-run", "Print the plan; call no store endpoint").action(async (lib, opts) => {
5342
- const { runLibraryRegister } = await import('../library-publish-I3UWXAHI.js');
5406
+ const { runLibraryRegister } = await import('../library-publish-62OWCNB5.js');
5343
5407
  await withStoreErrorHandling(() => runLibraryRegister(lib, opts));
5344
5408
  });
5345
5409
  cmd.command("yank <lib>").description("Retract the library's published assets from the store").option("--asset <ref>", "Yank only the single asset matching this ref/name").action(async (lib, opts) => {
5346
- const { runLibraryYank } = await import('../library-publish-I3UWXAHI.js');
5410
+ const { runLibraryYank } = await import('../library-publish-62OWCNB5.js');
5347
5411
  await withStoreErrorHandling(() => runLibraryYank(lib, opts));
5348
5412
  });
5349
5413
  return cmd;
@@ -6003,7 +6067,7 @@ function scheduleSoftDepPreview() {
6003
6067
  }
6004
6068
  async function loadAssets() {
6005
6069
  softDepPreviewCache.clear();
6006
- const { gatherAssetFeeds } = await import('../asset-feeds-HJFV7UPW.js');
6070
+ const { gatherAssetFeeds } = await import('../asset-feeds-3YO2352Y.js');
6007
6071
  const { entries, notes } = await gatherAssetFeeds(am, am.projectDir);
6008
6072
  if (notes.length > 0) {
6009
6073
  state.message = notes.map((n) => `[${n.feed}] ${n.message}`).join(" \u2022 ");
@@ -6207,7 +6271,7 @@ function reconcileCollapsedSets(rows) {
6207
6271
  async function loadSourcesAndLibraries() {
6208
6272
  try {
6209
6273
  const [{ openLibraryManager: openLibraryManager2 }, { getGlobalCacheDir: getGlobalCacheDir2, globalSkaileDir: globalSkaileDir2 }] = await Promise.all([
6210
- import('../open-library-NKKUJLWA.js'),
6274
+ import('../open-library-TZ7OSDEJ.js'),
6211
6275
  import('../core/index.js')
6212
6276
  ]);
6213
6277
  const { manager, library, close } = await openLibraryManager2();
@@ -8043,7 +8107,35 @@ function finalIdentity(kind, name) {
8043
8107
  return `${kind}:${name}`;
8044
8108
  }
8045
8109
  }
8046
- function planMarkdownMoves(root, knownKinds, manual, unknownTypes, identities, conflicts) {
8110
+ function existingIdentities(root) {
8111
+ const found = /* @__PURE__ */ new Map();
8112
+ const note = (file, kind, fallback) => {
8113
+ let name = fallback;
8114
+ try {
8115
+ const text = readText(file);
8116
+ const body = file.endsWith(".yaml") ? text : FRONTMATTER.exec(text)?.[1] ?? "";
8117
+ const parsed = parse(body);
8118
+ if (isRecord(parsed) && typeof parsed.name === "string" && parsed.name !== "")
8119
+ name = parsed.name;
8120
+ } catch {
8121
+ }
8122
+ const identity = finalIdentity(kind, name);
8123
+ if (!found.has(identity)) found.set(identity, posix2(path19__default.relative(root, file)));
8124
+ };
8125
+ for (const file of walkFiles(root, (b) => b.endsWith(".preset.yaml"))) {
8126
+ note(file, "preset", path19__default.basename(file).replace(/\.preset\.yaml$/, ""));
8127
+ }
8128
+ for (const [base, kind] of [
8129
+ ["RULESET.md", "ruleset"],
8130
+ ["PERSONA.md", "persona"]
8131
+ ]) {
8132
+ for (const file of walkFiles(root, (b) => b === base)) {
8133
+ note(file, kind, path19__default.basename(path19__default.dirname(file)));
8134
+ }
8135
+ }
8136
+ return found;
8137
+ }
8138
+ function planMarkdownMoves(root, knownKinds, manual, unknownTypes, identities, conflicts, existing) {
8047
8139
  const moves = [];
8048
8140
  const changes = [];
8049
8141
  const targets = /* @__PURE__ */ new Set();
@@ -8071,6 +8163,13 @@ function planMarkdownMoves(root, knownKinds, manual, unknownTypes, identities, c
8071
8163
  );
8072
8164
  continue;
8073
8165
  }
8166
+ const present = existing.get(identity);
8167
+ if (present !== void 0) {
8168
+ conflicts.push(
8169
+ `${present} already is ${identity}, and ${posix2(path19__default.relative(root, file))} would become it too: rename one first. Nothing was changed.`
8170
+ );
8171
+ continue;
8172
+ }
8074
8173
  identities.set(identity, posix2(path19__default.relative(root, file)));
8075
8174
  targets.add(to);
8076
8175
  moves.push({ from: file, to, kind: found.type });
@@ -8155,7 +8254,7 @@ function repoPublisher(root) {
8155
8254
  }
8156
8255
  return DEFAULT_PUBLISHER;
8157
8256
  }
8158
- function planBundles(root, skaileYamls, publisher, notes, manual, conflicts, identities) {
8257
+ function planBundles(root, skaileYamls, publisher, notes, manual, conflicts, identities, existing) {
8159
8258
  const changes = [];
8160
8259
  const presets = [];
8161
8260
  const handled = /* @__PURE__ */ new Set();
@@ -8183,6 +8282,13 @@ function planBundles(root, skaileYamls, publisher, notes, manual, conflicts, ide
8183
8282
  manual.push(`${rel(target)} already exists; bundle ${name} not converted`);
8184
8283
  return;
8185
8284
  }
8285
+ const present = existing.get(identity);
8286
+ if (present !== void 0) {
8287
+ conflicts.push(
8288
+ `${present} already is ${identity}, and ${origin} would become it too: rename the bundle first. Nothing was changed.`
8289
+ );
8290
+ return;
8291
+ }
8186
8292
  let description;
8187
8293
  let refs = [];
8188
8294
  let before;
@@ -8348,13 +8454,15 @@ function planAssetMigration(options) {
8348
8454
  const conflicts = [];
8349
8455
  const unknownTypes = [];
8350
8456
  const identities = /* @__PURE__ */ new Map();
8457
+ const existing = existingIdentities(root);
8351
8458
  const { moves, changes: moveChanges } = planMarkdownMoves(
8352
8459
  root,
8353
8460
  knownKinds,
8354
8461
  manual,
8355
8462
  unknownTypes,
8356
8463
  identities,
8357
- conflicts
8464
+ conflicts,
8465
+ existing
8358
8466
  );
8359
8467
  for (const move of moves) {
8360
8468
  notes.push(
@@ -8381,7 +8489,8 @@ function planAssetMigration(options) {
8381
8489
  notes,
8382
8490
  manual,
8383
8491
  conflicts,
8384
- identities
8492
+ identities,
8493
+ existing
8385
8494
  );
8386
8495
  const skaileChanges = skaileYamls.flatMap(
8387
8496
  ({ file, source }) => planSkaileYaml(root, file, source, notes, manual)
@@ -9165,8 +9274,15 @@ function makeOutdatedCommand() {
9165
9274
  );
9166
9275
  }
9167
9276
  console.log();
9168
- if (filtered.some((e) => e.problem === void 0 && !e.pinned)) {
9169
- logWarn(`Run ${S.cmd("skaile update")} to re-lock and re-deploy.`);
9277
+ const needsUpdate = filtered.some(
9278
+ (e) => e.problem === void 0 && !e.pinned && !e.contentChanged
9279
+ );
9280
+ const needsRelock = filtered.some(
9281
+ (e) => e.problem === void 0 && !e.pinned && e.contentChanged
9282
+ );
9283
+ if (needsUpdate) logWarn(`Run ${S.cmd("skaile update")} to re-lock and re-deploy.`);
9284
+ if (needsRelock) {
9285
+ logWarn(`Run ${S.cmd("skaile install")} to re-lock the changed library assets.`);
9170
9286
  }
9171
9287
  if (filtered.some((e) => e.problem !== void 0 && !e.manualFix)) {
9172
9288
  logWarn(`Run ${S.cmd("skaile install")} to restore or re-lock the broken assets.`);
@@ -9247,7 +9363,7 @@ function action2(fn) {
9247
9363
  };
9248
9364
  }
9249
9365
  async function reconcileAndReport(projectDir, plugins, opts = {}) {
9250
- const { reconcilePlugins } = await import('../plugin-store-ABE35NRX.js');
9366
+ const { reconcilePlugins } = await import('../plugin-store-A5J4TLCH.js');
9251
9367
  if (plugins.length === 0) {
9252
9368
  logInfo("No plugins declared \u2014 nothing to reconcile.");
9253
9369
  return;
@@ -9262,7 +9378,7 @@ async function reconcileAndReport(projectDir, plugins, opts = {}) {
9262
9378
  }
9263
9379
  }
9264
9380
  async function verifyPluginLoads(projectDir, spec) {
9265
- const { loadPlugins } = await import('../plugin-store-ABE35NRX.js');
9381
+ const { loadPlugins } = await import('../plugin-store-A5J4TLCH.js');
9266
9382
  const { createPluginRegistry } = await import('../plugin-registry/index.js');
9267
9383
  const registry = createPluginRegistry();
9268
9384
  const result = await loadPlugins(projectDir, [spec], registry);
@@ -9276,7 +9392,9 @@ async function verifyPluginLoads(projectDir, spec) {
9276
9392
  async function runInstall2(spec, opts) {
9277
9393
  const projectDir = path19__default.resolve(opts.projectDir);
9278
9394
  const { WorkspaceYamlEditor: WorkspaceYamlEditor2 } = await import('../core/index.js');
9279
- const { specName, rollbackPluginStore } = await import('../plugin-store-ABE35NRX.js');
9395
+ const { specName, rollbackPluginStore, npmSpecError } = await import('../plugin-store-A5J4TLCH.js');
9396
+ const specError = npmSpecError(spec);
9397
+ if (specError) throw new Error(specError);
9280
9398
  const yamlPath = path19__default.join(projectDir, "skaile.yaml");
9281
9399
  if (!existsSync(yamlPath)) {
9282
9400
  throw new Error(`no skaile.yaml in ${projectDir}; run \`skaile init\` first`);
@@ -9305,7 +9423,7 @@ async function runInstall2(spec, opts) {
9305
9423
  async function runRemove(name, opts) {
9306
9424
  const projectDir = path19__default.resolve(opts.projectDir);
9307
9425
  const { WorkspaceYamlEditor: WorkspaceYamlEditor2 } = await import('../core/index.js');
9308
- const { specName } = await import('../plugin-store-ABE35NRX.js');
9426
+ const { specName } = await import('../plugin-store-A5J4TLCH.js');
9309
9427
  const yamlPath = path19__default.join(projectDir, "skaile.yaml");
9310
9428
  if (!existsSync(yamlPath)) {
9311
9429
  logInfo(`No plugin matching ${S.cmd(name)}: there is no skaile.yaml in ${projectDir}.`);
@@ -9337,7 +9455,7 @@ async function runList(opts) {
9337
9455
  const registry = createPluginRegistry();
9338
9456
  if (declared.length > 0) {
9339
9457
  try {
9340
- const { loadPlugins } = await import('../plugin-store-ABE35NRX.js');
9458
+ const { loadPlugins } = await import('../plugin-store-A5J4TLCH.js');
9341
9459
  const result = await loadPlugins(projectDir, declared, registry);
9342
9460
  for (const f of result.failed) logWarn(f.error);
9343
9461
  } catch (err) {
@@ -10133,6 +10251,11 @@ function makeRebuildCommand() {
10133
10251
  ).option("--project-dir <dir>", "Project directory", process.cwd()).action(async (agentArg, opts) => {
10134
10252
  const projectDir = path19__default.resolve(opts.projectDir);
10135
10253
  requireProjectConfig(projectDir, { allowMissing: true });
10254
+ const instanceErrors = agentInstanceErrorLines(projectDir);
10255
+ if (instanceErrors.length > 0) {
10256
+ for (const line of instanceErrors) logErr(line);
10257
+ process.exit(1);
10258
+ }
10136
10259
  let agentDir;
10137
10260
  if (agentArg) {
10138
10261
  agentDir = resolveNamedAgent(projectDir, agentArg);
@@ -10373,6 +10496,34 @@ function isNearFlowId(typed, id) {
10373
10496
  function harnessOptionDescription() {
10374
10497
  return `Harness to run (${listHarnesses().map((d) => d.id).join(", ")})`;
10375
10498
  }
10499
+ function nodeSkillRefs(flow) {
10500
+ const refs = /* @__PURE__ */ new Map();
10501
+ for (const node of flow.nodes) {
10502
+ for (const asset of nodeAssets(node)) {
10503
+ if (asset.startsWith("skill:") && !refs.has(asset)) refs.set(asset, node.id);
10504
+ }
10505
+ }
10506
+ return refs;
10507
+ }
10508
+ async function reportMissingNodeSkills(projectDir, flow) {
10509
+ const refs = nodeSkillRefs(flow);
10510
+ if (refs.size === 0) return;
10511
+ let missing;
10512
+ try {
10513
+ missing = new AssetManager({
10514
+ registry: getKindRegistry(),
10515
+ projectDir
10516
+ }).undeployedSkills([...refs.keys()]);
10517
+ } catch {
10518
+ return;
10519
+ }
10520
+ for (const ref of missing) {
10521
+ const bare = ref.replace(/#.*$/, "");
10522
+ logWarn(
10523
+ `Node ${refs.get(ref)} needs ${S.cmd(bare)}, which is not deployed. Run ${S.cmd(`skaile add ${bare}`)}.`
10524
+ );
10525
+ }
10526
+ }
10376
10527
  function makeRunCommand() {
10377
10528
  const cmd = new Command("run").description("Start a flow or run a single-shot text prompt").argument("[flow-id-or-text...]", "Flow ID or text prompt").option("--project-dir <path>", "Project directory", process.cwd()).option("--harness <name>", harnessOptionDescription()).addOption(driverAliasOption()).option("--model <name>", "Model override").option("--label <label>", "Human-readable session label").option("--dry-run", "Print plan without executing (single-shot: resolved composition items)").option(
10378
10529
  "--agent-definition <ref|path>",
@@ -10383,7 +10534,9 @@ function makeRunCommand() {
10383
10534
  ).option("--skill <name>", "Skill name (for single-shot mode)").action(async (positional, opts) => {
10384
10535
  const projectDir = path19__default.resolve(opts.projectDir);
10385
10536
  await loadDeclaredPlugins(projectDir);
10386
- await reportProjectConfig(projectDir, { harness: false });
10537
+ if (await reportProjectConfig(projectDir, { harness: false, instances: true }) > 0) {
10538
+ process.exit(1);
10539
+ }
10387
10540
  const cliHarness = foldDriverFlag(opts).harness;
10388
10541
  const dryRun = opts.dryRun ?? false;
10389
10542
  const agentDefinition = opts.agentDefinition?.trim() || void 0;
@@ -10539,6 +10692,7 @@ function makeRunCommand() {
10539
10692
  onEvent: makeFlowEventHandler(),
10540
10693
  onLog: (line) => console.log(line)
10541
10694
  });
10695
+ if (dryRun) await reportMissingNodeSkills(projectDir, flow);
10542
10696
  } catch (err) {
10543
10697
  const friendly = friendlyHarnessError(err);
10544
10698
  logErr(friendly ?? (err instanceof Error ? err.message : String(err)));
@@ -10678,7 +10832,9 @@ function makeReplCommand() {
10678
10832
  console.log();
10679
10833
  }
10680
10834
  await loadDeclaredPlugins(projectDir);
10681
- await reportProjectConfig(projectDir, { harness: false });
10835
+ if (await reportProjectConfig(projectDir, { harness: false, instances: true }) > 0) {
10836
+ process.exit(1);
10837
+ }
10682
10838
  const effective = await resolveSettings(projectDir, {
10683
10839
  harness: harnessOverride,
10684
10840
  model: opts.model
@@ -10714,6 +10870,15 @@ function makeReplCommand() {
10714
10870
  }
10715
10871
  });
10716
10872
  }
10873
+ function valueNotFlag(flag) {
10874
+ return (value) => {
10875
+ if (value.startsWith("--")) {
10876
+ logErr(`${flag} needs a value, got '${value}'`);
10877
+ process.exit(1);
10878
+ }
10879
+ return value;
10880
+ };
10881
+ }
10717
10882
  function parseProviderIds(raw) {
10718
10883
  return (raw ?? "").split(",").map((id) => id.trim()).filter((id) => id.length > 0);
10719
10884
  }
@@ -10760,21 +10925,31 @@ function describeBindError(err, host, port) {
10760
10925
  }
10761
10926
  }
10762
10927
  function makeServeCommand() {
10763
- return new Command("serve").description("Start a WebSocket agent server (for platform integration)").option("--port <port>", "WebSocket server port", "8080").option(
10928
+ return new Command("serve").description("Start a WebSocket agent server (for platform integration)").option("--port <port>", "WebSocket server port", valueNotFlag("--port"), "8080").option(
10764
10929
  "--host <address>",
10765
- "Address to bind (default: all interfaces; use 127.0.0.1 for local clients only)"
10766
- ).option("--project-dir <path>", "Project directory", process.cwd()).option(
10930
+ "Address to bind (default: all interfaces; use 127.0.0.1 for local clients only)",
10931
+ valueNotFlag("--host")
10932
+ ).option(
10933
+ "--project-dir <path>",
10934
+ "Project directory",
10935
+ valueNotFlag("--project-dir"),
10936
+ process.cwd()
10937
+ ).option(
10767
10938
  "--managed-codex-config <path>",
10768
- "Explicit private host configuration for managed Codex"
10769
- ).option("--harness <name>", "Override harness").addOption(driverAliasOption()).option("--model <name>", "Override model").option("--provider <name>", "Override provider").option(
10939
+ "Explicit private host configuration for managed Codex",
10940
+ valueNotFlag("--managed-codex-config")
10941
+ ).option("--harness <name>", "Override harness", valueNotFlag("--harness")).addOption(driverAliasOption().argParser(valueNotFlag("--driver"))).option("--model <name>", "Override model", valueNotFlag("--model")).option("--provider <name>", "Override provider", valueNotFlag("--provider")).option(
10770
10942
  "--session-id <id>",
10771
- "Label for the session; does not restore the conversation (use --resume-session-id)"
10943
+ "Label for the session; does not restore the conversation (use --resume-session-id)",
10944
+ valueNotFlag("--session-id")
10772
10945
  ).option(
10773
10946
  "--resume-session-id <id>",
10774
- "harnessSessionId of an earlier session (from its session_info event); restores that conversation"
10947
+ "harnessSessionId of an earlier session (from its session_info event); restores that conversation",
10948
+ valueNotFlag("--resume-session-id")
10775
10949
  ).option(
10776
10950
  "--providers <ids>",
10777
- "Restrict the AI provider registry to these entry ids (comma-separated)"
10951
+ "Restrict the AI provider registry to these entry ids (comma-separated)",
10952
+ valueNotFlag("--providers")
10778
10953
  ).option(
10779
10954
  "--model-endpoint [port]",
10780
10955
  "Serve an OpenAI-compatible model endpoint on loopback for apps next to the session (optional port; default from skaile.yaml model_endpoint.port, else ephemeral)"
@@ -10808,6 +10983,14 @@ function makeServeCommand() {
10808
10983
  process.exitCode = 1;
10809
10984
  return;
10810
10985
  }
10986
+ const dirProblem = (await import('../serve-preflight-H2AYMGJ6.js')).checkServeProjectDir(
10987
+ opts.projectDir
10988
+ );
10989
+ if (dirProblem) {
10990
+ logErr(dirProblem);
10991
+ process.exitCode = 1;
10992
+ return;
10993
+ }
10811
10994
  let managedCodex;
10812
10995
  if (opts.managedCodexConfig) {
10813
10996
  try {
@@ -10829,7 +11012,14 @@ function makeServeCommand() {
10829
11012
  }
10830
11013
  const providers = parseProviderIds(opts.providers);
10831
11014
  const modelEndpoint = parseModelEndpointFlag(opts.modelEndpoint);
10832
- const { checkHarnessSdk, checkModelEndpointPeer, checkServeModel } = await import('../serve-preflight-FLTIBTEX.js');
11015
+ const { checkHarnessSdk, checkModelEndpointPeer, checkServeModel } = await import('../serve-preflight-H2AYMGJ6.js');
11016
+ const { checkServeHarness, checkServeAgentDefinition } = await import('../serve-preflight-H2AYMGJ6.js');
11017
+ const startProblem = managedCodex ? null : await checkServeHarness(opts.projectDir, opts.harness) ?? checkServeAgentDefinition(opts.projectDir);
11018
+ if (startProblem) {
11019
+ logErr(startProblem);
11020
+ process.exitCode = 1;
11021
+ return;
11022
+ }
10833
11023
  const harnessProblem = managedCodex ? null : await checkHarnessSdk(opts.projectDir, opts.harness);
10834
11024
  if (harnessProblem) {
10835
11025
  logErr(harnessProblem);
@@ -10890,12 +11080,12 @@ function makeServeCommand() {
10890
11080
  );
10891
11081
  }
10892
11082
  async function ensurePluginsLoadedForServe(projectDir) {
10893
- const { logInfo: logInfo2, logWarn: logWarn2 } = await import('../helpers-JNMK3FC2.js');
11083
+ const { logInfo: logInfo2, logWarn: logWarn2 } = await import('../helpers-HDVGCF3M.js');
10894
11084
  try {
10895
11085
  const { resolveSkWorkspaceConfig: resolveSkWorkspaceConfig2 } = await import('../core/index.js');
10896
11086
  const config = resolveSkWorkspaceConfig2(projectDir);
10897
11087
  if (!config.plugins || config.plugins.length === 0) return;
10898
- const { ensurePluginsLoaded } = await import('../plugin-store-ABE35NRX.js');
11088
+ const { ensurePluginsLoaded } = await import('../plugin-store-A5J4TLCH.js');
10899
11089
  const { pluginRegistry } = await import('../plugin-registry/index.js');
10900
11090
  const result = await ensurePluginsLoaded(projectDir, config.plugins, pluginRegistry);
10901
11091
  if (result.loaded.length > 0) {
@@ -10909,14 +11099,14 @@ async function ensurePluginsLoadedForServe(projectDir) {
10909
11099
  }
10910
11100
  }
10911
11101
  async function runCompileTest(opts) {
10912
- const { logOk: logOk2, logErr: logErr2, logInfo: logInfo2, S: S2 } = await import('../helpers-JNMK3FC2.js');
11102
+ const { logOk: logOk2, logErr: logErr2, logInfo: logInfo2, S: S2 } = await import('../helpers-HDVGCF3M.js');
10913
11103
  const { tmpdir } = await import('os');
10914
11104
  const { dirname: dirname3, join: join6, resolve: resolve4 } = await import('path');
10915
11105
  const { fileURLToPath: fileURLToPath2 } = await import('url');
10916
11106
  const { unlinkSync, existsSync: existsSync22 } = await import('fs');
10917
11107
  const { spawn } = await import('child_process');
10918
11108
  const { portableSpawnSync: portableSpawnSync2 } = await import('../core/index.js');
10919
- const { MONOREPO_ROOT } = await import('../paths-UKWE35XS.js');
11109
+ const { MONOREPO_ROOT } = await import('../paths-D6LBQETQ.js');
10920
11110
  if (MONOREPO_ROOT === null) {
10921
11111
  logErr2("--compile-test is only available inside the skaile-dev workspace.");
10922
11112
  logInfo2("Run it from a checkout of skaile-ai/skaile-dev (the monorepo shell).");
@@ -11874,8 +12064,8 @@ function makeStoreCommand() {
11874
12064
  "--all",
11875
12065
  `List every match (default: ${STORE_ROW_LIMIT} rows, only what \`skaile add\` can install)`
11876
12066
  ).option("-C, --project-dir <dir>", "Project directory (catalog config overlay)", process.cwd()).action(async (query, opts) => {
11877
- const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-NKKUJLWA.js');
11878
- const { getKnownKinds: getKnownKinds2 } = await import('../open-registry-BYAXSHUI.js');
12067
+ const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-TZ7OSDEJ.js');
12068
+ const { getKnownKinds: getKnownKinds2 } = await import('../open-registry-RLZKTJG3.js');
11879
12069
  const projectDir = path19__default.resolve(opts.projectDir);
11880
12070
  if (opts.kind && !getKnownKinds2().has(opts.kind)) {
11881
12071
  logErr(
@@ -11933,8 +12123,8 @@ function makeStoreCommand() {
11933
12123
  }
11934
12124
  });
11935
12125
  store.command("show <ref>").description("Show a store asset's details + provenance (source, files, integrity)").option("-C, --project-dir <dir>", "Project directory (catalog config overlay)", process.cwd()).action(async (ref, opts) => {
11936
- const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-NKKUJLWA.js');
11937
- const { supportsInstallManifest: supportsInstallManifest2 } = await import('../project-BIPK47JK.js');
12126
+ const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-TZ7OSDEJ.js');
12127
+ const { supportsInstallManifest: supportsInstallManifest2 } = await import('../project-4AVRES3M.js');
11938
12128
  try {
11939
12129
  parseAssetRef(ref);
11940
12130
  } catch (e) {
@@ -12176,7 +12366,7 @@ function makeUpdateCommand() {
12176
12366
  }
12177
12367
  }
12178
12368
  if (target) {
12179
- await updateOne(am2, projectDir, target);
12369
+ await updateOne(am2, projectDir, target, opts.force);
12180
12370
  return;
12181
12371
  }
12182
12372
  const spinner = createSpinner();
@@ -12270,7 +12460,8 @@ async function resolveUpdateTarget(am2, name) {
12270
12460
  );
12271
12461
  process.exit(1);
12272
12462
  }
12273
- logErr(`No declared asset matches "${name}".`);
12463
+ const otherKind = await am2.otherKindHint(name);
12464
+ logErr(`No declared asset matches "${name}".${otherKind ? ` ${otherKind}` : ""}`);
12274
12465
  if (declared.length > 0) logInfo(`Declared: ${declared.map((d) => d.ref).join(", ")}`);
12275
12466
  process.exit(1);
12276
12467
  }
@@ -12318,7 +12509,7 @@ function readText2(file) {
12318
12509
  return "";
12319
12510
  }
12320
12511
  }
12321
- async function updateOne(am2, projectDir, target) {
12512
+ async function updateOne(am2, projectDir, target, force) {
12322
12513
  const lockPath = path19__default.join(projectDir, "skaile.lock.yaml");
12323
12514
  const before = readText2(lockPath);
12324
12515
  const spinner = createSpinner();
@@ -12327,6 +12518,7 @@ async function updateOne(am2, projectDir, target) {
12327
12518
  try {
12328
12519
  deployed = await am2.add(target.ref, {
12329
12520
  preferLockedLibrary: true,
12521
+ force,
12330
12522
  onLibraryMoved: (m) => reportMoved([m])
12331
12523
  });
12332
12524
  } catch (err) {
@@ -12525,6 +12717,12 @@ function makeWhyCommand() {
12525
12717
  process.exitCode = 1;
12526
12718
  return;
12527
12719
  }
12720
+ const otherKind = await am2.otherKindHint(ref);
12721
+ if (otherKind) {
12722
+ logErr(`${ref} is not a locked skill. ${otherKind}`);
12723
+ process.exitCode = 1;
12724
+ return;
12725
+ }
12528
12726
  let declared;
12529
12727
  try {
12530
12728
  declared = await am2.listDeclared();
@@ -12727,7 +12925,7 @@ async function runInit(projectDir, opts) {
12727
12925
  const { HARNESS_TARGETS: HARNESS_TARGETS2, SUPPORTED_HARNESSES: SUPPORTED_HARNESSES2, resolveConfiguredHarnessName: resolveConfiguredHarnessName2 } = await import('../core/index.js');
12728
12926
  const harness = opts.harness ?? "claude-code";
12729
12927
  if (!SUPPORTED_HARNESSES2.includes(harness)) {
12730
- logErr(`Unknown harness "${opts.harness}". Supported: ${SUPPORTED_HARNESSES2.join(", ")}`);
12928
+ logErr(unknownHarnessTargetMessage(opts.harness ?? ""));
12731
12929
  process.exitCode = 1;
12732
12930
  return;
12733
12931
  }
@@ -12871,7 +13069,7 @@ async function bootstrapUserConfig() {
12871
13069
  }
12872
13070
  async function hydrateInitSources(resolved, created) {
12873
13071
  try {
12874
- const { ensureSourcesCloned } = await import('../ensure-sources-IH7CHSJF.js');
13072
+ const { ensureSourcesCloned } = await import('../ensure-sources-IN3VKHUA.js');
12875
13073
  const hydrate = ensureSourcesCloned(resolved, { quiet: true });
12876
13074
  for (const n of hydrate.cloned) created.push(`~/.skaile/cache/sources/${n}/`);
12877
13075
  if (hydrate.failed.length > 0) {
@@ -12911,7 +13109,7 @@ function printInitSummary(resolved, projectDir, created) {
12911
13109
  console.log();
12912
13110
  }
12913
13111
  program.command("setup").description("Interactive provider setup wizard").action(async () => {
12914
- const { cmdSetup } = await import('../setup-AG6NFHSN.js');
13112
+ const { cmdSetup } = await import('../setup-NSPQD4V4.js');
12915
13113
  await cmdSetup([], { projectDir: process.cwd() });
12916
13114
  });
12917
13115
  program.addCommand(makeInstallCommand());
@@ -12992,7 +13190,7 @@ program.hook("postAction", async (_thisCommand, actionCommand) => {
12992
13190
  const opts = actionCommand.opts();
12993
13191
  if (opts.global || opts.dryRun) return;
12994
13192
  const projectDir = path19__default.resolve(opts.projectDir ?? process.cwd());
12995
- const { refreshPluginSkills } = await import('../claude-code-RE46FJXI.js');
13193
+ const { refreshPluginSkills } = await import('../claude-code-EUKDGOOO.js');
12996
13194
  try {
12997
13195
  if (await refreshPluginSkills(projectDir)) {
12998
13196
  logInfo(`Updated ${S.cmd(".claude/plugins/skaile/skills")} (the --full plugin copy)`);
@@ -13013,6 +13211,17 @@ process.once("beforeExit", () => {
13013
13211
  setLibraryAssetCheck(
13014
13212
  (asset, libraryPath) => libraryAssetRefusals(asset, libraryPath, getKindRegistry())
13015
13213
  );
13214
+ setRenamedEntryLookup(manifestEntryRenames);
13215
+ setWalkTruncationSink((info, root) => {
13216
+ const where = path19__default.basename(root);
13217
+ if (info.reason === "cycle") {
13218
+ logWarnErr(
13219
+ `${where}: asset scan truncated (cycle) - the symlink ${info.path} points back into the tree, so the result is incomplete. Remove the symlink; \`skaile library index ${where}\` lists every one.`
13220
+ );
13221
+ return;
13222
+ }
13223
+ logWarnErr(`${where}: asset scan truncated (${info.reason}) - the result is incomplete.`);
13224
+ });
13016
13225
  try {
13017
13226
  await program.parseAsync();
13018
13227
  commandSettled = true;