@skaile/workspaces 0.22.0-beta.0 → 0.22.0-beta.2

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 (306) hide show
  1. package/CHANGELOG.md +221 -0
  2. package/dist/{asset-feeds-PJDJ3QYI.js → asset-feeds-2M6UKEJ7.js} +13 -14
  3. package/dist/asset-feeds-2M6UKEJ7.js.map +1 -0
  4. package/dist/asset-manager/catalog-deployer.d.ts +2 -0
  5. package/dist/asset-manager/contrib.d.ts +2 -0
  6. package/dist/asset-manager/fragments.d.ts +2 -0
  7. package/dist/asset-manager/history.d.ts +2 -0
  8. package/dist/asset-manager/index.d.ts +2 -0
  9. package/dist/asset-manager/index.js +7 -7
  10. package/dist/asset-manager/installer.d.ts +2 -0
  11. package/dist/asset-manager/installer.js +6 -6
  12. package/dist/asset-manager/renderers.d.ts +2 -0
  13. package/dist/asset-manager/src/index.d.ts +18 -7
  14. package/dist/asset-manager/src/index.d.ts.map +1 -1
  15. package/dist/asset-manager/src/installer.d.ts +3 -3
  16. package/dist/asset-manager/src/installer.d.ts.map +1 -1
  17. package/dist/base-assets/connectors/deploy.d.ts +2 -0
  18. package/dist/base-assets/connectors/deploy.js +8 -8
  19. package/dist/base-assets/connectors/devserver.d.ts +2 -0
  20. package/dist/base-assets/connectors/devserver.js +8 -8
  21. package/dist/base-assets/connectors/flow/adapter.js +8 -8
  22. package/dist/base-assets/connectors/flow/engine.d.ts +2 -0
  23. package/dist/base-assets/connectors/flow/run-flow.js +9 -9
  24. package/dist/base-assets/connectors/flow.d.ts +2 -0
  25. package/dist/base-assets/connectors/flow.js +8 -8
  26. package/dist/base-assets/connectors/git/driver.d.ts.map +1 -1
  27. package/dist/base-assets/connectors/git.d.ts +2 -0
  28. package/dist/base-assets/connectors/git.js +8 -8
  29. package/dist/base-assets/connectors/gmail.d.ts +2 -0
  30. package/dist/base-assets/connectors/gmail.js +8 -8
  31. package/dist/base-assets/connectors/googledrive.d.ts +2 -0
  32. package/dist/base-assets/connectors/googledrive.js +8 -8
  33. package/dist/base-assets/connectors/local.d.ts +2 -0
  34. package/dist/base-assets/connectors/local.js +8 -8
  35. package/dist/base-assets/connectors/mattermost.d.ts +2 -0
  36. package/dist/base-assets/connectors/mattermost.js +8 -8
  37. package/dist/base-assets/connectors/memory.d.ts +2 -0
  38. package/dist/base-assets/connectors/memory.js +8 -8
  39. package/dist/base-assets/connectors/minio.d.ts +2 -0
  40. package/dist/base-assets/connectors/minio.js +8 -8
  41. package/dist/base-assets/connectors/postgres.d.ts +2 -0
  42. package/dist/base-assets/connectors/postgres.js +8 -8
  43. package/dist/base-assets/connectors/s3.d.ts +2 -0
  44. package/dist/base-assets/connectors/s3.js +8 -8
  45. package/dist/base-assets/connectors/sharepoint.d.ts +2 -0
  46. package/dist/base-assets/connectors/sharepoint.js +8 -8
  47. package/dist/base-assets/connectors/sqlite.d.ts +2 -0
  48. package/dist/base-assets/connectors/sqlite.js +8 -8
  49. package/dist/base-assets/connectors/static-server.d.ts +2 -0
  50. package/dist/base-assets/connectors/static-server.js +8 -8
  51. package/dist/base-assets/connectors/tunnel.d.ts +2 -0
  52. package/dist/base-assets/connectors/tunnel.js +8 -8
  53. package/dist/base-assets/connectors/webdav.d.ts +2 -0
  54. package/dist/base-assets/connectors/webdav.js +8 -8
  55. package/dist/base-assets/connectors/xstate-store.d.ts +2 -0
  56. package/dist/base-assets/connectors/xstate-store.js +8 -8
  57. package/dist/base-assets/connectors/xstate.d.ts +2 -0
  58. package/dist/base-assets/connectors/xstate.js +8 -8
  59. package/dist/bridge/drivers/claude-sdk.d.ts +2 -0
  60. package/dist/bridge/drivers/claude-sdk.js +2 -2
  61. package/dist/bridge/drivers/codex.d.ts +2 -0
  62. package/dist/bridge/drivers/codex.js +2 -2
  63. package/dist/bridge/drivers/echo.d.ts +2 -0
  64. package/dist/bridge/drivers/echo.js +2 -2
  65. package/dist/bridge/drivers/omp.d.ts +2 -0
  66. package/dist/bridge/drivers/omp.js +2 -2
  67. package/dist/bridge/index.d.ts +2 -0
  68. package/dist/bridge/index.js +3 -3
  69. package/dist/bridge/src/registry.d.ts +4 -2
  70. package/dist/bridge/src/registry.d.ts.map +1 -1
  71. package/dist/chunk-32NA4TVC.js +30 -0
  72. package/dist/chunk-32NA4TVC.js.map +1 -0
  73. package/dist/{chunk-CSDQBWE6.js → chunk-3KLWGHDE.js} +5 -5
  74. package/dist/{chunk-CSDQBWE6.js.map → chunk-3KLWGHDE.js.map} +1 -1
  75. package/dist/{chunk-UZRY5UI2.js → chunk-6E6PKKAD.js} +68 -3
  76. package/dist/chunk-6E6PKKAD.js.map +1 -0
  77. package/dist/{chunk-G6GKWGOW.js → chunk-6SA2SIOU.js} +26 -10
  78. package/dist/chunk-6SA2SIOU.js.map +1 -0
  79. package/dist/{chunk-IGQEXBBG.js → chunk-6VTG73UY.js} +13 -9
  80. package/dist/chunk-6VTG73UY.js.map +1 -0
  81. package/dist/{chunk-TTY56FQQ.js → chunk-74GTZ4TJ.js} +17 -5
  82. package/dist/chunk-74GTZ4TJ.js.map +1 -0
  83. package/dist/chunk-7QBNJTTQ.js +3 -0
  84. package/dist/{chunk-W2O5LWYU.js.map → chunk-7QBNJTTQ.js.map} +1 -1
  85. package/dist/{chunk-SL6JVGRD.js → chunk-CEUHU3C4.js} +3 -3
  86. package/dist/{chunk-SL6JVGRD.js.map → chunk-CEUHU3C4.js.map} +1 -1
  87. package/dist/{chunk-J2FCO6TM.js → chunk-FIHVQFXB.js} +2 -2
  88. package/dist/{chunk-J2FCO6TM.js.map → chunk-FIHVQFXB.js.map} +1 -1
  89. package/dist/{chunk-F3MGZ5E6.js → chunk-FVZLCBSX.js} +3 -3
  90. package/dist/{chunk-F3MGZ5E6.js.map → chunk-FVZLCBSX.js.map} +1 -1
  91. package/dist/{chunk-7PTP3SQJ.js → chunk-GTS2FODO.js} +32 -7
  92. package/dist/chunk-GTS2FODO.js.map +1 -0
  93. package/dist/{chunk-KA46DUM4.js → chunk-I5SGBFMM.js} +51 -3
  94. package/dist/chunk-I5SGBFMM.js.map +1 -0
  95. package/dist/{chunk-MO4JPTRD.js → chunk-LDLZFYLR.js} +5 -5
  96. package/dist/{chunk-MO4JPTRD.js.map → chunk-LDLZFYLR.js.map} +1 -1
  97. package/dist/{chunk-TKOLD2O7.js → chunk-LDYPQVRU.js} +516 -145
  98. package/dist/chunk-LDYPQVRU.js.map +1 -0
  99. package/dist/{chunk-GKM6MDUC.js → chunk-M5JDVO6D.js} +3 -3
  100. package/dist/{chunk-GKM6MDUC.js.map → chunk-M5JDVO6D.js.map} +1 -1
  101. package/dist/{chunk-XHFMUGDD.js → chunk-M5TE6YI5.js} +3 -3
  102. package/dist/{chunk-XHFMUGDD.js.map → chunk-M5TE6YI5.js.map} +1 -1
  103. package/dist/{chunk-NGC7ZQI4.js → chunk-NICAMYPV.js} +39 -45
  104. package/dist/chunk-NICAMYPV.js.map +1 -0
  105. package/dist/{chunk-WIR34WMU.js → chunk-NQL3T75I.js} +24 -59
  106. package/dist/chunk-NQL3T75I.js.map +1 -0
  107. package/dist/{chunk-RENHNO4J.js → chunk-P4FYHEHW.js} +206 -137
  108. package/dist/chunk-P4FYHEHW.js.map +1 -0
  109. package/dist/{chunk-2DNSSQ22.js → chunk-TWQPDBHB.js} +270 -173
  110. package/dist/chunk-TWQPDBHB.js.map +1 -0
  111. package/dist/{chunk-UZVHJ7LX.js → chunk-UBLTUFFI.js} +4 -4
  112. package/dist/{chunk-UZVHJ7LX.js.map → chunk-UBLTUFFI.js.map} +1 -1
  113. package/dist/{chunk-X5Y4EGZB.js → chunk-VUCPJBAG.js} +43 -10
  114. package/dist/chunk-VUCPJBAG.js.map +1 -0
  115. package/dist/{chunk-PBWMV5GM.js → chunk-WQ7DE5UC.js} +18 -4
  116. package/dist/chunk-WQ7DE5UC.js.map +1 -0
  117. package/dist/cli/index.d.ts +2 -0
  118. package/dist/cli/index.js +258 -262
  119. package/dist/cli/index.js.map +1 -1
  120. package/dist/cli/src/commands/deploy.d.ts.map +1 -1
  121. package/dist/cli/src/commands/manage.d.ts +22 -31
  122. package/dist/cli/src/commands/manage.d.ts.map +1 -1
  123. package/dist/cli/src/commands/npx.d.ts +5 -3
  124. package/dist/cli/src/commands/npx.d.ts.map +1 -1
  125. package/dist/cli/src/commands/project.d.ts.map +1 -1
  126. package/dist/cli/src/commands/source.d.ts +7 -0
  127. package/dist/cli/src/commands/source.d.ts.map +1 -1
  128. package/dist/cli/src/commands/update.d.ts.map +1 -1
  129. package/dist/cli/src/ensure-sources.d.ts.map +1 -1
  130. package/dist/client/index.d.ts +2 -0
  131. package/dist/connectors/config.d.ts +2 -0
  132. package/dist/connectors/config.js +6 -6
  133. package/dist/connectors/index.d.ts +2 -0
  134. package/dist/connectors/index.js +8 -8
  135. package/dist/connectors/rclone-config.d.ts +2 -0
  136. package/dist/connectors/rclone.d.ts +2 -0
  137. package/dist/connectors-shared/index.d.ts +2 -0
  138. package/dist/core/discovery.d.ts +2 -0
  139. package/dist/core/driver-targets.d.ts +2 -0
  140. package/dist/core/framework.d.ts +2 -0
  141. package/dist/core/index.d.ts +2 -0
  142. package/dist/core/index.js +5 -5
  143. package/dist/core/logging.d.ts +2 -0
  144. package/dist/core/manifest.d.ts +2 -0
  145. package/dist/core/manifest.js +2 -2
  146. package/dist/core/models.d.ts +2 -0
  147. package/dist/core/models.js +1 -1
  148. package/dist/core/runtime-assets.d.ts +2 -0
  149. package/dist/core/runtime-assets.js +4 -4
  150. package/dist/core/src/index.d.ts +7 -5
  151. package/dist/core/src/index.d.ts.map +1 -1
  152. package/dist/core/src/lock.d.ts +47 -26
  153. package/dist/core/src/lock.d.ts.map +1 -1
  154. package/dist/core/src/manifest.d.ts.map +1 -1
  155. package/dist/core/src/models.d.ts +61 -49
  156. package/dist/core/src/models.d.ts.map +1 -1
  157. package/dist/core/src/repo-manager.d.ts +79 -36
  158. package/dist/core/src/repo-manager.d.ts.map +1 -1
  159. package/dist/core/src/runtime-assets.d.ts.map +1 -1
  160. package/dist/core/src/walker.d.ts +52 -0
  161. package/dist/core/src/walker.d.ts.map +1 -0
  162. package/dist/core/src/workspace-config.d.ts +160 -45
  163. package/dist/core/src/workspace-config.d.ts.map +1 -1
  164. package/dist/core/src/workspace-yaml-editor.d.ts +33 -16
  165. package/dist/core/src/workspace-yaml-editor.d.ts.map +1 -1
  166. package/dist/core/store.d.ts +2 -0
  167. package/dist/core/workspace-config.d.ts +2 -0
  168. package/dist/core/workspace-config.js +3 -3
  169. package/dist/deploy/index.d.ts +2 -0
  170. package/dist/deploy/index.js +167 -52
  171. package/dist/deploy/index.js.map +1 -1
  172. package/dist/deploy/src/index.d.ts +4 -3
  173. package/dist/deploy/src/index.d.ts.map +1 -1
  174. package/dist/deploy/src/targets/container-runtime.d.ts +1 -0
  175. package/dist/deploy/src/targets/container-runtime.d.ts.map +1 -1
  176. package/dist/deploy/src/targets/docker.d.ts +1 -0
  177. package/dist/deploy/src/targets/docker.d.ts.map +1 -1
  178. package/dist/deploy/src/targets/local.d.ts.map +1 -1
  179. package/dist/deploy/src/targets/nix.d.ts +36 -0
  180. package/dist/deploy/src/targets/nix.d.ts.map +1 -0
  181. package/dist/deploy/src/targets/podman.d.ts +1 -0
  182. package/dist/deploy/src/targets/podman.d.ts.map +1 -1
  183. package/dist/deploy/src/targets/process-handle.d.ts +34 -0
  184. package/dist/deploy/src/targets/process-handle.d.ts.map +1 -0
  185. package/dist/discovery/index.d.ts +2 -0
  186. package/dist/discovery/index.js +3 -3
  187. package/dist/discovery/src/source-config.d.ts +2 -2
  188. package/dist/{ensure-sources-COGVKY44.js → ensure-sources-ALTI5PXR.js} +20 -16
  189. package/dist/ensure-sources-ALTI5PXR.js.map +1 -0
  190. package/dist/library/index.d.ts +2 -0
  191. package/dist/library/index.js +4 -4
  192. package/dist/library/src/remote/remote-catalog-source.d.ts +17 -0
  193. package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
  194. package/dist/open-library-EEGG6RDN.js +13 -0
  195. package/dist/{open-library-DWAQFUSQ.js.map → open-library-EEGG6RDN.js.map} +1 -1
  196. package/dist/plugin-registry/index.d.ts +2 -0
  197. package/dist/plugin-registry/index.js +1 -1
  198. package/dist/plugin-registry/src/context.d.ts +30 -1
  199. package/dist/plugin-registry/src/context.d.ts.map +1 -1
  200. package/dist/plugin-registry/src/deploy-handle.d.ts +17 -1
  201. package/dist/plugin-registry/src/deploy-handle.d.ts.map +1 -1
  202. package/dist/plugin-registry/src/deploy-helpers.d.ts +69 -0
  203. package/dist/plugin-registry/src/deploy-helpers.d.ts.map +1 -0
  204. package/dist/plugin-registry/src/index.d.ts +6 -4
  205. package/dist/plugin-registry/src/index.d.ts.map +1 -1
  206. package/dist/plugin-registry/src/internal.d.ts.map +1 -1
  207. package/dist/plugin-registry/src/registry.d.ts +1 -0
  208. package/dist/plugin-registry/src/registry.d.ts.map +1 -1
  209. package/dist/plugin-registry/src/targets.d.ts +4 -0
  210. package/dist/plugin-registry/src/targets.d.ts.map +1 -1
  211. package/dist/{plugin-store-6OENKNFW.js → plugin-store-G277ZX3B.js} +8 -8
  212. package/dist/{plugin-store-6OENKNFW.js.map → plugin-store-G277ZX3B.js.map} +1 -1
  213. package/dist/plugins/index.d.ts +2 -0
  214. package/dist/plugins/src/catalog-source.d.ts +5 -0
  215. package/dist/plugins/src/catalog-source.d.ts.map +1 -1
  216. package/dist/resolver/index.d.ts +2 -0
  217. package/dist/runner/index.d.ts +2 -0
  218. package/dist/runner/index.js +17 -16
  219. package/dist/runner/prompt-assembly.d.ts +2 -0
  220. package/dist/runner/src/resources.d.ts.map +1 -1
  221. package/dist/runner/src/serve.d.ts +7 -0
  222. package/dist/runner/src/serve.d.ts.map +1 -1
  223. package/dist/sdk/asset-manager.d.ts +2 -0
  224. package/dist/sdk/asset-manager.js +7 -7
  225. package/dist/sdk/bridge.d.ts +2 -0
  226. package/dist/sdk/bridge.js +3 -3
  227. package/dist/sdk/client.d.ts +2 -0
  228. package/dist/sdk/core.d.ts +2 -0
  229. package/dist/sdk/core.js +5 -5
  230. package/dist/sdk/flow.d.ts +2 -0
  231. package/dist/sdk/index.d.ts +2 -0
  232. package/dist/sdk/index.js +53 -19
  233. package/dist/sdk/index.js.map +1 -1
  234. package/dist/sdk/resolver.d.ts +2 -0
  235. package/dist/sdk/runner.d.ts +2 -0
  236. package/dist/sdk/runner.js +17 -16
  237. package/dist/sdk/session.d.ts +2 -0
  238. package/dist/sdk/src/local-runtime.d.ts +8 -0
  239. package/dist/sdk/src/local-runtime.d.ts.map +1 -1
  240. package/dist/sdk/src/transport.d.ts +7 -1
  241. package/dist/sdk/src/transport.d.ts.map +1 -1
  242. package/dist/sdk/store.d.ts +2 -0
  243. package/dist/sdk/telemetry.d.ts +2 -0
  244. package/dist/sdk/transport/ws/client.d.ts +2 -0
  245. package/dist/sdk/transport/ws/client.js +2 -1
  246. package/dist/sdk/transport/ws/server.d.ts +2 -0
  247. package/dist/sdk/transport/ws/server.js +2 -1
  248. package/dist/sdk/transport/ws.d.ts +2 -0
  249. package/dist/sdk/transport/ws.js +4 -3
  250. package/dist/sdk/transport.d.ts +2 -0
  251. package/dist/sdk/transport.js +4 -3
  252. package/dist/sdk/types.d.ts +2 -0
  253. package/dist/secrets/index.d.ts +2 -0
  254. package/dist/session/index.d.ts +2 -0
  255. package/dist/{setup-ACMP3QZC.js → setup-REX4I5NE.js} +10 -10
  256. package/dist/{setup-ACMP3QZC.js.map → setup-REX4I5NE.js.map} +1 -1
  257. package/dist/store/index.d.ts +2 -0
  258. package/dist/store/react.d.ts +2 -0
  259. package/dist/store/vue.d.ts +2 -0
  260. package/dist/store-client-IX3Y67NK.js +14 -0
  261. package/dist/{store-client-ZSLNOOQG.js.map → store-client-IX3Y67NK.js.map} +1 -1
  262. package/dist/telemetry/index.d.ts +2 -0
  263. package/dist/transport/index.d.ts +2 -0
  264. package/dist/transport/index.js +4 -3
  265. package/dist/transport/src/ws/auth.d.ts +34 -0
  266. package/dist/transport/src/ws/auth.d.ts.map +1 -0
  267. package/dist/transport/src/ws/client.d.ts +4 -0
  268. package/dist/transport/src/ws/client.d.ts.map +1 -1
  269. package/dist/transport/src/ws/index.d.ts +3 -2
  270. package/dist/transport/src/ws/index.d.ts.map +1 -1
  271. package/dist/transport/src/ws/server.d.ts +5 -0
  272. package/dist/transport/src/ws/server.d.ts.map +1 -1
  273. package/dist/transport/ws/client.d.ts +2 -0
  274. package/dist/transport/ws/client.js +2 -1
  275. package/dist/transport/ws/server.d.ts +2 -0
  276. package/dist/transport/ws/server.js +2 -1
  277. package/dist/transport/ws.d.ts +2 -0
  278. package/dist/transport/ws.js +4 -3
  279. package/dist/tui/index.d.ts +2 -0
  280. package/dist/tui/index.js +17 -16
  281. package/dist/tui/index.js.map +1 -1
  282. package/dist/types/index.d.ts +2 -0
  283. package/dist/types/manifests.d.ts +2 -0
  284. package/dist/workspace-plugin/adapters/mcp.d.ts +2 -0
  285. package/dist/workspace-plugin/adapters/omp.d.ts +2 -0
  286. package/dist/workspace-plugin/index.d.ts +2 -0
  287. package/dist/workspace-plugin/index.js +1 -1
  288. package/package.json +4 -2
  289. package/dist/asset-feeds-PJDJ3QYI.js.map +0 -1
  290. package/dist/chunk-2DNSSQ22.js.map +0 -1
  291. package/dist/chunk-7PTP3SQJ.js.map +0 -1
  292. package/dist/chunk-G6GKWGOW.js.map +0 -1
  293. package/dist/chunk-IGQEXBBG.js.map +0 -1
  294. package/dist/chunk-KA46DUM4.js.map +0 -1
  295. package/dist/chunk-NGC7ZQI4.js.map +0 -1
  296. package/dist/chunk-PBWMV5GM.js.map +0 -1
  297. package/dist/chunk-RENHNO4J.js.map +0 -1
  298. package/dist/chunk-TKOLD2O7.js.map +0 -1
  299. package/dist/chunk-TTY56FQQ.js.map +0 -1
  300. package/dist/chunk-UZRY5UI2.js.map +0 -1
  301. package/dist/chunk-W2O5LWYU.js +0 -3
  302. package/dist/chunk-WIR34WMU.js.map +0 -1
  303. package/dist/chunk-X5Y4EGZB.js.map +0 -1
  304. package/dist/ensure-sources-COGVKY44.js.map +0 -1
  305. package/dist/open-library-DWAQFUSQ.js +0 -13
  306. package/dist/store-client-ZSLNOOQG.js +0 -14
@@ -1,6 +1,6 @@
1
- import { parseDep } from './chunk-X5Y4EGZB.js';
1
+ import { parseDep } from './chunk-VUCPJBAG.js';
2
2
  import { readFileSync, readdirSync, statSync } from 'fs';
3
- import { basename, dirname, join, relative } from 'path';
3
+ import { basename, dirname, join } from 'path';
4
4
  import { parse } from 'yaml';
5
5
 
6
6
  function parseFrontmatter(text) {
@@ -35,7 +35,7 @@ function fromSkillMd(filePath, repoName) {
35
35
  kind,
36
36
  description: String(meta.description ?? ""),
37
37
  source: filePath,
38
- repository: repoName,
38
+ publisher: repoName,
39
39
  version: extractVersion(meta),
40
40
  requires: parseRequires(meta),
41
41
  dependencies: []
@@ -48,7 +48,7 @@ function fromAgentMd(filePath, repoName) {
48
48
  kind: "agent",
49
49
  description: String(meta.description ?? ""),
50
50
  source: filePath,
51
- repository: repoName,
51
+ publisher: repoName,
52
52
  version: extractVersion(meta),
53
53
  requires: parseRequires(meta),
54
54
  dependencies: []
@@ -125,7 +125,7 @@ function fromAgentYaml(filePath, repoName) {
125
125
  kind: "agent",
126
126
  description: String(meta.description ?? ""),
127
127
  source: filePath,
128
- repository: repoName,
128
+ publisher: repoName,
129
129
  version: String(meta.version ?? ""),
130
130
  requires,
131
131
  dependencies: []
@@ -139,7 +139,7 @@ function fromPromptMd(filePath, repoName) {
139
139
  kind: "prompt",
140
140
  description: String(meta.description ?? ""),
141
141
  source: filePath,
142
- repository: repoName,
142
+ publisher: repoName,
143
143
  version: extractVersion(meta),
144
144
  requires: parseRequires(meta),
145
145
  dependencies: []
@@ -157,7 +157,7 @@ function fromFlowYaml(filePath, repoName) {
157
157
  kind: "flow",
158
158
  description: String(meta.description ?? ""),
159
159
  source: filePath,
160
- repository: repoName,
160
+ publisher: repoName,
161
161
  version: String(meta.version ?? ""),
162
162
  requires: parseRequires(meta),
163
163
  dependencies: []
@@ -177,7 +177,7 @@ function fromBundleYaml(filePath, repoName) {
177
177
  kind: "bundle",
178
178
  description: String(meta.description ?? ""),
179
179
  source: filePath,
180
- repository: repoName,
180
+ publisher: repoName,
181
181
  version: String(meta.version ?? ""),
182
182
  requires: parseRequires(meta),
183
183
  dependencies
@@ -190,7 +190,7 @@ function fromContractMd(filePath, repoName) {
190
190
  kind: "contract",
191
191
  description: String(meta.description ?? ""),
192
192
  source: filePath,
193
- repository: repoName,
193
+ publisher: repoName,
194
194
  version: extractVersion(meta),
195
195
  requires: parseRequires(meta),
196
196
  dependencies: []
@@ -217,7 +217,7 @@ function fromMcpServerMd(filePath, repoName) {
217
217
  kind: "mcp-server",
218
218
  description: String(meta.description ?? ""),
219
219
  source: filePath,
220
- repository: repoName,
220
+ publisher: repoName,
221
221
  version: extractVersion(meta),
222
222
  requires: parseRequires(meta),
223
223
  dependencies: [],
@@ -235,7 +235,7 @@ function fromKnowledgeYaml(filePath, repoName) {
235
235
  kind: "knowledge",
236
236
  description: String(meta.description ?? ""),
237
237
  source: filePath,
238
- repository: repoName,
238
+ publisher: repoName,
239
239
  version: String(meta.version ?? ""),
240
240
  requires: parseRequires(meta),
241
241
  dependencies: []
@@ -250,7 +250,7 @@ function fromConnectorMd(filePath, repoName) {
250
250
  kind: "connector",
251
251
  description: String(meta.description ?? ""),
252
252
  source: filePath,
253
- repository: repoName,
253
+ publisher: repoName,
254
254
  version: extractVersion(meta),
255
255
  requires: parseRequires(meta),
256
256
  dependencies: [],
@@ -285,39 +285,6 @@ function* walkDir(dir) {
285
285
  }
286
286
  }
287
287
  }
288
- var KIND_DIRS = /* @__PURE__ */ new Set([
289
- "skills",
290
- "agents",
291
- "agent",
292
- "flows",
293
- "connectors",
294
- "prompts",
295
- "bundles",
296
- "contracts",
297
- "knowledge",
298
- "mcp-servers",
299
- "mcp",
300
- "profiles"
301
- ]);
302
- var FOLDER_MANIFESTS = /* @__PURE__ */ new Set([
303
- "SKILL.md",
304
- "AGENT.md",
305
- "agent.yaml",
306
- "CONTRACT.md",
307
- "MCP.md",
308
- "CONNECTOR.md",
309
- "knowledge.yaml"
310
- ]);
311
- function deriveDomain(root, filePath) {
312
- const segs = relative(root, filePath).split("/");
313
- for (let i = 1; i < segs.length; i++) {
314
- if (KIND_DIRS.has(segs[i])) return segs.slice(0, i).join("/");
315
- }
316
- const fileName = segs[segs.length - 1] ?? "";
317
- const stripCount = FOLDER_MANIFESTS.has(fileName) ? 2 : 1;
318
- if (segs.length > stripCount) return segs.slice(0, segs.length - stripCount).join("/");
319
- return "";
320
- }
321
288
  function scanDirectory(root, repoName) {
322
289
  const entries = /* @__PURE__ */ new Map();
323
290
  function add(e) {
@@ -330,20 +297,18 @@ function scanDirectory(root, repoName) {
330
297
  if (e.source > existing.source) entries.set(key, e);
331
298
  }
332
299
  for (const { path: filePath, name } of walkDir(root)) {
333
- const domain = deriveDomain(root, filePath);
334
300
  try {
335
- if (name === "SKILL.md") add({ ...fromSkillMd(filePath, repoName), domain });
336
- else if (name === "AGENT.md") add({ ...fromAgentMd(filePath, repoName), domain });
337
- else if (name === "agent.yaml") add({ ...fromAgentYaml(filePath, repoName), domain });
338
- else if (name === "CONTRACT.md") add({ ...fromContractMd(filePath, repoName), domain });
339
- else if (name === "MCP.md") add({ ...fromMcpServerMd(filePath, repoName), domain });
340
- else if (name === "CONNECTOR.md") add({ ...fromConnectorMd(filePath, repoName), domain });
341
- else if (name === "knowledge.yaml") add({ ...fromKnowledgeYaml(filePath, repoName), domain });
342
- else if (name.endsWith(".prompt.md")) add({ ...fromPromptMd(filePath, repoName), domain });
343
- else if (name.endsWith(".bundle.yaml"))
344
- add({ ...fromBundleYaml(filePath, repoName), domain });
301
+ if (name === "SKILL.md") add(fromSkillMd(filePath, repoName));
302
+ else if (name === "AGENT.md") add(fromAgentMd(filePath, repoName));
303
+ else if (name === "agent.yaml") add(fromAgentYaml(filePath, repoName));
304
+ else if (name === "CONTRACT.md") add(fromContractMd(filePath, repoName));
305
+ else if (name === "MCP.md") add(fromMcpServerMd(filePath, repoName));
306
+ else if (name === "CONNECTOR.md") add(fromConnectorMd(filePath, repoName));
307
+ else if (name === "knowledge.yaml") add(fromKnowledgeYaml(filePath, repoName));
308
+ else if (name.endsWith(".prompt.md")) add(fromPromptMd(filePath, repoName));
309
+ else if (name.endsWith(".bundle.yaml")) add(fromBundleYaml(filePath, repoName));
345
310
  else if (name.endsWith(".flow.yaml") || name.endsWith(".flow.json"))
346
- add({ ...fromFlowYaml(filePath, repoName), domain });
311
+ add(fromFlowYaml(filePath, repoName));
347
312
  } catch {
348
313
  }
349
314
  }
@@ -351,5 +316,5 @@ function scanDirectory(root, repoName) {
351
316
  }
352
317
 
353
318
  export { fromAgentMd, fromAgentYaml, fromBundleYaml, fromConnectorMd, fromContractMd, fromFlowYaml, fromKnowledgeYaml, fromMcpServerMd, fromPromptMd, fromSkillMd, parseFrontmatter, parseRequires, scanDirectory, walkDir };
354
- //# sourceMappingURL=chunk-WIR34WMU.js.map
355
- //# sourceMappingURL=chunk-WIR34WMU.js.map
319
+ //# sourceMappingURL=chunk-NQL3T75I.js.map
320
+ //# sourceMappingURL=chunk-NQL3T75I.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../core/src/manifest.ts"],"names":[],"mappings":"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","file":"chunk-NQL3T75I.js","sourcesContent":["/**\n * Manifest parsing — reads SKILL.md, AGENT.md, agent.yaml, CONTRACT.md,\n * CONNECTOR.md, *.prompt.md, *.flow.yaml, *.bundle.yaml files and\n * produces CatalogEntry objects.\n * Used by @skaile/asset-manager for on-demand repo scanning.\n */\n\nimport { readdirSync, readFileSync, statSync } from \"node:fs\";\nimport { basename, dirname, join } from \"node:path\";\nimport { parse } from \"yaml\";\nimport type { AssetKind, CatalogEntry, Dependency } from \"./models.js\";\nimport { parseDep } from \"./models.js\";\n\n// ── Frontmatter helpers ───────────────────────────────────────────────────────\n\n/**\n * Result of parsing YAML frontmatter from a markdown file.\n * @docLink packages/core/concepts#frontmatter-result\n */\nexport interface FrontmatterResult {\n /** Parsed YAML data. Empty object if no frontmatter block is present. */\n data: Record<string, unknown>;\n /** Markdown body below the frontmatter block (trimmed). */\n body: string;\n}\n\n/**\n * Parse YAML frontmatter from a markdown file (`---` delimited).\n * Returns `{ data: {}, body: text }` when no frontmatter block is present.\n *\n * @param text - Raw file contents\n * @returns Parsed frontmatter data and the remaining body text\n * @docLink packages/core/concepts#parse-frontmatter\n */\nexport function parseFrontmatter(text: string): FrontmatterResult {\n const m = text.match(/^---\\s*\\n([\\s\\S]*?)\\n---/);\n if (!m) return { data: {}, body: text.trim() };\n try {\n const data = (parse(m[1]!) as Record<string, unknown>) ?? {};\n const body = text.slice(m[0].length).trim();\n return { data, body };\n } catch {\n return { data: {}, body: text.trim() };\n }\n}\n\n/** Extract version from frontmatter, checking both top-level and metadata.version. */\nfunction extractVersion(meta: Record<string, unknown>): string {\n return String(\n meta.version ?? (meta.metadata as Record<string, unknown> | undefined)?.version ?? \"\",\n );\n}\n\n/**\n * Parse the `requires:` field from manifest frontmatter into typed `Dependency` objects.\n * Accepts a comma-separated string or an array of `\"kind:name\"` strings. Reads from either\n * the root or `metadata.requires` (matching `extractVersion`'s dual-location behavior) so\n * skill authors can follow the agentskills.io convention of placing skaile extensions under\n * `metadata:` while remaining backward-compatible with root-level declarations.\n *\n * @param meta - Parsed frontmatter data object\n * @returns Array of `Dependency` objects (empty when `requires` is absent)\n * @docLink packages/core/concepts#parse-requires\n */\nexport function parseRequires(meta: Record<string, unknown>): Dependency[] {\n const raw = meta.requires ?? (meta.metadata as Record<string, unknown> | undefined)?.requires;\n if (!raw) return [];\n const list =\n typeof raw === \"string\"\n ? raw.split(\",\").map((s) => s.trim())\n : Array.isArray(raw)\n ? (raw as string[])\n : [];\n return list.filter(Boolean).map(parseDep);\n}\n\n// ── Manifest parsers ──────────────────────────────────────────────────────────\n\n/**\n * Parse a `SKILL.md` file into a `CatalogEntry`.\n * The `kind` field defaults to `\"skill\"` but can be overridden to `\"agent\"` or `\"prompt\"`\n * via the `type:` frontmatter key. Falls back to the parent directory name when `name:` is absent.\n *\n * @param filePath - Absolute path to the `SKILL.md` file\n * @param repoName - Repository name used as the `repository` field of the entry\n * @returns Populated `CatalogEntry` with kind, name, description, version, and requires\n * @docLink packages/core/concepts#from-skill-md\n */\nexport function fromSkillMd(filePath: string, repoName: string): CatalogEntry {\n const { data: meta } = parseFrontmatter(readFileSync(filePath, \"utf8\"));\n let kind = String(meta.type ?? \"skill\") as AssetKind;\n if (![\"skill\", \"agent\", \"prompt\", \"persona\", \"ruleset\", \"knowledge\"].includes(kind))\n kind = \"skill\";\n return {\n name: String(meta.name ?? basename(dirname(filePath))),\n kind,\n description: String(meta.description ?? \"\"),\n source: filePath,\n publisher: repoName,\n version: extractVersion(meta),\n requires: parseRequires(meta),\n dependencies: [],\n };\n}\n\n/**\n * Parse an `AGENT.md` file into a `CatalogEntry` with `kind: \"agent\"`.\n * Falls back to the parent directory name when `name:` is absent.\n *\n * @param filePath - Absolute path to the `AGENT.md` file\n * @param repoName - Repository name used as the `repository` field of the entry\n * @returns Populated `CatalogEntry` with kind `\"agent\"`\n * @docLink packages/core/concepts#from-agent-md\n */\nexport function fromAgentMd(filePath: string, repoName: string): CatalogEntry {\n const { data: meta } = parseFrontmatter(readFileSync(filePath, \"utf8\"));\n return {\n name: String(meta.name ?? basename(dirname(filePath))),\n kind: \"agent\",\n description: String(meta.description ?? \"\"),\n source: filePath,\n publisher: repoName,\n version: extractVersion(meta),\n requires: parseRequires(meta),\n dependencies: [],\n };\n}\n\n/**\n * Parse an `agent.yaml` file into a `CatalogEntry` with `kind: \"agent\"`.\n * Collects sub-agent dependencies from `requires[]` (new format) and `dependencies[]`\n * (legacy format), skill abilities from `abilities[]`, and contracts from `contracts[]`.\n *\n * @param filePath - Absolute path to the `agent.yaml` file\n * @param repoName - Repository name used as the `repository` field of the entry\n * @returns Populated `CatalogEntry` with kind `\"agent\"` and full dependency graph\n * @docLink packages/core/concepts#from-agent-yaml\n */\nexport function fromAgentYaml(filePath: string, repoName: string): CatalogEntry {\n let meta: Record<string, unknown> = {};\n try {\n meta = (parse(readFileSync(filePath, \"utf8\")) as Record<string, unknown>) ?? {};\n } catch {}\n\n const requires: Dependency[] = [];\n\n // Sub-agent dependencies from requires[] (new format: {name, source, ...})\n const agentRequires = meta.requires;\n if (Array.isArray(agentRequires)) {\n for (const d of agentRequires) {\n if (typeof d === \"object\" && d !== null && \"name\" in d) {\n requires.push({\n kind: \"agent\",\n name: String((d as Record<string, unknown>).name),\n });\n }\n }\n }\n\n // Legacy sub-agent dependencies from dependencies[] (old format: {name, ...})\n const deps = meta.dependencies;\n if (Array.isArray(deps)) {\n for (const d of deps) {\n if (typeof d === \"object\" && d !== null && \"name\" in d) {\n requires.push({\n kind: \"agent\",\n name: String((d as Record<string, unknown>).name),\n });\n }\n }\n }\n\n // Skill abilities referenced in the system prompt\n const abilities = meta.abilities;\n if (Array.isArray(abilities)) {\n for (const a of abilities) {\n if (typeof a === \"string\" && a) {\n requires.push({ kind: \"skill\", name: a });\n }\n }\n }\n\n // Contracts referenced in the system prompt (co-located in skills dir)\n const contracts = meta.contracts;\n if (Array.isArray(contracts)) {\n for (const c of contracts) {\n if (typeof c === \"string\" && c) {\n requires.push({ kind: \"contract\", name: c });\n }\n }\n }\n\n // Mixin composition fields — track catalog refs as requires so `skaile install`\n // automatically pulls them. Local paths (. or /) are skipped — not catalog assets.\n for (const [field, defaultKind] of [\n [\"persona\", \"persona\"],\n [\"rules\", \"ruleset\"],\n [\"knowledge\", \"knowledge\"],\n ] as const) {\n const refs = meta[field];\n if (!Array.isArray(refs)) continue;\n for (const r of refs) {\n if (typeof r !== \"string\" || !r) continue;\n if (r.startsWith(\".\") || r.startsWith(\"/\")) continue; // local path — skip\n // Normalize: if no kind: prefix, inject the default kind\n const normalized = r.includes(\":\") ? r : `${defaultKind}:${r}`;\n // Strip @repo and #pin — only kind:name matters for requires\n const colonIdx = normalized.indexOf(\":\");\n const kind = normalized.slice(0, colonIdx).trim();\n let name = normalized.slice(colonIdx + 1).trim();\n const atIdx = name.indexOf(\"@\");\n if (atIdx !== -1) name = name.slice(0, atIdx).trim();\n const hashIdx = name.indexOf(\"#\");\n if (hashIdx !== -1) name = name.slice(0, hashIdx).trim();\n if (name) requires.push({ kind, name });\n }\n }\n\n return {\n name: String(meta.name ?? basename(dirname(filePath))),\n kind: \"agent\",\n description: String(meta.description ?? \"\"),\n source: filePath,\n publisher: repoName,\n version: String(meta.version ?? \"\"),\n requires,\n dependencies: [],\n };\n}\n\n/**\n * Parse a `*.prompt.md` file into a `CatalogEntry` with `kind: \"prompt\"`.\n * The name defaults to the filename stem (without the `.prompt.md` suffix)\n * when no `name:` frontmatter key is present.\n *\n * @param filePath - Absolute path to the `.prompt.md` file\n * @param repoName - Repository name used as the `repository` field of the entry\n * @returns Populated `CatalogEntry` with kind `\"prompt\"`\n * @docLink packages/core/concepts#from-prompt-md\n */\nexport function fromPromptMd(filePath: string, repoName: string): CatalogEntry {\n const { data: meta } = parseFrontmatter(readFileSync(filePath, \"utf8\"));\n const name = String(meta.name ?? basename(filePath).replace(/\\.prompt\\.md$/, \"\"));\n return {\n name,\n kind: \"prompt\",\n description: String(meta.description ?? \"\"),\n source: filePath,\n publisher: repoName,\n version: extractVersion(meta),\n requires: parseRequires(meta),\n dependencies: [],\n };\n}\n\n/**\n * Parse a `*.flow.yaml` or `*.flow.json` file into a `CatalogEntry` with `kind: \"flow\"`.\n * The name resolves from `name:` or `id:` frontmatter, falling back to the filename stem.\n *\n * @param filePath - Absolute path to the flow definition file\n * @param repoName - Repository name used as the `repository` field of the entry\n * @returns Populated `CatalogEntry` with kind `\"flow\"`\n * @docLink packages/core/concepts#from-flow-yaml\n */\nexport function fromFlowYaml(filePath: string, repoName: string): CatalogEntry {\n let meta: Record<string, unknown> = {};\n try {\n meta = (parse(readFileSync(filePath, \"utf8\")) as Record<string, unknown>) ?? {};\n } catch {}\n\n const stem = basename(filePath)\n .replace(/\\.flow\\.yaml$/, \"\")\n .replace(/\\.flow\\.json$/, \"\");\n return {\n name: String(meta.name ?? meta.id ?? stem),\n kind: \"flow\",\n description: String(meta.description ?? \"\"),\n source: filePath,\n publisher: repoName,\n version: String(meta.version ?? \"\"),\n requires: parseRequires(meta),\n dependencies: [],\n };\n}\n\n/**\n * Parse a `*.bundle.yaml` file into a `CatalogEntry` with `kind: \"bundle\"`.\n * Bundles declare a flat list of string `dependencies` (asset refs) rather than\n * typed `Dependency` objects; both `requires` and `dependencies` are populated.\n *\n * @param filePath - Absolute path to the bundle YAML file\n * @param repoName - Repository name used as the `repository` field of the entry\n * @returns Populated `CatalogEntry` with kind `\"bundle\"`\n * @docLink packages/core/concepts#from-bundle-yaml\n */\nexport function fromBundleYaml(filePath: string, repoName: string): CatalogEntry {\n let meta: Record<string, unknown> = {};\n try {\n meta = (parse(readFileSync(filePath, \"utf8\")) as Record<string, unknown>) ?? {};\n } catch {}\n\n const name = String(meta.name ?? basename(filePath).replace(/\\.bundle\\.yaml$/, \"\"));\n\n const deps = meta.dependencies;\n const dependencies = Array.isArray(deps) ? (deps as string[]).filter(Boolean) : [];\n\n return {\n name,\n kind: \"bundle\",\n description: String(meta.description ?? \"\"),\n source: filePath,\n publisher: repoName,\n version: String(meta.version ?? \"\"),\n requires: parseRequires(meta),\n dependencies,\n };\n}\n\n/**\n * Parse a `CONTRACT.md` file into a `CatalogEntry` with `kind: \"contract\"`.\n * Falls back to the parent directory name when `name:` is absent.\n *\n * @param filePath - Absolute path to the `CONTRACT.md` file\n * @param repoName - Repository name used as the `repository` field of the entry\n * @returns Populated `CatalogEntry` with kind `\"contract\"`\n * @docLink packages/core/concepts#from-contract-md\n */\nexport function fromContractMd(filePath: string, repoName: string): CatalogEntry {\n const { data: meta } = parseFrontmatter(readFileSync(filePath, \"utf8\"));\n return {\n name: String(meta.name ?? basename(dirname(filePath))),\n kind: \"contract\",\n description: String(meta.description ?? \"\"),\n source: filePath,\n publisher: repoName,\n version: extractVersion(meta),\n requires: parseRequires(meta),\n dependencies: [],\n };\n}\n\n/**\n * Parse an `MCP.md` file into a `CatalogEntry` with `kind: \"mcp-server\"`.\n * Falls back to the parent directory name when `name:` is absent.\n *\n * Frontmatter fields (catalog identity):\n * - `name` — server name (default: parent dir name)\n * - `description` — short description\n * - `version` — semver\n * - `keywords` — array of discovery tags\n *\n * Frontmatter fields (runtime defaults, stored in `metadata`):\n * - `transport` — \"stdio\" | \"sse\" | \"http\" (default: \"stdio\")\n * - `command` — command to execute (stdio)\n * - `args` — command arguments (stdio)\n * - `env` — environment variables (stdio)\n * - `url` — server URL (sse/http)\n * - `headers` — HTTP headers (sse/http)\n *\n * When `mcp:name` appears in `skaile.yaml` `dependencies`, the runner reads\n * these defaults from `metadata` to build a `McpServerDeclaration` without\n * requiring verbose inline config.\n *\n * @param filePath - Absolute path to the `MCP.md` file\n * @param repoName - Repository name used as the `repository` field of the entry\n * @returns Populated `CatalogEntry` with kind `\"mcp-server\"`\n * @docLink packages/core/concepts#from-mcp-server-md\n */\nexport function fromMcpServerMd(filePath: string, repoName: string): CatalogEntry {\n const { data: meta } = parseFrontmatter(readFileSync(filePath, \"utf8\"));\n\n // Extract runtime defaults into metadata\n const metadata: Record<string, unknown> = {};\n if (meta.transport) metadata.transport = String(meta.transport);\n if (meta.command) metadata.command = String(meta.command);\n if (Array.isArray(meta.args)) metadata.args = meta.args.map(String);\n if (meta.env && typeof meta.env === \"object\" && !Array.isArray(meta.env)) {\n metadata.env = meta.env as Record<string, string>;\n }\n if (meta.url) metadata.url = String(meta.url);\n if (meta.headers && typeof meta.headers === \"object\" && !Array.isArray(meta.headers)) {\n metadata.headers = meta.headers as Record<string, string>;\n }\n if (meta.recipe && typeof meta.recipe === \"object\" && !Array.isArray(meta.recipe)) {\n metadata.recipe = meta.recipe;\n }\n\n return {\n name: String(meta.name ?? basename(dirname(filePath))),\n kind: \"mcp-server\",\n description: String(meta.description ?? \"\"),\n source: filePath,\n publisher: repoName,\n version: extractVersion(meta),\n requires: parseRequires(meta),\n dependencies: [],\n metadata: Object.keys(metadata).length > 0 ? metadata : undefined,\n };\n}\n\n/**\n * Parse a `knowledge.yaml` file into a `CatalogEntry` with `kind: \"knowledge\"`.\n * Falls back to the parent directory name when `name:` is absent.\n *\n * @param filePath - Absolute path to the `knowledge.yaml` file\n * @param repoName - Repository name used as the `repository` field of the entry\n * @returns Populated `CatalogEntry` with kind `\"knowledge\"`\n * @docLink packages/core/concepts#from-knowledge-yaml\n */\nexport function fromKnowledgeYaml(filePath: string, repoName: string): CatalogEntry {\n let meta: Record<string, unknown> = {};\n try {\n meta = (parse(readFileSync(filePath, \"utf8\")) as Record<string, unknown>) ?? {};\n } catch {}\n return {\n name: String(meta.name ?? basename(dirname(filePath))),\n kind: \"knowledge\",\n description: String(meta.description ?? \"\"),\n source: filePath,\n publisher: repoName,\n version: String(meta.version ?? \"\"),\n requires: parseRequires(meta),\n dependencies: [],\n };\n}\n\n/**\n * Parse a `CONNECTOR.md` file into a `CatalogEntry` with `kind: \"connector\"`.\n * Falls back to the parent directory name when `name:` is absent.\n *\n * Frontmatter fields (catalog identity):\n * - `name` — connector name (default: parent dir name)\n * - `description` — short description\n * - `version` — semver\n *\n * Frontmatter fields (runtime defaults, stored in `metadata`):\n * - `entry` — adapter entry point (default: \"./adapter.ts\")\n * - `npm_deps` — npm dependencies required by the adapter\n * - `fields` — configuration fields the adapter expects\n * - `health_check` — whether to run a health check on connect\n *\n * The markdown body (below the frontmatter) is stored in `metadata.body`\n * so the runner can inject the connector's skill description into the\n * system prompt when `expose_as_skill` is enabled.\n *\n * @param filePath - Absolute path to the `CONNECTOR.md` file\n * @param repoName - Repository name used as the `repository` field of the entry\n * @returns Populated `CatalogEntry` with kind `\"connector\"`\n * @docLink packages/core/concepts#from-connector-md\n */\nexport function fromConnectorMd(filePath: string, repoName: string): CatalogEntry {\n const text = readFileSync(filePath, \"utf-8\");\n const { data: meta, body } = parseFrontmatter(text);\n const name = String(meta.name ?? basename(dirname(filePath)));\n return {\n name,\n kind: \"connector\" as AssetKind,\n description: String(meta.description ?? \"\"),\n source: filePath,\n publisher: repoName,\n version: extractVersion(meta),\n requires: parseRequires(meta),\n dependencies: [],\n metadata: {\n entry: meta.entry ?? \"./adapter.ts\",\n npm_deps: meta.npm_deps ?? {},\n fields: meta.fields ?? [],\n health_check: meta.health_check ?? null,\n body,\n },\n };\n}\n\n// ── Recursive walker ──────────────────────────────────────────────────────────\n\ninterface WalkEntry {\n path: string;\n name: string;\n}\n\n/**\n * Recursively yield every file entry under `dir`, sorted alphabetically at each level.\n * Skips `.git` and `node_modules` directories and follows symlinks (resolving to\n * the stat target). `node_modules` is excluded because Bun's `node_modules/.bun/...`\n * layout contains symlink farms that form cycles when packages reference each other\n * transitively — entering them causes unbounded recursion in this walker.\n *\n * @param dir - Absolute path to the directory to walk\n * @docLink packages/core/concepts#walk-dir\n */\nexport function* walkDir(dir: string): Generator<WalkEntry> {\n let dirEntries: import(\"node:fs\").Dirent<string>[];\n try {\n dirEntries = readdirSync(dir, { withFileTypes: true, encoding: \"utf8\" });\n } catch {\n return;\n }\n for (const e of dirEntries.sort((a, b) => (a.name < b.name ? -1 : 1))) {\n const full = join(dir, e.name);\n if (e.isSymbolicLink()) {\n try {\n if (statSync(full).isDirectory()) yield* walkDir(full);\n else yield { path: full, name: e.name };\n } catch {}\n } else if (e.isDirectory()) {\n if (e.name !== \".git\" && e.name !== \"node_modules\") yield* walkDir(full);\n } else if (e.isFile()) {\n yield { path: full, name: e.name };\n }\n }\n}\n\n// ── Public scanner ────────────────────────────────────────────────────────────\n\n/**\n * Walk `root` recursively and return a `CatalogEntry` for every recognized asset manifest found.\n *\n * Recognized filenames: `SKILL.md`, `AGENT.md`, `agent.yaml`, `CONTRACT.md`, `MCP.md`,\n * `CONNECTOR.md`, `*.prompt.md`, `*.bundle.yaml`, `*.flow.yaml`, `*.flow.json`.\n *\n * When two entries share the same `kind:name` key, the one with the alphabetically\n * later source path wins (consistent with catalog precedence rules).\n *\n * @param root - Absolute path to the directory tree to scan\n * @param repoName - Repository name attached to every produced entry\n * @returns Array of deduplicated `CatalogEntry` objects, one per manifest file\n * @docLink packages/core/concepts#scan-directory\n */\nexport function scanDirectory(root: string, repoName: string): CatalogEntry[] {\n const entries = new Map<string, CatalogEntry>();\n\n function add(e: CatalogEntry): void {\n const key = `${e.kind}:${e.name}`;\n const existing = entries.get(key);\n if (!existing) {\n entries.set(key, e);\n return;\n }\n // Among duplicates, alphabetically later source path wins\n if (e.source > existing.source) entries.set(key, e);\n }\n\n for (const { path: filePath, name } of walkDir(root)) {\n try {\n if (name === \"SKILL.md\") add(fromSkillMd(filePath, repoName));\n else if (name === \"AGENT.md\") add(fromAgentMd(filePath, repoName));\n else if (name === \"agent.yaml\") add(fromAgentYaml(filePath, repoName));\n else if (name === \"CONTRACT.md\") add(fromContractMd(filePath, repoName));\n else if (name === \"MCP.md\") add(fromMcpServerMd(filePath, repoName));\n else if (name === \"CONNECTOR.md\") add(fromConnectorMd(filePath, repoName));\n else if (name === \"knowledge.yaml\") add(fromKnowledgeYaml(filePath, repoName));\n else if (name.endsWith(\".prompt.md\")) add(fromPromptMd(filePath, repoName));\n else if (name.endsWith(\".bundle.yaml\")) add(fromBundleYaml(filePath, repoName));\n else if (name.endsWith(\".flow.yaml\") || name.endsWith(\".flow.json\"))\n add(fromFlowYaml(filePath, repoName));\n } catch {}\n }\n\n return [...entries.values()];\n}\n"]}