@skaile/workspaces 0.25.0 → 0.26.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 (510) hide show
  1. package/CHANGELOG.md +223 -0
  2. package/README.md +2 -2
  3. package/dist/{asset-feeds-77KLWCBP.js → asset-feeds-WMVTI7KW.js} +11 -10
  4. package/dist/asset-feeds-WMVTI7KW.js.map +1 -0
  5. package/dist/asset-manager/index.js +11 -10
  6. package/dist/asset-manager/installer.js +10 -9
  7. package/dist/asset-manager/renderers.js +2 -2
  8. package/dist/asset-manager/src/index.d.ts +6 -7
  9. package/dist/asset-manager/src/index.d.ts.map +1 -1
  10. package/dist/asset-manager/src/installer.d.ts.map +1 -1
  11. package/dist/bridge/drivers/claude-sdk.js +14 -7
  12. package/dist/bridge/drivers/claude-sdk.js.map +1 -1
  13. package/dist/bridge/drivers/codex.js +8 -34
  14. package/dist/bridge/drivers/codex.js.map +1 -1
  15. package/dist/bridge/drivers/echo.js +1 -1
  16. package/dist/bridge/drivers/omp.js +64 -50
  17. package/dist/bridge/drivers/omp.js.map +1 -1
  18. package/dist/bridge/index.js +4 -4
  19. package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
  20. package/dist/bridge/src/drivers/codex.d.ts.map +1 -1
  21. package/dist/bridge/src/drivers/omp.d.ts +20 -4
  22. package/dist/bridge/src/drivers/omp.d.ts.map +1 -1
  23. package/dist/bridge/src/error-classifier.d.ts +17 -0
  24. package/dist/bridge/src/error-classifier.d.ts.map +1 -1
  25. package/dist/bridge/src/models.d.ts +1 -1
  26. package/dist/bridge/src/models.d.ts.map +1 -1
  27. package/dist/bridge/src/provider-endpoints.d.ts +16 -0
  28. package/dist/bridge/src/provider-endpoints.d.ts.map +1 -0
  29. package/dist/bridge/src/validation.d.ts +1 -1
  30. package/dist/bridge/src/validation.d.ts.map +1 -1
  31. package/dist/{chunk-M5TE6YI5.js → chunk-23M4XZQW.js} +10 -52
  32. package/dist/chunk-23M4XZQW.js.map +1 -0
  33. package/dist/{chunk-GL45UNVS.js → chunk-2FS4FPZ7.js} +3 -3
  34. package/dist/{chunk-GL45UNVS.js.map → chunk-2FS4FPZ7.js.map} +1 -1
  35. package/dist/{chunk-6VTG73UY.js → chunk-45H3UO2R.js} +2 -2
  36. package/dist/{chunk-6VTG73UY.js.map → chunk-45H3UO2R.js.map} +1 -1
  37. package/dist/chunk-4SQ6Y6U7.js +28 -0
  38. package/dist/chunk-4SQ6Y6U7.js.map +1 -0
  39. package/dist/{chunk-LSGAYQ2E.js → chunk-5YO3H5Q4.js} +3 -3
  40. package/dist/{chunk-LSGAYQ2E.js.map → chunk-5YO3H5Q4.js.map} +1 -1
  41. package/dist/{chunk-JDX54X4Y.js → chunk-7GWYRVAX.js} +12 -9
  42. package/dist/chunk-7GWYRVAX.js.map +1 -0
  43. package/dist/{chunk-4FADEVBN.js → chunk-7OBGSR7O.js} +5 -5
  44. package/dist/chunk-7OBGSR7O.js.map +1 -0
  45. package/dist/{chunk-QXC62DOF.js → chunk-BKF3UFF4.js} +21 -9
  46. package/dist/chunk-BKF3UFF4.js.map +1 -0
  47. package/dist/{chunk-KOVLSBXK.js → chunk-BMQKMOQY.js} +81 -79
  48. package/dist/chunk-BMQKMOQY.js.map +1 -0
  49. package/dist/{chunk-4QVFQEY2.js → chunk-BQRRBGDE.js} +2 -2
  50. package/dist/{chunk-4QVFQEY2.js.map → chunk-BQRRBGDE.js.map} +1 -1
  51. package/dist/{chunk-UD4ZLXGS.js → chunk-C32BRO2W.js} +67 -35
  52. package/dist/chunk-C32BRO2W.js.map +1 -0
  53. package/dist/{chunk-GZWJGNNN.js → chunk-DEYYRFQU.js} +3 -3
  54. package/dist/chunk-DEYYRFQU.js.map +1 -0
  55. package/dist/{chunk-WIAHJOMG.js → chunk-IEJ5IOC3.js} +10 -2
  56. package/dist/chunk-IEJ5IOC3.js.map +1 -0
  57. package/dist/chunk-IERB3UXJ.js +215 -0
  58. package/dist/chunk-IERB3UXJ.js.map +1 -0
  59. package/dist/{chunk-FVTV7M76.js → chunk-IFGTRL2I.js} +3 -3
  60. package/dist/chunk-IFGTRL2I.js.map +1 -0
  61. package/dist/{chunk-KT3CK26V.js → chunk-JIQLLZ65.js} +203 -39
  62. package/dist/chunk-JIQLLZ65.js.map +1 -0
  63. package/dist/{chunk-XVL22AWE.js → chunk-KL2MQ6WI.js} +114 -63
  64. package/dist/chunk-KL2MQ6WI.js.map +1 -0
  65. package/dist/{chunk-6FNCZYJY.js → chunk-MBOR7D65.js} +3 -3
  66. package/dist/{chunk-6FNCZYJY.js.map → chunk-MBOR7D65.js.map} +1 -1
  67. package/dist/{chunk-QAVZOJCV.js → chunk-OVRSNIKJ.js} +2 -2
  68. package/dist/chunk-OVRSNIKJ.js.map +1 -0
  69. package/dist/{chunk-DQWREFRQ.js → chunk-PAYAFNXG.js} +22 -3
  70. package/dist/chunk-PAYAFNXG.js.map +1 -0
  71. package/dist/{chunk-D3VO6WNC.js → chunk-PRLD7EXG.js} +3 -3
  72. package/dist/chunk-PRLD7EXG.js.map +1 -0
  73. package/dist/{chunk-B4ZXBH57.js → chunk-PY7AQRGH.js} +59 -13
  74. package/dist/chunk-PY7AQRGH.js.map +1 -0
  75. package/dist/{chunk-NELZIQ2E.js → chunk-QDJKE557.js} +20 -3
  76. package/dist/chunk-QDJKE557.js.map +1 -0
  77. package/dist/{chunk-FJFHJBGS.js → chunk-QHXS3YDV.js} +9 -9
  78. package/dist/chunk-QHXS3YDV.js.map +1 -0
  79. package/dist/{chunk-DCAWIRD6.js → chunk-RTAIGPTF.js} +150 -104
  80. package/dist/chunk-RTAIGPTF.js.map +1 -0
  81. package/dist/{chunk-IPUYL6TD.js → chunk-TV72ZJYN.js} +8 -5
  82. package/dist/{chunk-IPUYL6TD.js.map → chunk-TV72ZJYN.js.map} +1 -1
  83. package/dist/{chunk-ICS76R4T.js → chunk-W7W66MDZ.js} +10 -8
  84. package/dist/chunk-W7W66MDZ.js.map +1 -0
  85. package/dist/{chunk-BJWUSHC4.js → chunk-WD4LP66U.js} +21 -20
  86. package/dist/chunk-WD4LP66U.js.map +1 -0
  87. package/dist/{chunk-4FJE6BI6.js → chunk-XGLGS5B4.js} +3 -3
  88. package/dist/{chunk-4FJE6BI6.js.map → chunk-XGLGS5B4.js.map} +1 -1
  89. package/dist/{chunk-XMP6XTMF.js → chunk-YDTW4GT6.js} +450 -207
  90. package/dist/chunk-YDTW4GT6.js.map +1 -0
  91. package/dist/{chunk-2XY6732A.js → chunk-YRU4WB6Y.js} +5 -5
  92. package/dist/chunk-YRU4WB6Y.js.map +1 -0
  93. package/dist/{chunk-3QTZWPGH.js → chunk-Z5DI7PDG.js} +141 -87
  94. package/dist/chunk-Z5DI7PDG.js.map +1 -0
  95. package/dist/{chunk-KLNL7QHN.js → chunk-ZAP2BDHG.js} +30 -5
  96. package/dist/chunk-ZAP2BDHG.js.map +1 -0
  97. package/dist/{chunk-GCJXPUHG.js → chunk-ZONCCO5N.js} +9 -4
  98. package/dist/chunk-ZONCCO5N.js.map +1 -0
  99. package/dist/{chunk-SETTLPBD.js → chunk-ZYDE52WE.js} +3 -3
  100. package/dist/{chunk-SETTLPBD.js.map → chunk-ZYDE52WE.js.map} +1 -1
  101. package/dist/cli/index.js +442 -415
  102. package/dist/cli/index.js.map +1 -1
  103. package/dist/cli/src/commands/complete-resolvers.d.ts.map +1 -1
  104. package/dist/cli/src/commands/config.d.ts.map +1 -1
  105. package/dist/cli/src/commands/connector.d.ts +7 -0
  106. package/dist/cli/src/commands/connector.d.ts.map +1 -1
  107. package/dist/cli/src/commands/flow.d.ts +3 -2
  108. package/dist/cli/src/commands/flow.d.ts.map +1 -1
  109. package/dist/cli/src/commands/npx.d.ts.map +1 -1
  110. package/dist/cli/src/commands/run.d.ts.map +1 -1
  111. package/dist/cli/src/flow-discovery.d.ts +24 -0
  112. package/dist/cli/src/flow-discovery.d.ts.map +1 -0
  113. package/dist/cli/src/open-registry.d.ts +2 -2
  114. package/dist/cli/src/paths.d.ts +26 -9
  115. package/dist/cli/src/paths.d.ts.map +1 -1
  116. package/dist/cli/src/skill-walker.d.ts +9 -5
  117. package/dist/cli/src/skill-walker.d.ts.map +1 -1
  118. package/dist/connectors/config.js +8 -7
  119. package/dist/connectors/index.js +13 -12
  120. package/dist/connectors/rclone-config.js +1 -1
  121. package/dist/connectors/src/connector-manager.d.ts +24 -2
  122. package/dist/connectors/src/connector-manager.d.ts.map +1 -1
  123. package/dist/connectors/src/connector-prompt.d.ts.map +1 -1
  124. package/dist/connectors/src/connector-registry.d.ts +3 -3
  125. package/dist/connectors/src/credential-helper-script.d.ts.map +1 -1
  126. package/dist/connectors/src/index.d.ts +4 -2
  127. package/dist/connectors/src/index.d.ts.map +1 -1
  128. package/dist/connectors/src/managed-gitconfig.d.ts.map +1 -1
  129. package/dist/connectors/src/mount-placeholder.d.ts +68 -0
  130. package/dist/connectors/src/mount-placeholder.d.ts.map +1 -0
  131. package/dist/connectors/src/rclone-config/googledrive.d.ts +1 -1
  132. package/dist/core/discovery.js +1 -1
  133. package/dist/core/index.js +7 -6
  134. package/dist/core/manifest.js +2 -2
  135. package/dist/core/models.js +1 -1
  136. package/dist/core/publish-manifest.d.ts +2 -0
  137. package/dist/core/publish-manifest.js +5 -0
  138. package/dist/core/publish-manifest.js.map +1 -0
  139. package/dist/core/runtime-assets.js +5 -4
  140. package/dist/core/src/discovery.d.ts +27 -0
  141. package/dist/core/src/discovery.d.ts.map +1 -1
  142. package/dist/core/src/index.d.ts +8 -5
  143. package/dist/core/src/index.d.ts.map +1 -1
  144. package/dist/core/src/lock.d.ts.map +1 -1
  145. package/dist/core/src/manifest-yaml-editor.d.ts +62 -0
  146. package/dist/core/src/manifest-yaml-editor.d.ts.map +1 -0
  147. package/dist/core/src/models.d.ts +6 -0
  148. package/dist/core/src/models.d.ts.map +1 -1
  149. package/dist/core/src/publish-manifest.d.ts +160 -0
  150. package/dist/core/src/publish-manifest.d.ts.map +1 -0
  151. package/dist/core/src/repo-manager.d.ts +9 -1
  152. package/dist/core/src/repo-manager.d.ts.map +1 -1
  153. package/dist/core/src/runtime-assets.d.ts +80 -29
  154. package/dist/core/src/runtime-assets.d.ts.map +1 -1
  155. package/dist/core/src/walker.d.ts +19 -6
  156. package/dist/core/src/walker.d.ts.map +1 -1
  157. package/dist/core/src/workspace-config.d.ts +9 -36
  158. package/dist/core/src/workspace-config.d.ts.map +1 -1
  159. package/dist/core/src/workspace-yaml-editor.d.ts +1 -15
  160. package/dist/core/src/workspace-yaml-editor.d.ts.map +1 -1
  161. package/dist/core/workspace-config.js +4 -3
  162. package/dist/deploy/index.js +50 -79
  163. package/dist/deploy/index.js.map +1 -1
  164. package/dist/deploy/src/targets/container-runtime.d.ts +1 -1
  165. package/dist/deploy/src/targets/container-runtime.d.ts.map +1 -1
  166. package/dist/deploy/src/targets/local.d.ts.map +1 -1
  167. package/dist/deploy/src/targets/nix.d.ts.map +1 -1
  168. package/dist/deploy/src/targets/process-handle.d.ts +7 -5
  169. package/dist/deploy/src/targets/process-handle.d.ts.map +1 -1
  170. package/dist/discovery/index.js +5 -4
  171. package/dist/discovery/src/discover-manifest.d.ts +3 -2
  172. package/dist/discovery/src/discover-manifest.d.ts.map +1 -1
  173. package/dist/discovery/src/discover.d.ts +2 -2
  174. package/dist/discovery/src/discover.d.ts.map +1 -1
  175. package/dist/discovery/src/index.d.ts +1 -1
  176. package/dist/discovery/src/index.d.ts.map +1 -1
  177. package/dist/discovery/src/source-config.d.ts +53 -12
  178. package/dist/discovery/src/source-config.d.ts.map +1 -1
  179. package/dist/discovery/src/tree-entries.d.ts +2 -2
  180. package/dist/discovery/src/tree-entries.d.ts.map +1 -1
  181. package/dist/{ensure-sources-7MOOKY3K.js → ensure-sources-CVULUVH4.js} +12 -11
  182. package/dist/ensure-sources-CVULUVH4.js.map +1 -0
  183. package/dist/factory-assets/.skaile-source.yaml +6 -0
  184. package/dist/factory-assets/README.md +36 -0
  185. package/dist/factory-assets/bundles/workspaces-authoring/workspaces-authoring.bundle.yaml +9 -0
  186. package/dist/factory-assets/connectors/deploy/CONNECTOR.md +41 -0
  187. package/dist/{base-assets → factory-assets}/connectors/deploy/adapter.d.ts +2 -2
  188. package/dist/factory-assets/connectors/deploy/adapter.d.ts.map +1 -0
  189. package/dist/factory-assets/connectors/deploy.js +22 -0
  190. package/dist/factory-assets/connectors/devserver/CONNECTOR.md +44 -0
  191. package/dist/{base-assets → factory-assets}/connectors/devserver/adapter.d.ts +2 -2
  192. package/dist/factory-assets/connectors/devserver/adapter.d.ts.map +1 -0
  193. package/dist/factory-assets/connectors/devserver.js +22 -0
  194. package/dist/factory-assets/connectors/flow/CONNECTOR.md +47 -0
  195. package/dist/{base-assets → factory-assets}/connectors/flow/adapter.d.ts +2 -2
  196. package/dist/factory-assets/connectors/flow/adapter.d.ts.map +1 -0
  197. package/dist/factory-assets/connectors/flow/adapter.js +22 -0
  198. package/dist/factory-assets/connectors/flow/engine/engine.d.ts.map +1 -0
  199. package/dist/{base-assets → factory-assets}/connectors/flow/engine/flow-kind-provider.d.ts +1 -1
  200. package/dist/factory-assets/connectors/flow/engine/flow-kind-provider.d.ts.map +1 -0
  201. package/dist/factory-assets/connectors/flow/engine/flow-manifest.d.ts.map +1 -0
  202. package/dist/factory-assets/connectors/flow/engine/index.d.ts.map +1 -0
  203. package/dist/factory-assets/connectors/flow/engine/loader.d.ts.map +1 -0
  204. package/dist/factory-assets/connectors/flow/engine/types.d.ts.map +1 -0
  205. package/dist/factory-assets/connectors/flow/engine.js +15 -0
  206. package/dist/factory-assets/connectors/flow/index.d.ts.map +1 -0
  207. package/dist/{base-assets → factory-assets}/connectors/flow/prompt-fragments.d.ts +5 -5
  208. package/dist/factory-assets/connectors/flow/prompt-fragments.d.ts.map +1 -0
  209. package/dist/{base-assets → factory-assets}/connectors/flow/prompt-fragments.js +1 -1
  210. package/dist/{base-assets → factory-assets}/connectors/flow/run-flow.d.ts +8 -8
  211. package/dist/factory-assets/connectors/flow/run-flow.d.ts.map +1 -0
  212. package/dist/factory-assets/connectors/flow/run-flow.js +25 -0
  213. package/dist/{base-assets → factory-assets}/connectors/flow/stimulus-driver.d.ts +2 -2
  214. package/dist/factory-assets/connectors/flow/stimulus-driver.d.ts.map +1 -0
  215. package/dist/factory-assets/connectors/flow/stimulus-driver.js +4 -0
  216. package/dist/factory-assets/connectors/flow.js +22 -0
  217. package/dist/factory-assets/connectors/git/CONNECTOR.md +145 -0
  218. package/dist/{base-assets → factory-assets}/connectors/git/driver.d.ts +2 -2
  219. package/dist/factory-assets/connectors/git/driver.d.ts.map +1 -0
  220. package/dist/factory-assets/connectors/git.js +22 -0
  221. package/dist/factory-assets/connectors/gmail/CONNECTOR.md +50 -0
  222. package/dist/{base-assets → factory-assets}/connectors/gmail/adapter.d.ts +2 -2
  223. package/dist/factory-assets/connectors/gmail/adapter.d.ts.map +1 -0
  224. package/dist/factory-assets/connectors/gmail.js +22 -0
  225. package/dist/factory-assets/connectors/googledrive/CONNECTOR.md +150 -0
  226. package/dist/{base-assets → factory-assets}/connectors/googledrive/driver.d.ts +2 -2
  227. package/dist/factory-assets/connectors/googledrive/driver.d.ts.map +1 -0
  228. package/dist/factory-assets/connectors/googledrive.js +22 -0
  229. package/dist/factory-assets/connectors/local/CONNECTOR.md +40 -0
  230. package/dist/{base-assets → factory-assets}/connectors/local/driver.d.ts +2 -2
  231. package/dist/factory-assets/connectors/local/driver.d.ts.map +1 -0
  232. package/dist/factory-assets/connectors/local.js +22 -0
  233. package/dist/factory-assets/connectors/mattermost/CONNECTOR.md +65 -0
  234. package/dist/{base-assets → factory-assets}/connectors/mattermost/adapter.d.ts +2 -2
  235. package/dist/factory-assets/connectors/mattermost/adapter.d.ts.map +1 -0
  236. package/dist/factory-assets/connectors/mattermost.js +22 -0
  237. package/dist/factory-assets/connectors/memory/CONNECTOR.md +40 -0
  238. package/dist/{base-assets → factory-assets}/connectors/memory/adapter.d.ts +2 -2
  239. package/dist/factory-assets/connectors/memory/adapter.d.ts.map +1 -0
  240. package/dist/factory-assets/connectors/memory.js +22 -0
  241. package/dist/factory-assets/connectors/minio/CONNECTOR.md +68 -0
  242. package/dist/{base-assets → factory-assets}/connectors/minio/adapter.d.ts +2 -2
  243. package/dist/factory-assets/connectors/minio/adapter.d.ts.map +1 -0
  244. package/dist/factory-assets/connectors/minio.js +22 -0
  245. package/dist/factory-assets/connectors/postgres/CONNECTOR.md +46 -0
  246. package/dist/{base-assets → factory-assets}/connectors/postgres/adapter.d.ts +2 -2
  247. package/dist/factory-assets/connectors/postgres/adapter.d.ts.map +1 -0
  248. package/dist/factory-assets/connectors/postgres.js +22 -0
  249. package/dist/factory-assets/connectors/s3/CONNECTOR.md +76 -0
  250. package/dist/{base-assets → factory-assets}/connectors/s3/driver.d.ts +2 -2
  251. package/dist/factory-assets/connectors/s3/driver.d.ts.map +1 -0
  252. package/dist/factory-assets/connectors/s3.js +22 -0
  253. package/dist/factory-assets/connectors/sharepoint/CONNECTOR.md +181 -0
  254. package/dist/{base-assets → factory-assets}/connectors/sharepoint/driver.d.ts +2 -2
  255. package/dist/factory-assets/connectors/sharepoint/driver.d.ts.map +1 -0
  256. package/dist/factory-assets/connectors/sharepoint.js +22 -0
  257. package/dist/factory-assets/connectors/sqlite/CONNECTOR.md +44 -0
  258. package/dist/{base-assets → factory-assets}/connectors/sqlite/adapter.d.ts +2 -2
  259. package/dist/factory-assets/connectors/sqlite/adapter.d.ts.map +1 -0
  260. package/dist/factory-assets/connectors/sqlite.js +22 -0
  261. package/dist/factory-assets/connectors/static-server/CONNECTOR.md +41 -0
  262. package/dist/{base-assets → factory-assets}/connectors/static-server/adapter.d.ts +2 -2
  263. package/dist/factory-assets/connectors/static-server/adapter.d.ts.map +1 -0
  264. package/dist/factory-assets/connectors/static-server.js +22 -0
  265. package/dist/factory-assets/connectors/tunnel/CONNECTOR.md +40 -0
  266. package/dist/{base-assets → factory-assets}/connectors/tunnel/adapter.d.ts +2 -2
  267. package/dist/factory-assets/connectors/tunnel/adapter.d.ts.map +1 -0
  268. package/dist/factory-assets/connectors/tunnel.js +22 -0
  269. package/dist/factory-assets/connectors/webdav/CONNECTOR.md +139 -0
  270. package/dist/{base-assets → factory-assets}/connectors/webdav/driver.d.ts +2 -2
  271. package/dist/factory-assets/connectors/webdav/driver.d.ts.map +1 -0
  272. package/dist/factory-assets/connectors/webdav.js +22 -0
  273. package/dist/factory-assets/connectors/xstate/CONNECTOR.md +57 -0
  274. package/dist/{base-assets → factory-assets}/connectors/xstate/adapter.d.ts +2 -2
  275. package/dist/factory-assets/connectors/xstate/adapter.d.ts.map +1 -0
  276. package/dist/factory-assets/connectors/xstate-store/CONNECTOR.md +48 -0
  277. package/dist/{base-assets → factory-assets}/connectors/xstate-store/adapter.d.ts +2 -2
  278. package/dist/factory-assets/connectors/xstate-store/adapter.d.ts.map +1 -0
  279. package/dist/factory-assets/connectors/xstate-store.js +22 -0
  280. package/dist/factory-assets/connectors/xstate.js +22 -0
  281. package/dist/{base-assets → factory-assets}/index.d.ts +1 -1
  282. package/dist/factory-assets/index.d.ts.map +1 -0
  283. package/dist/{base-assets → factory-assets}/index.js +1 -1
  284. package/dist/factory-assets/index.js.map +1 -0
  285. package/dist/factory-assets/skaile.manifest.yaml +25 -0
  286. package/dist/factory-assets/skills/authoring-skaile-assets/SKILL.md +176 -0
  287. package/dist/factory-assets/skills/authoring-skaile-manifests/SKILL.md +243 -0
  288. package/dist/factory-assets/skills/authoring-skaile-manifests/references/dependency-standard.md +197 -0
  289. package/dist/factory-assets/skills/manifest-compliance/SKILL.md +140 -0
  290. package/dist/factory-assets/skills/skaile-author-asset/SKILL.md +239 -0
  291. package/dist/factory-assets/skills/skaile-manage-workspace/SKILL.md +168 -0
  292. package/dist/{flows-DYFTPCPM.js → flows-JZFJD5IN.js} +3 -3
  293. package/dist/{flows-DYFTPCPM.js.map → flows-JZFJD5IN.js.map} +1 -1
  294. package/dist/library/index.js +10 -9
  295. package/dist/library/src/library.d.ts +2 -0
  296. package/dist/library/src/library.d.ts.map +1 -1
  297. package/dist/library/src/local/library.d.ts +2 -0
  298. package/dist/library/src/local/library.d.ts.map +1 -1
  299. package/dist/library/src/local/local-catalog-source.d.ts +2 -1
  300. package/dist/library/src/local/local-catalog-source.d.ts.map +1 -1
  301. package/dist/library/src/local/sidecar-paths.d.ts +4 -4
  302. package/dist/library/src/local/sidecar-paths.d.ts.map +1 -1
  303. package/dist/library/src/local/store-paths.d.ts +4 -3
  304. package/dist/library/src/local/store-paths.d.ts.map +1 -1
  305. package/dist/library/src/pin-resolver.d.ts.map +1 -1
  306. package/dist/library/src/preset/apply.d.ts.map +1 -1
  307. package/dist/library/src/preset/placeholders.d.ts.map +1 -1
  308. package/dist/library/src/remote/remote-catalog-source.d.ts +7 -0
  309. package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
  310. package/dist/library/src/remote/rest-catalog-source.d.ts +7 -0
  311. package/dist/library/src/remote/rest-catalog-source.d.ts.map +1 -1
  312. package/dist/library/src/sync/manifest-writeback.d.ts +1 -1
  313. package/dist/library/src/sync/manifest-writeback.d.ts.map +1 -1
  314. package/dist/open-library-WYASW4BH.js +22 -0
  315. package/dist/{open-library-GW7DWWNZ.js.map → open-library-WYASW4BH.js.map} +1 -1
  316. package/dist/paths-BMW6JYW6.js +15 -0
  317. package/dist/{paths-FKKGS6BA.js.map → paths-BMW6JYW6.js.map} +1 -1
  318. package/dist/{plugin-store-R32NH7JE.js → plugin-store-O5VR45CA.js} +9 -8
  319. package/dist/plugin-store-O5VR45CA.js.map +1 -0
  320. package/dist/plugins/src/asset-kind-provider.d.ts +1 -1
  321. package/dist/plugins/src/catalog-source.d.ts +13 -0
  322. package/dist/plugins/src/catalog-source.d.ts.map +1 -1
  323. package/dist/resolver/index.js +1 -1
  324. package/dist/resolver/src/parser.d.ts.map +1 -1
  325. package/dist/runner/index.js +20 -19
  326. package/dist/runner/src/capability-registry.d.ts +1 -1
  327. package/dist/runner/src/capability-registry.d.ts.map +1 -1
  328. package/dist/runner/src/resource-handler.d.ts.map +1 -1
  329. package/dist/runner/src/resources.d.ts +1 -1
  330. package/dist/runner/src/serve.d.ts.map +1 -1
  331. package/dist/runner/src/workspace-migration.d.ts.map +1 -1
  332. package/dist/sdk/asset-manager.js +11 -10
  333. package/dist/sdk/bridge.js +4 -4
  334. package/dist/sdk/core.js +7 -6
  335. package/dist/sdk/flow.js +12 -1
  336. package/dist/sdk/index.js +23 -22
  337. package/dist/sdk/index.js.map +1 -1
  338. package/dist/sdk/resolver.js +1 -1
  339. package/dist/sdk/runner.js +20 -19
  340. package/dist/sdk/session.js +1 -1
  341. package/dist/sdk/src/flow/index.d.ts +1 -1
  342. package/dist/sdk/src/flow/index.d.ts.map +1 -1
  343. package/dist/sdk/src/workspace.d.ts +3 -2
  344. package/dist/sdk/src/workspace.d.ts.map +1 -1
  345. package/dist/sdk/telemetry.js +1 -1
  346. package/dist/secrets/index.js +1 -1
  347. package/dist/secrets/src/providers/env.d.ts.map +1 -1
  348. package/dist/secrets/src/providers/local.d.ts.map +1 -1
  349. package/dist/session/index.js +1 -1
  350. package/dist/session/src/mentions.d.ts.map +1 -1
  351. package/dist/{setup-SRPBQOHY.js → setup-YNLFR5GB.js} +13 -12
  352. package/dist/setup-YNLFR5GB.js.map +1 -0
  353. package/dist/skills-6HJ3WINN.js +7 -0
  354. package/dist/{skills-CRL3VJNN.js.map → skills-6HJ3WINN.js.map} +1 -1
  355. package/dist/store-client-CENBEASX.js +15 -0
  356. package/dist/{store-client-INZD2RYD.js.map → store-client-CENBEASX.js.map} +1 -1
  357. package/dist/telemetry/index.js +1 -1
  358. package/dist/telemetry/src/config.d.ts +0 -16
  359. package/dist/telemetry/src/config.d.ts.map +1 -1
  360. package/dist/tui/index.js +20 -19
  361. package/dist/tui/index.js.map +1 -1
  362. package/dist/types/manifests.js +1 -1
  363. package/dist/types/src/flow.d.ts +2 -2
  364. package/dist/types/src/manifests/index.d.ts +1 -1
  365. package/dist/types/src/manifests/skill.d.ts +21 -0
  366. package/dist/types/src/manifests/skill.d.ts.map +1 -1
  367. package/dist/workspace-plugin/adapters/mcp.js +4 -4
  368. package/dist/workspace-plugin/adapters/omp.js +7 -7
  369. package/dist/workspace-plugin/index.js +1 -1
  370. package/dist/workspace-plugin/src/tools/flows.d.ts.map +1 -1
  371. package/package.json +158 -151
  372. package/dist/asset-feeds-77KLWCBP.js.map +0 -1
  373. package/dist/base-assets/connectors/deploy/adapter.d.ts.map +0 -1
  374. package/dist/base-assets/connectors/deploy.js +0 -21
  375. package/dist/base-assets/connectors/devserver/adapter.d.ts.map +0 -1
  376. package/dist/base-assets/connectors/devserver.js +0 -21
  377. package/dist/base-assets/connectors/flow/adapter.d.ts.map +0 -1
  378. package/dist/base-assets/connectors/flow/adapter.js +0 -21
  379. package/dist/base-assets/connectors/flow/engine/engine.d.ts.map +0 -1
  380. package/dist/base-assets/connectors/flow/engine/flow-kind-provider.d.ts.map +0 -1
  381. package/dist/base-assets/connectors/flow/engine/flow-manifest.d.ts.map +0 -1
  382. package/dist/base-assets/connectors/flow/engine/index.d.ts.map +0 -1
  383. package/dist/base-assets/connectors/flow/engine/loader.d.ts.map +0 -1
  384. package/dist/base-assets/connectors/flow/engine/types.d.ts.map +0 -1
  385. package/dist/base-assets/connectors/flow/engine.js +0 -4
  386. package/dist/base-assets/connectors/flow/index.d.ts.map +0 -1
  387. package/dist/base-assets/connectors/flow/prompt-fragments.d.ts.map +0 -1
  388. package/dist/base-assets/connectors/flow/run-flow.d.ts.map +0 -1
  389. package/dist/base-assets/connectors/flow/run-flow.js +0 -24
  390. package/dist/base-assets/connectors/flow/stimulus-driver.d.ts.map +0 -1
  391. package/dist/base-assets/connectors/flow/stimulus-driver.js +0 -4
  392. package/dist/base-assets/connectors/flow.js +0 -21
  393. package/dist/base-assets/connectors/git/driver.d.ts.map +0 -1
  394. package/dist/base-assets/connectors/git.js +0 -21
  395. package/dist/base-assets/connectors/gmail/adapter.d.ts.map +0 -1
  396. package/dist/base-assets/connectors/gmail.js +0 -21
  397. package/dist/base-assets/connectors/googledrive/driver.d.ts.map +0 -1
  398. package/dist/base-assets/connectors/googledrive.js +0 -21
  399. package/dist/base-assets/connectors/local/driver.d.ts.map +0 -1
  400. package/dist/base-assets/connectors/local.js +0 -21
  401. package/dist/base-assets/connectors/mattermost/adapter.d.ts.map +0 -1
  402. package/dist/base-assets/connectors/mattermost.js +0 -21
  403. package/dist/base-assets/connectors/memory/adapter.d.ts.map +0 -1
  404. package/dist/base-assets/connectors/memory.js +0 -21
  405. package/dist/base-assets/connectors/minio/adapter.d.ts.map +0 -1
  406. package/dist/base-assets/connectors/minio.js +0 -21
  407. package/dist/base-assets/connectors/postgres/adapter.d.ts.map +0 -1
  408. package/dist/base-assets/connectors/postgres.js +0 -21
  409. package/dist/base-assets/connectors/s3/driver.d.ts.map +0 -1
  410. package/dist/base-assets/connectors/s3.js +0 -21
  411. package/dist/base-assets/connectors/sharepoint/driver.d.ts.map +0 -1
  412. package/dist/base-assets/connectors/sharepoint.js +0 -21
  413. package/dist/base-assets/connectors/sqlite/adapter.d.ts.map +0 -1
  414. package/dist/base-assets/connectors/sqlite.js +0 -21
  415. package/dist/base-assets/connectors/static-server/adapter.d.ts.map +0 -1
  416. package/dist/base-assets/connectors/static-server.js +0 -21
  417. package/dist/base-assets/connectors/tunnel/adapter.d.ts.map +0 -1
  418. package/dist/base-assets/connectors/tunnel.js +0 -21
  419. package/dist/base-assets/connectors/webdav/driver.d.ts.map +0 -1
  420. package/dist/base-assets/connectors/webdav.js +0 -21
  421. package/dist/base-assets/connectors/xstate/adapter.d.ts.map +0 -1
  422. package/dist/base-assets/connectors/xstate-store/adapter.d.ts.map +0 -1
  423. package/dist/base-assets/connectors/xstate-store.js +0 -21
  424. package/dist/base-assets/connectors/xstate.js +0 -21
  425. package/dist/base-assets/index.d.ts.map +0 -1
  426. package/dist/base-assets/index.js.map +0 -1
  427. package/dist/chunk-2M3XTMOL.js +0 -23
  428. package/dist/chunk-2M3XTMOL.js.map +0 -1
  429. package/dist/chunk-2XY6732A.js.map +0 -1
  430. package/dist/chunk-3QTZWPGH.js.map +0 -1
  431. package/dist/chunk-4FADEVBN.js.map +0 -1
  432. package/dist/chunk-B4ZXBH57.js.map +0 -1
  433. package/dist/chunk-BJWUSHC4.js.map +0 -1
  434. package/dist/chunk-D3VO6WNC.js.map +0 -1
  435. package/dist/chunk-DCAWIRD6.js.map +0 -1
  436. package/dist/chunk-DQWREFRQ.js.map +0 -1
  437. package/dist/chunk-FJFHJBGS.js.map +0 -1
  438. package/dist/chunk-FVTV7M76.js.map +0 -1
  439. package/dist/chunk-GCJXPUHG.js.map +0 -1
  440. package/dist/chunk-GZWJGNNN.js.map +0 -1
  441. package/dist/chunk-ICS76R4T.js.map +0 -1
  442. package/dist/chunk-JDX54X4Y.js.map +0 -1
  443. package/dist/chunk-KLNL7QHN.js.map +0 -1
  444. package/dist/chunk-KOVLSBXK.js.map +0 -1
  445. package/dist/chunk-KT3CK26V.js.map +0 -1
  446. package/dist/chunk-M5TE6YI5.js.map +0 -1
  447. package/dist/chunk-NELZIQ2E.js.map +0 -1
  448. package/dist/chunk-QAVZOJCV.js.map +0 -1
  449. package/dist/chunk-QXC62DOF.js.map +0 -1
  450. package/dist/chunk-UD4ZLXGS.js.map +0 -1
  451. package/dist/chunk-WIAHJOMG.js.map +0 -1
  452. package/dist/chunk-XMP6XTMF.js.map +0 -1
  453. package/dist/chunk-XVL22AWE.js.map +0 -1
  454. package/dist/ensure-sources-7MOOKY3K.js.map +0 -1
  455. package/dist/open-library-GW7DWWNZ.js +0 -21
  456. package/dist/paths-FKKGS6BA.js +0 -4
  457. package/dist/plugin-store-R32NH7JE.js.map +0 -1
  458. package/dist/setup-SRPBQOHY.js.map +0 -1
  459. package/dist/skills-CRL3VJNN.js +0 -7
  460. package/dist/store-client-INZD2RYD.js +0 -14
  461. /package/dist/{base-assets → factory-assets}/connectors/deploy.d.ts +0 -0
  462. /package/dist/{base-assets → factory-assets}/connectors/deploy.js.map +0 -0
  463. /package/dist/{base-assets → factory-assets}/connectors/devserver.d.ts +0 -0
  464. /package/dist/{base-assets → factory-assets}/connectors/devserver.js.map +0 -0
  465. /package/dist/{base-assets → factory-assets}/connectors/flow/adapter.js.map +0 -0
  466. /package/dist/{base-assets → factory-assets}/connectors/flow/engine/engine.d.ts +0 -0
  467. /package/dist/{base-assets → factory-assets}/connectors/flow/engine/flow-manifest.d.ts +0 -0
  468. /package/dist/{base-assets → factory-assets}/connectors/flow/engine/index.d.ts +0 -0
  469. /package/dist/{base-assets → factory-assets}/connectors/flow/engine/loader.d.ts +0 -0
  470. /package/dist/{base-assets → factory-assets}/connectors/flow/engine/types.d.ts +0 -0
  471. /package/dist/{base-assets → factory-assets}/connectors/flow/engine.d.ts +0 -0
  472. /package/dist/{base-assets → factory-assets}/connectors/flow/engine.js.map +0 -0
  473. /package/dist/{base-assets → factory-assets}/connectors/flow/index.d.ts +0 -0
  474. /package/dist/{base-assets → factory-assets}/connectors/flow/prompt-fragments.js.map +0 -0
  475. /package/dist/{base-assets → factory-assets}/connectors/flow/run-flow.js.map +0 -0
  476. /package/dist/{base-assets → factory-assets}/connectors/flow/stimulus-driver.js.map +0 -0
  477. /package/dist/{base-assets → factory-assets}/connectors/flow.d.ts +0 -0
  478. /package/dist/{base-assets → factory-assets}/connectors/flow.js.map +0 -0
  479. /package/dist/{base-assets → factory-assets}/connectors/git.d.ts +0 -0
  480. /package/dist/{base-assets → factory-assets}/connectors/git.js.map +0 -0
  481. /package/dist/{base-assets → factory-assets}/connectors/gmail.d.ts +0 -0
  482. /package/dist/{base-assets → factory-assets}/connectors/gmail.js.map +0 -0
  483. /package/dist/{base-assets → factory-assets}/connectors/googledrive.d.ts +0 -0
  484. /package/dist/{base-assets → factory-assets}/connectors/googledrive.js.map +0 -0
  485. /package/dist/{base-assets → factory-assets}/connectors/local.d.ts +0 -0
  486. /package/dist/{base-assets → factory-assets}/connectors/local.js.map +0 -0
  487. /package/dist/{base-assets → factory-assets}/connectors/mattermost.d.ts +0 -0
  488. /package/dist/{base-assets → factory-assets}/connectors/mattermost.js.map +0 -0
  489. /package/dist/{base-assets → factory-assets}/connectors/memory.d.ts +0 -0
  490. /package/dist/{base-assets → factory-assets}/connectors/memory.js.map +0 -0
  491. /package/dist/{base-assets → factory-assets}/connectors/minio.d.ts +0 -0
  492. /package/dist/{base-assets → factory-assets}/connectors/minio.js.map +0 -0
  493. /package/dist/{base-assets → factory-assets}/connectors/postgres.d.ts +0 -0
  494. /package/dist/{base-assets → factory-assets}/connectors/postgres.js.map +0 -0
  495. /package/dist/{base-assets → factory-assets}/connectors/s3.d.ts +0 -0
  496. /package/dist/{base-assets → factory-assets}/connectors/s3.js.map +0 -0
  497. /package/dist/{base-assets → factory-assets}/connectors/sharepoint.d.ts +0 -0
  498. /package/dist/{base-assets → factory-assets}/connectors/sharepoint.js.map +0 -0
  499. /package/dist/{base-assets → factory-assets}/connectors/sqlite.d.ts +0 -0
  500. /package/dist/{base-assets → factory-assets}/connectors/sqlite.js.map +0 -0
  501. /package/dist/{base-assets → factory-assets}/connectors/static-server.d.ts +0 -0
  502. /package/dist/{base-assets → factory-assets}/connectors/static-server.js.map +0 -0
  503. /package/dist/{base-assets → factory-assets}/connectors/tunnel.d.ts +0 -0
  504. /package/dist/{base-assets → factory-assets}/connectors/tunnel.js.map +0 -0
  505. /package/dist/{base-assets → factory-assets}/connectors/webdav.d.ts +0 -0
  506. /package/dist/{base-assets → factory-assets}/connectors/webdav.js.map +0 -0
  507. /package/dist/{base-assets → factory-assets}/connectors/xstate-store.d.ts +0 -0
  508. /package/dist/{base-assets → factory-assets}/connectors/xstate-store.js.map +0 -0
  509. /package/dist/{base-assets → factory-assets}/connectors/xstate.d.ts +0 -0
  510. /package/dist/{base-assets → factory-assets}/connectors/xstate.js.map +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../core/src/publish-manifest.ts"],"names":[],"mappings":"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","file":"chunk-IERB3UXJ.js","sourcesContent":["/**\n * Publish manifest — `skaile.manifest.yaml`\n *\n * What a repo PUBLISHES: the `publisher` / `version` / `assets[]` that used to\n * live in the publication half of `skaile.yaml`, plus a per-asset dependency\n * graph, store-listing metadata, and an optional curator `source:` pointer.\n *\n * ── Two files, two codecs ──────────────────────────────────────────────────\n *\n * skaile.yaml → SkWorkspaceConfig (workspace + consumption)\n * skaile.manifest.yaml → SkPublishManifest (publication) ← this module\n *\n * A repo can have either file, both, or neither: a pure workspace has only\n * `skaile.yaml`; a pure asset repo (e.g. `ai-assets`) has only\n * `skaile.manifest.yaml`; a repo that is both has both.\n *\n * ── One format, three roles ────────────────────────────────────────────────\n *\n * First-party `source:` absent → bytes live in this repo (`root`/`files`).\n * Curator/sidecar `source:` present → bytes come from the referenced upstream,\n * verified by `sha256`.\n *\n * `decodeSkaileManifest` mirrors `decodeSkaileYaml`: total (never throws),\n * returns {@link Diagnostic}s. Dep-ref strings are validated with `parseAssetRef`.\n */\n\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport { parse, stringify } from \"yaml\";\nimport { parseAssetRef } from \"./models.js\";\nimport type { Diagnostic } from \"./workspace-config.js\";\n\n// ── Types ───────────────────────────────────────────────────────────────────\n\n/** One file inside a curated asset, pinned to an exact upstream blob hash. */\nexport interface ManifestFileEntry {\n path: string;\n /** 64-hex sha256 of the upstream blob. */\n sha256: string;\n}\n\n/**\n * One entry in a manifest's `assets:` list. Either `root:` (recursive walk) or\n * `files:` (explicit list, supports globs for first-party; the granular\n * `{path, sha256}` form for curated upstream verification) declares which paths\n * constitute the asset. `version:` overrides the manifest-level version.\n *\n * @docLink packages/core/publish-manifest#asset-entry\n */\nexport interface AssetEntry {\n kind: string;\n name: string;\n root?: string;\n /**\n * Explicit file listing. First-party manifests use bare `string[]` (globs,\n * fast-glob). Curated entries may use the granular `{path, sha256}` form so\n * the resolver fetches + verifies exact upstream blobs without a full clone.\n */\n files?: string[] | ManifestFileEntry[];\n version?: string;\n /** Per-asset publisher override (e.g. for curator/mirror repos). */\n publisher?: string;\n\n /**\n * Canonical dep refs (`kind:@<publisher>/name[#version]`) — same grammar as\n * `SkWorkspaceConfig.dependencies`. Authoritative for this asset's resolved\n * deps. (Was `requires` in `.skaile-source.yaml`.)\n */\n dependencies?: string[];\n\n /**\n * Author-pinned composite sha256 over the asset's `files`/`root` (same\n * deterministic algorithm as the walker + discovery). Optional locally;\n * REQUIRED on store publish. (Was `.skaile-source.yaml` `assets[].sha256`.)\n */\n sha256?: string;\n\n /**\n * Curator override: this single asset's bytes come from a different upstream\n * than the manifest-level `source`. Absent → inherit manifest `source` (or\n * first-party when that is also absent).\n */\n source?: ManifestSource;\n\n // ── Store-listing metadata (all optional; fall back to content frontmatter) ──\n description?: string;\n keywords?: string[];\n category?: string;\n license?: string;\n homepage?: string;\n}\n\n/**\n * Upstream the bytes come from when a manifest curates a repo it does not own.\n * Absent → first-party (bytes live in the manifest's own repo).\n *\n * @docLink packages/core/publish-manifest#manifest-source\n */\nexport interface ManifestSource {\n url: string;\n /** 40-char commit the curated bytes are pinned to. */\n commit?: string;\n}\n\n/**\n * Signing/attribution recorded when a manifest is published on behalf of others.\n *\n * @docLink packages/core/publish-manifest#manifest-provenance\n */\nexport interface ManifestProvenance {\n curator: string;\n signed_by?: string;\n}\n\n/**\n * Parsed `skaile.manifest.yaml` — what a repo publishes.\n *\n * @docLink packages/core/publish-manifest#sk-publish-manifest\n */\nexport interface SkPublishManifest {\n publisher?: string;\n version?: string;\n /** Repo-level store defaults inherited by assets unless overridden per-entry. */\n license?: string;\n homepage?: string;\n /**\n * Repo-relative path prefixes holding dev-only assets — excluded from\n * discovery/publish unless `--dev`. (Was `.skaile-source.yaml` `dev_paths`.)\n */\n dev_paths?: string[];\n /**\n * Curator mode: the single upstream all assets in this file come from. A\n * per-asset `source` overrides it. Absent → first-party (own repo).\n */\n source?: ManifestSource;\n /** Present when this manifest is curated/published on behalf of another author. */\n provenance?: ManifestProvenance;\n assets?: AssetEntry[];\n}\n\n/** Result of {@link decodeSkaileManifest}: the manifest plus any notes. */\nexport interface ManifestDecodeResult {\n manifest: SkPublishManifest;\n diagnostics: Diagnostic[];\n}\n\n/** The single fixed filename for a publish manifest. */\nexport const SKAILE_MANIFEST_FILENAME = \"skaile.manifest.yaml\";\n\n// ── Decode ──────────────────────────────────────────────────────────────────\n\nfunction parseSource(raw: unknown): ManifestSource | undefined {\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return undefined;\n const s = raw as Record<string, unknown>;\n if (typeof s.url !== \"string\" || s.url.length === 0) return undefined;\n const out: ManifestSource = { url: s.url };\n if (typeof s.commit === \"string\" && s.commit.length > 0) out.commit = s.commit;\n return out;\n}\n\nfunction parseProvenance(raw: unknown): ManifestProvenance | undefined {\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return undefined;\n const p = raw as Record<string, unknown>;\n if (typeof p.curator !== \"string\" || p.curator.length === 0) return undefined;\n const out: ManifestProvenance = { curator: p.curator };\n if (typeof p.signed_by === \"string\" && p.signed_by.length > 0) out.signed_by = p.signed_by;\n return out;\n}\n\n/** Parse `files:` as either `string[]` (globs) or `{path, sha256}[]` (granular). */\nfunction parseFiles(raw: unknown): string[] | ManifestFileEntry[] | undefined {\n if (!Array.isArray(raw)) return undefined;\n const strings: string[] = [];\n const granular: ManifestFileEntry[] = [];\n for (const item of raw) {\n if (typeof item === \"string\") {\n strings.push(item);\n } else if (item && typeof item === \"object\" && !Array.isArray(item)) {\n const f = item as Record<string, unknown>;\n if (typeof f.path === \"string\" && typeof f.sha256 === \"string\") {\n granular.push({ path: f.path, sha256: f.sha256 });\n }\n }\n }\n // A manifest uses one form per entry; if both somehow appear, granular wins\n // (it is the verifiable form). Empty → undefined.\n if (granular.length > 0) return granular;\n if (strings.length > 0) return strings;\n return undefined;\n}\n\n/**\n * Decode `skaile.manifest.yaml` text into a {@link SkPublishManifest} plus\n * {@link Diagnostic}s. Total — never throws: a YAML syntax error or non-object\n * root is reported as an `error`-severity diagnostic with an empty manifest.\n * Malformed `assets[].dependencies` refs are reported as `warning`s (validated\n * via `parseAssetRef`) rather than silently dropped.\n *\n * Pair with {@link encodeSkaileManifest} for round-tripping.\n * @docLink packages/core/publish-manifest#decode-skaile-manifest\n */\nexport function decodeSkaileManifest(text: string): ManifestDecodeResult {\n let parsed: unknown;\n try {\n parsed = parse(text) ?? {};\n } catch (err) {\n return {\n manifest: {},\n diagnostics: [\n {\n code: \"yaml_syntax\",\n severity: \"error\",\n message: `Invalid YAML: ${err instanceof Error ? err.message : String(err)}`,\n },\n ],\n };\n }\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n return {\n manifest: {},\n diagnostics: [\n {\n code: \"non_object_root\",\n severity: \"error\",\n message: \"skaile.manifest.yaml must be a mapping at the top level.\",\n },\n ],\n };\n }\n\n const raw = parsed as Record<string, unknown>;\n const manifest: SkPublishManifest = {};\n const diagnostics: Diagnostic[] = [];\n\n if (typeof raw.publisher === \"string\" && raw.publisher.length > 0) {\n manifest.publisher = raw.publisher;\n }\n if (typeof raw.version === \"string\" && raw.version.length > 0) {\n manifest.version = raw.version;\n }\n if (typeof raw.license === \"string\" && raw.license.length > 0) {\n manifest.license = raw.license;\n }\n if (typeof raw.homepage === \"string\" && raw.homepage.length > 0) {\n manifest.homepage = raw.homepage;\n }\n if (Array.isArray(raw.dev_paths)) {\n const paths = raw.dev_paths.filter((p): p is string => typeof p === \"string\" && p.length > 0);\n if (paths.length > 0) manifest.dev_paths = paths;\n }\n const source = parseSource(raw.source);\n if (source) manifest.source = source;\n const provenance = parseProvenance(raw.provenance);\n if (provenance) manifest.provenance = provenance;\n\n if (Array.isArray(raw.assets)) {\n const entries: AssetEntry[] = [];\n for (const item of raw.assets) {\n if (!item || typeof item !== \"object\" || Array.isArray(item)) continue;\n const a = item as Record<string, unknown>;\n const kind = typeof a.kind === \"string\" ? a.kind : \"\";\n const name = typeof a.name === \"string\" ? a.name : \"\";\n if (!kind || !name) continue;\n const entry: AssetEntry = { kind, name };\n if (typeof a.root === \"string\") entry.root = a.root;\n const files = parseFiles(a.files);\n if (files) entry.files = files;\n if (typeof a.version === \"string\") entry.version = a.version;\n if (typeof a.publisher === \"string\") entry.publisher = a.publisher;\n if (typeof a.sha256 === \"string\") entry.sha256 = a.sha256;\n const assetSource = parseSource(a.source);\n if (assetSource) entry.source = assetSource;\n\n if (Array.isArray(a.dependencies)) {\n const deps: string[] = [];\n for (const dep of a.dependencies) {\n if (typeof dep !== \"string\") continue;\n try {\n parseAssetRef(dep);\n deps.push(dep);\n } catch (err) {\n diagnostics.push({\n code: \"malformed_dependency\",\n severity: \"warning\",\n message: `assets[${kind}:${name}].dependencies: ${\n err instanceof Error ? err.message : String(err)\n }`,\n path: `assets.${kind}:${name}.dependencies`,\n });\n }\n }\n if (deps.length > 0) entry.dependencies = deps;\n }\n\n if (typeof a.description === \"string\") entry.description = a.description;\n if (Array.isArray(a.keywords)) {\n const kw = a.keywords.filter((k): k is string => typeof k === \"string\");\n if (kw.length > 0) entry.keywords = kw;\n }\n if (typeof a.category === \"string\") entry.category = a.category;\n if (typeof a.license === \"string\") entry.license = a.license;\n if (typeof a.homepage === \"string\") entry.homepage = a.homepage;\n\n entries.push(entry);\n }\n if (entries.length > 0) manifest.assets = entries;\n }\n\n return { manifest, diagnostics };\n}\n\n// ── Encode ──────────────────────────────────────────────────────────────────\n\n/** Fixed top-level key order for {@link encodeSkaileManifest}. */\nconst MANIFEST_KEY_ORDER: (keyof SkPublishManifest)[] = [\n \"publisher\",\n \"version\",\n \"license\",\n \"homepage\",\n \"dev_paths\",\n \"source\",\n \"provenance\",\n \"assets\",\n];\n\n/** Fixed per-asset key order for {@link encodeSkaileManifest}. */\nconst ASSET_KEY_ORDER: (keyof AssetEntry)[] = [\n \"kind\",\n \"name\",\n \"source\",\n \"root\",\n \"files\",\n \"version\",\n \"publisher\",\n \"sha256\",\n \"dependencies\",\n \"description\",\n \"keywords\",\n \"category\",\n \"license\",\n \"homepage\",\n];\n\nfunction orderedAsset(a: AssetEntry): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const key of ASSET_KEY_ORDER) {\n const value = a[key];\n if (value !== undefined) out[key] = value;\n }\n return out;\n}\n\n/**\n * Encode a {@link SkPublishManifest} to canonical `skaile.manifest.yaml` text:\n * deterministic key order, only defined fields, `lineWidth: 120` (mirrors\n * `encodeSkaileYaml`).\n * @docLink packages/core/publish-manifest#encode-skaile-manifest\n */\nexport function encodeSkaileManifest(manifest: SkPublishManifest): string {\n const out: Record<string, unknown> = {};\n for (const key of MANIFEST_KEY_ORDER) {\n const value = manifest[key];\n if (value === undefined) continue;\n if (key === \"assets\" && Array.isArray(value)) {\n out.assets = (value as AssetEntry[]).map(orderedAsset);\n } else {\n out[key] = value;\n }\n }\n return stringify(out, { lineWidth: 120 });\n}\n\n// ── File I/O ──────────────────────────────────────────────────────────────────\n\n/**\n * Load and decode `<dir>/skaile.manifest.yaml`. Returns `null` when the file is\n * absent or unparseable (mirrors `loadSkWorkspaceConfig`'s tolerant contract).\n * @docLink packages/core/publish-manifest#load-sk-publish-manifest\n */\nexport function loadSkPublishManifest(dir: string): SkPublishManifest | null {\n const filePath = join(resolve(dir), SKAILE_MANIFEST_FILENAME);\n if (!existsSync(filePath)) return null;\n let raw: string;\n try {\n raw = readFileSync(filePath, \"utf-8\");\n } catch {\n return null;\n }\n const { manifest, diagnostics } = decodeSkaileManifest(raw);\n if (diagnostics.some((d) => d.code === \"yaml_syntax\" || d.code === \"non_object_root\")) {\n return null;\n }\n return manifest;\n}\n\n/**\n * Encode and write a manifest to `<dir>/skaile.manifest.yaml`, creating the\n * directory if needed. Returns the absolute path written.\n * @docLink packages/core/publish-manifest#save-sk-publish-manifest\n */\nexport function saveSkPublishManifest(dir: string, manifest: SkPublishManifest): string {\n const resolvedDir = resolve(dir);\n const filePath = join(resolvedDir, SKAILE_MANIFEST_FILENAME);\n if (!existsSync(resolvedDir)) {\n mkdirSync(resolvedDir, { recursive: true });\n }\n writeFileSync(filePath, encodeSkaileManifest(manifest));\n return filePath;\n}\n"]}
@@ -1,4 +1,4 @@
1
- // base-assets/connectors/flow/stimulus-driver.ts
1
+ // factory-assets/connectors/flow/stimulus-driver.ts
2
2
  function computeStimulus(oldExec, newExec) {
3
3
  if (!oldExec) {
4
4
  return { kind: "state_changed" };
@@ -26,5 +26,5 @@ function snapshotsEqual(a, b) {
26
26
  }
27
27
 
28
28
  export { computeStimulus };
29
- //# sourceMappingURL=chunk-FVTV7M76.js.map
30
- //# sourceMappingURL=chunk-FVTV7M76.js.map
29
+ //# sourceMappingURL=chunk-IFGTRL2I.js.map
30
+ //# sourceMappingURL=chunk-IFGTRL2I.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../factory-assets/connectors/flow/stimulus-driver.ts"],"names":[],"mappings":";AA0CO,SAAS,eAAA,CACd,SACA,OAAA,EACqB;AAGrB,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,EAAE,MAAM,eAAA,EAAgB;AAAA,EACjC;AAIA,EAAA,IAAI,YAAY,OAAA,EAAS;AACvB,IAAA,OAAO,IAAA;AAAA,EACT;AAKA,EAAA,IAAI,cAAA,CAAe,OAAA,EAAS,OAAO,CAAA,EAAG;AACpC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,EAAE,MAAM,eAAA,EAAgB;AACjC;AASA,SAAS,cAAA,CAAe,GAAkB,CAAA,EAA2B;AACnE,EAAA,IAAI,CAAA,KAAM,GAAG,OAAO,IAAA;AAGpB,EAAA,IAAI,CAAA,CAAE,KAAA,KAAU,CAAA,CAAE,KAAA,EAAO,OAAO,KAAA;AAChC,EAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,EAAQ,OAAO,KAAA;AAClC,EAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,EAAQ,OAAO,KAAA;AAClC,EAAA,IAAI,CAAA,CAAE,IAAA,KAAS,CAAA,CAAE,IAAA,EAAM,OAAO,KAAA;AAC9B,EAAA,IAAI,CAAA,CAAE,cAAA,KAAmB,CAAA,CAAE,cAAA,EAAgB,OAAO,KAAA;AAElD,EAAA,IAAI;AACF,IAAA,OAAO,KAAK,SAAA,CAAU,CAAC,CAAA,KAAM,IAAA,CAAK,UAAU,CAAC,CAAA;AAAA,EAC/C,CAAA,CAAA,MAAQ;AAGN,IAAA,OAAO,KAAA;AAAA,EACT;AACF","file":"chunk-IFGTRL2I.js","sourcesContent":["/**\n * Pure state-change → stimulus translator for the flow connector.\n *\n * Given the previous and current {@link FlowExecution} snapshots, decides\n * whether the runner should be woken with a fresh turn and (if so) what\n * kind of stimulus to render. Returns `null` when no turn is warranted\n * (e.g. the snapshots are deep-equal).\n *\n * Today's FlowOrchestrator subscribes to `adapter.onStateChange(...)` and\n * forwards the snapshot to the host without kicking a turn — the host\n * issues explicit turn-kicking commands (`approve_flow_node`, etc.). Phase\n * 3 of the flow-connector extraction adds this function as the connector-\n * side decision point so a future direct path (FlowAdapter →\n * SessionStimulusBus → runner) can reproduce today's coalesced \"state\n * changed → maybe a turn\" semantics without going through the orchestrator.\n *\n * Default behaviour mirrors today exactly: any structural change in the\n * FlowExecution snapshot produces a single `{ kind: \"state_changed\" }`\n * stimulus. Phase 4 may refine this with kind discriminators (approval-\n * received, input-received, etc.) once the orchestrator's onStateChange\n * subscription is removed; until then we keep gating purely on equality.\n *\n * @docLink packages/factory-assets/flow#stimulus-driver\n */\n\nimport type { FlowExecution } from \"@skaile/workspaces/types\";\nimport type { TurnStimulus } from \"./prompt-fragments.js\";\n\n/**\n * Decide whether a state transition warrants kicking an agent turn, and\n * which kind of stimulus to render. Returns `null` to suppress turn-kicking\n * when nothing observable changed.\n *\n * Pure — depends only on its inputs.\n *\n * @param oldExec - Previous FlowExecution snapshot (or `undefined` on the\n * first emission, e.g. immediately after `connect()`).\n * @param newExec - Current FlowExecution snapshot.\n * @returns A {@link TurnStimulus} when a turn should be kicked, or `null`.\n *\n * @docLink packages/factory-assets/flow#compute-stimulus\n */\nexport function computeStimulus(\n oldExec: FlowExecution | undefined,\n newExec: FlowExecution,\n): TurnStimulus | null {\n // First emission (no prior snapshot) — treat as a full state change so\n // downstream consumers can latch onto the initial state.\n if (!oldExec) {\n return { kind: \"state_changed\" };\n }\n\n // Identity short-circuit (cheap; mutate() returns a fresh object on every\n // change so reference inequality is the common case).\n if (oldExec === newExec) {\n return null;\n }\n\n // Structural compare — JSON.stringify is good enough for FlowExecution\n // because it has stable key ordering produced by the engine and contains\n // no functions or class instances. Avoids pulling in a deep-equal dep.\n if (snapshotsEqual(oldExec, newExec)) {\n return null;\n }\n\n return { kind: \"state_changed\" };\n}\n\n/**\n * Cheap structural equality for two FlowExecution snapshots. Mirrors the\n * comparison the orchestrator's onStateChange subscription would do if it\n * cared (it currently re-fires unconditionally).\n *\n * @internal\n */\nfunction snapshotsEqual(a: FlowExecution, b: FlowExecution): boolean {\n if (a === b) return true;\n // Hot-path guard: differing top-level fields short-circuit before the\n // expensive serialize.\n if (a.runId !== b.runId) return false;\n if (a.flowId !== b.flowId) return false;\n if (a.status !== b.status) return false;\n if (a.done !== b.done) return false;\n if (a.autonomousMode !== b.autonomousMode) return false;\n\n try {\n return JSON.stringify(a) === JSON.stringify(b);\n } catch {\n // Defensive: if a snapshot somehow contains a circular ref the safe\n // answer is \"treat as different\" so we don't suppress a real change.\n return false;\n }\n}\n"]}
@@ -1,6 +1,8 @@
1
1
  import { AssetKindRegistryFrozenError, AssetKindConflictError, AssetKindPatternConflictError, AssetKindPathAmbiguityError } from './chunk-OKRUTSG7.js';
2
- import { parseFrontmatter } from './chunk-GL45UNVS.js';
3
- import { validatePersona, validateRuleset, validateSkill, validateAgent, validateConnector, validateMcpServer, validateContract, validatePrompt, validatePreset } from './chunk-NELZIQ2E.js';
2
+ import { decodeSkaileManifest, SKAILE_MANIFEST_FILENAME } from './chunk-IERB3UXJ.js';
3
+ import { parseFrontmatter } from './chunk-2FS4FPZ7.js';
4
+ import { isValidAssetName } from './chunk-IEJ5IOC3.js';
5
+ import { validatePersona, validateRuleset, validateSkill, validateAgent, validateConnector, validateMcpServer, validateContract, validatePrompt, validatePreset } from './chunk-QDJKE557.js';
4
6
  import * as fs from 'fs';
5
7
  import * as path from 'path';
6
8
  import * as z from 'zod';
@@ -481,8 +483,14 @@ var SyncConfigSchema = z.object({
481
483
  path: ["poll_interval"]
482
484
  });
483
485
  var AssetEntrySchema = z.object({
484
- /** Relative path within the repo (directory or file). */
486
+ /** Asset root directory, relative to the repo. Files are resolved under it. */
485
487
  path: z.string().min(1),
488
+ /**
489
+ * Optional recursive root. When set (and `files` absent), the asset spans
490
+ * every file under `<path>` (walked recursively). Mirrors the
491
+ * `skaile.manifest.yaml` `root:` form via `manifestToSourceConfig`.
492
+ */
493
+ root: z.string().min(1).optional(),
486
494
  /** Asset kind — validated against `IAssetKindRegistry` at discovery time. */
487
495
  kind: z.string().min(1),
488
496
  /** Publisher namespace. Required per entry; overrides publisher_default / _overrides. */
@@ -496,12 +504,19 @@ var AssetEntrySchema = z.object({
496
504
  * Optional on write, REQUIRED on Catalog publish (Phase 4).
497
505
  */
498
506
  sha256: z.string().regex(/^[a-f0-9]{64}$/, "sha256 must be 64-character hex").optional(),
499
- /** Curated file filter (paths relative to `path:`). At least one entry. */
500
- files: z.array(z.string().min(1)).min(1),
507
+ /**
508
+ * Curated file filter (paths relative to `path:`). At least one entry when
509
+ * present. Optional: a `root`-only entry omits it and is materialised by a
510
+ * recursive walk at discovery time.
511
+ */
512
+ files: z.array(z.string().min(1)).min(1).optional(),
501
513
  /** Author-declared requires-graph entries. */
502
514
  requires: z.array(z.string().min(1)).default([]),
503
515
  /** Optional passthrough to `AssetDefinition.manifest`. */
504
516
  metadata: z.record(z.string(), z.unknown()).optional()
517
+ }).refine((a) => a.root !== void 0 || a.files !== void 0, {
518
+ message: "asset entry must declare either `root` or `files`",
519
+ path: ["files"]
505
520
  });
506
521
  var SourceConfigSchema = z.object({
507
522
  /** Schema version. `1` (glob mode) or `2` (allows `assets:` block). */
@@ -580,6 +595,91 @@ function collectWarnings(config) {
580
595
  }
581
596
  return warnings;
582
597
  }
598
+ function atPublisher(publisher) {
599
+ return publisher.startsWith("@") ? publisher : `@${publisher}`;
600
+ }
601
+ function derivePublisherFromPath(p) {
602
+ const seg = p.split("/").find((s) => s.length > 0 && s !== ".");
603
+ return seg ? `@${seg}` : "@unknown";
604
+ }
605
+ function manifestFilesToStrings(files) {
606
+ if (!Array.isArray(files) || files.length === 0) return void 0;
607
+ const out = files.map((f) => typeof f === "string" ? f : f.path).filter((p) => p.length > 0);
608
+ return out.length > 0 ? out : void 0;
609
+ }
610
+ function manifestEntryMetadata(a, manifest) {
611
+ const meta = {};
612
+ if (a.description !== void 0) meta.description = a.description;
613
+ if (a.keywords !== void 0) meta.keywords = a.keywords;
614
+ if (a.category !== void 0) meta.category = a.category;
615
+ const license = a.license ?? manifest.license;
616
+ if (license !== void 0) meta.license = license;
617
+ const homepage = a.homepage ?? manifest.homepage;
618
+ if (homepage !== void 0) meta.homepage = homepage;
619
+ return Object.keys(meta).length > 0 ? meta : void 0;
620
+ }
621
+ function adaptManifestAssetEntry(a, manifest) {
622
+ const root = typeof a.root === "string" && a.root.length > 0 ? a.root : void 0;
623
+ const assetPath = root ?? ".";
624
+ const files = root ? void 0 : manifestFilesToStrings(a.files);
625
+ const publisher = a.publisher ? atPublisher(a.publisher) : manifest.publisher ? atPublisher(manifest.publisher) : derivePublisherFromPath(assetPath);
626
+ const entry = {
627
+ path: assetPath,
628
+ kind: a.kind,
629
+ publisher,
630
+ name: a.name,
631
+ version: a.version ?? manifest.version ?? "0.1.0",
632
+ requires: a.dependencies ?? []
633
+ };
634
+ if (root) entry.root = root;
635
+ if (files) entry.files = files;
636
+ if (a.sha256) entry.sha256 = a.sha256;
637
+ const metadata = manifestEntryMetadata(a, manifest);
638
+ if (metadata) entry.metadata = metadata;
639
+ return entry;
640
+ }
641
+ function manifestToSourceConfig(manifest) {
642
+ const publisherDefault = manifest.publisher ? atPublisher(manifest.publisher) : "@<domain>";
643
+ const devPaths = manifest.dev_paths ?? [];
644
+ if (!manifest.assets || manifest.assets.length === 0) {
645
+ return {
646
+ version: 1,
647
+ publisher_default: publisherDefault,
648
+ default_ref: "main",
649
+ publisher_overrides: [],
650
+ dev_paths: devPaths
651
+ };
652
+ }
653
+ return {
654
+ version: 2,
655
+ publisher_default: publisherDefault,
656
+ default_ref: "main",
657
+ publisher_overrides: [],
658
+ dev_paths: devPaths,
659
+ assets: manifest.assets.map((a) => adaptManifestAssetEntry(a, manifest))
660
+ };
661
+ }
662
+ function decodeManifestSourceConfig(text) {
663
+ const { manifest, diagnostics } = decodeSkaileManifest(text);
664
+ const fatal = diagnostics.filter((d) => d.severity === "error");
665
+ if (fatal.length > 0) {
666
+ return {
667
+ ok: false,
668
+ errors: fatal.map((d) => ({ path: d.path ?? "", message: d.message }))
669
+ };
670
+ }
671
+ return { ok: true, config: manifestToSourceConfig(manifest) };
672
+ }
673
+ function readManifestSourceConfig(dir) {
674
+ const filePath = path.join(dir, SKAILE_MANIFEST_FILENAME);
675
+ if (!fs.existsSync(filePath)) return void 0;
676
+ try {
677
+ const result = decodeManifestSourceConfig(fs.readFileSync(filePath, "utf-8"));
678
+ return result.ok ? result.config : void 0;
679
+ } catch {
680
+ return void 0;
681
+ }
682
+ }
583
683
  function mergeSourceConfigs(base, overlay) {
584
684
  if (!base && !overlay) return void 0;
585
685
  if (!overlay) return base;
@@ -638,11 +738,11 @@ function loadMergedSourceConfig(rootPath, sidecarPath) {
638
738
  return warnings.length > 0 ? { ok: true, config: merged, warnings } : { ok: true, config: merged };
639
739
  }
640
740
  function loadSourceConfigFromDir(dir) {
641
- const filePath = path.join(dir, ".skaile-source.yaml");
741
+ const filePath = path.join(dir, SKAILE_MANIFEST_FILENAME);
642
742
  if (!fs.existsSync(filePath)) return void 0;
643
743
  try {
644
744
  const text = fs.readFileSync(filePath, "utf-8");
645
- return loadSourceConfig(text);
745
+ return decodeManifestSourceConfig(text);
646
746
  } catch (err) {
647
747
  return {
648
748
  ok: false,
@@ -718,10 +818,18 @@ function processEntry(rootPath, entry, registry) {
718
818
  const errors = [];
719
819
  const assetRoot = path.resolve(rootPath, entry.path);
720
820
  const assetRootRelative = entry.path;
721
- const manifestFileRel = pickManifestFile(entry, registry);
821
+ const files = entry.files ?? expandRootFiles(assetRoot);
822
+ if (entry.files === void 0 && files.length === 0) {
823
+ errors.push({
824
+ path: assetRootRelative,
825
+ error: `ManifestFileMissing: root "${entry.root ?? entry.path}" contains no files`
826
+ });
827
+ return { asset: null, errors };
828
+ }
829
+ const manifestFileRel = pickManifestFile(entry.path, files, entry.kind, registry);
722
830
  const manifestAbsPath = path.join(assetRoot, manifestFileRel);
723
831
  const missing = [];
724
- for (const file of entry.files) {
832
+ for (const file of files) {
725
833
  if (!fs.existsSync(path.join(assetRoot, file))) {
726
834
  missing.push(file);
727
835
  }
@@ -757,7 +865,7 @@ function processEntry(rootPath, entry, registry) {
757
865
  }
758
866
  const { sha256: computedHash, missing: hashMissing } = computeDeterministicHashDetailed(
759
867
  assetRoot,
760
- entry.files
868
+ files
761
869
  );
762
870
  if (hashMissing.length > 0) {
763
871
  errors.push({
@@ -800,7 +908,7 @@ function processEntry(rootPath, entry, registry) {
800
908
  relativePath: path.join(assetRootRelative, manifestFileRel).replace(/\\/g, "/"),
801
909
  fileFilter: {
802
910
  assetRoot,
803
- files: [...entry.files].sort()
911
+ files: [...files].sort()
804
912
  },
805
913
  sha256: computedHash,
806
914
  requires
@@ -818,26 +926,49 @@ var MANIFEST_FILENAMES = /* @__PURE__ */ new Set([
818
926
  "RULESET.md"
819
927
  ]);
820
928
  var MANIFEST_SUFFIXES = [".flow.yaml", ".flow.json", ".prompt.md", ".preset.yaml"];
821
- function pickManifestFile(entry, registry) {
822
- const provider = registry.getProvider(entry.kind);
929
+ function pickManifestFile(assetPath, files, kind, registry) {
930
+ const provider = registry.getProvider(kind);
823
931
  if (provider) {
824
- for (const file of entry.files) {
825
- if (provider.matchesPath(path.join(entry.path, file).replace(/\\/g, "/"))) {
932
+ for (const file of files) {
933
+ if (provider.matchesPath(path.join(assetPath, file).replace(/\\/g, "/"))) {
826
934
  return file;
827
935
  }
828
936
  }
829
937
  }
830
- for (const file of entry.files) {
938
+ for (const file of files) {
831
939
  if (MANIFEST_FILENAMES.has(path.basename(file))) return file;
832
940
  if (MANIFEST_SUFFIXES.some((s) => file.endsWith(s))) return file;
833
941
  }
834
- return entry.files[0];
942
+ return files[0];
943
+ }
944
+ function expandRootFiles(assetRoot) {
945
+ const out = [];
946
+ const walk = (absDir, relDir) => {
947
+ let entries;
948
+ try {
949
+ entries = fs.readdirSync(absDir, { withFileTypes: true });
950
+ } catch {
951
+ return;
952
+ }
953
+ for (const e of entries.sort((a, b) => a.name < b.name ? -1 : 1)) {
954
+ const rel = relDir ? `${relDir}/${e.name}` : e.name;
955
+ if (e.isDirectory()) {
956
+ if (e.name === ".git" || e.name === "node_modules" || e.name === ".skaile") continue;
957
+ walk(path.join(absDir, e.name), rel);
958
+ } else if (e.isFile()) {
959
+ out.push(rel);
960
+ }
961
+ }
962
+ };
963
+ walk(assetRoot, "");
964
+ return out;
835
965
  }
836
966
  function parseManifest(absPath) {
837
967
  try {
838
968
  const content = fs.readFileSync(absPath, "utf-8");
839
969
  if (absPath.endsWith(".md")) {
840
970
  const { data } = parseFrontmatter(content);
971
+ if (!data || Object.keys(data).length === 0) return null;
841
972
  return data;
842
973
  }
843
974
  if (absPath.endsWith(".yaml") || absPath.endsWith(".yml")) {
@@ -927,7 +1058,7 @@ function discoverAssetsInTree(rootPath, optionsOrSourceConfig) {
927
1058
  }
928
1059
  const publisher = resolvePublisher(relativePath, sourceConfig);
929
1060
  const name = deriveName(relativePath, kind, manifest);
930
- const version = typeof manifest.version === "string" ? manifest.version : "0.1.0";
1061
+ const version = coerceVersion(manifest.version);
931
1062
  const ref = `${publisher}/${name}@${version}`;
932
1063
  const fileFilter = registry.defaultFileFilter(kind, absPath) ?? {
933
1064
  assetRoot: path.dirname(absPath),
@@ -985,6 +1116,7 @@ function parseManifest2(absPath) {
985
1116
  const content = fs.readFileSync(absPath, "utf-8");
986
1117
  if (absPath.endsWith(".md")) {
987
1118
  const { data } = parseFrontmatter(content);
1119
+ if (!data || Object.keys(data).length === 0) return null;
988
1120
  return data;
989
1121
  }
990
1122
  if (absPath.endsWith(".yaml") || absPath.endsWith(".yml")) {
@@ -1019,8 +1151,13 @@ function resolvePublisher(relativePath, sourceConfig) {
1019
1151
  }
1020
1152
  return template;
1021
1153
  }
1154
+ function coerceVersion(version) {
1155
+ if (typeof version === "string") return version;
1156
+ if (typeof version === "number") return String(version);
1157
+ return "0.1.0";
1158
+ }
1022
1159
  function deriveName(relativePath, kind, manifest) {
1023
- if (typeof manifest.name === "string" && manifest.name.length > 0) {
1160
+ if (typeof manifest.name === "string" && manifest.name.length > 0 && isValidAssetName(manifest.name)) {
1024
1161
  return manifest.name;
1025
1162
  }
1026
1163
  const parts = relativePath.split("/");
@@ -1119,7 +1256,7 @@ async function discoverAssetsInTreeEntries(entries, options) {
1119
1256
  }
1120
1257
  const publisher = resolvePublisher2(relativePath, resolvedSourceConfig);
1121
1258
  const name = deriveName2(relativePath, kind, manifest);
1122
- const version = typeof manifest.version === "string" ? manifest.version : "0.1.0";
1259
+ const version = coerceVersion2(manifest.version);
1123
1260
  const ref = `${publisher}/${name}@${version}`;
1124
1261
  const fileFilter = computeFileFilter(kind, relativePath, blobByPath);
1125
1262
  let sha256;
@@ -1158,6 +1295,7 @@ function parseManifestText(relativePath, text) {
1158
1295
  try {
1159
1296
  if (relativePath.endsWith(".md")) {
1160
1297
  const { data } = parseFrontmatter(text);
1298
+ if (!data || Object.keys(data).length === 0) return null;
1161
1299
  return data;
1162
1300
  }
1163
1301
  if (relativePath.endsWith(".yaml") || relativePath.endsWith(".yml")) {
@@ -1192,8 +1330,13 @@ function resolvePublisher2(relativePath, sourceConfig) {
1192
1330
  }
1193
1331
  return template;
1194
1332
  }
1333
+ function coerceVersion2(version) {
1334
+ if (typeof version === "string") return version;
1335
+ if (typeof version === "number") return String(version);
1336
+ return "0.1.0";
1337
+ }
1195
1338
  function deriveName2(relativePath, kind, manifest) {
1196
- if (typeof manifest.name === "string" && manifest.name.length > 0) {
1339
+ if (typeof manifest.name === "string" && manifest.name.length > 0 && isValidAssetName(manifest.name)) {
1197
1340
  return manifest.name;
1198
1341
  }
1199
1342
  const parts = relativePath.split("/");
@@ -1335,11 +1478,11 @@ async function fetchAsBuffer(fetchBlob, sha) {
1335
1478
  }
1336
1479
  async function resolveSourceConfigFromTree(explicit, blobByPath, fetchBlob) {
1337
1480
  if (explicit) return explicit;
1338
- const entry = blobByPath.get(".skaile-source.yaml");
1481
+ const entry = blobByPath.get(SKAILE_MANIFEST_FILENAME);
1339
1482
  if (!entry) return void 0;
1340
1483
  const bytes = await fetchAsBuffer(fetchBlob, entry.sha);
1341
1484
  if (!bytes) return void 0;
1342
- const result = loadSourceConfig(bytes.toString("utf-8"));
1485
+ const result = decodeManifestSourceConfig(bytes.toString("utf-8"));
1343
1486
  return result.ok ? result.config : void 0;
1344
1487
  }
1345
1488
  async function discoverFromManifestTree(sourceConfig, blobByPath, fetchBlob, registry, includeDev = false) {
@@ -1366,8 +1509,16 @@ async function discoverFromManifestTree(sourceConfig, blobByPath, fetchBlob, reg
1366
1509
  async function processManifestEntryTree(entry, blobByPath, fetchBlob, registry) {
1367
1510
  const errors = [];
1368
1511
  const assetRootRelative = entry.path;
1512
+ const files = entry.files ?? expandRootFilesTree(entry.path, blobByPath);
1513
+ if (entry.files === void 0 && files.length === 0) {
1514
+ errors.push({
1515
+ path: assetRootRelative,
1516
+ error: `ManifestFileMissing: root "${entry.root ?? entry.path}" contains no files`
1517
+ });
1518
+ return { asset: null, errors };
1519
+ }
1369
1520
  const missing = [];
1370
- for (const file of entry.files) {
1521
+ for (const file of files) {
1371
1522
  const full = joinPosix(entry.path, file);
1372
1523
  if (!blobByPath.has(full)) missing.push(file);
1373
1524
  }
@@ -1378,7 +1529,7 @@ async function processManifestEntryTree(entry, blobByPath, fetchBlob, registry)
1378
1529
  });
1379
1530
  return { asset: null, errors };
1380
1531
  }
1381
- const manifestFileRel = pickManifestFileTree(entry, registry);
1532
+ const manifestFileRel = pickManifestFileTree(entry.path, files, entry.kind, registry);
1382
1533
  const manifestFull = joinPosix(entry.path, manifestFileRel);
1383
1534
  const manifestEntry = blobByPath.get(manifestFull);
1384
1535
  let manifestBytes;
@@ -1422,7 +1573,7 @@ async function processManifestEntryTree(entry, blobByPath, fetchBlob, registry)
1422
1573
  }
1423
1574
  let computedHash;
1424
1575
  try {
1425
- computedHash = await computeManifestHashTree(entry, blobByPath, fetchBlob);
1576
+ computedHash = await computeManifestHashTree(entry.path, files, blobByPath, fetchBlob);
1426
1577
  } catch (err) {
1427
1578
  errors.push({
1428
1579
  path: assetRootRelative,
@@ -1464,7 +1615,7 @@ async function processManifestEntryTree(entry, blobByPath, fetchBlob, registry)
1464
1615
  relativePath: manifestFull,
1465
1616
  fileFilter: {
1466
1617
  assetRoot: entry.path,
1467
- files: [...entry.files].sort()
1618
+ files: [...files].sort()
1468
1619
  },
1469
1620
  sha256: computedHash,
1470
1621
  requires
@@ -1482,25 +1633,38 @@ var MANIFEST_FILENAMES2 = /* @__PURE__ */ new Set([
1482
1633
  "RULESET.md"
1483
1634
  ]);
1484
1635
  var MANIFEST_SUFFIXES2 = [".flow.yaml", ".flow.json", ".prompt.md", ".preset.yaml"];
1485
- function pickManifestFileTree(entry, registry) {
1486
- const provider = registry.getProvider(entry.kind);
1636
+ function pickManifestFileTree(assetPath, files, kind, registry) {
1637
+ const provider = registry.getProvider(kind);
1487
1638
  if (provider) {
1488
- for (const file of entry.files) {
1489
- if (provider.matchesPath(joinPosix(entry.path, file))) return file;
1639
+ for (const file of files) {
1640
+ if (provider.matchesPath(joinPosix(assetPath, file))) return file;
1490
1641
  }
1491
1642
  }
1492
- for (const file of entry.files) {
1643
+ for (const file of files) {
1493
1644
  const base = file.split("/").pop() ?? file;
1494
1645
  if (MANIFEST_FILENAMES2.has(base)) return file;
1495
1646
  if (MANIFEST_SUFFIXES2.some((s) => file.endsWith(s))) return file;
1496
1647
  }
1497
- return entry.files[0];
1648
+ return files[0];
1498
1649
  }
1499
- async function computeManifestHashTree(entry, blobByPath, fetchBlob) {
1650
+ function expandRootFilesTree(assetPath, blobByPath) {
1651
+ const out = [];
1652
+ const root = assetPath === "." ? "" : assetPath;
1653
+ for (const blobPath of blobByPath.keys()) {
1654
+ if (!isInDir(blobPath, root)) continue;
1655
+ const rel = root === "" ? blobPath : blobPath.slice(root.length + 1);
1656
+ if (rel.startsWith(".git/") || rel.startsWith("node_modules/") || rel.startsWith(".skaile/") || rel.includes("/.git/") || rel.includes("/node_modules/") || rel.includes("/.skaile/")) {
1657
+ continue;
1658
+ }
1659
+ out.push(rel);
1660
+ }
1661
+ return out.sort();
1662
+ }
1663
+ async function computeManifestHashTree(assetPath, files, blobByPath, fetchBlob) {
1500
1664
  const hash = crypto.createHash("sha256");
1501
- const sorted = [...entry.files].sort();
1665
+ const sorted = [...files].sort();
1502
1666
  for (const file of sorted) {
1503
- const full = joinPosix(entry.path, file);
1667
+ const full = joinPosix(assetPath, file);
1504
1668
  const blob = blobByPath.get(full);
1505
1669
  if (!blob) continue;
1506
1670
  hash.update(file);
@@ -1523,6 +1687,6 @@ function validateRequiresSyntax2(requires) {
1523
1687
  // discovery/src/index.ts
1524
1688
  var VERSION = "0.0.0";
1525
1689
 
1526
- export { AssetKindRegistry, BUILTIN_PROVIDERS, SEMVER_RE, SourceConfigSchema, VERSION, agentProvider, buildRequiresGraph, computeDeterministicHash, computeDeterministicHashDetailed, connectorProvider, contractProvider, createDefaultRegistry, detectCycles, discoverAssetsInTree, discoverAssetsInTreeEntries, discoverFromManifest, extractRequires, isExcludedDevPath, isManifestMode, loadMergedSourceConfig, loadSourceConfig, mcpServerProvider, mergeSourceConfigs, parseSourceConfig, personaProvider, presetProvider, promptProvider, rulesetProvider, skillProvider, validateSourceConfig };
1527
- //# sourceMappingURL=chunk-KT3CK26V.js.map
1528
- //# sourceMappingURL=chunk-KT3CK26V.js.map
1690
+ export { AssetKindRegistry, BUILTIN_PROVIDERS, SEMVER_RE, SourceConfigSchema, VERSION, agentProvider, buildRequiresGraph, computeDeterministicHash, computeDeterministicHashDetailed, connectorProvider, contractProvider, createDefaultRegistry, decodeManifestSourceConfig, detectCycles, discoverAssetsInTree, discoverAssetsInTreeEntries, discoverFromManifest, extractRequires, isExcludedDevPath, isManifestMode, loadMergedSourceConfig, loadSourceConfig, manifestToSourceConfig, mcpServerProvider, mergeSourceConfigs, parseSourceConfig, personaProvider, presetProvider, promptProvider, readManifestSourceConfig, rulesetProvider, skillProvider, validateSourceConfig };
1691
+ //# sourceMappingURL=chunk-JIQLLZ65.js.map
1692
+ //# sourceMappingURL=chunk-JIQLLZ65.js.map