@skaile/workspaces 6.0.0 → 6.1.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 (320) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/dist/{asset-feeds-PXUWCXVI.js → asset-feeds-HJFV7UPW.js} +26 -18
  3. package/dist/asset-feeds-HJFV7UPW.js.map +1 -0
  4. package/dist/asset-manager/catalog-deployer.js +7 -7
  5. package/dist/asset-manager/index.js +13 -13
  6. package/dist/asset-manager/installer.js +8 -8
  7. package/dist/asset-manager/renderers.js +7 -7
  8. package/dist/asset-manager/src/index.d.ts +192 -5
  9. package/dist/asset-manager/src/index.d.ts.map +1 -1
  10. package/dist/asset-manager/src/installer.d.ts +31 -0
  11. package/dist/asset-manager/src/installer.d.ts.map +1 -1
  12. package/dist/asset-manager/src/mcp-config.d.ts +21 -0
  13. package/dist/asset-manager/src/mcp-config.d.ts.map +1 -1
  14. package/dist/bridge/harnesses/claude-sdk.js +13 -17
  15. package/dist/bridge/harnesses/claude-sdk.js.map +1 -1
  16. package/dist/bridge/harnesses/codex.js +10 -10
  17. package/dist/bridge/harnesses/continue.js +10 -10
  18. package/dist/bridge/harnesses/echo.js +2 -2
  19. package/dist/bridge/harnesses/gemini.js +6 -6
  20. package/dist/bridge/harnesses/goose.js +10 -10
  21. package/dist/bridge/harnesses/omp.js +4 -4
  22. package/dist/bridge/harnesses/opencode.js +10 -10
  23. package/dist/bridge/harnesses/qwen.js +6 -6
  24. package/dist/bridge/index.js +14 -14
  25. package/dist/bridge/src/claude-sdk-surface.d.ts +17 -0
  26. package/dist/bridge/src/claude-sdk-surface.d.ts.map +1 -0
  27. package/dist/bridge/src/harness-model-check.d.ts +15 -0
  28. package/dist/bridge/src/harness-model-check.d.ts.map +1 -1
  29. package/dist/bridge/src/harnesses/claude-sdk.d.ts.map +1 -1
  30. package/dist/bridge/src/index.d.ts +2 -1
  31. package/dist/bridge/src/index.d.ts.map +1 -1
  32. package/dist/bridge/src/normalizer.d.ts +3 -1
  33. package/dist/bridge/src/normalizer.d.ts.map +1 -1
  34. package/dist/{chunk-VJRTDKXS.js → chunk-2LAPHLDH.js} +144 -94
  35. package/dist/chunk-2LAPHLDH.js.map +1 -0
  36. package/dist/{chunk-VXEYX73S.js → chunk-3GMOPFWH.js} +4 -4
  37. package/dist/{chunk-VXEYX73S.js.map → chunk-3GMOPFWH.js.map} +1 -1
  38. package/dist/{chunk-MCUJTNY5.js → chunk-4FVIT5DI.js} +3 -3
  39. package/dist/{chunk-MCUJTNY5.js.map → chunk-4FVIT5DI.js.map} +1 -1
  40. package/dist/{chunk-SZXGRHQQ.js → chunk-4MUDQCBP.js} +4 -4
  41. package/dist/{chunk-SZXGRHQQ.js.map → chunk-4MUDQCBP.js.map} +1 -1
  42. package/dist/{chunk-7CV3HFWJ.js → chunk-5J4NPGFM.js} +3 -3
  43. package/dist/{chunk-7CV3HFWJ.js.map → chunk-5J4NPGFM.js.map} +1 -1
  44. package/dist/{chunk-4XWLB7JB.js → chunk-5Y2KGB4H.js} +69 -34
  45. package/dist/chunk-5Y2KGB4H.js.map +1 -0
  46. package/dist/{chunk-OULSJRXV.js → chunk-6YR4ALVX.js} +6 -6
  47. package/dist/{chunk-OULSJRXV.js.map → chunk-6YR4ALVX.js.map} +1 -1
  48. package/dist/chunk-7HX6FNKL.js +317 -0
  49. package/dist/chunk-7HX6FNKL.js.map +1 -0
  50. package/dist/{chunk-WDAIWDLK.js → chunk-7LP7RCZI.js} +4 -4
  51. package/dist/{chunk-WDAIWDLK.js.map → chunk-7LP7RCZI.js.map} +1 -1
  52. package/dist/{chunk-2UUKCROR.js → chunk-AATHJRKL.js} +4 -4
  53. package/dist/{chunk-2UUKCROR.js.map → chunk-AATHJRKL.js.map} +1 -1
  54. package/dist/{chunk-DUMTLYSO.js → chunk-ABFPSVIS.js} +3 -3
  55. package/dist/{chunk-DUMTLYSO.js.map → chunk-ABFPSVIS.js.map} +1 -1
  56. package/dist/{chunk-TKHJXPSB.js → chunk-AITJ7ELM.js} +140 -26
  57. package/dist/chunk-AITJ7ELM.js.map +1 -0
  58. package/dist/{chunk-Y2TO2U7W.js → chunk-ASWTQQ7E.js} +3 -3
  59. package/dist/{chunk-Y2TO2U7W.js.map → chunk-ASWTQQ7E.js.map} +1 -1
  60. package/dist/{chunk-WYHQUCHR.js → chunk-AZ2H6R5I.js} +51 -25
  61. package/dist/chunk-AZ2H6R5I.js.map +1 -0
  62. package/dist/{chunk-LN6QB7XI.js → chunk-BBBCJSSU.js} +4 -4
  63. package/dist/{chunk-LN6QB7XI.js.map → chunk-BBBCJSSU.js.map} +1 -1
  64. package/dist/{chunk-WEH33JSG.js → chunk-CEKW3KXP.js} +87 -26
  65. package/dist/chunk-CEKW3KXP.js.map +1 -0
  66. package/dist/{chunk-ARWKK325.js → chunk-COYF6IG2.js} +5 -5
  67. package/dist/{chunk-ARWKK325.js.map → chunk-COYF6IG2.js.map} +1 -1
  68. package/dist/{chunk-SNEE6UGY.js → chunk-DGTI65OC.js} +11 -11
  69. package/dist/{chunk-SNEE6UGY.js.map → chunk-DGTI65OC.js.map} +1 -1
  70. package/dist/{chunk-HK7HMEPT.js → chunk-DIGFA7Z5.js} +3 -3
  71. package/dist/{chunk-HK7HMEPT.js.map → chunk-DIGFA7Z5.js.map} +1 -1
  72. package/dist/{chunk-AF432MS3.js → chunk-EJPMNDTP.js} +3 -3
  73. package/dist/{chunk-AF432MS3.js.map → chunk-EJPMNDTP.js.map} +1 -1
  74. package/dist/chunk-EX3GLAL6.js +31 -0
  75. package/dist/chunk-EX3GLAL6.js.map +1 -0
  76. package/dist/{chunk-UVVVR4XO.js → chunk-FKQNBCDW.js} +3 -3
  77. package/dist/{chunk-UVVVR4XO.js.map → chunk-FKQNBCDW.js.map} +1 -1
  78. package/dist/{chunk-GEQSUC6U.js → chunk-GNZBFSRB.js} +3 -3
  79. package/dist/{chunk-GEQSUC6U.js.map → chunk-GNZBFSRB.js.map} +1 -1
  80. package/dist/{chunk-U56GGCC2.js → chunk-HMISULVD.js} +4 -4
  81. package/dist/{chunk-U56GGCC2.js.map → chunk-HMISULVD.js.map} +1 -1
  82. package/dist/{chunk-GN4VVSAA.js → chunk-HPMQRAIF.js} +7 -7
  83. package/dist/{chunk-GN4VVSAA.js.map → chunk-HPMQRAIF.js.map} +1 -1
  84. package/dist/{chunk-OAHVKSQJ.js → chunk-HWNK3F3X.js} +913 -80
  85. package/dist/chunk-HWNK3F3X.js.map +1 -0
  86. package/dist/{chunk-NMI2TWMH.js → chunk-IHFGPHCT.js} +131 -341
  87. package/dist/chunk-IHFGPHCT.js.map +1 -0
  88. package/dist/{chunk-F2GOZMRA.js → chunk-ILLTBKDJ.js} +47 -47
  89. package/dist/chunk-ILLTBKDJ.js.map +1 -0
  90. package/dist/{chunk-FKU57Q5Q.js → chunk-IRYKRKVQ.js} +3 -3
  91. package/dist/{chunk-FKU57Q5Q.js.map → chunk-IRYKRKVQ.js.map} +1 -1
  92. package/dist/{chunk-T2BDID2J.js → chunk-J72MO2WA.js} +8 -8
  93. package/dist/{chunk-T2BDID2J.js.map → chunk-J72MO2WA.js.map} +1 -1
  94. package/dist/{chunk-X3RMRJNR.js → chunk-JRN5QF4C.js} +8 -3
  95. package/dist/chunk-JRN5QF4C.js.map +1 -0
  96. package/dist/{chunk-E3GPGTW3.js → chunk-KUQAJVYT.js} +5 -5
  97. package/dist/{chunk-E3GPGTW3.js.map → chunk-KUQAJVYT.js.map} +1 -1
  98. package/dist/{chunk-WDXZA7QW.js → chunk-LSSYC5IC.js} +2 -2
  99. package/dist/{chunk-WDXZA7QW.js.map → chunk-LSSYC5IC.js.map} +1 -1
  100. package/dist/{chunk-3IXIEHUB.js → chunk-NB7SYQYP.js} +5 -5
  101. package/dist/{chunk-3IXIEHUB.js.map → chunk-NB7SYQYP.js.map} +1 -1
  102. package/dist/{chunk-3JKGY2YC.js → chunk-NUA33BYO.js} +149 -27
  103. package/dist/chunk-NUA33BYO.js.map +1 -0
  104. package/dist/{chunk-VBI7HGHB.js → chunk-QAKUD6QN.js} +2 -2
  105. package/dist/{chunk-VBI7HGHB.js.map → chunk-QAKUD6QN.js.map} +1 -1
  106. package/dist/{chunk-KX2PT5Q4.js → chunk-QEULL4Q3.js} +4 -4
  107. package/dist/{chunk-KX2PT5Q4.js.map → chunk-QEULL4Q3.js.map} +1 -1
  108. package/dist/{chunk-YGRZNFRO.js → chunk-QSYQOTWN.js} +3 -3
  109. package/dist/{chunk-YGRZNFRO.js.map → chunk-QSYQOTWN.js.map} +1 -1
  110. package/dist/{chunk-DHYSUJ3H.js → chunk-RDTLPOPD.js} +4 -4
  111. package/dist/{chunk-DHYSUJ3H.js.map → chunk-RDTLPOPD.js.map} +1 -1
  112. package/dist/{chunk-GOCWM7FN.js → chunk-RHN5MRQO.js} +21 -4
  113. package/dist/chunk-RHN5MRQO.js.map +1 -0
  114. package/dist/{chunk-UL22SDGR.js → chunk-S2XHGWQC.js} +161 -123
  115. package/dist/chunk-S2XHGWQC.js.map +1 -0
  116. package/dist/{chunk-4DWBSTYA.js → chunk-SVTMNSPI.js} +22 -5
  117. package/dist/chunk-SVTMNSPI.js.map +1 -0
  118. package/dist/{chunk-QOM5Z62G.js → chunk-UI745XC3.js} +9 -22
  119. package/dist/chunk-UI745XC3.js.map +1 -0
  120. package/dist/{chunk-L4YKW5AY.js → chunk-VMVDAZLA.js} +20 -8
  121. package/dist/chunk-VMVDAZLA.js.map +1 -0
  122. package/dist/{chunk-H6UVIKQ2.js → chunk-VYVTEMAW.js} +3 -3
  123. package/dist/{chunk-H6UVIKQ2.js.map → chunk-VYVTEMAW.js.map} +1 -1
  124. package/dist/{chunk-SRODW6M2.js → chunk-X3YGUKCG.js} +3 -3
  125. package/dist/{chunk-SRODW6M2.js.map → chunk-X3YGUKCG.js.map} +1 -1
  126. package/dist/{chunk-JDR6ILCW.js → chunk-XGULGQA3.js} +3 -3
  127. package/dist/{chunk-JDR6ILCW.js.map → chunk-XGULGQA3.js.map} +1 -1
  128. package/dist/{chunk-7XSAW5OC.js → chunk-YLLVSR2U.js} +4 -4
  129. package/dist/{chunk-7XSAW5OC.js.map → chunk-YLLVSR2U.js.map} +1 -1
  130. package/dist/{chunk-6Z5KTFJT.js → chunk-Z3VKUWAX.js} +3 -3
  131. package/dist/{chunk-6Z5KTFJT.js.map → chunk-Z3VKUWAX.js.map} +1 -1
  132. package/dist/{chunk-7TPYPVAH.js → chunk-ZAELRYKS.js} +3 -3
  133. package/dist/{chunk-7TPYPVAH.js.map → chunk-ZAELRYKS.js.map} +1 -1
  134. package/dist/{chunk-UQ33Y4DM.js → chunk-ZBHZLWV3.js} +4 -4
  135. package/dist/{chunk-UQ33Y4DM.js.map → chunk-ZBHZLWV3.js.map} +1 -1
  136. package/dist/{chunk-OTIB4D2K.js → chunk-ZDLUQLI6.js} +4 -4
  137. package/dist/{chunk-OTIB4D2K.js.map → chunk-ZDLUQLI6.js.map} +1 -1
  138. package/dist/{chunk-OHNKYHRR.js → chunk-ZHGKAZJ7.js} +214 -16
  139. package/dist/chunk-ZHGKAZJ7.js.map +1 -0
  140. package/dist/{claude-code-VJGYBXQR.js → claude-code-RE46FJXI.js} +4 -4
  141. package/dist/{claude-code-VJGYBXQR.js.map → claude-code-RE46FJXI.js.map} +1 -1
  142. package/dist/cli/index.js +704 -448
  143. package/dist/cli/index.js.map +1 -1
  144. package/dist/cli/src/agent-pins.d.ts +11 -0
  145. package/dist/cli/src/agent-pins.d.ts.map +1 -1
  146. package/dist/cli/src/commands/catalog.d.ts +1 -1
  147. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  148. package/dist/cli/src/commands/config.d.ts.map +1 -1
  149. package/dist/cli/src/commands/diff.d.ts.map +1 -1
  150. package/dist/cli/src/commands/harness.d.ts +24 -0
  151. package/dist/cli/src/commands/harness.d.ts.map +1 -0
  152. package/dist/cli/src/commands/integration.d.ts.map +1 -1
  153. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  154. package/dist/cli/src/commands/library-index.d.ts +20 -2
  155. package/dist/cli/src/commands/library-index.d.ts.map +1 -1
  156. package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
  157. package/dist/cli/src/commands/migrate-assets.d.ts.map +1 -1
  158. package/dist/cli/src/commands/project.d.ts +19 -1
  159. package/dist/cli/src/commands/project.d.ts.map +1 -1
  160. package/dist/cli/src/commands/run.d.ts.map +1 -1
  161. package/dist/cli/src/commands/serve-preflight.d.ts.map +1 -1
  162. package/dist/cli/src/commands/session-logs/local-query.d.ts +2 -0
  163. package/dist/cli/src/commands/session-logs/local-query.d.ts.map +1 -1
  164. package/dist/cli/src/commands/source.d.ts +9 -2
  165. package/dist/cli/src/commands/source.d.ts.map +1 -1
  166. package/dist/cli/src/commands/store.d.ts.map +1 -1
  167. package/dist/cli/src/commands/update.d.ts.map +1 -1
  168. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  169. package/dist/cli/src/config-checks.d.ts +37 -0
  170. package/dist/cli/src/config-checks.d.ts.map +1 -0
  171. package/dist/cli/src/skill-checks.d.ts +27 -0
  172. package/dist/cli/src/skill-checks.d.ts.map +1 -1
  173. package/dist/cli/src/store-addable.d.ts +11 -0
  174. package/dist/cli/src/store-addable.d.ts.map +1 -1
  175. package/dist/connectors/config.js +5 -5
  176. package/dist/connectors/index.js +18 -18
  177. package/dist/{connectors-CXZLXAFZ.js → connectors-7THEF7YA.js} +21 -21
  178. package/dist/{connectors-CXZLXAFZ.js.map → connectors-7THEF7YA.js.map} +1 -1
  179. package/dist/core/index.js +6 -6
  180. package/dist/core/manifest.js +2 -2
  181. package/dist/core/models.js +1 -1
  182. package/dist/core/publish-manifest.js +3 -3
  183. package/dist/core/ref.js +1 -1
  184. package/dist/core/runtime-assets.js +5 -5
  185. package/dist/core/src/agent-instances.d.ts.map +1 -1
  186. package/dist/core/src/config-key-diagnostics.d.ts +9 -0
  187. package/dist/core/src/config-key-diagnostics.d.ts.map +1 -0
  188. package/dist/core/src/index.d.ts +1 -1
  189. package/dist/core/src/index.d.ts.map +1 -1
  190. package/dist/core/src/manifest.d.ts +10 -0
  191. package/dist/core/src/manifest.d.ts.map +1 -1
  192. package/dist/core/src/models.d.ts +8 -0
  193. package/dist/core/src/models.d.ts.map +1 -1
  194. package/dist/core/src/workspace-config.d.ts +8 -0
  195. package/dist/core/src/workspace-config.d.ts.map +1 -1
  196. package/dist/core/src/workspace-yaml-editor.d.ts +9 -2
  197. package/dist/core/src/workspace-yaml-editor.d.ts.map +1 -1
  198. package/dist/core/workspace-config.js +4 -4
  199. package/dist/deploy/index.js +6 -6
  200. package/dist/discovery/index.js +4 -4
  201. package/dist/discovery/src/builtin-providers.d.ts.map +1 -1
  202. package/dist/discovery/src/parse-manifest.d.ts.map +1 -1
  203. package/dist/{ensure-sources-UPTHZKGF.js → ensure-sources-IH7CHSJF.js} +16 -16
  204. package/dist/{ensure-sources-UPTHZKGF.js.map → ensure-sources-IH7CHSJF.js.map} +1 -1
  205. package/dist/factory-assets/connectors/box.js +18 -18
  206. package/dist/factory-assets/connectors/deploy.js +18 -18
  207. package/dist/factory-assets/connectors/devserver.js +18 -18
  208. package/dist/factory-assets/connectors/flow/adapter.js +18 -18
  209. package/dist/factory-assets/connectors/flow/contract/normalize.d.ts.map +1 -1
  210. package/dist/factory-assets/connectors/flow/contract.js +1 -1
  211. package/dist/factory-assets/connectors/flow/engine.js +8 -8
  212. package/dist/factory-assets/connectors/flow/run-flow.js +20 -20
  213. package/dist/factory-assets/connectors/flow.js +18 -18
  214. package/dist/factory-assets/connectors/git.js +18 -18
  215. package/dist/factory-assets/connectors/gmail.js +18 -18
  216. package/dist/factory-assets/connectors/googledrive.js +18 -18
  217. package/dist/factory-assets/connectors/local.js +18 -18
  218. package/dist/factory-assets/connectors/mattermost.js +18 -18
  219. package/dist/factory-assets/connectors/memory.js +18 -18
  220. package/dist/factory-assets/connectors/minio.js +18 -18
  221. package/dist/factory-assets/connectors/postgres.js +18 -18
  222. package/dist/factory-assets/connectors/s3.js +18 -18
  223. package/dist/factory-assets/connectors/sharepoint.js +18 -18
  224. package/dist/factory-assets/connectors/sqlite.js +18 -18
  225. package/dist/factory-assets/connectors/static-server.js +18 -18
  226. package/dist/factory-assets/connectors/tunnel.js +18 -18
  227. package/dist/factory-assets/connectors/webdav.js +18 -18
  228. package/dist/factory-assets/connectors/xstate-store.js +18 -18
  229. package/dist/factory-assets/connectors/xstate.js +18 -18
  230. package/dist/factory-assets/skills/authoring-skaile-assets/SKILL.md +1 -1
  231. package/dist/factory-assets/skills/authoring-skaile-manifests/SKILL.md +2 -2
  232. package/dist/factory-assets/skills/authoring-skaile-manifests/references/dependency-standard.md +3 -3
  233. package/dist/{flows-TJQIMGUX.js → flows-4JZQ3XFK.js} +11 -11
  234. package/dist/{flows-TJQIMGUX.js.map → flows-4JZQ3XFK.js.map} +1 -1
  235. package/dist/{helpers-DE53KG3E.js → helpers-JNMK3FC2.js} +16 -16
  236. package/dist/{helpers-DE53KG3E.js.map → helpers-JNMK3FC2.js.map} +1 -1
  237. package/dist/library/index.js +9 -9
  238. package/dist/library/install.js +4 -4
  239. package/dist/library/src/index.d.ts +1 -1
  240. package/dist/library/src/index.d.ts.map +1 -1
  241. package/dist/library/src/local/library-dir.d.ts +22 -5
  242. package/dist/library/src/local/library-dir.d.ts.map +1 -1
  243. package/dist/library/src/local/local-catalog-source.d.ts.map +1 -1
  244. package/dist/library/src/remote/remote-catalog-source.d.ts +6 -0
  245. package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
  246. package/dist/{library-publish-KKQ2ULLX.js → library-publish-I3UWXAHI.js} +52 -50
  247. package/dist/library-publish-I3UWXAHI.js.map +1 -0
  248. package/dist/model-endpoint/index.js +9 -9
  249. package/dist/{open-library-RJGJIW5H.js → open-library-NKKUJLWA.js} +19 -19
  250. package/dist/{open-library-RJGJIW5H.js.map → open-library-NKKUJLWA.js.map} +1 -1
  251. package/dist/{open-registry-3QS3J7KO.js → open-registry-BYAXSHUI.js} +14 -14
  252. package/dist/{open-registry-3QS3J7KO.js.map → open-registry-BYAXSHUI.js.map} +1 -1
  253. package/dist/{paths-QAV4C3KX.js → paths-UKWE35XS.js} +9 -9
  254. package/dist/{paths-QAV4C3KX.js.map → paths-UKWE35XS.js.map} +1 -1
  255. package/dist/{plugin-store-MSH6GK6T.js → plugin-store-ABE35NRX.js} +9 -9
  256. package/dist/{plugin-store-MSH6GK6T.js.map → plugin-store-ABE35NRX.js.map} +1 -1
  257. package/dist/project-BIPK47JK.js +86 -0
  258. package/dist/{project-HZW2MZPA.js.map → project-BIPK47JK.js.map} +1 -1
  259. package/dist/resolver/index.js +7 -7
  260. package/dist/runner/index.js +33 -33
  261. package/dist/runner/src/composition/content-source.d.ts.map +1 -1
  262. package/dist/runner/src/composition/errors.d.ts +16 -1
  263. package/dist/runner/src/composition/errors.d.ts.map +1 -1
  264. package/dist/runner/src/credential-notice.d.ts +3 -3
  265. package/dist/runner/src/credential-notice.d.ts.map +1 -1
  266. package/dist/runner/src/serve.d.ts +14 -2
  267. package/dist/runner/src/serve.d.ts.map +1 -1
  268. package/dist/sdk/asset-manager.js +13 -13
  269. package/dist/sdk/bridge.js +14 -14
  270. package/dist/sdk/core.js +6 -6
  271. package/dist/sdk/flow.js +8 -8
  272. package/dist/sdk/index.js +33 -33
  273. package/dist/sdk/resolver.js +7 -7
  274. package/dist/sdk/runner.js +33 -33
  275. package/dist/sdk/transport/ws/server.js +7 -7
  276. package/dist/sdk/transport/ws.js +7 -7
  277. package/dist/sdk/transport.js +7 -7
  278. package/dist/{serve-preflight-L4POEHNQ.js → serve-preflight-FLTIBTEX.js} +28 -29
  279. package/dist/serve-preflight-FLTIBTEX.js.map +1 -0
  280. package/dist/{setup-AGYB4PKR.js → setup-AG6NFHSN.js} +25 -25
  281. package/dist/{setup-AGYB4PKR.js.map → setup-AG6NFHSN.js.map} +1 -1
  282. package/dist/{skills-2LMQ2IAD.js → skills-UQYUHVKO.js} +12 -12
  283. package/dist/{skills-2LMQ2IAD.js.map → skills-UQYUHVKO.js.map} +1 -1
  284. package/dist/source-ASEHI2XS.js +85 -0
  285. package/dist/{source-GBMYD3RO.js.map → source-ASEHI2XS.js.map} +1 -1
  286. package/dist/{source-manifest-publish-FK22TVQT.js → source-manifest-publish-IEVV3W6J.js} +45 -45
  287. package/dist/{source-manifest-publish-FK22TVQT.js.map → source-manifest-publish-IEVV3W6J.js.map} +1 -1
  288. package/dist/transport/index.js +7 -7
  289. package/dist/transport/ws/server.js +7 -7
  290. package/dist/transport/ws.js +7 -7
  291. package/dist/tui/index.js +33 -33
  292. package/dist/types/src/install-manifest.d.ts +1 -1
  293. package/dist/types/src/install-manifest.d.ts.map +1 -1
  294. package/dist/workspace-plugin/adapters/mcp.js +25 -25
  295. package/dist/workspace-plugin/adapters/omp.js +14 -14
  296. package/dist/workspace-plugin/index.js +1 -1
  297. package/package.json +1 -1
  298. package/dist/asset-feeds-PXUWCXVI.js.map +0 -1
  299. package/dist/chunk-3JKGY2YC.js.map +0 -1
  300. package/dist/chunk-4DWBSTYA.js.map +0 -1
  301. package/dist/chunk-4XWLB7JB.js.map +0 -1
  302. package/dist/chunk-F2GOZMRA.js.map +0 -1
  303. package/dist/chunk-GOCWM7FN.js.map +0 -1
  304. package/dist/chunk-L4YKW5AY.js.map +0 -1
  305. package/dist/chunk-NMI2TWMH.js.map +0 -1
  306. package/dist/chunk-OAHVKSQJ.js.map +0 -1
  307. package/dist/chunk-OHNKYHRR.js.map +0 -1
  308. package/dist/chunk-PUK7TQT4.js +0 -13
  309. package/dist/chunk-PUK7TQT4.js.map +0 -1
  310. package/dist/chunk-QOM5Z62G.js.map +0 -1
  311. package/dist/chunk-TKHJXPSB.js.map +0 -1
  312. package/dist/chunk-UL22SDGR.js.map +0 -1
  313. package/dist/chunk-VJRTDKXS.js.map +0 -1
  314. package/dist/chunk-WEH33JSG.js.map +0 -1
  315. package/dist/chunk-WYHQUCHR.js.map +0 -1
  316. package/dist/chunk-X3RMRJNR.js.map +0 -1
  317. package/dist/library-publish-KKQ2ULLX.js.map +0 -1
  318. package/dist/project-HZW2MZPA.js +0 -84
  319. package/dist/serve-preflight-L4POEHNQ.js.map +0 -1
  320. package/dist/source-GBMYD3RO.js +0 -85
@@ -1,256 +1,24 @@
1
- import { registeredAssetKeys, unresolvedManifestDependencies, warnIgnoredDomainFiles, warnLegacyBundleFiles, removedDomainOption, rejectRemovedDomainOption, reportLibrarySymlinks, composeRefContext, assetEntryRef, manifestPublisherProblems, manifestRootProblems, manifestEntryNameProblems, manifestRequiresProblems, findEntryManifestFile, declaredVersion, manifestVersionMismatchMessage, checkAsset, invalidPublisherMessage, invalidSemverText } from './chunk-TKHJXPSB.js';
2
- import { AI_RESOURCES } from './chunk-2UUKCROR.js';
3
- import { logErr, logInfo, logWarn, logOk } from './chunk-KX2PT5Q4.js';
4
- import { getKindRegistry } from './chunk-ARWKK325.js';
5
- import { validateFlowVersions } from './chunk-FKU57Q5Q.js';
6
- import { loadFlow } from './chunk-SZXGRHQQ.js';
1
+ import { checkAgentInstances, unknownKeyWarnings, unknownHarnessErrors } from './chunk-7HX6FNKL.js';
2
+ import { registeredAssetKeys, unresolvedManifestDependencies, warnIgnoredDomainFiles, warnLegacyBundleFiles, removedDomainOption, rejectRemovedDomainOption, reportLibrarySymlinks, composeRefContext, assetEntryRef, manifestPublisherProblems, manifestRootProblems, manifestFilesProblems, manifestEntryNameProblems, manifestRequiresProblems, checkAssetFile, findEntryManifestFile, declaredVersion, manifestVersionMismatchMessage, MANIFEST_GLOBS, manifestParseErrorText, checkAsset, invalidPublisherMessage, invalidSemverText } from './chunk-AITJ7ELM.js';
3
+ import { AI_RESOURCES } from './chunk-AATHJRKL.js';
4
+ import { logErr, logInfo, logWarn, logOk } from './chunk-QEULL4Q3.js';
5
+ import { getKindRegistry } from './chunk-COYF6IG2.js';
6
+ import { validateFlowVersions } from './chunk-IRYKRKVQ.js';
7
+ import { loadFlow } from './chunk-4MUDQCBP.js';
7
8
  import { flowSkillVersionPins } from './chunk-7RGTAEG6.js';
8
- import { missingRootAssets, assertManifestEditable, scanUnlistedAssets, UNLISTED_SCAN_SKIP_DIRS } from './chunk-UL22SDGR.js';
9
- import { parseManifestFile } from './chunk-QOM5Z62G.js';
10
- import { resolveRuntimeAssets } from './chunk-OTIB4D2K.js';
11
- import { decodeSkaileYaml, normalizeAgentInstances, agentBlockKeyDiagnostics, agentInstanceDiagnostics, localConnectorMountDir, symlinkEscapeOfProject, isInsideProject, resolveAgentDefinitionDir, AgentRefResolutionError } from './chunk-OHNKYHRR.js';
12
- import { SKAILE_MANIFEST_FILENAME, loadSkPublishManifest, expandManifestFiles, isNonAssetPath } from './chunk-UQ33Y4DM.js';
13
- import { readAssetBody } from './chunk-GOCWM7FN.js';
14
- import { parseAssetRef, isValidPublisher, isValidAssetName, ASSET_NAME_HINT } from './chunk-WDXZA7QW.js';
9
+ import { missingRootAssets, assertManifestEditable, scanUnlistedAssets, UNLISTED_SCAN_SKIP_DIRS } from './chunk-S2XHGWQC.js';
10
+ import { parseManifestFile } from './chunk-UI745XC3.js';
11
+ import { resolveRuntimeAssets } from './chunk-ZDLUQLI6.js';
12
+ import { decodeSkaileYaml, localConnectorMountDir, symlinkEscapeOfProject, isInsideProject } from './chunk-ZHGKAZJ7.js';
13
+ import { SKAILE_MANIFEST_FILENAME, loadSkPublishManifest, isNonAssetPath } from './chunk-ZBHZLWV3.js';
14
+ import { readAssetBody } from './chunk-RHN5MRQO.js';
15
+ import { parseAssetRef, isValidPublisher, isValidAssetName, ASSET_NAME_HINT } from './chunk-LSSYC5IC.js';
15
16
  import { execFileSync } from 'child_process';
16
- import fs2 from 'fs';
17
- import path2 from 'path';
17
+ import fs from 'fs';
18
+ import path from 'path';
18
19
  import { Command } from 'commander';
19
20
  import { parse } from 'yaml';
20
21
 
21
- // cli/src/type-guards.ts
22
- function isRecord(value) {
23
- return value !== null && typeof value === "object" && !Array.isArray(value);
24
- }
25
-
26
- // cli/src/commands/validate-instances.ts
27
- var AGENT_MANIFEST_FILE = "agent.yaml";
28
- var TRIGGER_REQUIRED_FIELDS = {
29
- schedule: ["cron", "prompt"],
30
- webhook: ["prompt"],
31
- channel: ["when"],
32
- event: ["event"]
33
- };
34
- var err = (code, message, at) => ({
35
- code,
36
- severity: "error",
37
- message,
38
- path: at
39
- });
40
- function readAssetFacts(manifest) {
41
- const facts = {
42
- lifecycle: manifest.lifecycle,
43
- hasIo: manifest.io !== void 0 && manifest.io !== null,
44
- connectorSlots: [],
45
- otherSlots: [],
46
- triggerIds: []
47
- };
48
- for (const item of Array.isArray(manifest.composes) ? manifest.composes : []) {
49
- if (!isRecord(item) || typeof item.id !== "string") continue;
50
- (item.kind === "connector" ? facts.connectorSlots : facts.otherSlots).push(item.id);
51
- }
52
- for (const t of Array.isArray(manifest.triggers) ? manifest.triggers : []) {
53
- if (isRecord(t) && typeof t.id === "string") facts.triggerIds.push(t.id);
54
- }
55
- return facts;
56
- }
57
- function loadAsset(projectDir, id, ref) {
58
- const at = `agents.${id}.ref`;
59
- let dir;
60
- try {
61
- dir = resolveAgentDefinitionDir(projectDir, ref);
62
- } catch (e) {
63
- if (!(e instanceof AgentRefResolutionError)) throw e;
64
- return { diagnostic: err("agent_ref_unresolved", `agents.${id}: ${e.message}`, at) };
65
- }
66
- if (dir === void 0) {
67
- return {
68
- diagnostic: err(
69
- "agent_ref_unresolved",
70
- `agents.${id}: ref "${ref}" cannot be resolved \u2014 no ai-assets/ directory above the project`,
71
- at
72
- )
73
- };
74
- }
75
- const manifestPath = path2.join(dir, AGENT_MANIFEST_FILE);
76
- let text;
77
- try {
78
- text = fs2.readFileSync(manifestPath, "utf-8");
79
- } catch {
80
- return {
81
- diagnostic: err(
82
- "agent_ref_unresolved",
83
- `agents.${id}: ref "${ref}" resolves to ${dir}, which has no ${AGENT_MANIFEST_FILE}`,
84
- at
85
- )
86
- };
87
- }
88
- let manifest;
89
- try {
90
- manifest = parse(text);
91
- } catch (e) {
92
- return {
93
- diagnostic: err(
94
- "agent_manifest_invalid",
95
- `agents.${id}: ${manifestPath} is not valid YAML: ${e instanceof Error ? e.message : String(e)}`,
96
- at
97
- )
98
- };
99
- }
100
- if (!isRecord(manifest)) {
101
- return {
102
- diagnostic: err(
103
- "agent_manifest_invalid",
104
- `agents.${id}: ${manifestPath} is not a mapping`,
105
- at
106
- )
107
- };
108
- }
109
- return { facts: readAssetFacts(manifest) };
110
- }
111
- function checkTriggers(id, triggers, assetTriggerIds) {
112
- const out = [];
113
- const seen = /* @__PURE__ */ new Set();
114
- triggers.forEach((trigger, i) => {
115
- const at = `agents.${id}.triggers[${i}]`;
116
- if (seen.has(trigger.id)) {
117
- out.push(
118
- err(
119
- "agent_trigger_duplicate",
120
- `agents.${id}: trigger id "${trigger.id}" is declared twice`,
121
- `${at}.id`
122
- )
123
- );
124
- return;
125
- }
126
- seen.add(trigger.id);
127
- if (!assetTriggerIds || assetTriggerIds.includes(trigger.id)) return;
128
- if (!trigger.kind) {
129
- out.push(
130
- err(
131
- "agent_trigger_unknown",
132
- `agents.${id}: trigger "${trigger.id}" is not declared by the agent asset (${assetTriggerIds.length > 0 ? `has: ${assetTriggerIds.join(", ")}` : "it declares no triggers"}) \u2014 add \`kind\` and the trigger's fields to declare a new one`,
133
- `${at}.id`
134
- )
135
- );
136
- return;
137
- }
138
- const missing = TRIGGER_REQUIRED_FIELDS[trigger.kind].filter(
139
- (field) => trigger[field] === void 0
140
- );
141
- if (missing.length > 0) {
142
- out.push(
143
- err(
144
- "agent_trigger_incomplete",
145
- `agents.${id}: trigger "${trigger.id}" (kind ${trigger.kind}) is not in the asset, so it must declare ${missing.join(", ")}`,
146
- at
147
- )
148
- );
149
- }
150
- });
151
- return out;
152
- }
153
- function checkConnectors(id, instance, facts, connectorIds) {
154
- const out = [];
155
- for (const [slot, connectorId] of Object.entries(instance.connectors ?? {})) {
156
- const at = `agents.${id}.connectors.${slot}`;
157
- if (!facts.connectorSlots.includes(slot)) {
158
- const hint = facts.otherSlots.includes(slot) ? `"${slot}" is a slot of a non-connector item` : facts.connectorSlots.length > 0 ? `the asset's connector slots are: ${facts.connectorSlots.join(", ")}` : "the asset declares no connector slots";
159
- out.push(
160
- err(
161
- "agent_connector_slot_unknown",
162
- `agents.${id}: connectors.${slot} is not a connector slot id of the agent asset (${hint})`,
163
- at
164
- )
165
- );
166
- }
167
- if (!connectorIds.includes(connectorId)) {
168
- out.push(
169
- err(
170
- "agent_connector_unknown",
171
- `agents.${id}: connectors.${slot} points at "${connectorId}", which is not in skaile.yaml connectors[]${connectorIds.length > 0 ? ` (has: ${connectorIds.join(", ")})` : ""}`,
172
- at
173
- )
174
- );
175
- }
176
- }
177
- return out;
178
- }
179
- function checkAgentInstances(projectDir, parsed) {
180
- const diagnostics = [];
181
- const instances = normalizeAgentInstances(parsed.agents, diagnostics);
182
- const agent = isRecord(parsed.agent) ? parsed.agent : void 0;
183
- diagnostics.push(...agentBlockKeyDiagnostics(parsed.agent));
184
- if (agent?.subagents !== void 0) {
185
- diagnostics.push(
186
- err(
187
- "agent_subagents_removed",
188
- "`agent.subagents` was removed \u2014 declare each subagent as an agent asset and bind it under `agents:` with `lifecycle: role`",
189
- "agent.subagents"
190
- )
191
- );
192
- }
193
- if (agent?.instances !== void 0) {
194
- diagnostics.push(
195
- err(
196
- "misplaced_agent_instances",
197
- "`agent.instances` is not a skaile.yaml key \u2014 declare instances under root `agents:`",
198
- "agent.instances"
199
- )
200
- );
201
- }
202
- diagnostics.push(
203
- ...agentInstanceDiagnostics({
204
- agent: {
205
- definition: typeof agent?.definition === "string" ? agent.definition : void 0,
206
- instances
207
- }
208
- })
209
- );
210
- if (!instances) return diagnostics;
211
- const connectorIds = (Array.isArray(parsed.connectors) ? parsed.connectors : []).flatMap(
212
- (c) => isRecord(c) && typeof c.id === "string" ? [c.id] : []
213
- );
214
- for (const [id, instance] of Object.entries(instances)) {
215
- const loaded = loadAsset(projectDir, id, instance.ref);
216
- if ("diagnostic" in loaded) {
217
- diagnostics.push(loaded.diagnostic, ...checkTriggers(id, instance.triggers ?? [], void 0));
218
- continue;
219
- }
220
- const { facts } = loaded;
221
- const lifecycle = instance.lifecycle ?? facts.lifecycle ?? "standing";
222
- if (lifecycle === "role" && !facts.hasIo) {
223
- diagnostics.push(
224
- err(
225
- "agent_role_missing_io",
226
- `agents.${id}: lifecycle "role" needs the agent asset to declare \`io\` ({ input, output } JSON Schemas)`,
227
- `agents.${id}.lifecycle`
228
- )
229
- );
230
- }
231
- diagnostics.push(...checkConnectors(id, instance, facts, connectorIds));
232
- diagnostics.push(...checkTriggers(id, instance.triggers ?? [], facts.triggerIds));
233
- }
234
- return diagnostics;
235
- }
236
-
237
- // cli/src/commands/validate.ts
238
- var MANIFEST_GLOBS = [
239
- { pattern: /\/SKILL\.md$/, kind: "skill" },
240
- { pattern: /\/agent\.yaml$/, kind: "agent" },
241
- { pattern: /\/AGENT\.md$/, kind: "agent" },
242
- { pattern: /\/CONTRACT\.md$/, kind: "contract" },
243
- { pattern: /\/PERSONA\.md$/, kind: "persona" },
244
- { pattern: /\/RULESET\.md$/, kind: "ruleset" },
245
- { pattern: /\.flow\.yaml$/, kind: "flow" },
246
- { pattern: /\.flow\.json$/, kind: "flow" },
247
- { pattern: /\/CONNECTOR\.md$/, kind: "connector" },
248
- { pattern: /\.prompt\.md$/, kind: "prompt" },
249
- { pattern: /\/MCP\.md$/, kind: "mcp-server" },
250
- { pattern: /\/knowledge\.yaml$/, kind: "knowledge" },
251
- { pattern: /\/knowledge\/index\.yaml$/, kind: "knowledge" },
252
- { pattern: /\.preset\.yaml$/, kind: "preset" }
253
- ];
254
22
  var HARNESS_DIRS = /* @__PURE__ */ new Set([".claude", ".codex", ".omp"]);
255
23
  var SKIP_DIRS = /* @__PURE__ */ new Set([
256
24
  "node_modules",
@@ -265,12 +33,12 @@ function findManifestCandidates(rootPath) {
265
33
  function walk(dir) {
266
34
  let entries;
267
35
  try {
268
- entries = fs2.readdirSync(dir, { withFileTypes: true });
36
+ entries = fs.readdirSync(dir, { withFileTypes: true });
269
37
  } catch {
270
38
  return;
271
39
  }
272
40
  for (const entry of entries) {
273
- const fullPath = path2.join(dir, entry.name);
41
+ const fullPath = path.join(dir, entry.name);
274
42
  if (entry.isDirectory()) {
275
43
  if (!SKIP_DIRS.has(entry.name)) walk(fullPath);
276
44
  } else if (entry.isFile()) {
@@ -287,10 +55,12 @@ function findManifestCandidates(rootPath) {
287
55
  return candidates;
288
56
  }
289
57
  function parseManifestCandidate(c, absRoot) {
290
- const content = fs2.readFileSync(c.filePath, "utf-8");
58
+ const content = fs.readFileSync(c.filePath, "utf-8");
291
59
  const res = parseManifestFile(c.filePath, content);
292
60
  if (!res.ok) {
293
- logErr(`${path2.relative(absRoot, c.filePath)} [${c.kind}] \u2014 parse error: ${res.reason}`);
61
+ logErr(
62
+ `${path.relative(absRoot, c.filePath)} [${c.kind}] \u2014 ${manifestParseErrorText(res.reason)}`
63
+ );
294
64
  return { kind: "error" };
295
65
  }
296
66
  return {
@@ -300,25 +70,25 @@ function parseManifestCandidate(c, absRoot) {
300
70
  };
301
71
  }
302
72
  function libraryRootOf(absRoot) {
303
- for (let dir = absRoot; ; dir = path2.dirname(dir)) {
304
- if (fs2.existsSync(path2.join(dir, SKAILE_MANIFEST_FILENAME))) return dir;
305
- if (path2.dirname(dir) === dir) return absRoot;
73
+ for (let dir = absRoot; ; dir = path.dirname(dir)) {
74
+ if (fs.existsSync(path.join(dir, SKAILE_MANIFEST_FILENAME))) return dir;
75
+ if (path.dirname(dir) === dir) return absRoot;
306
76
  }
307
77
  }
308
78
  function validateManifestCandidate(c, parsed, body, absRoot, registry, strictConformance, composeRefs) {
309
- const relPath = path2.relative(absRoot, c.filePath);
79
+ const relPath = path.relative(absRoot, c.filePath);
310
80
  let errors = 0;
311
81
  let warnings = 0;
312
- const dirName = path2.basename(path2.dirname(c.filePath));
82
+ const dirName = path.basename(path.dirname(c.filePath));
313
83
  const checked = checkAsset(
314
84
  c.kind,
315
85
  parsed ?? {},
316
86
  body,
317
87
  dirName,
318
88
  registry,
319
- fs2.readFileSync(c.filePath, "utf-8"),
320
- path2.basename(c.filePath),
321
- { dir: path2.dirname(c.filePath), libraryRoot: libraryRootOf(absRoot), composeRefs }
89
+ fs.readFileSync(c.filePath, "utf-8"),
90
+ path.basename(c.filePath),
91
+ { dir: path.dirname(c.filePath), libraryRoot: libraryRootOf(absRoot), composeRefs }
322
92
  );
323
93
  for (const f of checked.errors) {
324
94
  logErr(`${relPath} [${f.tag}] \u2014 ${f.text}`);
@@ -341,7 +111,7 @@ function scanIdentities(root) {
341
111
  for (const c of findManifestCandidates(root)) {
342
112
  let parsed;
343
113
  try {
344
- const res = parseManifestFile(c.filePath, fs2.readFileSync(c.filePath, "utf-8"));
114
+ const res = parseManifestFile(c.filePath, fs.readFileSync(c.filePath, "utf-8"));
345
115
  if (!res.ok) continue;
346
116
  parsed = res.data;
347
117
  } catch {
@@ -355,14 +125,14 @@ function scanIdentities(root) {
355
125
  return identities;
356
126
  }
357
127
  function validateManifests(rootPath, strictConformance, registeredAssets = /* @__PURE__ */ new Set()) {
358
- const absRoot = path2.resolve(rootPath);
359
- if (!fs2.existsSync(absRoot)) {
128
+ const absRoot = path.resolve(rootPath);
129
+ if (!fs.existsSync(absRoot)) {
360
130
  logErr(`Path does not exist: ${absRoot}`);
361
131
  return { total: 0, errors: 1, warnings: 0 };
362
132
  }
363
133
  const registry = getKindRegistry();
364
134
  const candidates = findManifestCandidates(absRoot);
365
- const isLibrary = fs2.existsSync(path2.join(absRoot, SKAILE_MANIFEST_FILENAME));
135
+ const isLibrary = fs.existsSync(path.join(absRoot, SKAILE_MANIFEST_FILENAME));
366
136
  let errors = reportLibrarySymlinks(absRoot, {
367
137
  wholeTree: isLibrary,
368
138
  skipDirs: isLibrary ? void 0 : HARNESS_DIRS
@@ -395,14 +165,14 @@ function validateManifests(rootPath, strictConformance, registeredAssets = /* @_
395
165
  const obj = parseResult.parsed;
396
166
  const identity = obj && typeof obj === "object" ? obj[c.kind === "flow" ? "id" : "name"] : null;
397
167
  if (typeof identity === "string" && identity.length > 0) {
398
- const dir = path2.dirname(c.filePath);
168
+ const dir = path.dirname(c.filePath);
399
169
  const key = `${c.kind}:${identity}`;
400
170
  const first = seenIdentity.get(key);
401
171
  if (first === void 0) {
402
172
  seenIdentity.set(key, dir);
403
173
  } else if (first !== dir) {
404
174
  logErr(
405
- `${path2.relative(absRoot, c.filePath)} [${c.kind}] \u2014 ${key} is also defined in ${path2.relative(absRoot, first) || "."}; two directories cannot share a kind and name (\`skaile library index\` keeps only the first).`
175
+ `${path.relative(absRoot, c.filePath)} [${c.kind}] \u2014 ${key} is also defined in ${path.relative(absRoot, first) || "."}; two directories cannot share a kind and name (\`skaile library index\` keeps only the first).`
406
176
  );
407
177
  errors++;
408
178
  }
@@ -415,12 +185,12 @@ function findWorkspaceManifests(rootPath) {
415
185
  function walk(dir) {
416
186
  let entries;
417
187
  try {
418
- entries = fs2.readdirSync(dir, { withFileTypes: true });
188
+ entries = fs.readdirSync(dir, { withFileTypes: true });
419
189
  } catch {
420
190
  return;
421
191
  }
422
192
  for (const entry of entries) {
423
- const full = path2.join(dir, entry.name);
193
+ const full = path.join(dir, entry.name);
424
194
  if (entry.isDirectory()) {
425
195
  if (!SKIP_DIRS.has(entry.name)) walk(full);
426
196
  } else if (entry.isFile() && /(^|\.)skaile\.yaml$/.test(entry.name)) {
@@ -500,7 +270,7 @@ function validateLocalConnectorMountPaths(projectDir, relPath, connectors) {
500
270
  const dir = localConnectorMountDir(c, projectDir);
501
271
  if (!dir) continue;
502
272
  const escapesTo = symlinkEscapeOfProject(dir, projectDir);
503
- if (!fs2.existsSync(dir)) {
273
+ if (!fs.existsSync(dir)) {
504
274
  logErr(
505
275
  `${relPath} [connectors] \u2014 connector_mount_path_missing: connectors.${c.id}.mountPath: ${dir} does not exist; create the directory or fix the path`
506
276
  );
@@ -519,14 +289,14 @@ function validateLocalConnectorMountPaths(projectDir, relPath, connectors) {
519
289
  return errors;
520
290
  }
521
291
  async function validateWorkspaceManifests(rootPath) {
522
- const absRoot = path2.resolve(rootPath);
292
+ const absRoot = path.resolve(rootPath);
523
293
  const files = findWorkspaceManifests(absRoot);
524
294
  let errors = 0;
525
295
  for (const file of files) {
526
- const relPath = path2.relative(absRoot, file);
296
+ const relPath = path.relative(absRoot, file);
527
297
  let parsed;
528
298
  try {
529
- parsed = parse(fs2.readFileSync(file, "utf-8")) ?? {};
299
+ parsed = parse(fs.readFileSync(file, "utf-8")) ?? {};
530
300
  } catch (e) {
531
301
  logErr(`${relPath} \u2014 parse error: ${e instanceof Error ? e.message : String(e)}`);
532
302
  errors++;
@@ -534,7 +304,7 @@ async function validateWorkspaceManifests(rootPath) {
534
304
  }
535
305
  errors += validateWorkspaceRefs(collectWorkspaceRefFields(parsed), relPath);
536
306
  errors += validateWorkspaceAssets(parsed, relPath);
537
- for (const d of checkAgentInstances(path2.dirname(file), parsed)) {
307
+ for (const d of checkAgentInstances(path.dirname(file), parsed)) {
538
308
  const line = `${relPath} [agents] \u2014 ${d.code}: ${d.path ? `${d.path}: ` : ""}${d.message}`;
539
309
  if (d.severity === "error") {
540
310
  logErr(line);
@@ -543,7 +313,7 @@ async function validateWorkspaceManifests(rootPath) {
543
313
  logWarn(line);
544
314
  }
545
315
  }
546
- const decoded = decodeSkaileYaml(fs2.readFileSync(file, "utf-8"));
316
+ const decoded = decodeSkaileYaml(fs.readFileSync(file, "utf-8"));
547
317
  for (const d of decoded.diagnostics) {
548
318
  if (!CONNECTOR_ERROR_CODES.includes(d.code)) continue;
549
319
  logErr(`${relPath} [connectors] \u2014 ${d.code}: ${d.path ? `${d.path}: ` : ""}${d.message}`);
@@ -564,13 +334,18 @@ async function validateWorkspaceManifests(rootPath) {
564
334
  logWarn(line);
565
335
  }
566
336
  }
337
+ for (const line of unknownKeyWarnings(decoded.diagnostics, relPath)) logWarn(line);
338
+ for (const line of await unknownHarnessErrors(path.dirname(file), decoded.config, relPath)) {
339
+ logErr(line);
340
+ errors++;
341
+ }
567
342
  errors += validateLocalConnectorMountPaths(
568
- path2.dirname(file),
343
+ path.dirname(file),
569
344
  relPath,
570
345
  decoded.config?.connectors ?? []
571
346
  );
572
347
  if ((decoded.config?.connectors ?? []).length > 0) {
573
- const assets = await resolveRuntimeAssets(path2.dirname(file));
348
+ const assets = await resolveRuntimeAssets(path.dirname(file));
574
349
  if (!assets.warnings.some((w) => w.code === "repo_unavailable")) {
575
350
  for (const w of assets.warnings) {
576
351
  if (w.code !== "missing_driver" || !w.name) continue;
@@ -583,7 +358,7 @@ async function validateWorkspaceManifests(rootPath) {
583
358
  return { total: files.length, errors };
584
359
  }
585
360
  function validatePublishManifestRoots(rootPath) {
586
- const absRoot = path2.resolve(rootPath);
361
+ const absRoot = path.resolve(rootPath);
587
362
  const manifest = loadSkPublishManifest(absRoot);
588
363
  if (!manifest) return 0;
589
364
  const missing = missingRootAssets(absRoot, manifest);
@@ -592,40 +367,37 @@ function validatePublishManifestRoots(rootPath) {
592
367
  `${SKAILE_MANIFEST_FILENAME} [assets] \u2014 ${assetEntryRef(a, manifest)}: root "${a.root}" does not exist. Run \`skaile library index <library>\` to drop the entry, or restore the directory.`
593
368
  );
594
369
  }
595
- let unmatchedEntries = 0;
596
- if (!manifest.source) {
597
- for (const a of manifest.assets ?? []) {
598
- if (a.root || a.source || !Array.isArray(a.files) || a.files.length === 0) continue;
599
- const patterns = a.files.map((f) => typeof f === "string" ? f : f.path).filter(Boolean);
600
- const { unmatched } = expandManifestFiles(absRoot, patterns);
601
- if (unmatched.length === 0) continue;
602
- unmatchedEntries++;
603
- logErr(
604
- `${SKAILE_MANIFEST_FILENAME} [assets] \u2014 ${assetEntryRef(a, manifest)}: files: ${unmatched.join(", ")} not found. Fix the \`files:\` list or drop the entry.`
605
- );
606
- }
607
- }
608
- return missing.length + unmatchedEntries;
370
+ return missing.length;
609
371
  }
610
372
  async function validatePublishManifestUnlisted(rootPath) {
611
- const absRoot = path2.resolve(rootPath);
373
+ const absRoot = path.resolve(rootPath);
612
374
  const manifest = loadSkPublishManifest(absRoot);
613
375
  if (!manifest) return 0;
376
+ const registry = getKindRegistry();
377
+ const libraryRoot = libraryRootOf(absRoot);
378
+ const composeRefs = composeRefContext(
379
+ scanIdentities(libraryRoot),
380
+ await registeredAssetKeys(libraryRoot),
381
+ manifest.publisher
382
+ );
614
383
  const unlisted = (await scanUnlistedAssets(
615
384
  absRoot,
616
- manifest.publisher ?? path2.basename(absRoot),
617
- getKindRegistry(),
385
+ manifest.publisher ?? path.basename(absRoot),
386
+ registry,
618
387
  UNLISTED_SCAN_SKIP_DIRS
619
- )).filter((u) => !u.registeredAt && !u.parseFailure);
388
+ )).filter(
389
+ (u) => !u.registeredAt && !u.parseFailure && // a file that does not parse has its own parse error
390
+ checkAssetFile(u.entry.source, u.entry.kind, registry, absRoot, composeRefs).length === 0
391
+ );
620
392
  for (const u of unlisted) {
621
393
  logErr(
622
- `${path2.relative(absRoot, u.entry.source)} [${u.entry.kind}] \u2014 ${u.entry.kind}:${u.entry.name} is on disk but not in ${SKAILE_MANIFEST_FILENAME}, so it is not published. Run \`skaile library index <library>\` to list it, or delete the directory.`
394
+ `${path.relative(absRoot, u.entry.source)} [${u.entry.kind}] \u2014 ${u.entry.kind}:${u.entry.name} is on disk but not in ${SKAILE_MANIFEST_FILENAME}, so it is not published. Run \`skaile library index <library>\` to list it, or delete the directory.`
623
395
  );
624
396
  }
625
397
  return unlisted.length;
626
398
  }
627
399
  function validatePublishManifestRequires(rootPath) {
628
- const problems = manifestRequiresProblems(path2.resolve(rootPath));
400
+ const problems = manifestRequiresProblems(path.resolve(rootPath));
629
401
  for (const p of problems) {
630
402
  logErr(
631
403
  `${SKAILE_MANIFEST_FILENAME} [assets] \u2014 ${p.asset}: ${p.message}. Use the \`kind:@<publisher>/name[#version]\` form.`
@@ -634,29 +406,30 @@ function validatePublishManifestRequires(rootPath) {
634
406
  return problems.length;
635
407
  }
636
408
  function validatePublishManifestPublisherSlugs(rootPath) {
637
- const problems = manifestPublisherProblems(path2.resolve(rootPath));
409
+ const problems = manifestPublisherProblems(path.resolve(rootPath));
638
410
  for (const message of problems) logErr(message);
639
411
  return problems.length;
640
412
  }
641
413
  function validatePublishManifestRootPaths(rootPath) {
642
414
  const problems = [
643
- ...manifestRootProblems(path2.resolve(rootPath)),
644
- ...manifestEntryNameProblems(path2.resolve(rootPath))
415
+ ...manifestRootProblems(path.resolve(rootPath)),
416
+ ...manifestFilesProblems(path.resolve(rootPath)),
417
+ ...manifestEntryNameProblems(path.resolve(rootPath))
645
418
  ];
646
419
  for (const message of problems) logErr(message);
647
420
  return problems.length;
648
421
  }
649
422
  function validatePublishManifestParses(rootPath) {
650
423
  try {
651
- assertManifestEditable(path2.resolve(rootPath));
424
+ assertManifestEditable(path.resolve(rootPath));
652
425
  return 0;
653
- } catch (err2) {
654
- logErr(err2 instanceof Error ? err2.message : String(err2));
426
+ } catch (err) {
427
+ logErr(err instanceof Error ? err.message : String(err));
655
428
  return 1;
656
429
  }
657
430
  }
658
431
  function validatePublishManifestVersions(rootPath) {
659
- const absRoot = path2.resolve(rootPath);
432
+ const absRoot = path.resolve(rootPath);
660
433
  const manifest = loadSkPublishManifest(absRoot);
661
434
  if (!manifest || manifest.source) return 0;
662
435
  let warnings = 0;
@@ -664,7 +437,7 @@ function validatePublishManifestVersions(rootPath) {
664
437
  if (a.source || !a.version) continue;
665
438
  const file = findEntryManifestFile(absRoot, a);
666
439
  if (!file) continue;
667
- const res = parseManifestFile(file, fs2.readFileSync(file, "utf-8"));
440
+ const res = parseManifestFile(file, fs.readFileSync(file, "utf-8"));
668
441
  if (!res.ok) continue;
669
442
  const fileVersion = declaredVersion(res.data);
670
443
  if (fileVersion === void 0 || fileVersion === a.version) continue;
@@ -672,7 +445,7 @@ function validatePublishManifestVersions(rootPath) {
672
445
  manifestVersionMismatchMessage(
673
446
  assetEntryRef(a, manifest),
674
447
  a.version,
675
- toPosix(path2.relative(absRoot, file)),
448
+ toPosix(path.relative(absRoot, file)),
676
449
  fileVersion
677
450
  )
678
451
  );
@@ -681,7 +454,7 @@ function validatePublishManifestVersions(rootPath) {
681
454
  return warnings;
682
455
  }
683
456
  function validatePublishManifestPublishers(rootPath) {
684
- const absRoot = path2.resolve(rootPath);
457
+ const absRoot = path.resolve(rootPath);
685
458
  const manifest = loadSkPublishManifest(absRoot);
686
459
  if (!manifest || manifest.source) return 0;
687
460
  const bare = (p) => p.trim().replace(/^@/, "");
@@ -691,13 +464,13 @@ function validatePublishManifestPublishers(rootPath) {
691
464
  if (a.source || !resolved) continue;
692
465
  const file = findEntryManifestFile(absRoot, a);
693
466
  if (!file) continue;
694
- const res = parseManifestFile(file, fs2.readFileSync(file, "utf-8"));
467
+ const res = parseManifestFile(file, fs.readFileSync(file, "utf-8"));
695
468
  if (!res.ok) continue;
696
469
  const meta = res.data.metadata;
697
470
  const declared = meta !== null && typeof meta === "object" ? meta.publisher : null;
698
471
  if (typeof declared !== "string" || bare(declared) === bare(resolved)) continue;
699
472
  logWarn(
700
- `${toPosix(path2.relative(absRoot, file))} [publisher] \u2014 metadata.publisher "${bare(declared)}" differs from the manifest publisher "${bare(resolved)}" for ${assetEntryRef(a, manifest)}. The manifest wins and the file value is ignored: delete \`metadata.publisher\` from the file, or set the publisher in ${SKAILE_MANIFEST_FILENAME}.`
473
+ `${toPosix(path.relative(absRoot, file))} [publisher] \u2014 metadata.publisher "${bare(declared)}" differs from the manifest publisher "${bare(resolved)}" for ${assetEntryRef(a, manifest)}. The manifest wins and the file value is ignored: delete \`metadata.publisher\` from the file, or set the publisher in ${SKAILE_MANIFEST_FILENAME}.`
701
474
  );
702
475
  warnings++;
703
476
  }
@@ -705,7 +478,7 @@ function validatePublishManifestPublishers(rootPath) {
705
478
  }
706
479
  var EXCLUDED_PATHS = ["skaileup-shared/", "external/", "docs/"];
707
480
  function toPosix(p) {
708
- return p.split(path2.sep).join("/");
481
+ return p.split(path.sep).join("/");
709
482
  }
710
483
  function isExcludedPath(relPath) {
711
484
  const rel = toPosix(relPath);
@@ -721,9 +494,9 @@ var VERSIONED_KINDS = {
721
494
  };
722
495
  function readAssetVersion(c) {
723
496
  const kind = c.kind;
724
- const fileName = path2.basename(c.filePath);
725
- const dirName = path2.basename(path2.dirname(c.filePath));
726
- const content = fs2.readFileSync(c.filePath, "utf-8");
497
+ const fileName = path.basename(c.filePath);
498
+ const dirName = path.basename(path.dirname(c.filePath));
499
+ const content = fs.readFileSync(c.filePath, "utf-8");
727
500
  if (c.filePath.endsWith(".md")) {
728
501
  const res = parseManifestFile(c.filePath, content);
729
502
  const data = res.ok ? res.data : {};
@@ -756,26 +529,26 @@ function readAssetVersion(c) {
756
529
  };
757
530
  }
758
531
  function collectAssetVersions(root) {
759
- if (!fs2.existsSync(root)) return [];
532
+ if (!fs.existsSync(root)) return [];
760
533
  const assets = [];
761
534
  for (const c of findManifestCandidates(root)) {
762
535
  if (!VERSIONED_KINDS[c.kind]) continue;
763
536
  if (c.filePath.endsWith(".flow.json")) continue;
764
- if (isExcludedPath(path2.relative(root, c.filePath))) continue;
537
+ if (isExcludedPath(path.relative(root, c.filePath))) continue;
765
538
  assets.push(readAssetVersion(c));
766
539
  }
767
540
  return assets;
768
541
  }
769
542
  function assetLocation(a, root) {
770
- return toPosix(path2.relative(root, a.filePath));
543
+ return toPosix(path.relative(root, a.filePath));
771
544
  }
772
545
  function findChangelogUnit(assetRelPath, root) {
773
- let dir = path2.posix.dirname(toPosix(assetRelPath));
546
+ let dir = path.posix.dirname(toPosix(assetRelPath));
774
547
  for (; ; ) {
775
548
  const candidate = dir === "." ? "CHANGELOG.md" : `${dir}/CHANGELOG.md`;
776
- if (fs2.existsSync(path2.join(root, candidate))) return candidate;
549
+ if (fs.existsSync(path.join(root, candidate))) return candidate;
777
550
  if (dir === ".") return null;
778
- dir = path2.posix.dirname(dir);
551
+ dir = path.posix.dirname(dir);
779
552
  }
780
553
  }
781
554
  function checkChangelogUnits(modifiedFiles, root) {
@@ -825,7 +598,7 @@ function checkVersionBumps(assets, root) {
825
598
  let warnings = 0;
826
599
  for (const a of assets) {
827
600
  if (!a.version) continue;
828
- const relPath = toPosix(path2.relative(root, a.filePath));
601
+ const relPath = toPosix(path.relative(root, a.filePath));
829
602
  try {
830
603
  const headContent = execFileSync("git", ["show", `HEAD:./${relPath}`], {
831
604
  cwd: root,
@@ -856,9 +629,9 @@ function checkFlowVersionPins(assets, root) {
856
629
  let pins;
857
630
  try {
858
631
  pins = flowSkillVersionPins(loadFlow(f.filePath));
859
- } catch (err2) {
632
+ } catch (err) {
860
633
  logWarn(
861
- `flow:${f.name} (${path2.relative(root, f.filePath)}) \u2014 could not be read: ${err2 instanceof Error ? err2.message : err2}`
634
+ `flow:${f.name} (${path.relative(root, f.filePath)}) \u2014 could not be read: ${err instanceof Error ? err.message : err}`
862
635
  );
863
636
  warnings++;
864
637
  continue;
@@ -876,16 +649,16 @@ function checkFlowVersionPins(assets, root) {
876
649
  }
877
650
  function resolveCheckRoot(pathArg) {
878
651
  if (pathArg) {
879
- const abs = path2.resolve(pathArg);
880
- if (!fs2.existsSync(abs)) {
652
+ const abs = path.resolve(pathArg);
653
+ if (!fs.existsSync(abs)) {
881
654
  logErr(`Path does not exist: ${abs}`);
882
655
  return null;
883
656
  }
884
657
  return abs;
885
658
  }
886
- for (let dir = process.cwd(); ; dir = path2.dirname(dir)) {
887
- if (fs2.existsSync(path2.join(dir, SKAILE_MANIFEST_FILENAME))) return dir;
888
- if (path2.dirname(dir) === dir) return AI_RESOURCES;
659
+ for (let dir = process.cwd(); ; dir = path.dirname(dir)) {
660
+ if (fs.existsSync(path.join(dir, SKAILE_MANIFEST_FILENAME))) return dir;
661
+ if (path.dirname(dir) === dir) return AI_RESOURCES;
889
662
  }
890
663
  }
891
664
  function isInGitWorkTree(root) {
@@ -899,11 +672,28 @@ function isInGitWorkTree(root) {
899
672
  return false;
900
673
  }
901
674
  }
675
+ function hasCommit(root) {
676
+ try {
677
+ execFileSync("git", ["rev-parse", "--verify", "--quiet", "HEAD"], {
678
+ cwd: root,
679
+ stdio: ["ignore", "ignore", "ignore"]
680
+ });
681
+ return true;
682
+ } catch {
683
+ return false;
684
+ }
685
+ }
902
686
  function changedFiles(root, ref, what, opts = {}) {
903
687
  if (!isInGitWorkTree(root)) {
904
688
  logErr(`${what} needs a git repository: ${root} is not inside a git work tree.`);
905
689
  return null;
906
690
  }
691
+ if (ref === "HEAD" && !hasCommit(root)) {
692
+ logErr(
693
+ `${what} compares with the last commit, and ${root} has no commit yet. Commit the library first (\`skaile library commit <name>\`), then run it again.`
694
+ );
695
+ return null;
696
+ }
907
697
  try {
908
698
  const out = execFileSync(
909
699
  "git",
@@ -924,16 +714,16 @@ function changedFiles(root, ref, what, opts = {}) {
924
714
  changed.push(...fresh.trim().split("\n").filter(Boolean));
925
715
  }
926
716
  return changed;
927
- } catch (err2) {
928
- const stderr = err2 instanceof Error && "stderr" in err2 ? String(err2.stderr).trim() : "";
929
- const reason = (stderr || (err2 instanceof Error ? err2.message : String(err2))).split("\n")[0];
717
+ } catch (err) {
718
+ const stderr = err instanceof Error && "stderr" in err ? String(err.stderr).trim() : "";
719
+ const reason = (stderr || (err instanceof Error ? err.message : String(err))).split("\n")[0];
930
720
  logErr(`git diff failed in ${root}: ${reason}`);
931
721
  return null;
932
722
  }
933
723
  }
934
724
  function assetOwnDir(a) {
935
- const dir = path2.dirname(a.filePath);
936
- if (["skill", "agent", "contract"].includes(a.kind) || path2.basename(dir) === a.name) return dir;
725
+ const dir = path.dirname(a.filePath);
726
+ if (["skill", "agent", "contract"].includes(a.kind) || path.basename(dir) === a.name) return dir;
937
727
  return null;
938
728
  }
939
729
  function assetChanged(a, changedAbs) {
@@ -941,8 +731,8 @@ function assetChanged(a, changedAbs) {
941
731
  const dir = assetOwnDir(a);
942
732
  if (dir === null) return false;
943
733
  for (const f of changedAbs) {
944
- const rel = path2.relative(dir, f);
945
- if (rel.startsWith("..") || path2.isAbsolute(rel)) continue;
734
+ const rel = path.relative(dir, f);
735
+ if (rel.startsWith("..") || path.isAbsolute(rel)) continue;
946
736
  if (!isNonAssetPath(toPosix(rel))) return true;
947
737
  }
948
738
  return false;
@@ -967,7 +757,7 @@ function runVersionsCheck(pathArg, opts) {
967
757
  process.exit(1);
968
758
  return;
969
759
  }
970
- const changedAbs = new Set(changed.map((f) => path2.resolve(root, f)));
760
+ const changedAbs = new Set(changed.map((f) => path.resolve(root, f)));
971
761
  assets = assets.filter((a) => assetChanged(a, changedAbs));
972
762
  }
973
763
  logInfo(`Checking versions in ${root}`);
@@ -1000,8 +790,8 @@ function makeValidateCommand() {
1000
790
  "--strict-conformance",
1001
791
  "Treat Agent Skills (agentskills.io) standard findings as errors"
1002
792
  ).action(async (targetPath, opts) => {
1003
- const absPath = path2.resolve(targetPath);
1004
- if (fs2.existsSync(absPath) && !fs2.statSync(absPath).isDirectory()) {
793
+ const absPath = path.resolve(targetPath);
794
+ if (fs.existsSync(absPath) && !fs.statSync(absPath).isDirectory()) {
1005
795
  logErr(`${absPath} is not a directory: nothing to validate. Pass the library directory.`);
1006
796
  process.exit(1);
1007
797
  return;
@@ -1029,7 +819,7 @@ function makeValidateCommand() {
1029
819
  warnIgnoredDomainFiles(absPath);
1030
820
  warnLegacyBundleFiles(absPath);
1031
821
  logInfo(`Scanned ${total} asset manifest(s) and ${ws.total} skaile.yaml file(s)`);
1032
- if (total === 0 && ws.total === 0 && totalErrors === 0 && !fs2.existsSync(path2.join(absPath, SKAILE_MANIFEST_FILENAME))) {
822
+ if (total === 0 && ws.total === 0 && totalErrors === 0 && !fs.existsSync(path.join(absPath, SKAILE_MANIFEST_FILENAME))) {
1033
823
  logErr(
1034
824
  `Nothing to validate in ${absPath}: no asset manifest, skaile.yaml or ${SKAILE_MANIFEST_FILENAME} found.`
1035
825
  );
@@ -1077,6 +867,6 @@ function makeValidateCommand() {
1077
867
  return cmd;
1078
868
  }
1079
869
 
1080
- export { isRecord, makeValidateCommand, scanIdentities };
1081
- //# sourceMappingURL=chunk-NMI2TWMH.js.map
1082
- //# sourceMappingURL=chunk-NMI2TWMH.js.map
870
+ export { makeValidateCommand, scanIdentities };
871
+ //# sourceMappingURL=chunk-IHFGPHCT.js.map
872
+ //# sourceMappingURL=chunk-IHFGPHCT.js.map