@skaile/workspaces 5.11.0 → 5.12.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 (403) hide show
  1. package/CHANGELOG.md +97 -0
  2. package/README.md +2 -2
  3. package/dist/{asset-feeds-CXGQIDFR.js → asset-feeds-AM6PSSGM.js} +24 -21
  4. package/dist/asset-feeds-AM6PSSGM.js.map +1 -0
  5. package/dist/asset-manager/catalog-deployer.js +8 -8
  6. package/dist/asset-manager/fragments.js +1 -1
  7. package/dist/asset-manager/index.js +16 -16
  8. package/dist/asset-manager/installer.js +11 -11
  9. package/dist/asset-manager/renderers.js +9 -9
  10. package/dist/asset-manager/src/fragments.d.ts +5 -0
  11. package/dist/asset-manager/src/fragments.d.ts.map +1 -1
  12. package/dist/asset-manager/src/index.d.ts +95 -10
  13. package/dist/asset-manager/src/index.d.ts.map +1 -1
  14. package/dist/asset-manager/src/install-agent.d.ts +9 -1
  15. package/dist/asset-manager/src/install-agent.d.ts.map +1 -1
  16. package/dist/asset-manager/src/installer.d.ts +10 -0
  17. package/dist/asset-manager/src/installer.d.ts.map +1 -1
  18. package/dist/asset-manager/src/renderers.d.ts +5 -0
  19. package/dist/asset-manager/src/renderers.d.ts.map +1 -1
  20. package/dist/bridge/drivers/claude-sdk.js +16 -13
  21. package/dist/bridge/drivers/claude-sdk.js.map +1 -1
  22. package/dist/bridge/drivers/codex.js +43 -16
  23. package/dist/bridge/drivers/codex.js.map +1 -1
  24. package/dist/bridge/drivers/continue.js +10 -10
  25. package/dist/bridge/drivers/echo.js +2 -2
  26. package/dist/bridge/drivers/gemini.js +7 -7
  27. package/dist/bridge/drivers/goose.js +10 -10
  28. package/dist/bridge/drivers/omp.js +37 -10
  29. package/dist/bridge/drivers/omp.js.map +1 -1
  30. package/dist/bridge/drivers/opencode.js +10 -10
  31. package/dist/bridge/drivers/qwen.js +7 -7
  32. package/dist/bridge/index.js +12 -12
  33. package/dist/bridge/src/codex/config-toml.d.ts +8 -3
  34. package/dist/bridge/src/codex/config-toml.d.ts.map +1 -1
  35. package/dist/bridge/src/codex/managed-driver.d.ts.map +1 -1
  36. package/dist/bridge/src/drivers/claude-sdk.d.ts +1 -1
  37. package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
  38. package/dist/bridge/src/drivers/codex.d.ts.map +1 -1
  39. package/dist/bridge/src/drivers/omp-models-yml.d.ts.map +1 -1
  40. package/dist/bridge/src/drivers/omp.d.ts +9 -0
  41. package/dist/bridge/src/drivers/omp.d.ts.map +1 -1
  42. package/dist/bridge/src/provider-materialize/credential-env.d.ts +15 -0
  43. package/dist/bridge/src/provider-materialize/credential-env.d.ts.map +1 -1
  44. package/dist/{chunk-4A4OD24G.js → chunk-27L6BBAT.js} +9 -9
  45. package/dist/{chunk-4A4OD24G.js.map → chunk-27L6BBAT.js.map} +1 -1
  46. package/dist/{chunk-HCEVNYSH.js → chunk-2JFIFDDO.js} +3 -3
  47. package/dist/{chunk-HCEVNYSH.js.map → chunk-2JFIFDDO.js.map} +1 -1
  48. package/dist/{chunk-3SM2DL2T.js → chunk-2X3JBVGD.js} +11 -10
  49. package/dist/chunk-2X3JBVGD.js.map +1 -0
  50. package/dist/{chunk-G4FFOV3N.js → chunk-3HUV2LJF.js} +4 -4
  51. package/dist/{chunk-G4FFOV3N.js.map → chunk-3HUV2LJF.js.map} +1 -1
  52. package/dist/{chunk-QZNJOHN6.js → chunk-3LVB3HGH.js} +3 -3
  53. package/dist/{chunk-QZNJOHN6.js.map → chunk-3LVB3HGH.js.map} +1 -1
  54. package/dist/{chunk-ZCAJZ4B2.js → chunk-6VLHITAM.js} +145 -3
  55. package/dist/chunk-6VLHITAM.js.map +1 -0
  56. package/dist/{chunk-J4RBUFGM.js → chunk-7CR2OZPA.js} +6 -6
  57. package/dist/{chunk-J4RBUFGM.js.map → chunk-7CR2OZPA.js.map} +1 -1
  58. package/dist/{chunk-HZXUXHIV.js → chunk-7QWQTA5S.js} +89 -12
  59. package/dist/chunk-7QWQTA5S.js.map +1 -0
  60. package/dist/{chunk-TCHRMVTO.js → chunk-7XWUJC3A.js} +4 -4
  61. package/dist/{chunk-TCHRMVTO.js.map → chunk-7XWUJC3A.js.map} +1 -1
  62. package/dist/{chunk-2F5AWQX5.js → chunk-C3BMXXTN.js} +137 -31
  63. package/dist/chunk-C3BMXXTN.js.map +1 -0
  64. package/dist/{chunk-ZPWTOUTK.js → chunk-CTP3XBMF.js} +7 -4
  65. package/dist/chunk-CTP3XBMF.js.map +1 -0
  66. package/dist/{chunk-GCHPUTA3.js → chunk-DCHQ6BAZ.js} +3 -3
  67. package/dist/{chunk-GCHPUTA3.js.map → chunk-DCHQ6BAZ.js.map} +1 -1
  68. package/dist/{chunk-DALV4HHP.js → chunk-DKXNKFKP.js} +3 -2
  69. package/dist/{chunk-DALV4HHP.js.map → chunk-DKXNKFKP.js.map} +1 -1
  70. package/dist/{chunk-X77SUM4P.js → chunk-G3X4MLDB.js} +3 -3
  71. package/dist/{chunk-X77SUM4P.js.map → chunk-G3X4MLDB.js.map} +1 -1
  72. package/dist/{chunk-CAHB6MHA.js → chunk-GWD3QNVS.js} +5 -5
  73. package/dist/{chunk-CAHB6MHA.js.map → chunk-GWD3QNVS.js.map} +1 -1
  74. package/dist/chunk-H5U7LNTJ.js +122 -0
  75. package/dist/chunk-H5U7LNTJ.js.map +1 -0
  76. package/dist/{chunk-QVFAS5IO.js → chunk-HYMERG57.js} +3 -3
  77. package/dist/{chunk-QVFAS5IO.js.map → chunk-HYMERG57.js.map} +1 -1
  78. package/dist/{chunk-R7NHYEJF.js → chunk-ICIYSJBQ.js} +4 -4
  79. package/dist/{chunk-R7NHYEJF.js.map → chunk-ICIYSJBQ.js.map} +1 -1
  80. package/dist/{chunk-YOH2L76X.js → chunk-ID745F3R.js} +353 -233
  81. package/dist/chunk-ID745F3R.js.map +1 -0
  82. package/dist/{chunk-PQFHMQHQ.js → chunk-JQ3DXNQV.js} +4 -4
  83. package/dist/{chunk-PQFHMQHQ.js.map → chunk-JQ3DXNQV.js.map} +1 -1
  84. package/dist/chunk-K4VOEYOR.js +21 -0
  85. package/dist/chunk-K4VOEYOR.js.map +1 -0
  86. package/dist/{chunk-XDKH7XSA.js → chunk-KVSDRB35.js} +5 -5
  87. package/dist/{chunk-XDKH7XSA.js.map → chunk-KVSDRB35.js.map} +1 -1
  88. package/dist/{chunk-47U4GZ4M.js → chunk-MF54ZHWT.js} +20 -3
  89. package/dist/chunk-MF54ZHWT.js.map +1 -0
  90. package/dist/{chunk-VLTQGE2E.js → chunk-N5M2EISA.js} +197 -52
  91. package/dist/chunk-N5M2EISA.js.map +1 -0
  92. package/dist/{chunk-T7CTHHG7.js → chunk-NDF24LYP.js} +3 -3
  93. package/dist/{chunk-T7CTHHG7.js.map → chunk-NDF24LYP.js.map} +1 -1
  94. package/dist/{chunk-CPWLNZGJ.js → chunk-NGJIVDDD.js} +3 -3
  95. package/dist/{chunk-CPWLNZGJ.js.map → chunk-NGJIVDDD.js.map} +1 -1
  96. package/dist/{chunk-FH7W6TJ4.js → chunk-NJV5SLEK.js} +104 -23
  97. package/dist/chunk-NJV5SLEK.js.map +1 -0
  98. package/dist/{chunk-M3B6EIJD.js → chunk-NJXR5OAM.js} +4 -4
  99. package/dist/{chunk-M3B6EIJD.js.map → chunk-NJXR5OAM.js.map} +1 -1
  100. package/dist/{chunk-CGYEHQOX.js → chunk-NOA6EJXE.js} +11 -2
  101. package/dist/chunk-NOA6EJXE.js.map +1 -0
  102. package/dist/{chunk-RYYLMBA2.js → chunk-NR7H7ZJP.js} +14 -6
  103. package/dist/chunk-NR7H7ZJP.js.map +1 -0
  104. package/dist/{chunk-OBYKJB4U.js → chunk-O2SYFJWP.js} +79 -5
  105. package/dist/chunk-O2SYFJWP.js.map +1 -0
  106. package/dist/{chunk-5LKOAX7I.js → chunk-OQ5MKDS3.js} +21 -5
  107. package/dist/chunk-OQ5MKDS3.js.map +1 -0
  108. package/dist/{chunk-CJERAGFY.js → chunk-P23WJCH2.js} +37 -11
  109. package/dist/chunk-P23WJCH2.js.map +1 -0
  110. package/dist/{chunk-NWDSLXOX.js → chunk-PHRNUTSG.js} +118 -118
  111. package/dist/chunk-PHRNUTSG.js.map +1 -0
  112. package/dist/{chunk-ALEYHUC5.js → chunk-PNOGX36L.js} +104 -24
  113. package/dist/chunk-PNOGX36L.js.map +1 -0
  114. package/dist/{chunk-BNMZVPYA.js → chunk-PNTXHTBC.js} +2 -2
  115. package/dist/{chunk-BNMZVPYA.js.map → chunk-PNTXHTBC.js.map} +1 -1
  116. package/dist/{chunk-GV4DZ6MT.js → chunk-POQ6PGNE.js} +4 -4
  117. package/dist/{chunk-GV4DZ6MT.js.map → chunk-POQ6PGNE.js.map} +1 -1
  118. package/dist/{chunk-T42WRQ4O.js → chunk-QCEKGYHF.js} +3 -3
  119. package/dist/{chunk-T42WRQ4O.js.map → chunk-QCEKGYHF.js.map} +1 -1
  120. package/dist/{chunk-EDYHEMJA.js → chunk-SHQMPGOL.js} +4 -4
  121. package/dist/{chunk-EDYHEMJA.js.map → chunk-SHQMPGOL.js.map} +1 -1
  122. package/dist/{chunk-S3O3GKB7.js → chunk-SMT3LNAG.js} +4 -4
  123. package/dist/{chunk-S3O3GKB7.js.map → chunk-SMT3LNAG.js.map} +1 -1
  124. package/dist/{chunk-PBBPZYVG.js → chunk-T5TSLSRO.js} +110 -44
  125. package/dist/chunk-T5TSLSRO.js.map +1 -0
  126. package/dist/{chunk-DZMNFCWB.js → chunk-TVAR4JHA.js} +530 -126
  127. package/dist/chunk-TVAR4JHA.js.map +1 -0
  128. package/dist/{chunk-COH6FQAG.js → chunk-UTKENBB6.js} +5 -5
  129. package/dist/{chunk-COH6FQAG.js.map → chunk-UTKENBB6.js.map} +1 -1
  130. package/dist/{chunk-XUSALIEI.js → chunk-VRLKHL74.js} +6 -6
  131. package/dist/{chunk-XUSALIEI.js.map → chunk-VRLKHL74.js.map} +1 -1
  132. package/dist/{chunk-WSBKB4CJ.js → chunk-WI4T3KIS.js} +51 -16
  133. package/dist/chunk-WI4T3KIS.js.map +1 -0
  134. package/dist/{chunk-D3B36CYC.js → chunk-X3RMRJNR.js} +4 -3
  135. package/dist/chunk-X3RMRJNR.js.map +1 -0
  136. package/dist/{chunk-IER3KIPH.js → chunk-X6LKA3TJ.js} +5 -5
  137. package/dist/{chunk-IER3KIPH.js.map → chunk-X6LKA3TJ.js.map} +1 -1
  138. package/dist/{chunk-Y3HTGHJC.js → chunk-XMAJJPA4.js} +3 -3
  139. package/dist/{chunk-Y3HTGHJC.js.map → chunk-XMAJJPA4.js.map} +1 -1
  140. package/dist/{chunk-SBSA3IQA.js → chunk-XTVSNWLL.js} +19 -7
  141. package/dist/chunk-XTVSNWLL.js.map +1 -0
  142. package/dist/{chunk-MZG34MBZ.js → chunk-XZY6SBGU.js} +3 -3
  143. package/dist/{chunk-MZG34MBZ.js.map → chunk-XZY6SBGU.js.map} +1 -1
  144. package/dist/{chunk-6O2X3GPW.js → chunk-YQU2BPQD.js} +7 -5
  145. package/dist/chunk-YQU2BPQD.js.map +1 -0
  146. package/dist/cli/index.js +1077 -497
  147. package/dist/cli/index.js.map +1 -1
  148. package/dist/cli/src/agent-checks.d.ts +40 -0
  149. package/dist/cli/src/agent-checks.d.ts.map +1 -0
  150. package/dist/cli/src/asset-feeds.d.ts.map +1 -1
  151. package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
  152. package/dist/cli/src/commands/catalog.d.ts +24 -0
  153. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  154. package/dist/cli/src/commands/config.d.ts.map +1 -1
  155. package/dist/cli/src/commands/diff.d.ts.map +1 -1
  156. package/dist/cli/src/commands/integration.d.ts.map +1 -1
  157. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  158. package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
  159. package/dist/cli/src/commands/mcp-server.d.ts +1 -1
  160. package/dist/cli/src/commands/migrate-assets.d.ts +2 -1
  161. package/dist/cli/src/commands/migrate-assets.d.ts.map +1 -1
  162. package/dist/cli/src/commands/migrate.d.ts.map +1 -1
  163. package/dist/cli/src/commands/plugin/claude-code.d.ts +1 -1
  164. package/dist/cli/src/commands/plugin/claude-code.d.ts.map +1 -1
  165. package/dist/cli/src/commands/plugin/types.d.ts +1 -1
  166. package/dist/cli/src/commands/plugin-registry-cmd.d.ts.map +1 -1
  167. package/dist/cli/src/commands/project.d.ts.map +1 -1
  168. package/dist/cli/src/commands/publish-core.d.ts +5 -0
  169. package/dist/cli/src/commands/publish-core.d.ts.map +1 -1
  170. package/dist/cli/src/commands/run.d.ts +2 -1
  171. package/dist/cli/src/commands/run.d.ts.map +1 -1
  172. package/dist/cli/src/commands/serve-preflight.d.ts +22 -0
  173. package/dist/cli/src/commands/serve-preflight.d.ts.map +1 -0
  174. package/dist/cli/src/commands/serve.d.ts.map +1 -1
  175. package/dist/cli/src/commands/source-manifest-publish.d.ts.map +1 -1
  176. package/dist/cli/src/commands/source-manifest.d.ts.map +1 -1
  177. package/dist/cli/src/commands/source.d.ts.map +1 -1
  178. package/dist/cli/src/commands/store.d.ts.map +1 -1
  179. package/dist/cli/src/commands/tree.d.ts.map +1 -1
  180. package/dist/cli/src/commands/update.d.ts.map +1 -1
  181. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  182. package/dist/cli/src/commands/why.d.ts.map +1 -1
  183. package/dist/cli/src/curated-manifests.d.ts +21 -0
  184. package/dist/cli/src/curated-manifests.d.ts.map +1 -0
  185. package/dist/cli/src/index-busy.d.ts +8 -0
  186. package/dist/cli/src/index-busy.d.ts.map +1 -0
  187. package/dist/cli/src/plugin-store/paths.d.ts +7 -3
  188. package/dist/cli/src/plugin-store/paths.d.ts.map +1 -1
  189. package/dist/cli/src/skill-checks.d.ts +15 -2
  190. package/dist/cli/src/skill-checks.d.ts.map +1 -1
  191. package/dist/cli/src/store-addable.d.ts +18 -0
  192. package/dist/cli/src/store-addable.d.ts.map +1 -0
  193. package/dist/connectors/config.js +5 -5
  194. package/dist/connectors/index.js +16 -16
  195. package/dist/{connectors-4QWAKPHB.js → connectors-UNKUKEPG.js} +19 -19
  196. package/dist/{connectors-4QWAKPHB.js.map → connectors-UNKUKEPG.js.map} +1 -1
  197. package/dist/core/index.js +7 -7
  198. package/dist/core/logging.js +1 -1
  199. package/dist/core/manifest.js +2 -2
  200. package/dist/core/models.js +1 -1
  201. package/dist/core/publish-manifest.js +2 -2
  202. package/dist/core/ref.js +1 -1
  203. package/dist/core/runtime-assets.js +5 -5
  204. package/dist/core/src/index.d.ts +5 -4
  205. package/dist/core/src/index.d.ts.map +1 -1
  206. package/dist/core/src/lock.d.ts +15 -5
  207. package/dist/core/src/lock.d.ts.map +1 -1
  208. package/dist/core/src/logging/sinks/sqlite-sink.d.ts.map +1 -1
  209. package/dist/core/src/manifest.d.ts +5 -0
  210. package/dist/core/src/manifest.d.ts.map +1 -1
  211. package/dist/core/src/models.d.ts +3 -3
  212. package/dist/core/src/package-manager.d.ts +19 -0
  213. package/dist/core/src/package-manager.d.ts.map +1 -0
  214. package/dist/core/src/publish-manifest.d.ts.map +1 -1
  215. package/dist/core/src/repo-manager.d.ts +11 -0
  216. package/dist/core/src/repo-manager.d.ts.map +1 -1
  217. package/dist/core/src/settings.d.ts +26 -6
  218. package/dist/core/src/settings.d.ts.map +1 -1
  219. package/dist/core/src/walker.d.ts +6 -1
  220. package/dist/core/src/walker.d.ts.map +1 -1
  221. package/dist/core/src/workspace-config.d.ts.map +1 -1
  222. package/dist/core/workspace-config.js +4 -4
  223. package/dist/deploy/index.js +7 -7
  224. package/dist/discovery/index.js +5 -5
  225. package/dist/{ensure-sources-2RONZKCU.js → ensure-sources-POMEQSTM.js} +19 -19
  226. package/dist/{ensure-sources-2RONZKCU.js.map → ensure-sources-POMEQSTM.js.map} +1 -1
  227. package/dist/factory-assets/connectors/box.js +16 -16
  228. package/dist/factory-assets/connectors/deploy.js +16 -16
  229. package/dist/factory-assets/connectors/devserver.js +16 -16
  230. package/dist/factory-assets/connectors/flow/adapter.js +16 -16
  231. package/dist/factory-assets/connectors/flow/contract/normalize.d.ts.map +1 -1
  232. package/dist/factory-assets/connectors/flow/contract.js +1 -1
  233. package/dist/factory-assets/connectors/flow/engine.js +9 -9
  234. package/dist/factory-assets/connectors/flow/run-flow.d.ts.map +1 -1
  235. package/dist/factory-assets/connectors/flow/run-flow.js +18 -18
  236. package/dist/factory-assets/connectors/flow.js +16 -16
  237. package/dist/factory-assets/connectors/git.js +16 -16
  238. package/dist/factory-assets/connectors/gmail.js +16 -16
  239. package/dist/factory-assets/connectors/googledrive.js +16 -16
  240. package/dist/factory-assets/connectors/local.js +16 -16
  241. package/dist/factory-assets/connectors/mattermost.js +16 -16
  242. package/dist/factory-assets/connectors/memory.js +16 -16
  243. package/dist/factory-assets/connectors/minio.js +16 -16
  244. package/dist/factory-assets/connectors/postgres.js +16 -16
  245. package/dist/factory-assets/connectors/s3.js +16 -16
  246. package/dist/factory-assets/connectors/sharepoint.js +16 -16
  247. package/dist/factory-assets/connectors/sqlite.js +16 -16
  248. package/dist/factory-assets/connectors/static-server.js +16 -16
  249. package/dist/factory-assets/connectors/tunnel.js +16 -16
  250. package/dist/factory-assets/connectors/webdav.js +16 -16
  251. package/dist/factory-assets/connectors/xstate-store.js +16 -16
  252. package/dist/factory-assets/connectors/xstate.js +16 -16
  253. package/dist/factory-assets/skills/authoring-skaile-assets/SKILL.md +10 -8
  254. package/dist/factory-assets/skills/authoring-skaile-manifests/SKILL.md +15 -11
  255. package/dist/factory-assets/skills/authoring-skaile-manifests/references/dependency-standard.md +12 -9
  256. package/dist/factory-assets/skills/skaile-author-asset/SKILL.md +2 -2
  257. package/dist/{flows-EQF2CH4U.js → flows-DVKMZKM4.js} +12 -12
  258. package/dist/{flows-EQF2CH4U.js.map → flows-DVKMZKM4.js.map} +1 -1
  259. package/dist/{helpers-CFK6YP6R.js → helpers-Y4OT7VIS.js} +19 -19
  260. package/dist/{helpers-CFK6YP6R.js.map → helpers-Y4OT7VIS.js.map} +1 -1
  261. package/dist/library/index.js +12 -12
  262. package/dist/library/install.js +4 -4
  263. package/dist/library/src/index.d.ts +2 -2
  264. package/dist/library/src/index.d.ts.map +1 -1
  265. package/dist/library/src/install/source-fetch-github.d.ts.map +1 -1
  266. package/dist/library/src/local/db.d.ts +2 -0
  267. package/dist/library/src/local/db.d.ts.map +1 -1
  268. package/dist/library/src/local/library-manager.d.ts +5 -0
  269. package/dist/library/src/local/library-manager.d.ts.map +1 -1
  270. package/dist/library/src/local/library.d.ts +5 -3
  271. package/dist/library/src/local/library.d.ts.map +1 -1
  272. package/dist/library/src/local/local-catalog-source.d.ts.map +1 -1
  273. package/dist/library/src/local/store-paths.d.ts +9 -0
  274. package/dist/library/src/local/store-paths.d.ts.map +1 -1
  275. package/dist/library/src/manifest-writer.d.ts.map +1 -1
  276. package/dist/library/src/remote/index.d.ts +1 -1
  277. package/dist/library/src/remote/index.d.ts.map +1 -1
  278. package/dist/library/src/remote/remote-catalog-source.d.ts +17 -0
  279. package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
  280. package/dist/library/src/sync/git-driver.d.ts.map +1 -1
  281. package/dist/{library-publish-53UTB3MB.js → library-publish-DI4Q5UOG.js} +45 -37
  282. package/dist/library-publish-DI4Q5UOG.js.map +1 -0
  283. package/dist/open-library-N6ESO6IK.js +40 -0
  284. package/dist/{open-library-BOSPJVID.js.map → open-library-N6ESO6IK.js.map} +1 -1
  285. package/dist/open-registry-CBZ5MWTT.js +32 -0
  286. package/dist/{open-registry-4FI7HKET.js.map → open-registry-CBZ5MWTT.js.map} +1 -1
  287. package/dist/paths-U6W6MQNQ.js +22 -0
  288. package/dist/{paths-SUS4S4YT.js.map → paths-U6W6MQNQ.js.map} +1 -1
  289. package/dist/{plugin-store-AGQDMING.js → plugin-store-XMZSPVBF.js} +48 -12
  290. package/dist/plugin-store-XMZSPVBF.js.map +1 -0
  291. package/dist/project-UP52HEHC.js +79 -0
  292. package/dist/{project-I55A4O2T.js.map → project-UP52HEHC.js.map} +1 -1
  293. package/dist/resolver/index.js +8 -8
  294. package/dist/runner/index.js +33 -33
  295. package/dist/runner/src/agent.d.ts.map +1 -1
  296. package/dist/runner/src/agents/in-process-host.d.ts.map +1 -1
  297. package/dist/runner/src/composition/index.d.ts +1 -0
  298. package/dist/runner/src/composition/index.d.ts.map +1 -1
  299. package/dist/runner/src/composition/prompt-sections.d.ts +7 -4
  300. package/dist/runner/src/composition/prompt-sections.d.ts.map +1 -1
  301. package/dist/runner/src/composition/resolve.d.ts +10 -1
  302. package/dist/runner/src/composition/resolve.d.ts.map +1 -1
  303. package/dist/runner/src/composition/verify.d.ts +29 -0
  304. package/dist/runner/src/composition/verify.d.ts.map +1 -0
  305. package/dist/runner/src/credential-notice.d.ts +14 -0
  306. package/dist/runner/src/credential-notice.d.ts.map +1 -0
  307. package/dist/runner/src/environment.d.ts.map +1 -1
  308. package/dist/runner/src/final-text.d.ts +17 -0
  309. package/dist/runner/src/final-text.d.ts.map +1 -0
  310. package/dist/runner/src/index.d.ts +2 -0
  311. package/dist/runner/src/index.d.ts.map +1 -1
  312. package/dist/runner/src/resource-handler.d.ts.map +1 -1
  313. package/dist/runner/src/serve.d.ts +13 -0
  314. package/dist/runner/src/serve.d.ts.map +1 -1
  315. package/dist/sdk/asset-manager.js +16 -16
  316. package/dist/sdk/bridge.js +12 -12
  317. package/dist/sdk/core.js +7 -7
  318. package/dist/sdk/flow.js +9 -9
  319. package/dist/sdk/index.js +36 -34
  320. package/dist/sdk/index.js.map +1 -1
  321. package/dist/sdk/resolver.js +8 -8
  322. package/dist/sdk/runner.js +33 -33
  323. package/dist/sdk/src/local-runtime.d.ts.map +1 -1
  324. package/dist/sdk/transport/ws/client.js +1 -1
  325. package/dist/sdk/transport/ws/server.js +1 -1
  326. package/dist/sdk/transport/ws.js +2 -2
  327. package/dist/sdk/transport.js +2 -2
  328. package/dist/serve-preflight-6P2JJEJ3.js +47 -0
  329. package/dist/serve-preflight-6P2JJEJ3.js.map +1 -0
  330. package/dist/{setup-7DQJKHUI.js → setup-5IRUH5OS.js} +24 -24
  331. package/dist/{setup-7DQJKHUI.js.map → setup-5IRUH5OS.js.map} +1 -1
  332. package/dist/{skills-NUEN5NDX.js → skills-HA36RFNM.js} +13 -13
  333. package/dist/{skills-NUEN5NDX.js.map → skills-HA36RFNM.js.map} +1 -1
  334. package/dist/source-DX5SGWEI.js +41 -0
  335. package/dist/{source-G2LV5LVD.js.map → source-DX5SGWEI.js.map} +1 -1
  336. package/dist/source-fetch-github-PIO6EMMF.js +4 -0
  337. package/dist/{source-fetch-github-QN4LLTL5.js.map → source-fetch-github-PIO6EMMF.js.map} +1 -1
  338. package/dist/{source-manifest-publish-6RM7SWLZ.js → source-manifest-publish-NMRLXWVW.js} +27 -26
  339. package/dist/source-manifest-publish-NMRLXWVW.js.map +1 -0
  340. package/dist/transport/index.js +2 -2
  341. package/dist/transport/src/ws/client.d.ts +6 -0
  342. package/dist/transport/src/ws/client.d.ts.map +1 -1
  343. package/dist/transport/src/ws/server.d.ts +4 -0
  344. package/dist/transport/src/ws/server.d.ts.map +1 -1
  345. package/dist/transport/ws/client.js +1 -1
  346. package/dist/transport/ws/server.js +1 -1
  347. package/dist/transport/ws.js +2 -2
  348. package/dist/tui/index.js +58 -41
  349. package/dist/tui/index.js.map +1 -1
  350. package/dist/tui/src/repl-session.d.ts +1 -1
  351. package/dist/tui/src/repl-session.d.ts.map +1 -1
  352. package/dist/tui/src/repl.d.ts +3 -0
  353. package/dist/tui/src/repl.d.ts.map +1 -1
  354. package/dist/types/manifests.js +1 -1
  355. package/dist/types/src/manifests/agent-composition.d.ts +20 -0
  356. package/dist/types/src/manifests/agent-composition.d.ts.map +1 -1
  357. package/dist/types/src/manifests/agent.d.ts.map +1 -1
  358. package/dist/types/src/manifests/cron.d.ts +15 -0
  359. package/dist/types/src/manifests/cron.d.ts.map +1 -0
  360. package/dist/types/src/manifests/index.d.ts +3 -2
  361. package/dist/types/src/manifests/index.d.ts.map +1 -1
  362. package/dist/workspace-plugin/adapters/mcp.js +23 -23
  363. package/dist/workspace-plugin/adapters/omp.js +106 -51
  364. package/dist/workspace-plugin/adapters/omp.js.map +1 -1
  365. package/dist/workspace-plugin/index.js +2 -2
  366. package/dist/workspace-plugin/src/adapters/claude-code.d.ts.map +1 -1
  367. package/dist/workspace-plugin/src/adapters/omp.d.ts +11 -2
  368. package/dist/workspace-plugin/src/adapters/omp.d.ts.map +1 -1
  369. package/package.json +1 -1
  370. package/dist/asset-feeds-CXGQIDFR.js.map +0 -1
  371. package/dist/chunk-2F5AWQX5.js.map +0 -1
  372. package/dist/chunk-3SM2DL2T.js.map +0 -1
  373. package/dist/chunk-47U4GZ4M.js.map +0 -1
  374. package/dist/chunk-5LKOAX7I.js.map +0 -1
  375. package/dist/chunk-6O2X3GPW.js.map +0 -1
  376. package/dist/chunk-ALEYHUC5.js.map +0 -1
  377. package/dist/chunk-CGYEHQOX.js.map +0 -1
  378. package/dist/chunk-CJERAGFY.js.map +0 -1
  379. package/dist/chunk-D3B36CYC.js.map +0 -1
  380. package/dist/chunk-DZMNFCWB.js.map +0 -1
  381. package/dist/chunk-FH7W6TJ4.js.map +0 -1
  382. package/dist/chunk-HZXUXHIV.js.map +0 -1
  383. package/dist/chunk-NWDSLXOX.js.map +0 -1
  384. package/dist/chunk-OBYKJB4U.js.map +0 -1
  385. package/dist/chunk-PBBPZYVG.js.map +0 -1
  386. package/dist/chunk-R7FOF242.js +0 -59
  387. package/dist/chunk-R7FOF242.js.map +0 -1
  388. package/dist/chunk-RYYLMBA2.js.map +0 -1
  389. package/dist/chunk-SBSA3IQA.js.map +0 -1
  390. package/dist/chunk-VLTQGE2E.js.map +0 -1
  391. package/dist/chunk-WSBKB4CJ.js.map +0 -1
  392. package/dist/chunk-YOH2L76X.js.map +0 -1
  393. package/dist/chunk-ZCAJZ4B2.js.map +0 -1
  394. package/dist/chunk-ZPWTOUTK.js.map +0 -1
  395. package/dist/library-publish-53UTB3MB.js.map +0 -1
  396. package/dist/open-library-BOSPJVID.js +0 -40
  397. package/dist/open-registry-4FI7HKET.js +0 -32
  398. package/dist/paths-SUS4S4YT.js +0 -22
  399. package/dist/plugin-store-AGQDMING.js.map +0 -1
  400. package/dist/project-I55A4O2T.js +0 -41
  401. package/dist/source-G2LV5LVD.js +0 -41
  402. package/dist/source-fetch-github-QN4LLTL5.js +0 -4
  403. package/dist/source-manifest-publish-6RM7SWLZ.js.map +0 -1
@@ -1,49 +1,49 @@
1
- export { buildWorkspaceMcpServer, buildWorkspaceMcpStdioServer, buildWorkspaceToolDefs, runMcpServerStdio } from '../../chunk-IER3KIPH.js';
2
- import '../../chunk-QVFAS5IO.js';
1
+ export { buildWorkspaceMcpServer, buildWorkspaceMcpStdioServer, buildWorkspaceToolDefs, runMcpServerStdio } from '../../chunk-X6LKA3TJ.js';
2
+ import '../../chunk-HYMERG57.js';
3
3
  import '../../chunk-R6O6YWU7.js';
4
- import '../../chunk-G4FFOV3N.js';
5
- import '../../chunk-T42WRQ4O.js';
4
+ import '../../chunk-3HUV2LJF.js';
5
+ import '../../chunk-QCEKGYHF.js';
6
6
  import '../../chunk-4ZTPYIBE.js';
7
- import '../../chunk-MZG34MBZ.js';
7
+ import '../../chunk-XZY6SBGU.js';
8
8
  import '../../chunk-X5YPJV4N.js';
9
- import '../../chunk-X77SUM4P.js';
10
- import '../../chunk-GCHPUTA3.js';
11
- import '../../chunk-4A4OD24G.js';
9
+ import '../../chunk-G3X4MLDB.js';
10
+ import '../../chunk-DCHQ6BAZ.js';
11
+ import '../../chunk-27L6BBAT.js';
12
12
  import '../../chunk-X4BAYGMT.js';
13
- import '../../chunk-R7NHYEJF.js';
14
- import '../../chunk-T7CTHHG7.js';
15
- import '../../chunk-HCEVNYSH.js';
13
+ import '../../chunk-ICIYSJBQ.js';
14
+ import '../../chunk-NDF24LYP.js';
15
+ import '../../chunk-2JFIFDDO.js';
16
16
  import '../../chunk-LOO5CB5M.js';
17
17
  import '../../chunk-2H73V6XR.js';
18
- import '../../chunk-M3B6EIJD.js';
18
+ import '../../chunk-NJXR5OAM.js';
19
19
  import '../../chunk-B4X2N7JQ.js';
20
20
  import '../../chunk-YROR332M.js';
21
- import '../../chunk-47U4GZ4M.js';
21
+ import '../../chunk-MF54ZHWT.js';
22
22
  import '../../chunk-6E6PKKAD.js';
23
23
  import '../../chunk-IFGTRL2I.js';
24
- import '../../chunk-TCHRMVTO.js';
24
+ import '../../chunk-7XWUJC3A.js';
25
25
  import '../../chunk-LNFKL23K.js';
26
- import '../../chunk-D3B36CYC.js';
26
+ import '../../chunk-X3RMRJNR.js';
27
27
  import '../../chunk-M3WPBTGJ.js';
28
28
  import '../../chunk-7RGTAEG6.js';
29
29
  import '../../chunk-NUELZWCF.js';
30
30
  import '../../chunk-F4NJDSR7.js';
31
- import '../../chunk-ZCAJZ4B2.js';
32
- import '../../chunk-PBBPZYVG.js';
31
+ import '../../chunk-6VLHITAM.js';
32
+ import '../../chunk-T5TSLSRO.js';
33
33
  import '../../chunk-4GY63JU6.js';
34
- import '../../chunk-EDYHEMJA.js';
34
+ import '../../chunk-SHQMPGOL.js';
35
35
  import '../../chunk-PMECEZK3.js';
36
36
  import '../../chunk-5BEFNLOR.js';
37
37
  import '../../chunk-A2ULN3KX.js';
38
- import '../../chunk-ALEYHUC5.js';
38
+ import '../../chunk-PNOGX36L.js';
39
39
  import '../../chunk-L5VSIPQD.js';
40
40
  import '../../chunk-CPSIPIX7.js';
41
- import '../../chunk-ZPWTOUTK.js';
41
+ import '../../chunk-CTP3XBMF.js';
42
42
  import '../../chunk-RVRB27AN.js';
43
- import '../../chunk-SBSA3IQA.js';
44
- import '../../chunk-BNMZVPYA.js';
43
+ import '../../chunk-XTVSNWLL.js';
44
+ import '../../chunk-PNTXHTBC.js';
45
45
  import '../../chunk-ICSCSM5D.js';
46
- import '../../chunk-DALV4HHP.js';
46
+ import '../../chunk-DKXNKFKP.js';
47
47
  import '../../chunk-MJHSLODD.js';
48
48
  import '../../chunk-C3CAXQMA.js';
49
49
  import '../../chunk-BOFL7GIF.js';
@@ -2,52 +2,107 @@ import { DEFAULT_DRIVER_ID } from '../../chunk-5BEFNLOR.js';
2
2
  import '../../chunk-NSBPE2FW.js';
3
3
 
4
4
  // workspace-plugin/src/adapters/omp.ts
5
- function buildOmpExtensionSource(projectDir) {
6
- const escaped = JSON.stringify(projectDir);
7
- return `// .omp/extensions/skaile.ts
8
- // Generated by: skaile plugin install --driver omp
9
- // or: skaile repl --driver omp (ephemeral \u2014 removed on exit)
10
- // Re-generate: skaile plugin install --driver omp --project-dir ${projectDir}
11
- import { WorkspacePlugin } from "@skaile/workspaces/workspace-plugin";
12
-
13
- const plugin = new WorkspacePlugin({ projectDir: ${escaped}, bootOwned: true });
14
-
15
- export async function onInit() {
16
- await plugin.boot();
17
- return { systemPromptAppend: plugin.buildSystemPromptSection() };
18
- }
19
-
20
- export function tools() {
21
- return plugin.buildOmpToolSet();
22
- }
23
-
24
- export const slashCommands = [
25
- {
26
- name: "/flow",
27
- description: "Flow inspection: /flow list | show <id> | sessions | session <runId>",
28
- handler: (args: string[]) => plugin.handleSlashCommand("flow", args),
29
- },
5
+ var OMP_COMMANDS = [
30
6
  {
31
- name: "/connector",
32
- description: "Connector CRUD: /connector list | read <id> <path> | exec <id> <op> [json-args] | describe <id>",
33
- handler: (args: string[]) => plugin.handleSlashCommand("connector", args),
7
+ name: "flow",
8
+ description: "Flow inspection: /flow list | show <id> | sessions | session <runId>"
34
9
  },
35
10
  {
36
- name: "/skill",
37
- description: "Skill catalog: /skill list | show <id> | search <query> | run <id>",
38
- handler: (args: string[]) => plugin.handleSlashCommand("skill", args),
11
+ name: "connector",
12
+ description: "Connector CRUD: /connector list | read <id> <path> | exec <id> <op> [json-args] | describe <id>"
39
13
  },
40
14
  {
41
- name: "/mounts",
42
- description: "Mount management: /mounts list | sync <id> | status <id>",
43
- handler: (args: string[]) => plugin.handleSlashCommand("mounts", args),
15
+ name: "skill",
16
+ description: "Skill catalog: /skill list | show <id> | search <query> | run <id>"
44
17
  },
45
18
  {
46
- name: "/validate",
47
- description: "Validate workspace config (skaile.yaml)",
48
- handler: () => plugin.handleSlashCommand("validate", []),
19
+ name: "mounts",
20
+ description: "Mount management: /mounts list | sync <id> | status <id>"
49
21
  },
22
+ { name: "validate", description: "Validate workspace config (skaile.yaml)" }
50
23
  ];
24
+ function buildOmpExtensionSource(projectDir) {
25
+ const tools = buildOmpToolSet({}).map(
26
+ ({ name, description, parameters }) => ({ name, description, parameters })
27
+ );
28
+ return `// .omp/extensions/skaile.ts
29
+ // Generated by: skaile integration install --driver omp
30
+ // or: skaile repl --driver omp (ephemeral \u2014 removed on exit)
31
+ // Re-generate: skaile integration install --driver omp --project-dir ${projectDir}
32
+ import { spawn } from "node:child_process";
33
+
34
+ const PROJECT_DIR = ${JSON.stringify(projectDir)};
35
+ const TOOLS = ${JSON.stringify(tools, null, 2)};
36
+ const COMMANDS = ${JSON.stringify(OMP_COMMANDS, null, 2)};
37
+
38
+ /** Run \`skaile integration omp-exec <kind> <name>\` with a JSON payload on stdin; resolves to its stdout. */
39
+ function skaileExec(kind, name, payload) {
40
+ return new Promise((resolve, reject) => {
41
+ const child = spawn(
42
+ "skaile",
43
+ ["integration", "omp-exec", kind, name, "--project-dir", PROJECT_DIR],
44
+ { stdio: ["pipe", "pipe", "pipe"] },
45
+ );
46
+ let out = "";
47
+ let err = "";
48
+ child.stdout.on("data", (chunk) => (out += chunk));
49
+ child.stderr.on("data", (chunk) => (err += chunk));
50
+ child.on("error", (e) => reject(new Error("could not run skaile: " + e.message)));
51
+ child.on("close", (code) =>
52
+ code === 0 ? resolve(out.trimEnd()) : reject(new Error(err.trim() || "skaile exited " + code)),
53
+ );
54
+ child.stdin.end(JSON.stringify(payload));
55
+ });
56
+ }
57
+
58
+ function schemaFor(z, spec) {
59
+ const base = spec.type === "object" ? z.record(z.string(), z.unknown()) : z.string();
60
+ return spec.optional ? base.optional() : base;
61
+ }
62
+
63
+ export default function skaile(pi) {
64
+ const z = pi.zod;
65
+ pi.setLabel("skaile workspace");
66
+
67
+ for (const tool of TOOLS) {
68
+ pi.registerTool({
69
+ name: tool.name,
70
+ label: tool.name,
71
+ description: tool.description,
72
+ parameters: z.object(
73
+ Object.fromEntries(
74
+ Object.entries(tool.parameters).map(([key, spec]) => [key, schemaFor(z, spec)]),
75
+ ),
76
+ ),
77
+ async execute(_toolCallId, params) {
78
+ const text = await skaileExec("tool", tool.name, params);
79
+ return { content: [{ type: "text", text }], details: {} };
80
+ },
81
+ });
82
+ }
83
+
84
+ for (const command of COMMANDS) {
85
+ pi.registerCommand(command.name, {
86
+ description: command.description,
87
+ handler: async (args, ctx) => {
88
+ try {
89
+ const parts = args.trim().split(/\\s+/).filter(Boolean);
90
+ pi.sendMessage(
91
+ {
92
+ customType: "skaile-" + command.name,
93
+ content: await skaileExec("slash", command.name, parts),
94
+ display: true,
95
+ attribution: "agent",
96
+ },
97
+ { triggerTurn: false },
98
+ );
99
+ } catch (e) {
100
+ ctx.ui.notify(e instanceof Error ? e.message : String(e), "error");
101
+ }
102
+ },
103
+ });
104
+ }
105
+ }
51
106
  `;
52
107
  }
53
108
  function buildOmpToolSet(plugin) {
@@ -57,7 +112,7 @@ function buildOmpToolSet(plugin) {
57
112
  description: "List all mounts declared in skaile.yaml with their mount status.",
58
113
  parameters: {},
59
114
  handler: async () => {
60
- const { mountList } = await import('../../connectors-4QWAKPHB.js');
115
+ const { mountList } = await import('../../connectors-UNKUKEPG.js');
61
116
  return (await mountList(plugin.connectorManager)).content[0].text;
62
117
  }
63
118
  },
@@ -66,7 +121,7 @@ function buildOmpToolSet(plugin) {
66
121
  description: "Sync a mount (pull latest from remote).",
67
122
  parameters: { mount_id: { type: "string" } },
68
123
  handler: async ({ mount_id }) => {
69
- const { mountSync } = await import('../../connectors-4QWAKPHB.js');
124
+ const { mountSync } = await import('../../connectors-UNKUKEPG.js');
70
125
  return (await mountSync(plugin.connectorManager, mount_id)).content[0].text;
71
126
  }
72
127
  },
@@ -75,7 +130,7 @@ function buildOmpToolSet(plugin) {
75
130
  description: "List all available flow definitions from ai-assets.",
76
131
  parameters: {},
77
132
  handler: async () => {
78
- const { flowList } = await import('../../flows-EQF2CH4U.js');
133
+ const { flowList } = await import('../../flows-DVKMZKM4.js');
79
134
  return (await flowList(plugin.projectDir)).content[0].text;
80
135
  }
81
136
  },
@@ -84,7 +139,7 @@ function buildOmpToolSet(plugin) {
84
139
  description: "List past flow run sessions for this workspace.",
85
140
  parameters: {},
86
141
  handler: async () => {
87
- const { flowListSessions } = await import('../../flows-EQF2CH4U.js');
142
+ const { flowListSessions } = await import('../../flows-DVKMZKM4.js');
88
143
  return (await flowListSessions(plugin.projectDir)).content[0].text;
89
144
  }
90
145
  },
@@ -93,7 +148,7 @@ function buildOmpToolSet(plugin) {
93
148
  description: "List all skills in the ai-assets catalog.",
94
149
  parameters: {},
95
150
  handler: async () => {
96
- const { skillList } = await import('../../skills-NUEN5NDX.js');
151
+ const { skillList } = await import('../../skills-HA36RFNM.js');
97
152
  return (await skillList(plugin.projectDir)).content[0].text;
98
153
  }
99
154
  },
@@ -102,7 +157,7 @@ function buildOmpToolSet(plugin) {
102
157
  description: "Search skills by name, description, or keywords.",
103
158
  parameters: { query: { type: "string" } },
104
159
  handler: async ({ query }) => {
105
- const { skillSearch } = await import('../../skills-NUEN5NDX.js');
160
+ const { skillSearch } = await import('../../skills-HA36RFNM.js');
106
161
  return (await skillSearch(plugin.projectDir, query)).content[0].text;
107
162
  }
108
163
  },
@@ -111,7 +166,7 @@ function buildOmpToolSet(plugin) {
111
166
  description: "Show the full SKILL.md content for a skill.",
112
167
  parameters: { skill_id: { type: "string" } },
113
168
  handler: async ({ skill_id }) => {
114
- const { skillShow } = await import('../../skills-NUEN5NDX.js');
169
+ const { skillShow } = await import('../../skills-HA36RFNM.js');
115
170
  return (await skillShow(plugin.projectDir, skill_id)).content[0].text;
116
171
  }
117
172
  },
@@ -120,7 +175,7 @@ function buildOmpToolSet(plugin) {
120
175
  description: "List connectors declared in skaile.yaml as {connected, failed, notice?}. A host-managed mount in `connected` carries `health` {status: ok|stale|failed, errorClass, checkedAt}; if it is not ok, tell the user and do not write to it. `failed` holds connectors that did not connect this session, with the failure reason \u2014 their mount paths are dead directories, not synced workspaces.",
121
176
  parameters: {},
122
177
  handler: async () => {
123
- const { connectorList } = await import('../../connectors-4QWAKPHB.js');
178
+ const { connectorList } = await import('../../connectors-UNKUKEPG.js');
124
179
  return (await connectorList(plugin.connectorManager)).content[0].text;
125
180
  }
126
181
  },
@@ -129,7 +184,7 @@ function buildOmpToolSet(plugin) {
129
184
  description: "Read content from a connector by path.",
130
185
  parameters: { connector_id: { type: "string" }, path: { type: "string" } },
131
186
  handler: async ({ connector_id, path }) => {
132
- const { connectorRead } = await import('../../connectors-4QWAKPHB.js');
187
+ const { connectorRead } = await import('../../connectors-UNKUKEPG.js');
133
188
  return (await connectorRead(plugin.connectorManager, connector_id, path)).content[0].text;
134
189
  }
135
190
  },
@@ -146,7 +201,7 @@ function buildOmpToolSet(plugin) {
146
201
  operation,
147
202
  args
148
203
  }) => {
149
- const { connectorExec } = await import('../../connectors-4QWAKPHB.js');
204
+ const { connectorExec } = await import('../../connectors-UNKUKEPG.js');
150
205
  return (await connectorExec(plugin.connectorManager, connector_id, operation, args ?? {})).content[0].text;
151
206
  }
152
207
  },
@@ -202,7 +257,7 @@ async function handleSlashCommand(plugin, group, args) {
202
257
  }
203
258
  }
204
259
  async function handleFlowCommand(plugin, sub, rest) {
205
- const { flowList, flowShow, flowListSessions, flowGetSession } = await import('../../flows-EQF2CH4U.js');
260
+ const { flowList, flowShow, flowListSessions, flowGetSession } = await import('../../flows-DVKMZKM4.js');
206
261
  if (!sub || sub === "list") return (await flowList(plugin.projectDir)).content[0].text;
207
262
  if (sub === "show" && rest[0])
208
263
  return (await flowShow(plugin.projectDir, rest[0])).content[0].text;
@@ -212,7 +267,7 @@ async function handleFlowCommand(plugin, sub, rest) {
212
267
  return "Usage: /flow list | show <id> | sessions | session <runId>";
213
268
  }
214
269
  async function handleConnectorCommand(plugin, sub, rest) {
215
- const { connectorList, connectorRead, connectorExec, connectorDescribe } = await import('../../connectors-4QWAKPHB.js');
270
+ const { connectorList, connectorRead, connectorExec, connectorDescribe } = await import('../../connectors-UNKUKEPG.js');
216
271
  if (!sub || sub === "list") return (await connectorList(plugin.connectorManager)).content[0].text;
217
272
  if (sub === "read" && rest[0] && rest[1])
218
273
  return (await connectorRead(plugin.connectorManager, rest[0], rest[1])).content[0].text;
@@ -231,7 +286,7 @@ async function handleConnectorCommand(plugin, sub, rest) {
231
286
  return "Usage: /connector list | read <id> <path> | exec <id> <op> [json-args] | describe <id>";
232
287
  }
233
288
  async function handleSkillCommand(plugin, sub, rest) {
234
- const { skillList, skillShow, skillSearch } = await import('../../skills-NUEN5NDX.js');
289
+ const { skillList, skillShow, skillSearch } = await import('../../skills-HA36RFNM.js');
235
290
  if (sub === "run" && rest[0])
236
291
  return (await skillShow(plugin.projectDir, rest[0])).content[0].text;
237
292
  if (!sub || sub === "list") return (await skillList(plugin.projectDir)).content[0].text;
@@ -242,7 +297,7 @@ async function handleSkillCommand(plugin, sub, rest) {
242
297
  return "Usage: /skill list | show <id> | search <query> | run <id>";
243
298
  }
244
299
  async function handleMountsCommand(plugin, sub, rest) {
245
- const { mountList, mountSync, mountStatus } = await import('../../connectors-4QWAKPHB.js');
300
+ const { mountList, mountSync, mountStatus } = await import('../../connectors-UNKUKEPG.js');
246
301
  if (!sub || sub === "list") return (await mountList(plugin.connectorManager)).content[0].text;
247
302
  if (sub === "sync" && rest[0])
248
303
  return (await mountSync(plugin.connectorManager, rest[0])).content[0].text;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../workspace-plugin/src/adapters/omp.ts"],"names":[],"mappings":"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","file":"omp.js","sourcesContent":["import { DEFAULT_DRIVER_ID } from \"@skaile/workspaces/core/framework\";\nimport type { WorkspacePlugin } from \"../plugin.js\";\n\n// ── Extension source generator (STATELESS) ──────────────────────────────────\n// This function generates the .omp/extensions/skaile.ts file content.\n// It is stateless — takes only projectDir, does not require a booted plugin.\n// OMP tool set in the generated file is intentionally a reduced subset\n// (high-frequency tools only) — the full set is available via the MCP adapter.\n\n/**\n * Generate the `.omp/extensions/skaile.ts` file content for a given project.\n *\n * Stateless — accepts only `projectDir` and embeds it as a JSON string\n * literal in the generated TypeScript source. No `boot()` or plugin instance\n * is required; this function is safe to call from install commands.\n *\n * The generated file exports `onInit`, `tools`, and `slashCommands` as\n * required by the OMP extension API.\n *\n * @param projectDir - Absolute path to the skaile project root (embedded in\n * the generated source).\n * @returns A TypeScript source string ready to be written to\n * `.omp/extensions/skaile.ts`.\n *\n * @docLink packages/workspace-plugin/concepts#adapters\n */\nexport function buildOmpExtensionSource(projectDir: string): string {\n const escaped = JSON.stringify(projectDir);\n return `// .omp/extensions/skaile.ts\n// Generated by: skaile plugin install --driver omp\n// or: skaile repl --driver omp (ephemeral — removed on exit)\n// Re-generate: skaile plugin install --driver omp --project-dir ${projectDir}\nimport { WorkspacePlugin } from \"@skaile/workspaces/workspace-plugin\";\n\nconst plugin = new WorkspacePlugin({ projectDir: ${escaped}, bootOwned: true });\n\nexport async function onInit() {\n await plugin.boot();\n return { systemPromptAppend: plugin.buildSystemPromptSection() };\n}\n\nexport function tools() {\n return plugin.buildOmpToolSet();\n}\n\nexport const slashCommands = [\n {\n name: \"/flow\",\n description: \"Flow inspection: /flow list | show <id> | sessions | session <runId>\",\n handler: (args: string[]) => plugin.handleSlashCommand(\"flow\", args),\n },\n {\n name: \"/connector\",\n description: \"Connector CRUD: /connector list | read <id> <path> | exec <id> <op> [json-args] | describe <id>\",\n handler: (args: string[]) => plugin.handleSlashCommand(\"connector\", args),\n },\n {\n name: \"/skill\",\n description: \"Skill catalog: /skill list | show <id> | search <query> | run <id>\",\n handler: (args: string[]) => plugin.handleSlashCommand(\"skill\", args),\n },\n {\n name: \"/mounts\",\n description: \"Mount management: /mounts list | sync <id> | status <id>\",\n handler: (args: string[]) => plugin.handleSlashCommand(\"mounts\", args),\n },\n {\n name: \"/validate\",\n description: \"Validate workspace config (skaile.yaml)\",\n handler: () => plugin.handleSlashCommand(\"validate\", []),\n },\n];\n`;\n}\n\n// ── OMP tool set builder ──────────────────────────────────────────────────────\n// OMP tool definition shape: { name, description, parameters, handler }\n// This is a reduced subset of the MCP tool surface (high-frequency tools only).\n\n/**\n * Build the OMP-native tool set for a booted `WorkspacePlugin`.\n *\n * Returns 13 tool objects in OMP's `{ name, description, parameters, handler }`\n * shape — a high-frequency subset of the 27 MCP tools. The full tool surface\n * is available via the MCP adapter.\n *\n * Included tools: `mount_list`, `mount_sync`, `flow_list`, `flow_list_sessions`,\n * `skill_list`, `skill_search`, `skill_show`, `connector_list`, `connector_read`,\n * `connector_exec`, `session_list`, `workspace_validate`, `workspace_info`.\n *\n * @param plugin - A booted `WorkspacePlugin` instance.\n * @returns Array of OMP tool definition objects.\n *\n * @docLink packages/workspace-plugin/concepts#adapters\n */\nexport function buildOmpToolSet(plugin: WorkspacePlugin): unknown[] {\n return [\n {\n name: \"mount_list\",\n description: \"List all mounts declared in skaile.yaml with their mount status.\",\n parameters: {},\n handler: async () => {\n const { mountList } = await import(\"../tools/connectors.js\");\n return (await mountList(plugin.connectorManager)).content[0].text;\n },\n },\n {\n name: \"mount_sync\",\n description: \"Sync a mount (pull latest from remote).\",\n parameters: { mount_id: { type: \"string\" } },\n handler: async ({ mount_id }: { mount_id: string }) => {\n const { mountSync } = await import(\"../tools/connectors.js\");\n return (await mountSync(plugin.connectorManager, mount_id)).content[0].text;\n },\n },\n {\n name: \"flow_list\",\n description: \"List all available flow definitions from ai-assets.\",\n parameters: {},\n handler: async () => {\n const { flowList } = await import(\"../tools/flows.js\");\n return (await flowList(plugin.projectDir)).content[0].text;\n },\n },\n {\n name: \"flow_list_sessions\",\n description: \"List past flow run sessions for this workspace.\",\n parameters: {},\n handler: async () => {\n const { flowListSessions } = await import(\"../tools/flows.js\");\n return (await flowListSessions(plugin.projectDir)).content[0].text;\n },\n },\n {\n name: \"skill_list\",\n description: \"List all skills in the ai-assets catalog.\",\n parameters: {},\n handler: async () => {\n const { skillList } = await import(\"../tools/skills.js\");\n return (await skillList(plugin.projectDir)).content[0].text;\n },\n },\n {\n name: \"skill_search\",\n description: \"Search skills by name, description, or keywords.\",\n parameters: { query: { type: \"string\" } },\n handler: async ({ query }: { query: string }) => {\n const { skillSearch } = await import(\"../tools/skills.js\");\n return (await skillSearch(plugin.projectDir, query)).content[0].text;\n },\n },\n {\n name: \"skill_show\",\n description: \"Show the full SKILL.md content for a skill.\",\n parameters: { skill_id: { type: \"string\" } },\n handler: async ({ skill_id }: { skill_id: string }) => {\n const { skillShow } = await import(\"../tools/skills.js\");\n return (await skillShow(plugin.projectDir, skill_id)).content[0].text;\n },\n },\n {\n name: \"connector_list\",\n description:\n \"List connectors declared in skaile.yaml as {connected, failed, notice?}. A host-managed mount in `connected` carries `health` {status: ok|stale|failed, errorClass, checkedAt}; if it is not ok, tell the user and do not write to it. `failed` holds connectors that did not connect this session, with the failure reason — their mount paths are dead directories, not synced workspaces.\",\n parameters: {},\n handler: async () => {\n const { connectorList } = await import(\"../tools/connectors.js\");\n return (await connectorList(plugin.connectorManager)).content[0].text;\n },\n },\n {\n name: \"connector_read\",\n description: \"Read content from a connector by path.\",\n parameters: { connector_id: { type: \"string\" }, path: { type: \"string\" } },\n handler: async ({ connector_id, path }: { connector_id: string; path: string }) => {\n const { connectorRead } = await import(\"../tools/connectors.js\");\n return (await connectorRead(plugin.connectorManager, connector_id, path)).content[0].text;\n },\n },\n {\n name: \"connector_exec\",\n description: \"Execute a custom operation on a connector.\",\n parameters: {\n connector_id: { type: \"string\" },\n operation: { type: \"string\" },\n args: { type: \"object\", optional: true },\n },\n handler: async ({\n connector_id,\n operation,\n args,\n }: {\n connector_id: string;\n operation: string;\n args?: Record<string, unknown>;\n }) => {\n const { connectorExec } = await import(\"../tools/connectors.js\");\n return (await connectorExec(plugin.connectorManager, connector_id, operation, args ?? {}))\n .content[0].text;\n },\n },\n {\n name: \"session_list\",\n description: \"List past agent run sessions.\",\n parameters: {},\n handler: async () => {\n const { sessionList } = await import(\"../tools/sessions.js\");\n return (await sessionList(plugin.projectDir)).content[0].text;\n },\n },\n {\n name: \"workspace_validate\",\n description: \"Run a full health check on the workspace config.\",\n parameters: {},\n handler: async () => {\n const { workspaceValidate } = await import(\"../tools/validator.js\");\n return (await workspaceValidate(plugin, plugin.driver ?? DEFAULT_DRIVER_ID)).content[0]\n .text;\n },\n },\n {\n name: \"workspace_info\",\n description: \"Show workspace configuration (driver, model, resource counts).\",\n parameters: {},\n handler: async () => {\n const { workspaceInfo } = await import(\"../tools/validator.js\");\n return (await workspaceInfo(plugin, plugin.driver ?? DEFAULT_DRIVER_ID, plugin.model))\n .content[0].text;\n },\n },\n ];\n}\n\n// ── Slash command dispatcher ──────────────────────────────────────────────────\n\n/**\n * Dispatch an OMP slash command to the appropriate tool group.\n *\n * Routes the command group string to the corresponding tool functions.\n * Supported groups: `\"flow\"`, `\"connector\"`, `\"skill\"`, `\"mounts\"`,\n * `\"validate\"`. Returns a human-readable string for display in the OMP\n * terminal.\n *\n * Sub-commands per group:\n * - `flow`: `list` | `show <id>` | `sessions` | `session <runId>`\n * - `connector`: `list` | `read <id> <path>` | `exec <id> <op> [json-args]` | `describe <id>`\n * - `skill`: `list` | `show <id>` | `search <query>` | `run <id>`\n * - `mounts`: `list` | `sync <id>` | `status <id>`\n * - `validate`: (no sub-commands)\n *\n * @param plugin - A booted `WorkspacePlugin` instance.\n * @param group - Slash command group name (without the leading `/`).\n * @param args - Tokenised arguments following the group name.\n * @returns Plain-text result string for the OMP terminal.\n *\n * @docLink packages/workspace-plugin/concepts#adapters\n */\nexport async function handleSlashCommand(\n plugin: WorkspacePlugin,\n group: string,\n args: string[],\n): Promise<string> {\n const sub = args[0];\n const rest = args.slice(1);\n\n try {\n switch (group) {\n case \"flow\":\n return await handleFlowCommand(plugin, sub, rest);\n case \"connector\":\n return await handleConnectorCommand(plugin, sub, rest);\n case \"skill\":\n return await handleSkillCommand(plugin, sub, rest);\n case \"mounts\":\n return await handleMountsCommand(plugin, sub, rest);\n case \"validate\":\n return await handleValidateCommand(plugin);\n default:\n return `Unknown group '${group}'`;\n }\n } catch (e: unknown) {\n return `Error: ${e instanceof Error ? e.message : String(e)}`;\n }\n}\n\nasync function handleFlowCommand(\n plugin: WorkspacePlugin,\n sub: string | undefined,\n rest: string[],\n): Promise<string> {\n const { flowList, flowShow, flowListSessions, flowGetSession } = await import(\n \"../tools/flows.js\"\n );\n if (!sub || sub === \"list\") return (await flowList(plugin.projectDir)).content[0].text;\n if (sub === \"show\" && rest[0])\n return (await flowShow(plugin.projectDir, rest[0])).content[0].text;\n if (sub === \"sessions\") return (await flowListSessions(plugin.projectDir)).content[0].text;\n if (sub === \"session\" && rest[0])\n return (await flowGetSession(plugin.projectDir, rest[0])).content[0].text;\n return \"Usage: /flow list | show <id> | sessions | session <runId>\";\n}\n\nasync function handleConnectorCommand(\n plugin: WorkspacePlugin,\n sub: string | undefined,\n rest: string[],\n): Promise<string> {\n const { connectorList, connectorRead, connectorExec, connectorDescribe } = await import(\n \"../tools/connectors.js\"\n );\n if (!sub || sub === \"list\") return (await connectorList(plugin.connectorManager)).content[0].text;\n if (sub === \"read\" && rest[0] && rest[1])\n return (await connectorRead(plugin.connectorManager, rest[0], rest[1])).content[0].text;\n if (sub === \"exec\" && rest[0] && rest[1]) {\n let args: Record<string, unknown> = {};\n if (rest[2]) {\n try {\n args = JSON.parse(rest.slice(2).join(\" \"));\n } catch {\n /* best-effort parse */\n }\n }\n return (await connectorExec(plugin.connectorManager, rest[0], rest[1], args)).content[0].text;\n }\n if (sub === \"describe\" && rest[0])\n return (await connectorDescribe(plugin.connectorManager, rest[0])).content[0].text;\n return \"Usage: /connector list | read <id> <path> | exec <id> <op> [json-args] | describe <id>\";\n}\n\nasync function handleSkillCommand(\n plugin: WorkspacePlugin,\n sub: string | undefined,\n rest: string[],\n): Promise<string> {\n const { skillList, skillShow, skillSearch } = await import(\"../tools/skills.js\");\n if (sub === \"run\" && rest[0])\n return (await skillShow(plugin.projectDir, rest[0])).content[0].text;\n if (!sub || sub === \"list\") return (await skillList(plugin.projectDir)).content[0].text;\n if (sub === \"show\" && rest[0])\n return (await skillShow(plugin.projectDir, rest[0])).content[0].text;\n if (sub === \"search\" && rest[0])\n return (await skillSearch(plugin.projectDir, rest.join(\" \"))).content[0].text;\n return \"Usage: /skill list | show <id> | search <query> | run <id>\";\n}\n\nasync function handleMountsCommand(\n plugin: WorkspacePlugin,\n sub: string | undefined,\n rest: string[],\n): Promise<string> {\n const { mountList, mountSync, mountStatus } = await import(\"../tools/connectors.js\");\n if (!sub || sub === \"list\") return (await mountList(plugin.connectorManager)).content[0].text;\n if (sub === \"sync\" && rest[0])\n return (await mountSync(plugin.connectorManager, rest[0])).content[0].text;\n if (sub === \"status\" && rest[0])\n return (await mountStatus(plugin.connectorManager, rest[0])).content[0].text;\n return \"Usage: /mounts list | sync <id> | status <id>\";\n}\n\nasync function handleValidateCommand(plugin: WorkspacePlugin): Promise<string> {\n const { workspaceValidate } = await import(\"../tools/validator.js\");\n return (await workspaceValidate(plugin, plugin.driver ?? DEFAULT_DRIVER_ID)).content[0].text;\n}\n"]}
1
+ {"version":3,"sources":["../../../workspace-plugin/src/adapters/omp.ts"],"names":[],"mappings":"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","file":"omp.js","sourcesContent":["import { DEFAULT_DRIVER_ID } from \"@skaile/workspaces/core/framework\";\nimport type { WorkspacePlugin } from \"../plugin.js\";\n\n// ── Extension source generator (STATELESS) ──────────────────────────────────\n// This function generates the .omp/extensions/skaile.ts file content.\n// It is stateless — takes only projectDir, does not require a booted plugin.\n// OMP tool set in the generated file is intentionally a reduced subset\n// (high-frequency tools only) — the full set is available via the MCP adapter.\n\n/** Slash command groups the generated extension registers (one omp command each). */\nconst OMP_COMMANDS: { name: string; description: string }[] = [\n {\n name: \"flow\",\n description: \"Flow inspection: /flow list | show <id> | sessions | session <runId>\",\n },\n {\n name: \"connector\",\n description:\n \"Connector CRUD: /connector list | read <id> <path> | exec <id> <op> [json-args] | describe <id>\",\n },\n {\n name: \"skill\",\n description: \"Skill catalog: /skill list | show <id> | search <query> | run <id>\",\n },\n {\n name: \"mounts\",\n description: \"Mount management: /mounts list | sync <id> | status <id>\",\n },\n { name: \"validate\", description: \"Validate workspace config (skaile.yaml)\" },\n];\n\n/** Static description of one tool the generated extension registers. */\ninterface OmpToolSpec {\n name: string;\n description: string;\n parameters: Record<string, { type: string; optional?: boolean }>;\n}\n\n/**\n * Generate the `.omp/extensions/skaile.ts` file content for a given project.\n *\n * Stateless — accepts only `projectDir` and embeds it as a JSON string\n * literal in the generated TypeScript source. No `boot()` or plugin instance\n * is required; this function is safe to call from install commands.\n *\n * The generated file has the shape omp 18.x loads: a **default export factory**\n * `(pi) => …` that registers the tools (`pi.registerTool`) and slash commands\n * (`pi.registerCommand`). A module that exports `onInit`/`tools`/`slashCommands`\n * instead is rejected with \"Extension does not export a valid factory function\".\n *\n * The file imports nothing from skaile. omp resolves bare package names with\n * its own loader, which cannot resolve every dependency of the runtime (it\n * fails on `ulid` and `picocolors`), and a project rarely has\n * `@skaile/workspaces` installed beside `.omp/`. Each tool and command instead\n * runs `skaile integration omp-exec` — the same `skaile` the MCP entries invoke —\n * which boots the workspace plugin in an ordinary process.\n *\n * @param projectDir - Absolute path to the skaile project root (embedded in\n * the generated source).\n * @returns A TypeScript source string ready to be written to\n * `.omp/extensions/skaile.ts`.\n *\n * @docLink packages/workspace-plugin/concepts#adapters\n */\nexport function buildOmpExtensionSource(projectDir: string): string {\n // Only name/description/parameters are read: the handlers close over a plugin\n // that is never booted here.\n const tools: OmpToolSpec[] = (buildOmpToolSet({} as WorkspacePlugin) as OmpToolSpec[]).map(\n ({ name, description, parameters }) => ({ name, description, parameters }),\n );\n return `// .omp/extensions/skaile.ts\n// Generated by: skaile integration install --driver omp\n// or: skaile repl --driver omp (ephemeral — removed on exit)\n// Re-generate: skaile integration install --driver omp --project-dir ${projectDir}\nimport { spawn } from \"node:child_process\";\n\nconst PROJECT_DIR = ${JSON.stringify(projectDir)};\nconst TOOLS = ${JSON.stringify(tools, null, 2)};\nconst COMMANDS = ${JSON.stringify(OMP_COMMANDS, null, 2)};\n\n/** Run \\`skaile integration omp-exec <kind> <name>\\` with a JSON payload on stdin; resolves to its stdout. */\nfunction skaileExec(kind, name, payload) {\n return new Promise((resolve, reject) => {\n const child = spawn(\n \"skaile\",\n [\"integration\", \"omp-exec\", kind, name, \"--project-dir\", PROJECT_DIR],\n { stdio: [\"pipe\", \"pipe\", \"pipe\"] },\n );\n let out = \"\";\n let err = \"\";\n child.stdout.on(\"data\", (chunk) => (out += chunk));\n child.stderr.on(\"data\", (chunk) => (err += chunk));\n child.on(\"error\", (e) => reject(new Error(\"could not run skaile: \" + e.message)));\n child.on(\"close\", (code) =>\n code === 0 ? resolve(out.trimEnd()) : reject(new Error(err.trim() || \"skaile exited \" + code)),\n );\n child.stdin.end(JSON.stringify(payload));\n });\n}\n\nfunction schemaFor(z, spec) {\n const base = spec.type === \"object\" ? z.record(z.string(), z.unknown()) : z.string();\n return spec.optional ? base.optional() : base;\n}\n\nexport default function skaile(pi) {\n const z = pi.zod;\n pi.setLabel(\"skaile workspace\");\n\n for (const tool of TOOLS) {\n pi.registerTool({\n name: tool.name,\n label: tool.name,\n description: tool.description,\n parameters: z.object(\n Object.fromEntries(\n Object.entries(tool.parameters).map(([key, spec]) => [key, schemaFor(z, spec)]),\n ),\n ),\n async execute(_toolCallId, params) {\n const text = await skaileExec(\"tool\", tool.name, params);\n return { content: [{ type: \"text\", text }], details: {} };\n },\n });\n }\n\n for (const command of COMMANDS) {\n pi.registerCommand(command.name, {\n description: command.description,\n handler: async (args, ctx) => {\n try {\n const parts = args.trim().split(/\\\\s+/).filter(Boolean);\n pi.sendMessage(\n {\n customType: \"skaile-\" + command.name,\n content: await skaileExec(\"slash\", command.name, parts),\n display: true,\n attribution: \"agent\",\n },\n { triggerTurn: false },\n );\n } catch (e) {\n ctx.ui.notify(e instanceof Error ? e.message : String(e), \"error\");\n }\n },\n });\n }\n}\n`;\n}\n\n// ── OMP tool set builder ──────────────────────────────────────────────────────\n// OMP tool definition shape: { name, description, parameters, handler }\n// This is a reduced subset of the MCP tool surface (high-frequency tools only).\n\n/**\n * Build the OMP-native tool set for a booted `WorkspacePlugin`.\n *\n * Returns 13 tool objects in OMP's `{ name, description, parameters, handler }`\n * shape — a high-frequency subset of the 27 MCP tools. The full tool surface\n * is available via the MCP adapter.\n *\n * Included tools: `mount_list`, `mount_sync`, `flow_list`, `flow_list_sessions`,\n * `skill_list`, `skill_search`, `skill_show`, `connector_list`, `connector_read`,\n * `connector_exec`, `session_list`, `workspace_validate`, `workspace_info`.\n *\n * @param plugin - A booted `WorkspacePlugin` instance.\n * @returns Array of OMP tool definition objects.\n *\n * @docLink packages/workspace-plugin/concepts#adapters\n */\nexport function buildOmpToolSet(plugin: WorkspacePlugin): unknown[] {\n return [\n {\n name: \"mount_list\",\n description: \"List all mounts declared in skaile.yaml with their mount status.\",\n parameters: {},\n handler: async () => {\n const { mountList } = await import(\"../tools/connectors.js\");\n return (await mountList(plugin.connectorManager)).content[0].text;\n },\n },\n {\n name: \"mount_sync\",\n description: \"Sync a mount (pull latest from remote).\",\n parameters: { mount_id: { type: \"string\" } },\n handler: async ({ mount_id }: { mount_id: string }) => {\n const { mountSync } = await import(\"../tools/connectors.js\");\n return (await mountSync(plugin.connectorManager, mount_id)).content[0].text;\n },\n },\n {\n name: \"flow_list\",\n description: \"List all available flow definitions from ai-assets.\",\n parameters: {},\n handler: async () => {\n const { flowList } = await import(\"../tools/flows.js\");\n return (await flowList(plugin.projectDir)).content[0].text;\n },\n },\n {\n name: \"flow_list_sessions\",\n description: \"List past flow run sessions for this workspace.\",\n parameters: {},\n handler: async () => {\n const { flowListSessions } = await import(\"../tools/flows.js\");\n return (await flowListSessions(plugin.projectDir)).content[0].text;\n },\n },\n {\n name: \"skill_list\",\n description: \"List all skills in the ai-assets catalog.\",\n parameters: {},\n handler: async () => {\n const { skillList } = await import(\"../tools/skills.js\");\n return (await skillList(plugin.projectDir)).content[0].text;\n },\n },\n {\n name: \"skill_search\",\n description: \"Search skills by name, description, or keywords.\",\n parameters: { query: { type: \"string\" } },\n handler: async ({ query }: { query: string }) => {\n const { skillSearch } = await import(\"../tools/skills.js\");\n return (await skillSearch(plugin.projectDir, query)).content[0].text;\n },\n },\n {\n name: \"skill_show\",\n description: \"Show the full SKILL.md content for a skill.\",\n parameters: { skill_id: { type: \"string\" } },\n handler: async ({ skill_id }: { skill_id: string }) => {\n const { skillShow } = await import(\"../tools/skills.js\");\n return (await skillShow(plugin.projectDir, skill_id)).content[0].text;\n },\n },\n {\n name: \"connector_list\",\n description:\n \"List connectors declared in skaile.yaml as {connected, failed, notice?}. A host-managed mount in `connected` carries `health` {status: ok|stale|failed, errorClass, checkedAt}; if it is not ok, tell the user and do not write to it. `failed` holds connectors that did not connect this session, with the failure reason — their mount paths are dead directories, not synced workspaces.\",\n parameters: {},\n handler: async () => {\n const { connectorList } = await import(\"../tools/connectors.js\");\n return (await connectorList(plugin.connectorManager)).content[0].text;\n },\n },\n {\n name: \"connector_read\",\n description: \"Read content from a connector by path.\",\n parameters: { connector_id: { type: \"string\" }, path: { type: \"string\" } },\n handler: async ({ connector_id, path }: { connector_id: string; path: string }) => {\n const { connectorRead } = await import(\"../tools/connectors.js\");\n return (await connectorRead(plugin.connectorManager, connector_id, path)).content[0].text;\n },\n },\n {\n name: \"connector_exec\",\n description: \"Execute a custom operation on a connector.\",\n parameters: {\n connector_id: { type: \"string\" },\n operation: { type: \"string\" },\n args: { type: \"object\", optional: true },\n },\n handler: async ({\n connector_id,\n operation,\n args,\n }: {\n connector_id: string;\n operation: string;\n args?: Record<string, unknown>;\n }) => {\n const { connectorExec } = await import(\"../tools/connectors.js\");\n return (await connectorExec(plugin.connectorManager, connector_id, operation, args ?? {}))\n .content[0].text;\n },\n },\n {\n name: \"session_list\",\n description: \"List past agent run sessions.\",\n parameters: {},\n handler: async () => {\n const { sessionList } = await import(\"../tools/sessions.js\");\n return (await sessionList(plugin.projectDir)).content[0].text;\n },\n },\n {\n name: \"workspace_validate\",\n description: \"Run a full health check on the workspace config.\",\n parameters: {},\n handler: async () => {\n const { workspaceValidate } = await import(\"../tools/validator.js\");\n return (await workspaceValidate(plugin, plugin.driver ?? DEFAULT_DRIVER_ID)).content[0]\n .text;\n },\n },\n {\n name: \"workspace_info\",\n description: \"Show workspace configuration (driver, model, resource counts).\",\n parameters: {},\n handler: async () => {\n const { workspaceInfo } = await import(\"../tools/validator.js\");\n return (await workspaceInfo(plugin, plugin.driver ?? DEFAULT_DRIVER_ID, plugin.model))\n .content[0].text;\n },\n },\n ];\n}\n\n// ── Slash command dispatcher ──────────────────────────────────────────────────\n\n/**\n * Dispatch an OMP slash command to the appropriate tool group.\n *\n * Routes the command group string to the corresponding tool functions.\n * Supported groups: `\"flow\"`, `\"connector\"`, `\"skill\"`, `\"mounts\"`,\n * `\"validate\"`. Returns a human-readable string for display in the OMP\n * terminal.\n *\n * Sub-commands per group:\n * - `flow`: `list` | `show <id>` | `sessions` | `session <runId>`\n * - `connector`: `list` | `read <id> <path>` | `exec <id> <op> [json-args]` | `describe <id>`\n * - `skill`: `list` | `show <id>` | `search <query>` | `run <id>`\n * - `mounts`: `list` | `sync <id>` | `status <id>`\n * - `validate`: (no sub-commands)\n *\n * @param plugin - A booted `WorkspacePlugin` instance.\n * @param group - Slash command group name (without the leading `/`).\n * @param args - Tokenised arguments following the group name.\n * @returns Plain-text result string for the OMP terminal.\n *\n * @docLink packages/workspace-plugin/concepts#adapters\n */\nexport async function handleSlashCommand(\n plugin: WorkspacePlugin,\n group: string,\n args: string[],\n): Promise<string> {\n const sub = args[0];\n const rest = args.slice(1);\n\n try {\n switch (group) {\n case \"flow\":\n return await handleFlowCommand(plugin, sub, rest);\n case \"connector\":\n return await handleConnectorCommand(plugin, sub, rest);\n case \"skill\":\n return await handleSkillCommand(plugin, sub, rest);\n case \"mounts\":\n return await handleMountsCommand(plugin, sub, rest);\n case \"validate\":\n return await handleValidateCommand(plugin);\n default:\n return `Unknown group '${group}'`;\n }\n } catch (e: unknown) {\n return `Error: ${e instanceof Error ? e.message : String(e)}`;\n }\n}\n\nasync function handleFlowCommand(\n plugin: WorkspacePlugin,\n sub: string | undefined,\n rest: string[],\n): Promise<string> {\n const { flowList, flowShow, flowListSessions, flowGetSession } = await import(\n \"../tools/flows.js\"\n );\n if (!sub || sub === \"list\") return (await flowList(plugin.projectDir)).content[0].text;\n if (sub === \"show\" && rest[0])\n return (await flowShow(plugin.projectDir, rest[0])).content[0].text;\n if (sub === \"sessions\") return (await flowListSessions(plugin.projectDir)).content[0].text;\n if (sub === \"session\" && rest[0])\n return (await flowGetSession(plugin.projectDir, rest[0])).content[0].text;\n return \"Usage: /flow list | show <id> | sessions | session <runId>\";\n}\n\nasync function handleConnectorCommand(\n plugin: WorkspacePlugin,\n sub: string | undefined,\n rest: string[],\n): Promise<string> {\n const { connectorList, connectorRead, connectorExec, connectorDescribe } = await import(\n \"../tools/connectors.js\"\n );\n if (!sub || sub === \"list\") return (await connectorList(plugin.connectorManager)).content[0].text;\n if (sub === \"read\" && rest[0] && rest[1])\n return (await connectorRead(plugin.connectorManager, rest[0], rest[1])).content[0].text;\n if (sub === \"exec\" && rest[0] && rest[1]) {\n let args: Record<string, unknown> = {};\n if (rest[2]) {\n try {\n args = JSON.parse(rest.slice(2).join(\" \"));\n } catch {\n /* best-effort parse */\n }\n }\n return (await connectorExec(plugin.connectorManager, rest[0], rest[1], args)).content[0].text;\n }\n if (sub === \"describe\" && rest[0])\n return (await connectorDescribe(plugin.connectorManager, rest[0])).content[0].text;\n return \"Usage: /connector list | read <id> <path> | exec <id> <op> [json-args] | describe <id>\";\n}\n\nasync function handleSkillCommand(\n plugin: WorkspacePlugin,\n sub: string | undefined,\n rest: string[],\n): Promise<string> {\n const { skillList, skillShow, skillSearch } = await import(\"../tools/skills.js\");\n if (sub === \"run\" && rest[0])\n return (await skillShow(plugin.projectDir, rest[0])).content[0].text;\n if (!sub || sub === \"list\") return (await skillList(plugin.projectDir)).content[0].text;\n if (sub === \"show\" && rest[0])\n return (await skillShow(plugin.projectDir, rest[0])).content[0].text;\n if (sub === \"search\" && rest[0])\n return (await skillSearch(plugin.projectDir, rest.join(\" \"))).content[0].text;\n return \"Usage: /skill list | show <id> | search <query> | run <id>\";\n}\n\nasync function handleMountsCommand(\n plugin: WorkspacePlugin,\n sub: string | undefined,\n rest: string[],\n): Promise<string> {\n const { mountList, mountSync, mountStatus } = await import(\"../tools/connectors.js\");\n if (!sub || sub === \"list\") return (await mountList(plugin.connectorManager)).content[0].text;\n if (sub === \"sync\" && rest[0])\n return (await mountSync(plugin.connectorManager, rest[0])).content[0].text;\n if (sub === \"status\" && rest[0])\n return (await mountStatus(plugin.connectorManager, rest[0])).content[0].text;\n return \"Usage: /mounts list | sync <id> | status <id>\";\n}\n\nasync function handleValidateCommand(plugin: WorkspacePlugin): Promise<string> {\n const { workspaceValidate } = await import(\"../tools/validator.js\");\n return (await workspaceValidate(plugin, plugin.driver ?? DEFAULT_DRIVER_ID)).content[0].text;\n}\n"]}
@@ -1,7 +1,7 @@
1
- export { PluginStore, WorkspacePlugin, buildClaudePluginFiles, resolveProjectDir } from '../chunk-6O2X3GPW.js';
1
+ export { PluginStore, WorkspacePlugin, buildClaudePluginFiles, resolveProjectDir } from '../chunk-YQU2BPQD.js';
2
2
  export { err, ok, okJson } from '../chunk-X5YPJV4N.js';
3
3
  import '../chunk-5BEFNLOR.js';
4
- import '../chunk-DALV4HHP.js';
4
+ import '../chunk-DKXNKFKP.js';
5
5
  import '../chunk-C3CAXQMA.js';
6
6
  import '../chunk-BOFL7GIF.js';
7
7
  import '../chunk-NSBPE2FW.js';
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../../workspace-plugin/src/adapters/claude-code.ts"],"names":[],"mappings":"AA8DA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAO/D"}
1
+ {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../../workspace-plugin/src/adapters/claude-code.ts"],"names":[],"mappings":"AAgEA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAO/D"}
@@ -6,8 +6,17 @@ import type { WorkspacePlugin } from "../plugin.js";
6
6
  * literal in the generated TypeScript source. No `boot()` or plugin instance
7
7
  * is required; this function is safe to call from install commands.
8
8
  *
9
- * The generated file exports `onInit`, `tools`, and `slashCommands` as
10
- * required by the OMP extension API.
9
+ * The generated file has the shape omp 18.x loads: a **default export factory**
10
+ * `(pi) => …` that registers the tools (`pi.registerTool`) and slash commands
11
+ * (`pi.registerCommand`). A module that exports `onInit`/`tools`/`slashCommands`
12
+ * instead is rejected with "Extension does not export a valid factory function".
13
+ *
14
+ * The file imports nothing from skaile. omp resolves bare package names with
15
+ * its own loader, which cannot resolve every dependency of the runtime (it
16
+ * fails on `ulid` and `picocolors`), and a project rarely has
17
+ * `@skaile/workspaces` installed beside `.omp/`. Each tool and command instead
18
+ * runs `skaile integration omp-exec` — the same `skaile` the MCP entries invoke —
19
+ * which boots the workspace plugin in an ordinary process.
11
20
  *
12
21
  * @param projectDir - Absolute path to the skaile project root (embedded in
13
22
  * the generated source).
@@ -1 +1 @@
1
- {"version":3,"file":"omp.d.ts","sourceRoot":"","sources":["../../../../workspace-plugin/src/adapters/omp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAQpD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CA+ClE;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,EAAE,CAwIlE;AAID;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EAAE,GACb,OAAO,CAAC,MAAM,CAAC,CAsBjB"}
1
+ {"version":3,"file":"omp.d.ts","sourceRoot":"","sources":["../../../../workspace-plugin/src/adapters/omp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAqCpD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAqFlE;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,EAAE,CAwIlE;AAID;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EAAE,GACb,OAAO,CAAC,MAAM,CAAC,CAsBjB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skaile/workspaces",
3
- "version": "5.11.0",
3
+ "version": "5.12.0",
4
4
  "description": "Skaile workspaces runtime — types, core, bridge, runner, store, connectors, and supporting layers as one publishable package",
5
5
  "type": "module",
6
6
  "packageManager": "bun@1.3.9",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../cli/src/asset-feeds.ts"],"names":[],"mappings":"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","file":"asset-feeds-CXGQIDFR.js","sourcesContent":["/**\n * asset-feeds.ts — gather installable assets from every feed the manage TUI\n * surfaces.\n *\n * Four feeds, normalized into `CatalogEntry`:\n * - **Project sources** — `skaile.yaml` `sources:` entries (scanned via\n * `AssetManager.search()`; the new `sources:` field is merged into the\n * legacy repositories map in `AssetManager.loadConfig`).\n * - **Local libraries** — user authoring places from `LocalIndex`, read through\n * `scanAuthoringLibraries` (`@skaile/workspaces/library`): the same scan\n * `library index` / `search --local` use, so publishers and refs match them\n * (per-asset `publisher_overrides` honoured), `dev_paths` assets are left out,\n * and a library that fails to scan becomes one note while the rest stay listed.\n * - **Factory assets** — the bundled first-party `factory-assets` tree\n * (`factoryAssetRoots()`), scanned from disk. Always present; no network.\n * - **Remote store** — the configured catalog source when `catalog.url` is\n * not `local`. Failures are non-fatal — they surface as notes.\n */\n\nimport * as path from \"node:path\";\nimport {\n type AssetKind,\n type CatalogEntry,\n factoryAssetRoots,\n parseRequires,\n scanRepo,\n} from \"@skaile/workspaces/core\";\nimport { getKnownKinds } from \"./open-registry.ts\";\nimport type { DiscoveredAsset } from \"@skaile/workspaces/discovery\";\n\n/** One non-fatal note returned to the caller for surfacing in the UI. */\nexport interface FeedNote {\n feed: \"sources\" | \"libraries\" | \"store\" | \"factory\";\n message: string;\n}\n\n/**\n * Which feed an asset came from. This is the top-level grouping axis in the\n * manage TUI (\"where is this skill coming from?\") and is intentionally distinct\n * from `publisher` (asset-intrinsic identity): the same publisher can legitimately\n * appear under more than one origin (e.g. a github repo you added as a `source`\n * that is also listed in the remote `store`).\n */\nexport type AssetOrigin = \"source\" | \"library\" | \"factory\" | \"store\";\n\n/** A catalog entry tagged with the feed it was gathered from. */\nexport interface OriginEntry {\n origin: AssetOrigin;\n entry: CatalogEntry;\n /**\n * Second-level grouping label for the manage tree. Defaults (when unset) to the\n * entry's `publisher`; the source feed sets it to the source's short repo name\n * so the Sources band groups by source — \"which repo did this come from\" — not\n * by the asset-intrinsic publisher.\n */\n group?: string;\n}\n\nexport interface AssetFeedResult {\n entries: OriginEntry[];\n notes: FeedNote[];\n}\n\n/**\n * Map one discovered library asset to the `CatalogEntry` the manage rows read.\n * `publisher` is the bare per-asset publisher (what `search --local` prints),\n * `source` the manifest path. `repo` is left unset: it only feeds the Sources-tree\n * org grouping. `requires` / `dependencies` come from the manifest the way the\n * scanner fills them — string `requires:` refs parsed to `{kind, name}`, a bundle's\n * string `dependencies:` list verbatim.\n */\nfunction libraryEntryOf(asset: DiscoveredAsset): CatalogEntry {\n const { manifest } = asset;\n const nested = (manifest.metadata as Record<string, unknown> | undefined)?.requires;\n const rawRequires = manifest.requires ?? nested;\n const requireRefs =\n typeof rawRequires === \"string\"\n ? rawRequires\n : Array.isArray(rawRequires)\n ? rawRequires.filter((r): r is string => typeof r === \"string\")\n : undefined;\n const deps = manifest.dependencies;\n return {\n name: asset.name,\n kind: asset.kind as AssetKind,\n description: typeof manifest.description === \"string\" ? manifest.description : \"\",\n source: asset.manifestPath,\n publisher: asset.publisher,\n ...(asset.plugin ? { plugin: asset.plugin } : {}),\n version: asset.version,\n requires: requireRefs === undefined ? [] : parseRequires({ requires: requireRefs }),\n dependencies:\n asset.kind === \"bundle\" && Array.isArray(deps)\n ? deps.filter((d): d is string => typeof d === \"string\" && d.length > 0)\n : [],\n };\n}\n\n/**\n * Pull assets from local libraries (the authoring places under\n * `~/.skaile/libraries/<name>/`, not the `~/.skaile/cache/sources/` cache) through\n * `scanAuthoringLibraries`, grouped under the bare library name\n * (`group: <name>`) so the manage TUI shows a clean `<name>` band — no\n * `library:` prefix (mirrors the source feed). Plugin grouping (`entry.plugin`)\n * comes from `DiscoveredAsset.plugin`. A library whose scan fails becomes one\n * `FeedNote`; the outer `catch` covers only opening the index.\n */\nasync function libraryAssets(): Promise<{\n entries: OriginEntry[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n try {\n // Lazy: the library subpath pulls in SQLite, which the other feeds never need.\n const { openLibraryManager } = await import(\"./open-library.ts\");\n const { getKindRegistry } = await import(\"./open-registry.ts\");\n const { scanAuthoringLibraries } = await import(\"@skaile/workspaces/library\");\n const { library: index, close } = await openLibraryManager();\n try {\n const entries: OriginEntry[] = [];\n for (const scan of await scanAuthoringLibraries(index, getKindRegistry())) {\n if (scan.error !== undefined) {\n notes.push({ feed: \"libraries\", message: `${scan.library.name}: ${scan.error}` });\n continue;\n }\n for (const asset of scan.assets) {\n entries.push({\n origin: \"library\",\n entry: libraryEntryOf(asset),\n group: scan.library.name,\n });\n }\n }\n return { entries, notes };\n } finally {\n close();\n }\n } catch (err) {\n notes.push({\n feed: \"libraries\",\n message: err instanceof Error ? err.message : String(err),\n });\n return { entries: [], notes };\n }\n}\n\n/**\n * Pull a (best-effort) snapshot of the connected remote store catalog.\n *\n * - Returns no entries when the resolved catalog is local-only or the host\n * is unreachable (the failure becomes a note, not an exception).\n * - Maps `CatalogAsset` → `CatalogEntry`, carrying `publisher`, `repo`, and\n * `category` straight through and using `source = \"store://<id>\"`; per-file\n * `source` paths are not available for remote assets so the canonical ref is\n * a stable placeholder.\n */\nasync function storeAssets(projectDir: string): Promise<{\n entries: CatalogEntry[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n try {\n const { resolveCatalogSource } = await import(\"./open-library.ts\");\n const { source, close } = await resolveCatalogSource({ projectDir });\n try {\n const assets = await source.listAssets();\n const entries: CatalogEntry[] = assets.map((a) => ({\n name: a.name,\n kind: (a.kind as AssetKind) ?? \"skill\",\n description: a.description ?? \"\",\n source: `store://${a.id}`,\n publisher: a.publisher,\n repo: a.repo,\n plugin: a.plugin,\n category: a.category,\n version: a.version,\n requires: [],\n dependencies: [],\n }));\n return { entries, notes };\n } finally {\n close();\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n // Local-only catalog throws a recognizable message — silence it; absence\n // is the user's choice, not an error.\n if (!/local/i.test(msg)) {\n notes.push({ feed: \"store\", message: msg });\n }\n return { entries: [], notes };\n }\n}\n\n/** The slice of `AssetManager` the source feed needs (kept narrow for tests). */\ninterface AssetManagerLike {\n search: () => Promise<CatalogEntry[]>;\n searchRepoRoots: () => { repoName: string; root: string }[];\n}\n\n/**\n * Project-source feed: leans on `AssetManager.search()`, which merges\n * `skaile.yaml`'s `sources:` field into the repositories map. Plugin grouping\n * (`entry.plugin`) is stamped by the scanner, so entries pass through as-is.\n */\nasync function sourceAssets(am: AssetManagerLike): Promise<OriginEntry[]> {\n // The bundled factory tree is injected into the repositories map as an implicit\n // source, so `am.search()` returns it too. It has its own `factory` origin band,\n // so drop it here — otherwise the same first-party skills list twice under Sources.\n const factoryPrefixes = factoryAssetRoots().map((r) => (r.endsWith(path.sep) ? r : r + path.sep));\n const isFactoryPath = (p: string) =>\n factoryPrefixes.some((fp) => p === fp.slice(0, -1) || p.startsWith(fp));\n\n const all = (await am.search()).filter((e) => !isFactoryPath(e.source));\n const entries: OriginEntry[] = [];\n // Group each source's entries under the source node (its short repo name), not\n // the publisher: under Sources the navigational question is \"which repo did\n // this come from\". Each entry's `source` (absolute manifest path) lives under\n // exactly one declared root, so group by prefix. The cache slug is\n // URL-keyed `github.com/<org>/<repo>` — take the trailing segment.\n for (const { repoName, root } of am.searchRepoRoots()) {\n if (isFactoryPath(root)) continue;\n const prefix = root.endsWith(path.sep) ? root : root + path.sep;\n const owned = all.filter((e) => e.source === root || e.source.startsWith(prefix));\n if (owned.length === 0) continue;\n const sourceName = repoName.split(\"/\").pop() || repoName;\n for (const entry of owned) entries.push({ origin: \"source\", entry, group: sourceName });\n }\n return entries;\n}\n\n/**\n * Factory-asset feed: scan the bundled first-party `factory-assets` tree(s)\n * resolved by `factoryAssetRoots()` (the `SKAILE_FACTORY_ASSETS_DIR` override\n * layer ahead of the bundled tree). Local disk only, no network — the entries are\n * the built-in skills / connectors / bundles that ship with `@skaile/workspaces`.\n * `factoryAssetRoots()` already dedupes, so the env override pointing at the\n * bundled dir collapses to one root.\n */\nasync function factoryAssets(): Promise<{\n entries: CatalogEntry[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n try {\n const entries: CatalogEntry[] = [];\n for (const root of factoryAssetRoots()) {\n entries.push(...(await scanRepo(root, \"skaile-factory\", { knownKinds: getKnownKinds() })));\n }\n return { entries, notes };\n } catch (err) {\n notes.push({\n feed: \"factory\",\n message: err instanceof Error ? err.message : String(err),\n });\n return { entries: [], notes };\n }\n}\n\n/** Tag a flat entry list with a single origin. */\nfunction tag(origin: AssetOrigin, entries: CatalogEntry[]): OriginEntry[] {\n return entries.map((entry) => ({ origin, entry }));\n}\n\n/**\n * Run all feeds and return a single normalized result.\n *\n * Feeds run in parallel where possible — the store fetch is the slow one\n * (one HTTP call) and is fired alongside the local library walk. The factory\n * scan is local disk only, so it runs inline.\n */\nexport async function gatherAssetFeeds(\n am: AssetManagerLike,\n projectDir: string,\n): Promise<AssetFeedResult> {\n const [libs, store] = await Promise.all([libraryAssets(), storeAssets(projectDir)]);\n const factory = await factoryAssets();\n const src = await sourceAssets(am);\n return {\n entries: [\n ...src,\n ...libs.entries,\n ...tag(\"factory\", factory.entries),\n ...tag(\"store\", store.entries),\n ],\n notes: [...libs.notes, ...store.notes, ...factory.notes],\n };\n}\n"]}