@skaile/workspaces 5.11.0 → 5.13.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 (472) hide show
  1. package/CHANGELOG.md +193 -0
  2. package/README.md +4 -4
  3. package/dist/{asset-feeds-CXGQIDFR.js → asset-feeds-ALMTHLPV.js} +26 -23
  4. package/dist/asset-feeds-ALMTHLPV.js.map +1 -0
  5. package/dist/asset-manager/catalog-deployer.js +10 -10
  6. package/dist/asset-manager/fragments.js +1 -1
  7. package/dist/asset-manager/index.js +18 -18
  8. package/dist/asset-manager/installer.js +13 -13
  9. package/dist/asset-manager/renderers.js +11 -11
  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 +140 -12
  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.map +1 -1
  17. package/dist/asset-manager/src/renderers.d.ts +5 -0
  18. package/dist/asset-manager/src/renderers.d.ts.map +1 -1
  19. package/dist/bridge/drivers/claude-sdk.js +21 -16
  20. package/dist/bridge/drivers/claude-sdk.js.map +1 -1
  21. package/dist/bridge/drivers/codex.js +101 -29
  22. package/dist/bridge/drivers/codex.js.map +1 -1
  23. package/dist/bridge/drivers/continue.js +12 -12
  24. package/dist/bridge/drivers/echo.js +2 -2
  25. package/dist/bridge/drivers/gemini.js +7 -7
  26. package/dist/bridge/drivers/goose.js +12 -12
  27. package/dist/bridge/drivers/omp.js +135 -33
  28. package/dist/bridge/drivers/omp.js.map +1 -1
  29. package/dist/bridge/drivers/opencode.js +12 -12
  30. package/dist/bridge/drivers/qwen.js +7 -7
  31. package/dist/bridge/index.js +14 -14
  32. package/dist/bridge/src/codex/config-toml.d.ts +16 -3
  33. package/dist/bridge/src/codex/config-toml.d.ts.map +1 -1
  34. package/dist/bridge/src/codex/managed-driver.d.ts.map +1 -1
  35. package/dist/bridge/src/drivers/claude-sdk.d.ts +1 -1
  36. package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
  37. package/dist/bridge/src/drivers/codex.d.ts +6 -0
  38. package/dist/bridge/src/drivers/codex.d.ts.map +1 -1
  39. package/dist/bridge/src/drivers/omp-models-yml.d.ts +32 -0
  40. package/dist/bridge/src/drivers/omp-models-yml.d.ts.map +1 -1
  41. package/dist/bridge/src/drivers/omp.d.ts +29 -6
  42. package/dist/bridge/src/drivers/omp.d.ts.map +1 -1
  43. package/dist/bridge/src/provider-materialize/credential-env.d.ts +15 -0
  44. package/dist/bridge/src/provider-materialize/credential-env.d.ts.map +1 -1
  45. package/dist/{chunk-T42WRQ4O.js → chunk-2BIESC6S.js} +3 -3
  46. package/dist/{chunk-T42WRQ4O.js.map → chunk-2BIESC6S.js.map} +1 -1
  47. package/dist/{chunk-CPWLNZGJ.js → chunk-4DLQESIY.js} +3 -3
  48. package/dist/{chunk-CPWLNZGJ.js.map → chunk-4DLQESIY.js.map} +1 -1
  49. package/dist/{chunk-HZXUXHIV.js → chunk-4L4R5LV3.js} +89 -12
  50. package/dist/chunk-4L4R5LV3.js.map +1 -0
  51. package/dist/{chunk-CAHB6MHA.js → chunk-4NJ3QQHZ.js} +5 -5
  52. package/dist/{chunk-CAHB6MHA.js.map → chunk-4NJ3QQHZ.js.map} +1 -1
  53. package/dist/{chunk-ZCAJZ4B2.js → chunk-57SF6W6E.js} +147 -4
  54. package/dist/chunk-57SF6W6E.js.map +1 -0
  55. package/dist/{chunk-FH7W6TJ4.js → chunk-5FYOM4RF.js} +106 -25
  56. package/dist/chunk-5FYOM4RF.js.map +1 -0
  57. package/dist/{chunk-R7NHYEJF.js → chunk-5SKVCMRC.js} +15 -7
  58. package/dist/chunk-5SKVCMRC.js.map +1 -0
  59. package/dist/{chunk-CJERAGFY.js → chunk-6GICC4RJ.js} +44 -13
  60. package/dist/chunk-6GICC4RJ.js.map +1 -0
  61. package/dist/{chunk-G4FFOV3N.js → chunk-6JKIOPT3.js} +4 -4
  62. package/dist/{chunk-G4FFOV3N.js.map → chunk-6JKIOPT3.js.map} +1 -1
  63. package/dist/{chunk-T7CTHHG7.js → chunk-6NQDDCIL.js} +3 -3
  64. package/dist/{chunk-T7CTHHG7.js.map → chunk-6NQDDCIL.js.map} +1 -1
  65. package/dist/{chunk-XUSALIEI.js → chunk-7SMP4GNW.js} +6 -6
  66. package/dist/{chunk-XUSALIEI.js.map → chunk-7SMP4GNW.js.map} +1 -1
  67. package/dist/{chunk-Y3HTGHJC.js → chunk-AHCI4V5L.js} +3 -3
  68. package/dist/{chunk-Y3HTGHJC.js.map → chunk-AHCI4V5L.js.map} +1 -1
  69. package/dist/{chunk-M3B6EIJD.js → chunk-B7CZYFB2.js} +4 -4
  70. package/dist/{chunk-M3B6EIJD.js.map → chunk-B7CZYFB2.js.map} +1 -1
  71. package/dist/{chunk-PBBPZYVG.js → chunk-BF422IDP.js} +112 -46
  72. package/dist/chunk-BF422IDP.js.map +1 -0
  73. package/dist/{chunk-47U4GZ4M.js → chunk-BVJU2GKE.js} +20 -3
  74. package/dist/chunk-BVJU2GKE.js.map +1 -0
  75. package/dist/{chunk-PMECEZK3.js → chunk-D54T2F54.js} +5 -4
  76. package/dist/chunk-D54T2F54.js.map +1 -0
  77. package/dist/{chunk-2F5AWQX5.js → chunk-DKGEV6SQ.js} +192 -42
  78. package/dist/chunk-DKGEV6SQ.js.map +1 -0
  79. package/dist/{chunk-DALV4HHP.js → chunk-DKXNKFKP.js} +3 -2
  80. package/dist/{chunk-DALV4HHP.js.map → chunk-DKXNKFKP.js.map} +1 -1
  81. package/dist/chunk-FB3NREF7.js +649 -0
  82. package/dist/chunk-FB3NREF7.js.map +1 -0
  83. package/dist/{chunk-QZNJOHN6.js → chunk-FHDK3BFD.js} +3 -3
  84. package/dist/{chunk-QZNJOHN6.js.map → chunk-FHDK3BFD.js.map} +1 -1
  85. package/dist/{chunk-3SM2DL2T.js → chunk-GMDSRSGI.js} +21 -11
  86. package/dist/chunk-GMDSRSGI.js.map +1 -0
  87. package/dist/chunk-H5U7LNTJ.js +122 -0
  88. package/dist/chunk-H5U7LNTJ.js.map +1 -0
  89. package/dist/{chunk-VLTQGE2E.js → chunk-HBZD3MIW.js} +269 -81
  90. package/dist/chunk-HBZD3MIW.js.map +1 -0
  91. package/dist/{chunk-S3O3GKB7.js → chunk-HWGYJMME.js} +4 -4
  92. package/dist/{chunk-S3O3GKB7.js.map → chunk-HWGYJMME.js.map} +1 -1
  93. package/dist/{chunk-CPSIPIX7.js → chunk-IG5LZ3WU.js} +8 -6
  94. package/dist/chunk-IG5LZ3WU.js.map +1 -0
  95. package/dist/{chunk-ZPWTOUTK.js → chunk-IY5E7Y5W.js} +61 -8
  96. package/dist/chunk-IY5E7Y5W.js.map +1 -0
  97. package/dist/{chunk-6O2X3GPW.js → chunk-J4DB5G36.js} +7 -5
  98. package/dist/chunk-J4DB5G36.js.map +1 -0
  99. package/dist/{chunk-BNMZVPYA.js → chunk-J4OYIYFQ.js} +2 -2
  100. package/dist/{chunk-BNMZVPYA.js.map → chunk-J4OYIYFQ.js.map} +1 -1
  101. package/dist/{chunk-ALEYHUC5.js → chunk-L3ZGYSWY.js} +182 -41
  102. package/dist/chunk-L3ZGYSWY.js.map +1 -0
  103. package/dist/{chunk-SBSA3IQA.js → chunk-M3P4BYRK.js} +49 -14
  104. package/dist/chunk-M3P4BYRK.js.map +1 -0
  105. package/dist/{chunk-IER3KIPH.js → chunk-NDUYFYJB.js} +5 -5
  106. package/dist/{chunk-IER3KIPH.js.map → chunk-NDUYFYJB.js.map} +1 -1
  107. package/dist/{chunk-CGYEHQOX.js → chunk-NOA6EJXE.js} +11 -2
  108. package/dist/chunk-NOA6EJXE.js.map +1 -0
  109. package/dist/{chunk-J4RBUFGM.js → chunk-NVO6WECE.js} +9 -8
  110. package/dist/chunk-NVO6WECE.js.map +1 -0
  111. package/dist/{chunk-OBYKJB4U.js → chunk-O2SYFJWP.js} +79 -5
  112. package/dist/chunk-O2SYFJWP.js.map +1 -0
  113. package/dist/{chunk-5LKOAX7I.js → chunk-OQ5MKDS3.js} +21 -5
  114. package/dist/chunk-OQ5MKDS3.js.map +1 -0
  115. package/dist/{chunk-NWDSLXOX.js → chunk-PHRNUTSG.js} +118 -118
  116. package/dist/chunk-PHRNUTSG.js.map +1 -0
  117. package/dist/chunk-PN44DOGP.js +345 -0
  118. package/dist/chunk-PN44DOGP.js.map +1 -0
  119. package/dist/{chunk-COH6FQAG.js → chunk-PXDWTJ3P.js} +5 -5
  120. package/dist/{chunk-COH6FQAG.js.map → chunk-PXDWTJ3P.js.map} +1 -1
  121. package/dist/{chunk-GV4DZ6MT.js → chunk-PYTTF754.js} +22 -6
  122. package/dist/chunk-PYTTF754.js.map +1 -0
  123. package/dist/chunk-PZOO7L26.js +64 -0
  124. package/dist/chunk-PZOO7L26.js.map +1 -0
  125. package/dist/{chunk-EDYHEMJA.js → chunk-QO7CR3KB.js} +10 -5
  126. package/dist/chunk-QO7CR3KB.js.map +1 -0
  127. package/dist/{chunk-XDKH7XSA.js → chunk-R6QHJEHE.js} +5 -5
  128. package/dist/{chunk-XDKH7XSA.js.map → chunk-R6QHJEHE.js.map} +1 -1
  129. package/dist/chunk-U27JRO5L.js +13 -0
  130. package/dist/chunk-U27JRO5L.js.map +1 -0
  131. package/dist/{chunk-X77SUM4P.js → chunk-USHB5KEY.js} +3 -3
  132. package/dist/{chunk-X77SUM4P.js.map → chunk-USHB5KEY.js.map} +1 -1
  133. package/dist/{chunk-QVFAS5IO.js → chunk-V5JHD4I2.js} +3 -3
  134. package/dist/{chunk-QVFAS5IO.js.map → chunk-V5JHD4I2.js.map} +1 -1
  135. package/dist/{chunk-PQFHMQHQ.js → chunk-VLBIME5L.js} +6 -6
  136. package/dist/{chunk-PQFHMQHQ.js.map → chunk-VLBIME5L.js.map} +1 -1
  137. package/dist/{chunk-D3B36CYC.js → chunk-X3RMRJNR.js} +4 -3
  138. package/dist/chunk-X3RMRJNR.js.map +1 -0
  139. package/dist/{chunk-TCHRMVTO.js → chunk-XBYSURMK.js} +4 -4
  140. package/dist/{chunk-TCHRMVTO.js.map → chunk-XBYSURMK.js.map} +1 -1
  141. package/dist/{chunk-MZG34MBZ.js → chunk-XJYBCDY2.js} +3 -3
  142. package/dist/{chunk-MZG34MBZ.js.map → chunk-XJYBCDY2.js.map} +1 -1
  143. package/dist/{chunk-4A4OD24G.js → chunk-Y4Z7LGSH.js} +9 -9
  144. package/dist/{chunk-4A4OD24G.js.map → chunk-Y4Z7LGSH.js.map} +1 -1
  145. package/dist/{chunk-DZMNFCWB.js → chunk-Y7WKXPWS.js} +816 -143
  146. package/dist/chunk-Y7WKXPWS.js.map +1 -0
  147. package/dist/{chunk-HCEVNYSH.js → chunk-YTZFSKWL.js} +3 -3
  148. package/dist/{chunk-HCEVNYSH.js.map → chunk-YTZFSKWL.js.map} +1 -1
  149. package/dist/{chunk-WSBKB4CJ.js → chunk-ZSMMX3JD.js} +167 -25
  150. package/dist/chunk-ZSMMX3JD.js.map +1 -0
  151. package/dist/{chunk-GCHPUTA3.js → chunk-ZU24LWBI.js} +3 -3
  152. package/dist/{chunk-GCHPUTA3.js.map → chunk-ZU24LWBI.js.map} +1 -1
  153. package/dist/cli/index.js +1427 -605
  154. package/dist/cli/index.js.map +1 -1
  155. package/dist/cli/src/agent-checks.d.ts +40 -0
  156. package/dist/cli/src/agent-checks.d.ts.map +1 -0
  157. package/dist/cli/src/asset-feeds.d.ts.map +1 -1
  158. package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
  159. package/dist/cli/src/commands/catalog-cmd.d.ts.map +1 -1
  160. package/dist/cli/src/commands/catalog.d.ts +26 -0
  161. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  162. package/dist/cli/src/commands/config.d.ts.map +1 -1
  163. package/dist/cli/src/commands/diff.d.ts +1 -1
  164. package/dist/cli/src/commands/diff.d.ts.map +1 -1
  165. package/dist/cli/src/commands/integration.d.ts.map +1 -1
  166. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  167. package/dist/cli/src/commands/library-index.d.ts +10 -0
  168. package/dist/cli/src/commands/library-index.d.ts.map +1 -1
  169. package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
  170. package/dist/cli/src/commands/mcp-server.d.ts +1 -1
  171. package/dist/cli/src/commands/migrate-assets.d.ts +2 -1
  172. package/dist/cli/src/commands/migrate-assets.d.ts.map +1 -1
  173. package/dist/cli/src/commands/migrate.d.ts.map +1 -1
  174. package/dist/cli/src/commands/plugin/claude-code.d.ts +1 -1
  175. package/dist/cli/src/commands/plugin/claude-code.d.ts.map +1 -1
  176. package/dist/cli/src/commands/plugin/types.d.ts +3 -1
  177. package/dist/cli/src/commands/plugin/types.d.ts.map +1 -1
  178. package/dist/cli/src/commands/plugin-registry-cmd.d.ts.map +1 -1
  179. package/dist/cli/src/commands/preset-apply.d.ts.map +1 -1
  180. package/dist/cli/src/commands/project.d.ts +8 -0
  181. package/dist/cli/src/commands/project.d.ts.map +1 -1
  182. package/dist/cli/src/commands/publish-core.d.ts +5 -0
  183. package/dist/cli/src/commands/publish-core.d.ts.map +1 -1
  184. package/dist/cli/src/commands/run.d.ts +11 -1
  185. package/dist/cli/src/commands/run.d.ts.map +1 -1
  186. package/dist/cli/src/commands/serve-preflight.d.ts +23 -0
  187. package/dist/cli/src/commands/serve-preflight.d.ts.map +1 -0
  188. package/dist/cli/src/commands/serve.d.ts.map +1 -1
  189. package/dist/cli/src/commands/source-manifest-publish.d.ts.map +1 -1
  190. package/dist/cli/src/commands/source-manifest.d.ts +1 -0
  191. package/dist/cli/src/commands/source-manifest.d.ts.map +1 -1
  192. package/dist/cli/src/commands/source.d.ts +9 -1
  193. package/dist/cli/src/commands/source.d.ts.map +1 -1
  194. package/dist/cli/src/commands/store.d.ts.map +1 -1
  195. package/dist/cli/src/commands/tree.d.ts.map +1 -1
  196. package/dist/cli/src/commands/update.d.ts.map +1 -1
  197. package/dist/cli/src/commands/validate-instances.d.ts.map +1 -1
  198. package/dist/cli/src/commands/validate.d.ts +3 -2
  199. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  200. package/dist/cli/src/commands/why.d.ts.map +1 -1
  201. package/dist/cli/src/curated-manifests.d.ts +21 -0
  202. package/dist/cli/src/curated-manifests.d.ts.map +1 -0
  203. package/dist/cli/src/driver-error.d.ts +7 -0
  204. package/dist/cli/src/driver-error.d.ts.map +1 -1
  205. package/dist/cli/src/helpers.d.ts +6 -0
  206. package/dist/cli/src/helpers.d.ts.map +1 -1
  207. package/dist/cli/src/index-busy.d.ts +8 -0
  208. package/dist/cli/src/index-busy.d.ts.map +1 -0
  209. package/dist/cli/src/plugin-store/index.d.ts +1 -1
  210. package/dist/cli/src/plugin-store/index.d.ts.map +1 -1
  211. package/dist/cli/src/plugin-store/paths.d.ts +7 -3
  212. package/dist/cli/src/plugin-store/paths.d.ts.map +1 -1
  213. package/dist/cli/src/plugin-store/reconcile.d.ts +24 -4
  214. package/dist/cli/src/plugin-store/reconcile.d.ts.map +1 -1
  215. package/dist/cli/src/skill-checks.d.ts +27 -3
  216. package/dist/cli/src/skill-checks.d.ts.map +1 -1
  217. package/dist/cli/src/store-addable.d.ts +17 -0
  218. package/dist/cli/src/store-addable.d.ts.map +1 -0
  219. package/dist/connectors/config.js +6 -6
  220. package/dist/connectors/index.js +18 -18
  221. package/dist/connectors/src/config.d.ts.map +1 -1
  222. package/dist/{connectors-4QWAKPHB.js → connectors-GFKMKAXV.js} +21 -21
  223. package/dist/{connectors-4QWAKPHB.js.map → connectors-GFKMKAXV.js.map} +1 -1
  224. package/dist/core/driver-targets.js +1 -1
  225. package/dist/core/index.js +9 -9
  226. package/dist/core/logging.js +1 -1
  227. package/dist/core/manifest.js +2 -2
  228. package/dist/core/models.js +1 -1
  229. package/dist/core/publish-manifest.js +4 -2
  230. package/dist/core/ref.js +1 -1
  231. package/dist/core/runtime-assets.js +6 -6
  232. package/dist/core/src/agent-instances.d.ts +5 -0
  233. package/dist/core/src/agent-instances.d.ts.map +1 -1
  234. package/dist/core/src/driver-targets.d.ts.map +1 -1
  235. package/dist/core/src/index.d.ts +6 -5
  236. package/dist/core/src/index.d.ts.map +1 -1
  237. package/dist/core/src/lock.d.ts +15 -5
  238. package/dist/core/src/lock.d.ts.map +1 -1
  239. package/dist/core/src/logging/sinks/sqlite-sink.d.ts.map +1 -1
  240. package/dist/core/src/manifest.d.ts +14 -3
  241. package/dist/core/src/manifest.d.ts.map +1 -1
  242. package/dist/core/src/models.d.ts +11 -3
  243. package/dist/core/src/models.d.ts.map +1 -1
  244. package/dist/core/src/package-manager.d.ts +19 -0
  245. package/dist/core/src/package-manager.d.ts.map +1 -0
  246. package/dist/core/src/publish-manifest.d.ts +38 -1
  247. package/dist/core/src/publish-manifest.d.ts.map +1 -1
  248. package/dist/core/src/repo-manager.d.ts +19 -3
  249. package/dist/core/src/repo-manager.d.ts.map +1 -1
  250. package/dist/core/src/runtime-assets.d.ts.map +1 -1
  251. package/dist/core/src/settings.d.ts +26 -6
  252. package/dist/core/src/settings.d.ts.map +1 -1
  253. package/dist/core/src/store.d.ts +4 -0
  254. package/dist/core/src/store.d.ts.map +1 -1
  255. package/dist/core/src/walker.d.ts +8 -1
  256. package/dist/core/src/walker.d.ts.map +1 -1
  257. package/dist/core/src/workspace-config.d.ts +24 -2
  258. package/dist/core/src/workspace-config.d.ts.map +1 -1
  259. package/dist/core/store.js +2 -2
  260. package/dist/core/workspace-config.js +5 -5
  261. package/dist/deploy/index.js +9 -9
  262. package/dist/discovery/index.js +5 -5
  263. package/dist/discovery/src/parse-manifest.d.ts.map +1 -1
  264. package/dist/discovery/src/source-config.d.ts +5 -3
  265. package/dist/discovery/src/source-config.d.ts.map +1 -1
  266. package/dist/{ensure-sources-2RONZKCU.js → ensure-sources-VUKHL65L.js} +21 -21
  267. package/dist/{ensure-sources-2RONZKCU.js.map → ensure-sources-VUKHL65L.js.map} +1 -1
  268. package/dist/factory-assets/README.md +1 -1
  269. package/dist/factory-assets/connectors/box.js +18 -18
  270. package/dist/factory-assets/connectors/deploy.js +18 -18
  271. package/dist/factory-assets/connectors/devserver.js +18 -18
  272. package/dist/factory-assets/connectors/flow/adapter.js +18 -18
  273. package/dist/factory-assets/connectors/flow/contract/normalize.d.ts.map +1 -1
  274. package/dist/factory-assets/connectors/flow/contract.js +1 -1
  275. package/dist/factory-assets/connectors/flow/engine.js +11 -11
  276. package/dist/factory-assets/connectors/flow/run-flow.d.ts.map +1 -1
  277. package/dist/factory-assets/connectors/flow/run-flow.js +20 -20
  278. package/dist/factory-assets/connectors/flow.js +18 -18
  279. package/dist/factory-assets/connectors/git.js +18 -18
  280. package/dist/factory-assets/connectors/gmail.js +18 -18
  281. package/dist/factory-assets/connectors/googledrive.js +18 -18
  282. package/dist/factory-assets/connectors/local.js +18 -18
  283. package/dist/factory-assets/connectors/mattermost.js +18 -18
  284. package/dist/factory-assets/connectors/memory.js +18 -18
  285. package/dist/factory-assets/connectors/minio.js +18 -18
  286. package/dist/factory-assets/connectors/postgres.js +18 -18
  287. package/dist/factory-assets/connectors/s3.js +18 -18
  288. package/dist/factory-assets/connectors/sharepoint.js +18 -18
  289. package/dist/factory-assets/connectors/sqlite.js +18 -18
  290. package/dist/factory-assets/connectors/static-server.js +18 -18
  291. package/dist/factory-assets/connectors/tunnel.js +18 -18
  292. package/dist/factory-assets/connectors/webdav.js +18 -18
  293. package/dist/factory-assets/connectors/xstate-store.js +18 -18
  294. package/dist/factory-assets/connectors/xstate.js +18 -18
  295. package/dist/factory-assets/skills/authoring-skaile-assets/SKILL.md +10 -8
  296. package/dist/factory-assets/skills/authoring-skaile-manifests/SKILL.md +15 -11
  297. package/dist/factory-assets/skills/authoring-skaile-manifests/references/dependency-standard.md +12 -9
  298. package/dist/factory-assets/skills/skaile-author-asset/SKILL.md +2 -2
  299. package/dist/flows-A4YALSZY.js +26 -0
  300. package/dist/{flows-EQF2CH4U.js.map → flows-A4YALSZY.js.map} +1 -1
  301. package/dist/helpers-53XZW7KF.js +34 -0
  302. package/dist/{helpers-CFK6YP6R.js.map → helpers-53XZW7KF.js.map} +1 -1
  303. package/dist/library/index.js +14 -14
  304. package/dist/library/install.js +6 -4
  305. package/dist/library/src/index.d.ts +2 -2
  306. package/dist/library/src/index.d.ts.map +1 -1
  307. package/dist/library/src/install/source-fetch-github.d.ts.map +1 -1
  308. package/dist/library/src/local/db.d.ts +2 -0
  309. package/dist/library/src/local/db.d.ts.map +1 -1
  310. package/dist/library/src/local/library-manager.d.ts +5 -0
  311. package/dist/library/src/local/library-manager.d.ts.map +1 -1
  312. package/dist/library/src/local/library.d.ts +5 -3
  313. package/dist/library/src/local/library.d.ts.map +1 -1
  314. package/dist/library/src/local/local-catalog-source.d.ts +6 -0
  315. package/dist/library/src/local/local-catalog-source.d.ts.map +1 -1
  316. package/dist/library/src/local/store-paths.d.ts +9 -0
  317. package/dist/library/src/local/store-paths.d.ts.map +1 -1
  318. package/dist/library/src/manifest-writer.d.ts +1 -1
  319. package/dist/library/src/manifest-writer.d.ts.map +1 -1
  320. package/dist/library/src/remote/index.d.ts +1 -1
  321. package/dist/library/src/remote/index.d.ts.map +1 -1
  322. package/dist/library/src/remote/remote-catalog-source.d.ts +17 -0
  323. package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
  324. package/dist/library/src/sync/git-driver.d.ts.map +1 -1
  325. package/dist/library/src/user-library.d.ts +2 -0
  326. package/dist/library/src/user-library.d.ts.map +1 -1
  327. package/dist/{library-publish-53UTB3MB.js → library-publish-FFIPWIRM.js} +50 -39
  328. package/dist/library-publish-FFIPWIRM.js.map +1 -0
  329. package/dist/open-library-PZAT3TJA.js +40 -0
  330. package/dist/{open-library-BOSPJVID.js.map → open-library-PZAT3TJA.js.map} +1 -1
  331. package/dist/open-registry-W46UXZ3I.js +32 -0
  332. package/dist/{open-registry-4FI7HKET.js.map → open-registry-W46UXZ3I.js.map} +1 -1
  333. package/dist/paths-KKY3NSBZ.js +22 -0
  334. package/dist/{paths-SUS4S4YT.js.map → paths-KKY3NSBZ.js.map} +1 -1
  335. package/dist/plugin-store-CK7YWRIC.js +227 -0
  336. package/dist/plugin-store-CK7YWRIC.js.map +1 -0
  337. package/dist/plugins/src/catalog-source.d.ts +6 -0
  338. package/dist/plugins/src/catalog-source.d.ts.map +1 -1
  339. package/dist/project-EZUH7PUJ.js +79 -0
  340. package/dist/{project-I55A4O2T.js.map → project-EZUH7PUJ.js.map} +1 -1
  341. package/dist/resolver/index.js +10 -10
  342. package/dist/runner/index.js +35 -35
  343. package/dist/runner/src/agent.d.ts.map +1 -1
  344. package/dist/runner/src/agents/in-process-host.d.ts.map +1 -1
  345. package/dist/runner/src/composition/index.d.ts +2 -1
  346. package/dist/runner/src/composition/index.d.ts.map +1 -1
  347. package/dist/runner/src/composition/prompt-sections.d.ts +20 -5
  348. package/dist/runner/src/composition/prompt-sections.d.ts.map +1 -1
  349. package/dist/runner/src/composition/resolve.d.ts +10 -1
  350. package/dist/runner/src/composition/resolve.d.ts.map +1 -1
  351. package/dist/runner/src/composition/verify.d.ts +29 -0
  352. package/dist/runner/src/composition/verify.d.ts.map +1 -0
  353. package/dist/runner/src/credential-notice.d.ts +14 -0
  354. package/dist/runner/src/credential-notice.d.ts.map +1 -0
  355. package/dist/runner/src/environment.d.ts.map +1 -1
  356. package/dist/runner/src/final-text.d.ts +17 -0
  357. package/dist/runner/src/final-text.d.ts.map +1 -0
  358. package/dist/runner/src/index.d.ts +2 -0
  359. package/dist/runner/src/index.d.ts.map +1 -1
  360. package/dist/runner/src/resource-handler.d.ts.map +1 -1
  361. package/dist/runner/src/serve.d.ts +13 -0
  362. package/dist/runner/src/serve.d.ts.map +1 -1
  363. package/dist/runner/src/session-builder.d.ts.map +1 -1
  364. package/dist/runner/src/session.d.ts +2 -0
  365. package/dist/runner/src/session.d.ts.map +1 -1
  366. package/dist/runner/src/ws-auth-warning.d.ts +17 -0
  367. package/dist/runner/src/ws-auth-warning.d.ts.map +1 -0
  368. package/dist/sdk/asset-manager.js +18 -18
  369. package/dist/sdk/bridge.js +14 -14
  370. package/dist/sdk/core.js +9 -9
  371. package/dist/sdk/flow.js +11 -11
  372. package/dist/sdk/index.js +38 -36
  373. package/dist/sdk/index.js.map +1 -1
  374. package/dist/sdk/resolver.js +10 -10
  375. package/dist/sdk/runner.js +35 -35
  376. package/dist/sdk/src/local-runtime.d.ts.map +1 -1
  377. package/dist/sdk/transport/ws/client.js +1 -1
  378. package/dist/sdk/transport/ws/server.js +1 -1
  379. package/dist/sdk/transport/ws.js +2 -2
  380. package/dist/sdk/transport.js +2 -2
  381. package/dist/serve-preflight-F7MYF747.js +64 -0
  382. package/dist/serve-preflight-F7MYF747.js.map +1 -0
  383. package/dist/{setup-7DQJKHUI.js → setup-L632QIHV.js} +26 -26
  384. package/dist/{setup-7DQJKHUI.js.map → setup-L632QIHV.js.map} +1 -1
  385. package/dist/skills-OY3Y5GKA.js +26 -0
  386. package/dist/{skills-NUEN5NDX.js.map → skills-OY3Y5GKA.js.map} +1 -1
  387. package/dist/source-36FHMN5V.js +42 -0
  388. package/dist/{source-G2LV5LVD.js.map → source-36FHMN5V.js.map} +1 -1
  389. package/dist/source-fetch-github-PIO6EMMF.js +4 -0
  390. package/dist/{source-fetch-github-QN4LLTL5.js.map → source-fetch-github-PIO6EMMF.js.map} +1 -1
  391. package/dist/{source-manifest-publish-6RM7SWLZ.js → source-manifest-publish-NIXJSJ22.js} +30 -28
  392. package/dist/source-manifest-publish-NIXJSJ22.js.map +1 -0
  393. package/dist/transport/index.js +2 -2
  394. package/dist/transport/src/ws/client.d.ts +6 -0
  395. package/dist/transport/src/ws/client.d.ts.map +1 -1
  396. package/dist/transport/src/ws/server.d.ts +4 -0
  397. package/dist/transport/src/ws/server.d.ts.map +1 -1
  398. package/dist/transport/ws/client.js +1 -1
  399. package/dist/transport/ws/server.js +1 -1
  400. package/dist/transport/ws.js +2 -2
  401. package/dist/tui/index.js +77 -50
  402. package/dist/tui/index.js.map +1 -1
  403. package/dist/tui/src/repl-session.d.ts +1 -1
  404. package/dist/tui/src/repl-session.d.ts.map +1 -1
  405. package/dist/tui/src/repl.d.ts +3 -0
  406. package/dist/tui/src/repl.d.ts.map +1 -1
  407. package/dist/types/manifests.js +1 -1
  408. package/dist/types/src/lifecycle.d.ts +2 -1
  409. package/dist/types/src/lifecycle.d.ts.map +1 -1
  410. package/dist/types/src/manifests/agent-composition.d.ts +20 -0
  411. package/dist/types/src/manifests/agent-composition.d.ts.map +1 -1
  412. package/dist/types/src/manifests/agent.d.ts.map +1 -1
  413. package/dist/types/src/manifests/cron.d.ts +15 -0
  414. package/dist/types/src/manifests/cron.d.ts.map +1 -0
  415. package/dist/types/src/manifests/index.d.ts +3 -2
  416. package/dist/types/src/manifests/index.d.ts.map +1 -1
  417. package/dist/types/src/manifests/preset.d.ts +6 -1
  418. package/dist/types/src/manifests/preset.d.ts.map +1 -1
  419. package/dist/workspace-plugin/adapters/mcp.js +25 -25
  420. package/dist/workspace-plugin/adapters/omp.js +106 -51
  421. package/dist/workspace-plugin/adapters/omp.js.map +1 -1
  422. package/dist/workspace-plugin/index.js +2 -2
  423. package/dist/workspace-plugin/src/adapters/claude-code.d.ts.map +1 -1
  424. package/dist/workspace-plugin/src/adapters/omp.d.ts +11 -2
  425. package/dist/workspace-plugin/src/adapters/omp.d.ts.map +1 -1
  426. package/package.json +1 -1
  427. package/dist/asset-feeds-CXGQIDFR.js.map +0 -1
  428. package/dist/chunk-2F5AWQX5.js.map +0 -1
  429. package/dist/chunk-3SM2DL2T.js.map +0 -1
  430. package/dist/chunk-47U4GZ4M.js.map +0 -1
  431. package/dist/chunk-5LKOAX7I.js.map +0 -1
  432. package/dist/chunk-6O2X3GPW.js.map +0 -1
  433. package/dist/chunk-ALEYHUC5.js.map +0 -1
  434. package/dist/chunk-CGYEHQOX.js.map +0 -1
  435. package/dist/chunk-CJERAGFY.js.map +0 -1
  436. package/dist/chunk-CPSIPIX7.js.map +0 -1
  437. package/dist/chunk-D3B36CYC.js.map +0 -1
  438. package/dist/chunk-DZMNFCWB.js.map +0 -1
  439. package/dist/chunk-EDYHEMJA.js.map +0 -1
  440. package/dist/chunk-FH7W6TJ4.js.map +0 -1
  441. package/dist/chunk-GV4DZ6MT.js.map +0 -1
  442. package/dist/chunk-HZXUXHIV.js.map +0 -1
  443. package/dist/chunk-J4RBUFGM.js.map +0 -1
  444. package/dist/chunk-NWDSLXOX.js.map +0 -1
  445. package/dist/chunk-OBYKJB4U.js.map +0 -1
  446. package/dist/chunk-PBBPZYVG.js.map +0 -1
  447. package/dist/chunk-PMECEZK3.js.map +0 -1
  448. package/dist/chunk-R7FOF242.js +0 -59
  449. package/dist/chunk-R7FOF242.js.map +0 -1
  450. package/dist/chunk-R7NHYEJF.js.map +0 -1
  451. package/dist/chunk-RYYLMBA2.js +0 -392
  452. package/dist/chunk-RYYLMBA2.js.map +0 -1
  453. package/dist/chunk-SBSA3IQA.js.map +0 -1
  454. package/dist/chunk-VLTQGE2E.js.map +0 -1
  455. package/dist/chunk-WSBKB4CJ.js.map +0 -1
  456. package/dist/chunk-YOH2L76X.js +0 -505
  457. package/dist/chunk-YOH2L76X.js.map +0 -1
  458. package/dist/chunk-ZCAJZ4B2.js.map +0 -1
  459. package/dist/chunk-ZPWTOUTK.js.map +0 -1
  460. package/dist/flows-EQF2CH4U.js +0 -26
  461. package/dist/helpers-CFK6YP6R.js +0 -34
  462. package/dist/library-publish-53UTB3MB.js.map +0 -1
  463. package/dist/open-library-BOSPJVID.js +0 -40
  464. package/dist/open-registry-4FI7HKET.js +0 -32
  465. package/dist/paths-SUS4S4YT.js +0 -22
  466. package/dist/plugin-store-AGQDMING.js +0 -149
  467. package/dist/plugin-store-AGQDMING.js.map +0 -1
  468. package/dist/project-I55A4O2T.js +0 -41
  469. package/dist/skills-NUEN5NDX.js +0 -26
  470. package/dist/source-G2LV5LVD.js +0 -41
  471. package/dist/source-fetch-github-QN4LLTL5.js +0 -4
  472. package/dist/source-manifest-publish-6RM7SWLZ.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,198 @@
1
1
  # Changelog
2
2
 
3
+ ## 5.13.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#1064](https://github.com/skaile-ai/workspaces/pull/1064) [`c0c483e`](https://github.com/skaile-ai/workspaces/commit/c0c483e068aeb5f5f1979565a251b5a29e0d72c9) Thanks [@mortegro](https://github.com/mortegro)! - Agents: the open findings of the 5.12.0 critique.
8
+
9
+ - A rendered agent file is part of the drift model. `install`, `add` and `update` record the sha256 of every file an agent renders (`.claude/agents/<name>.md`, the codex and omp files) in the lock entry's new `rendered:` list. `check`, `doctor` and `outdated` exit 1 for a hand-edited agent file (`<file> was edited`), and `install`, `install --locked` and `update` restore it and print `Restored <file>`, as for a skill file (p549, p576).
10
+ - `install` keeps a source at the commit the lock records: it no longer pulls a pinned clone to the branch tip. Only `update` moves a lock entry (p632).
11
+ - `check` names every instance bound to an agent whose pinned `SOUL.md` / `knowledge/` was edited after `rebuild`, and `doctor` prints the same lines and exits 1 (p635). `RULES.md`, `DUTIES.md` and local rulesets are `inline-live`: they are read at every run start, so the docs no longer say an edit is a conflict (p414).
12
+ - `validate` fails a `composes` item of a kind with no default binding (`preset`) that sets no `binding:` (p415), resolves `composes` refs against the enclosing library when it gets one asset directory (p633), and warns on an unknown key under the primary `agent:` block, as it does under `agents.<id>` (p634).
13
+ - `skaile run` prints the typed `result` a finished `agent.run` role returned, and no `output=` for a failed run (p636).
14
+ - omp: the system prompt goes to a per-spawn file under `.skaile/cache/omp-system/` that the process deletes, so a nested `agent.run` child never reads its parent's prompt (p630); the agent's soul reaches the live prompt once whether or not a memory block seeds from `SOUL.md` (p631); omp's home is a private directory that links the agent's files, so omp's databases never land in the pinned agent directory, and a missing credential names `/login` instead of a path in the cache (p637).
15
+
16
+ - [#1064](https://github.com/skaile-ai/workspaces/pull/1064) [`c0c483e`](https://github.com/skaile-ai/workspaces/commit/c0c483e068aeb5f5f1979565a251b5a29e0d72c9) Thanks [@mortegro](https://github.com/mortegro)! - Library authoring: the open findings of the 5.12.0 critique.
17
+
18
+ - A library holds plain files: `validate`, `library index`, `library publish` and `asset import` (and `asset migrate --mode copy`) refuse a symlink with one line, `<path> is a symlink to <target>`, and exit 1. This covers an alias of an asset directory (`s1alias -> s1`), a link to `.` and a link to a file inside an asset. `validate` no longer passes a library that `index` and the publish plan refuse (p520, p224).
19
+ - Editor leftovers (`*.swp`, `*.swo`, `*~`) join the names no asset ships: `asset import`, the deploy and the content hash leave them out (p224).
20
+ - The asset-scan cycle warning is printed once per directory and run, names the library and says `remove the symlink` (p524).
21
+ - Versions follow strict semver (no leading zero, no empty identifier, numbers up to 15 digits): `01.0.0`, `1.0.0-alpha..1` and `99999999999999999999.0.0` are refused by `validate`, `index` and the publish plan (p521).
22
+ - A SKILL.md with a UTF-8 BOM or CRLF line endings parses like any other; a file that still fails says `BOM` or `CRLF` in the message (p522).
23
+ - `library pull` and `library sync` print `! <n> asset(s) on disk are not in the manifest; run skaile library index <name>` after bringing assets the manifest does not list (p523).
24
+ - `library create --help` offers the scaffoldable kinds only (p567).
25
+ - An untouched scaffold body (`Skill prompt goes here.`) is an error in `validate` (exit 1), so a passing `validate` means the asset can be published; the publish plan keeps refusing it, and `library index` keeps indexing but warns `publish refuses it until you write the <kind> prompt` (p675).
26
+
27
+ - [#1064](https://github.com/skaile-ai/workspaces/pull/1064) [`c0c483e`](https://github.com/skaile-ai/workspaces/commit/c0c483e068aeb5f5f1979565a251b5a29e0d72c9) Thanks [@mortegro](https://github.com/mortegro)! - Consume commands: the open findings of the 5.12.0 critique.
28
+
29
+ - `source add` of a source with no publisher (a `file://` URL, a local path, GitLab, a manifest without `publisher:`) exits 1 with `publisher must be declared in skaile.manifest.yaml … or recorded with skaile source add --publisher` and records nothing, instead of printing `Indexed` and `registered` for a source every later command skips. New option `source add --publisher <name>` records the publisher on the `sources:` entry (`SourceEntry.publisher`, also in preset `sources:`); `publisher:` in the source manifest still wins (p540, p613).
30
+ - A local path given to `source add` is resolved to an absolute, real path before it is stored: `../remotes/srcA.git` and its absolute path are one source, cloned under `cache/sources/`. The local-catalog errors name `skaile library init <name> --path <dir>` (p618).
31
+ - `add` refuses to deploy over a folder (or agent file) no lock entry owns, such as a hand-made skill of the same name: exit 1, the folder is named, `--force` replaces it. A folder the deploy would rewrite with the same content (the one `asset import` copied the skill from: same bytes, or same body with frontmatter the asset only extends) is adopted without a word (p542).
32
+ - `update` re-locks and reports only the source assets whose files changed. A source asset without a declared version keeps its `0.0.0-sha.<commit>` lock key while its files hash the same, so `update` and `outdated` list the same assets (p543).
33
+ - `update` skips the catalog refresh when every locked asset comes from a library, and prints a failed refresh as `! Catalog refresh failed` (not `✗`) when it goes on with exit 0 (p544).
34
+ - A source clone that cannot be refreshed is reported once as `! source clone <name> not refreshed: <cause>; using the cached commit`, without the `[repo-manager]` tag, the double period or the second path (p545).
35
+ - `library link` to a remote that already has branches but not the library's branch exits 1 with `pass --branch <name>` instead of pushing a second, unrelated history (p546).
36
+ - `add` names a ref held by two libraries once (the `! … exists in 2 libraries` warning), not a second time as `is held at different versions` (p547).
37
+ - `source sync <name>` with a name two sources share exits 1 and lists both, as `show` and `remove` do (p548).
38
+ - `update <ref>` of a locked asset that another asset requires answers `<ref> is required by <ref2>; run skaile update <declared ref>` (exit 1), not `No declared asset matches` (p550).
39
+ - Docs: `diff` with a publisher-less ref that names one locked asset still diffs it (p541).
40
+
41
+ - [#1064](https://github.com/skaile-ai/workspaces/pull/1064) [`c0c483e`](https://github.com/skaile-ai/workspaces/commit/c0c483e068aeb5f5f1979565a251b5a29e0d72c9) Thanks [@mortegro](https://github.com/mortegro)! - Flows by id, local sources, flow dependencies and the docs site: the open findings of the 5.12.0 critique (docs-flows).
42
+
43
+ - A flow asset is named by its `id:`, not by the slug of `name:` (`name:` stays a display label): a flow with `id: flow-a` and `name: Something Else Entirely` is `flow:@acme/flow-a`, `add` finds it and deploys `.skaile/flows/flow-a/flow-a.flow.yaml`, which the flow engine loads. `validate`, `library index` and `publish --dry-run` fail a flow whose file stem differs from its `id:` (`flow id "x" does not match the file name "y.flow.yaml"`) (p670).
44
+ - `source add <local path>` exits 1 with one line, before anything is cloned, when the path is a registered library (`library list` already shows it) or not a git repository (p671).
45
+ - The skills a flow's nodes name in `run.assets` (and the sub-flows they call) are the flow's dependencies: `info` lists them, `add flow:…` deploys them, `check` and `install --locked` report one that is missing (p676).
46
+ - A flow run whose driver cannot start (SDK missing, no model, `omp` exits at once) ends the session as `failed` with the cause in `error`; `status` prints `Error:`. It used to stay `paused` although no node ran (p677).
47
+ - The docs site resolves every relative link (`../commands/library`, `./03-run-a-flow`, links to repo files become GitHub links), and CI builds the site and fails on a dead internal link: `docs/site/scripts/check-links.mjs` (`bun run check:links`) (p672).
48
+ - Docs: driver targets are `claude-code`, `omp` and `codex` only (p673); `skaile migrate assets` is the CLI for the publication half of the v2→v3 migration (p674); `WORKSPACE_IDEAS` is marked ideas-only (p678); tutorial 03 shows the real `Driver:` line, the failed-run output and the flow dependencies; the stale wording of the v6 docs list is fixed.
49
+
50
+ - [#1064](https://github.com/skaile-ai/workspaces/pull/1064) [`c0c483e`](https://github.com/skaile-ai/workspaces/commit/c0c483e068aeb5f5f1979565a251b5a29e0d72c9) Thanks [@mortegro](https://github.com/mortegro)! - Harnesses and drivers: the open findings of the 5.12.0 critique.
51
+
52
+ - `--driver omp` with an unusable provider entry (credential variable unset) starts omp on the user's own agent directory when no entry is usable or the selected model's entry was left out, so omp's own login and default model apply and the notice `omp falls back to its own login` is true (p362).
53
+ - `check`, `doctor` and `install --locked` treat an omp agent as deployed only when the flat `.omp/agents/<name>.md` exists; a deleted file is `locked but its deployed copy is missing` (p590).
54
+ - `integration install` adds `.codex/config.toml`, `.omp/extensions/skaile.ts` and `.skaile/plugin-state.json` to the project `.gitignore`, as `init` does; the docs say they are per machine (p591).
55
+ - `add --global` for omp deploys to `~/.omp/agent/skills`, `~/.omp/agent/agents/<name>.md`, `~/.omp/agent/prompts` and `~/.omp/agent/contracts`, where omp reads user assets (p592).
56
+ - `run --driver codex --model <provider>/<model>` for a provider codex cannot address exits 1 naming the provider, before any request (p593).
57
+ - A Claude login that expired ends the turn with the SDK's own text and `run claude /login` instead of `The model reported an error but sent no details` (p594).
58
+ - `skaile run "<prompt>"` with stdout piped writes the bare answer and one newline, with no `agent ▶` prefix and no blank lines; a failed turn writes nothing to stdout (p595).
59
+ - Docs: `repl` lists every registered driver and the banner counts the deployed skills (p596).
60
+ - `integration uninstall` names the file the entry came from (`.mcp.json`) and deletes an empty `.claude/settings.json` and `.skaile/plugin-state.json` (p597).
61
+ - A failed turn is printed once: one `✗` line with the provider's message, `check your API key or login` for a credential error, and a pointer to `skaile logs`; the `[error]` records stay in the log database (p598).
62
+ - The `serve` preflight says the optional SDK must be installed next to the `skaile` install, not in the project (p656).
63
+ - `validate` reports a `connectors:` entry whose `driver` no catalog entry provides, with the text `serve` logs (p657).
64
+ - The codex driver accepts the codex CLI's ChatGPT login (`$CODEX_HOME/auth.json`, default `~/.codex/auth.json`) as well as an API key: the file is linked into the session's private `CODEX_HOME`, an exported `OPENAI_API_KEY` / `CODEX_API_KEY` still wins, and with neither the start fails with `codex driver needs OPENAI_API_KEY, or the codex CLI's ChatGPT login …` (p348b).
65
+
66
+ - [#1064](https://github.com/skaile-ai/workspaces/pull/1064) [`c0c483e`](https://github.com/skaile-ai/workspaces/commit/c0c483e068aeb5f5f1979565a251b5a29e0d72c9) Thanks [@mortegro](https://github.com/mortegro)! - Protocol, serve and plugins: the open findings of the 5.12.0 critique.
67
+
68
+ - `skaile serve` on a busy port exits 1 right after the one-line message instead of staying alive (p468).
69
+ - A `local` connector honours `mountPath:` (on the connector or under `params:`, `${project}` allowed): reads and writes go to that directory, not to a copy under `.mounts/<id>` (p650).
70
+ - A second `plugin install` works: the store install is frozen to its lock file only when the plugin list did not change. A failed install also puts the store's `package.json` back (p651).
71
+ - `plugin install` falls back to `npm` when `bun` is not on `PATH`, and names the missing tools when neither is found (p652).
72
+ - The replayed `session_init_ack` carries the same `capabilitySignature` as the handshake ack of the same runner: the `runner.*` capabilities are registered before the handshake ack is built, not after (p653).
73
+ - The no-token warning of a loopback bind (`--host 127.0.0.1`) says local processes can drive the agent and no longer advises `--host` (p654).
74
+ - A project without `agent.definition` (a fresh `skaile init`) no longer logs `no agent definition found` as a warning; a set but unresolvable `agent.definition` still warns (p655).
75
+
76
+ - [#1064](https://github.com/skaile-ai/workspaces/pull/1064) [`c0c483e`](https://github.com/skaile-ai/workspaces/commit/c0c483e068aeb5f5f1979565a251b5a29e0d72c9) Thanks [@mortegro](https://github.com/mortegro)! - State and upgrade: the open findings of the 5.12.0 critique.
77
+
78
+ - `skaile validate <path>` creates nothing: a missing path, or the gone directory of a registered library, stays missing and exits 1. `assertManifestEditable` no longer creates the library directory (p560).
79
+ - The 5.12.0 MIGRATION entry says a project that added an agent with 5.11.0 sees one rewrite of `.claude/agents/<name>.md` (p561).
80
+ - An equal-version tie between libraries goes to the default library on `update` and `add`, then to the library the lock names; the docs and the MIGRATION entry now say so (p562).
81
+ - `install`, `install --locked` and `update` keep `.env`, `.venv/`, `__pycache__/` and `*.pyc` in a deployed asset folder and print nothing about them; they remove only the files they print (p563).
82
+ - A declared asset with a requirement nothing holds reads `requires <dep> but no library or source holds it — register the library …` in `check`, `doctor`, `outdated`, `why`, `diff` and `install --locked`, not `run skaile install` (p564).
83
+ - `add` and `install` say `Store unreachable` for a requirement the store could not be asked about, not `not found` (p565).
84
+ - `diff <ref>` prints the diff of `<ref>` first and lists a problem of an asset it requires after it (p575).
85
+ - `outdated` says `locked and not deployed` and advises `skaile install --locked` for a required asset whose folder is gone; `check` and `doctor` advise it too (p577).
86
+ - From a subdirectory of a project, `No skaile.yaml found` is followed by the nearest parent that holds one and `--project-dir` (p578).
87
+
88
+ - [#1064](https://github.com/skaile-ai/workspaces/pull/1064) [`c0c483e`](https://github.com/skaile-ai/workspaces/commit/c0c483e068aeb5f5f1979565a251b5a29e0d72c9) Thanks [@mortegro](https://github.com/mortegro)! - Store: the open findings of the 5.12.0 critique.
89
+
90
+ - `install --locked` restores a store asset whose upstream repo is `github.com/skaile-ai/ai-assets` (the URL the bundled factory source shares): it is fetched and SHA-verified file by file instead of being checked against the bundled factory tree, which does not hold its path. A second machine (lock + yaml only) restores it, and `check`, `doctor`, `outdated` and `install --locked` agree (p380).
91
+ - Every store kind is installable: `store search`, `store show` and the `manage` feed list `mcp-server`, `agent` and `contract` rows with an `Install:` line, and `add` takes them and `install --locked` restores them; the `Not installable` branch is gone (p610).
92
+ - A store row's requirements are canonical `kind:@publisher/name[#pin]` refs; a kind-less `@publisher/name` gets the kind `skill`, and a path-style entry the indexer left behind (`../../../ai-asset-management/agents/skaile/agent.yaml`) is dropped. `add` of such an agent no longer fails with `Asset not found` (p611, p615).
93
+ - `store show <ref>` with a ref that is not a ref prints `Invalid asset ref "<ref>": ...` instead of blaming the network; `store show`/`store search --kind <unknown>` exit 1 and list the valid kinds (p612).
94
+ - A store row flagged `demo` or `internal` is hidden from `search`/`store search` by default; `--all` lists it (p616).
95
+ - A 404 or 405 from a REST-framed catalog host says `framing is rest; set catalog.framing trpc`; `catalog test` probes the route the store verbs use for the configured framing and names the mismatch instead of printing `reachable` (p617).
96
+ - With `cache_ttl: 0`, `search --store` answers from the cached catalog like `store search`; plain `search` keeps the store leg off with a one-line notice (p619).
97
+ - `source manifest init <bare name>` that is neither a registered source nor a store slug exits 1 with `not a git URL or an owner/repo shorthand`, as `source add` does, and clones nothing (p614).
98
+
99
+ ## 5.12.0
100
+
101
+ ### Minor Changes
102
+
103
+ - [#1058](https://github.com/skaile-ai/workspaces/pull/1058) [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9) Thanks [@mortegro](https://github.com/mortegro)! - Rendered agents: one render on `add` and `install`, and layouts each harness loads.
104
+
105
+ - `skaile add agent:…` renders the agent after its composed skills and delegate sub-agents are in place, so the file already holds the `## Installed Abilities` block and a later `install`, `install --locked` or `update` leaves it alone (no `Updated` line, mtime unchanged). Before, the first `install` or `update` rewrote it (p84, p300).
106
+ - A locked agent that a fresh clone has not restored yet is told `run skaile install --locked`; `skaile add <ref>` is named only for a ref the lock does not have (p303).
107
+ - omp: the agent is also written as the flat `.omp/agents/<name>.md` omp lists next to `<name>/agent.yaml`; local `composes` dirs are copied next to the omp `agent.yaml` (`../x` becomes `./composes/x`) (p356, p418).
108
+ - The Claude Code model aliases (`inherit`, `opus`, `sonnet`, `haiku`) are no longer written into Codex and omp files (p419).
109
+ - A delegate sub-agent or `role` is told it is a sub-agent and lists only the connectors its slots are bound to (p420).
110
+ - Docs say which harness release loads the rendered files: omp 18.12.5 does, Codex 0.159.3 does not list `.codex/agents/*.toml` as spawnable agents (p428).
111
+ - `skaile init` gitignores `__pycache__/`, `*.pyc`, `.omp/system.md`, `.omp/sessions/` and `.codex/skaile-session-instructions.md`; the environment section says "isolated container" only inside a container (p326, p354).
112
+ - `skaile add --global` deploys to the harness of the project you run it in as well as every harness dir that exists under `~`, and prints the path per harness (p353).
113
+
114
+ - [#1058](https://github.com/skaile-ai/workspaces/pull/1058) [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9) Thanks [@mortegro](https://github.com/mortegro)! - Library authoring guards agree across `validate`, `library index`, `asset import`, `migrate assets` and `library publish`.
115
+
116
+ - `library publish`, `register` and `yank` exit 1 for `--asset ""` instead of selecting every asset (p106).
117
+ - `library index` exits 1 and prints no green line when it skips an asset with a non-semver version, as `validate` does (p222). A yaml-number version (`version: 1.0`) is shown as written with the quoted fix (`"1.0.0"`) by `validate`, `index` and `publish` (p229).
118
+ - A flow with no `nodes:` fails `validate`, `index` and the publish plan like `nodes: []` (p230). `publish` and `register` refuse a skill, agent, prompt or contract whose body is still the untouched scaffold; `validate` still only warns (p231).
119
+ - `validate` fails for a `skaile.manifest.yaml` that does not parse and names the file (p308). Every invalid `dependencies:` form prints the same line in `index` and `validate` and exits 1 (p310). A `dependencies:` entry with an invalid publisher is refused the same way.
120
+ - `asset import` runs the shared asset checks before it copies, exits 1 with `Not imported` when they fail, and no longer prints a success line or `add` hint for such a skill (p223). `asset import` and `asset migrate --mode copy` leave `.DS_Store`, `node_modules/`, `__pycache__/` and `*.pyc` out (p224). `asset migrate` names the commands that make the asset addable (p225).
121
+ - `migrate assets` writes no `publisher:` into a preset and prints `version <old> → <new>` when the version changes (p226); a root-level bundle moves into `<name>/<name>.preset.yaml`, which `index` and `validate` accept (p307).
122
+ - `validate versions --changed-only` notices an edited or new helper file of an asset (p322). `--changed-only` and `validate changelog` outside a git repository print one line naming the problem and no git usage text (p501).
123
+ - `validate` checks agent manifests for what the schema cannot see: a cron no scheduler reads, a capability naming an undeclared connector slot, a local compose path that does not exist, an agent composing itself, a missing or oversized memory source (p415).
124
+ - `skaile` prints no raw JSON log record on stdout (p47) and prints one line, exit 1, when the index database stays locked by another `skaile` process for 5 seconds (p228).
125
+ - `library index` writes `version: 0.1.0` into the manifest entry of an `AGENT.md` or `agent.yaml` agent that declares none, so the version and the lock key are the same in every library (p323).
126
+
127
+ - [#1058](https://github.com/skaile-ai/workspaces/pull/1058) [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9) Thanks [@mortegro](https://github.com/mortegro)! - `skaile run` uses the composed agent it locked.
128
+
129
+ - A hand edit of a pinned convention file (`SOUL.md`, `RULES.md`, `DUTIES.md`, `knowledge/`) after `skaile rebuild` is now a `composition_conflict` (`hash_mismatch`): `skaile run` stops at session start and `skaile check` prints one line per edited file and exits 1. Before, only the `Revision` changed and `check` exited 0.
130
+ - `skaile add agent:@pub/name` from a project `sources:` clone deploys what the agent `composes:` (skills, connectors, sub-agents) as requirements, so `check` and `install --locked` exit 0 and `remove` prunes them. Before, `check` called them fixable while `install` printed `Nothing to install`.
131
+ - `DUTIES.md` is part of the live system prompt of `skaile run` (the duties section); omp does not read it from the agent directory.
132
+ - A role instance's `model.preferred` is the model of its nested `agent.run` session. Before, the child started on the parent's model or the driver default.
133
+ - `skaile run --skill <name> --dry-run` prints the skill (source, version, requires) and each `prerequisites.files` entry as present or missing; an unknown skill exits 1.
134
+
135
+ - [#1058](https://github.com/skaile-ai/workspaces/pull/1058) [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9) Thanks [@mortegro](https://github.com/mortegro)! - Drivers (5.11.0 critique, RCV drivers):
136
+
137
+ - `skaile.yaml` alone owns `driver`. `config set model` writes only `model`; a personal `driver` no longer overrides the project harness (a warning says so), and `config show` names the file that set each key (p340).
138
+ - `skaile run` with omp 18.x prints the answer when the reply arrives in `message_start` (p341), and a successful one-shot turn no longer logs `prompt failed - omp process killed` (p342, p427).
139
+ - `skaile repl` reads piped stdin line by line and exits at EOF; with no `skaile.yaml` a non-terminal repl refuses and names `skaile init` (p343).
140
+ - `integration install --driver omp` writes a default-export extension omp 18 loads, calling `skaile integration omp-exec` (p345); `--driver claude-code` writes project-root `.mcp.json` (p346) and its hooks call `skaile integration hook` (p346b).
141
+ - codex: the session home is always created (p347); no credential fails at once with `codex driver needs OPENAI_API_KEY` (p348); the `openai` entry is rendered as `skaile-openai` (p363).
142
+ - `run --help` and `repl --help` build the driver list from the registry (p350); omp start failures name omp's last error line as text (p359); the missing-SDK hint prints the project's package manager (p361); a provider entry whose credential variable is unset is named and not handed to omp (p362).
143
+
144
+ - [#1058](https://github.com/skaile-ai/workspaces/pull/1058) [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9) Thanks [@mortegro](https://github.com/mortegro)! - Serve, protocol and plugins behave as documented.
145
+
146
+ - `plugin install` resolves the plugin entry from `exports`/`main` (loads under node), loads the plugin once and fails, restoring `skaile.yaml`, when it does not load (p450, p451).
147
+ - `skaile serve` gains `--host`, prints bind address and auth state, warns loudly when it runs without a token, checks the driver SDK before it reports ready, and prints one line on a busy port (p458, p466, p468).
148
+ - A major protocol mismatch emits `incompatible_protocol` and shuts the runner down (p454); `resource_request` accepts `resourceId` as an alias for `connectorId` (p455); an unknown command is answered with an `error` event (p457).
149
+ - `validate` fails on a connector with no `driver` (including the old `adapter` spelling) (p456).
150
+ - The WebSocket client reports the HTTP status of a refused handshake and an `error` event when another client takes the connection over (close code 4001, no reconnect) (p465, p467).
151
+ - The reconnect replay now sends `protocol_info` before the buffered events and the status (p469).
152
+ - `@skaile/workspaces/runner` types no longer pull drizzle into consumers' type-check (p461); `createAgentSession` no longer writes runner log lines to stdout (p473).
153
+
154
+ - [#1058](https://github.com/skaile-ai/workspaces/pull/1058) [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9) Thanks [@mortegro](https://github.com/mortegro)! - `skaile install --locked` restores every origin in full, and `check` notices what is missing.
155
+
156
+ - A source- or store-origin asset is restored by fetching its locked commit again and deploying every file its lock entry lists, not only its `.md` files (p320, p381). `check`, `doctor`, `outdated` and `diff` compare the deployed folder with that list too: a deleted `build.py` next to an intact `SKILL.md` is drift (exit 1, `<ref> is deployed without <files>`), and `install` / `install --locked` restore it (p382).
157
+ - A store-added asset (`skaile add skill:@admin/review`) is a first-class lock entry: `check`, `doctor` and `outdated` no longer fail with `locked but no source or library provides it any more`, `install --locked` restores it from the pinned commit (or from the bytes in `.skaile/cache/store/` when every file still hashes to the lock), and `install` heals what `check` fails on instead of printing `Nothing to install` (p380, p403).
158
+ - `outdated` counts only the commits that touch an asset's own folder, so a commit to `pirate-report` no longer marks `speak-like-a-pirate` as `1 commit(s) behind` (p397).
159
+ - `skaile.lock.yaml` is always written with `schema_version: 4`, whatever origins it holds. A lock written as `3` still loads and is rewritten as `4` by the next `add`, `install` or `update` (p398).
160
+ - `add`, `install` and `update` refuse to lock a source commit that is in no remote branch of its clone (`<url> clone has unpublished commit <sha>`), and `install --locked` exits 1 with `could not check out pin <sha>` when the pinned commit cannot be fetched, instead of deploying another commit's files and printing `Done` (p260).
161
+ - A re-lock (`install`, `update`) removes the `.env`, `.venv/` and `.pytest_cache/` files an earlier release copied into an asset folder and prints `Removed <file> (not part of <ref>)` for each (p309).
162
+
163
+ - [#1058](https://github.com/skaile-ai/workspaces/pull/1058) [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9) Thanks [@mortegro](https://github.com/mortegro)! - State commands give one verdict and name the fix.
164
+
165
+ - `skaile update` keeps a locked asset on its library when another library holds the same ref at the same version, also after `library rename`; a higher version elsewhere still wins.
166
+ - `skaile diff <ref>` fails with exit 1 when a requirement of the ref lost its library, when the ref is of a publisher the lock does not hold (`is not deployed — run skaile add <ref>`), and for a ref without a publisher that names no locked asset (`publisher required`); a ref without a publisher that names exactly one locked asset still diffs it.
167
+ - `skaile install` refuses a declared asset whose requirement nothing holds before it deploys or locks anything (`nothing was installed`, exit 1).
168
+ - `skaile info`, `why` and `tree` print one `parse error` line and exit 1 for a `skaile.yaml` that does not parse; `why` and `tree` outside a project print `No skaile.yaml found` and exit 1.
169
+ - `skaile update --catalog-only` exits 1 when the catalog cannot be refreshed and no longer says the re-deploy continues.
170
+ - `check` and `install --locked` say `(run skaile install)` for a requirement that `install` can deploy, not `(fixable)`.
171
+ - `skaile library push` of a library that is only behind says `behind origin by <n> commit(s); run skaile library pull <name>`. `library link` records the checked-out branch of an existing repo; a push without the configured branch names `library set <name> backendConfig.branch=<branch>`.
172
+ - `skaile run <word>` with no flow of that id exits 1 `Flow not found: <id>` and lists the near ids; only text with a space is a prompt.
173
+
174
+ - [#1058](https://github.com/skaile-ai/workspaces/pull/1058) [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9) Thanks [@mortegro](https://github.com/mortegro)! - Store and catalog commands list only what `add` can install, and offline answers are honest.
175
+
176
+ - `store search`/`show`/`search` list only refs `skaile add` installs: no agent, contract or mcp-server entries, no non-canonical names, no `test-`/`demo-` entries (`--all` shows the test/demo ones). A plain store search prints at most 20 rows and says how many more match. `store show` prints `Requires:`.
177
+ - `store search`, `search --store` and `add` say `store unreachable` or `Store search failed` with the catalog URL and the cause, point at `skaile catalog test`, and exit 1 when the store was asked for. `add` honours `cache_ttl: 0`.
178
+ - Offline, the cached list answers `store search --kind` and `store show` (file list marked unavailable).
179
+ - A GitHub rate limit names `SKAILE_GITHUB_PAT` and the reset time; anonymous store adds read the raw-content host and spend no API calls.
180
+ - A source with a repo-level `publisher:` and no `assets:` can be added; one bad `sources:` entry is named and skipped instead of failing every `add`.
181
+ - `source manifest init`/`edit`/`rebuild` commit the manifest in the store repo; `store search` lists local curated manifests; the init hint prints the repo URL.
182
+ - `source add <bare-name>` is rejected (no made-up `skaile-ai/<name>` clone); a failed clone leaves no empty folders.
183
+ - `sha256 not pinned` is no longer printed on `source sync`, `add` and `update`.
184
+ - `config set|get catalog.url|catalog.cache_ttl|catalog.framing` writes and reads `config.yaml`.
185
+
186
+ ### Patch Changes
187
+
188
+ - [#1058](https://github.com/skaile-ai/workspaces/pull/1058) [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9) Thanks [@mortegro](https://github.com/mortegro)! - `skaile` no longer prints internal log records on stdout. Until a command sets up its own log store, the CLI keeps only warnings and errors and writes them to stderr (`SKAILE_LOG_LEVEL` still overrides the level). Before, `library index`, `search --local` and `add` printed the raw JSON record `asset scan truncated (cycle)` on stdout when a library held a symlink to an ancestor. `skaile run <flow> --dry-run` prints its plan as plain `[dry-run] …` lines instead of `[info] [flow-connector:run:…]` log lines.
189
+
190
+ The index database (`index.db`) and the log database (`logs.db`) now wait up to 5 seconds for another `skaile` process that holds the write lock. When the wait runs out, `skaile` prints `The skaile index is busy (another skaile process holds it); retry in a moment.` and exits 1 instead of printing a `SQLITE_BUSY` stack trace.
191
+
192
+ - [#1058](https://github.com/skaile-ai/workspaces/pull/1058) [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9) Thanks [@mortegro](https://github.com/mortegro)! - The managed codex driver refuses an auth refresh request that arrives after its turn has ended. Before, a `turn/completed` read in the same chunk as a second refresh request let that request through and reset the turn's refresh budget.
193
+
194
+ - [#1058](https://github.com/skaile-ai/workspaces/pull/1058) [`5b83a1b`](https://github.com/skaile-ai/workspaces/commit/5b83a1b31f6538877505565f86f4da82f70772b9) Thanks [@mortegro](https://github.com/mortegro)! - Docs match 5.11.0. The three tutorials run end to end as written: tutorial 01 creates a skill with `--description` and says what the `TODO:` placeholder blocks, tutorial 02 shows the real `config show` output and the `driver`, `model` and `apiKey.<provider>` keys, and tutorial 03 builds a strict-v2 flow and runs it. The command pages (`index`, `run`, `repl`, `session`, `connector`, `asset`, `diff`, `library`, `misc`, `project`, `validate`, `source`, `store`, `catalog`, `plugin`, `serve`) list the options, exit codes and messages the CLI has now. The new `integration` page covers `skaile integration install | uninstall | enable | disable | status | hook`; `skaile plugin` documents `install | remove | list` and the rollback of a failed install. `protocol-v2.md` describes the `session_init` handshake the runner speaks (`protocol_info`, `session_init_ack`). Links in the docs use the routes the docs loader generates. The factory skills `authoring-skaile-assets`, `authoring-skaile-manifests` and `skaile-author-asset` list the `requires:` forms 5.11.0 deploys, say that the asset file's version wins over a manifest entry, and name the `manifest-compliance` skill.
195
+
3
196
  ## 5.11.0
4
197
 
5
198
  ### Minor Changes
package/README.md CHANGED
@@ -13,7 +13,7 @@ published package. Every internal folder is exposed as a subpath export and the
13
13
  | **bridge** | `@skaile/workspaces/bridge` | Pluggable agent driver abstraction. Harnesses: Claude SDK, Codex, OMP. |
14
14
  | **flow engine** | `@skaile/workspaces/factory-assets/connectors/flow/engine` | Flow state machine with typed bindings, precondition admission, consumed-output validation, deterministic routing, active strict v2 agent/function/gate/router/sub-flow nodes, and legacy skill compatibility. |
15
15
  | **flow contract** | `@skaile/workspaces/factory-assets/connectors/flow/contract` | Strict Flow v2 authoring schemas, v1 normalization, bounded expressions, binding origins, and canonical content identity. |
16
- | **resolver** | `@skaile/workspaces/resolver` | Parses SKILL.md requirements (reads_from, writes_to), validates gates, generates agent preamble. |
16
+ | **resolver** | `@skaile/workspaces/resolver` | Parses SKILL.md requirements (`metadata.prerequisites`), validates gates, generates the agent preamble. |
17
17
  | **client** | `@skaile/workspaces/client` | Framework-agnostic protocol client. Implements IAgentRuntime over a pluggable transport. |
18
18
  | **transport** | `@skaile/workspaces/transport` | Transport adapters (WebSocket client/server). Pluggable — add stdio, IPC, etc. |
19
19
  | **connectors** | `@skaile/workspaces/connectors` | Resource adapter infrastructure — unified access to git, postgres, redis, s3, sqlite, webdav, and more. |
@@ -25,7 +25,7 @@ published package. Every internal folder is exposed as a subpath export and the
25
25
  | **Vue bindings** | `@skaile/workspace-bridge-vue` | `useAgentStore` + `useResourceClient` for Vue 3.3+. Separate npm package, lives at [`packages/bridge-vue`](https://github.com/skaile-ai/workspaces/tree/main/packages/bridge-vue) in this monorepo. |
26
26
 
27
27
  Coding-agent plugin integration is **CLI-generated** — run
28
- `skaile plugin install --driver <claude-code|omp|codex>`. There are no separate
28
+ `skaile integration install --driver <claude-code|omp|codex>`. There are no separate
29
29
  plugin packages.
30
30
 
31
31
  ## Dependency Graph
@@ -82,8 +82,8 @@ first `run` or `repl`:
82
82
 
83
83
  | Driver | Install |
84
84
  |---|---|
85
- | `claude-sdk` (default) | `npm i -D @anthropic-ai/claude-agent-sdk` (with Bun: `bun add @anthropic-ai/claude-agent-sdk`) |
86
- | `codex` | `npm i -D @openai/codex-sdk` (with Bun: `bun add @openai/codex-sdk`) |
85
+ | `claude-sdk` (default) | `npm i @anthropic-ai/claude-agent-sdk` (with Bun: `bun add @anthropic-ai/claude-agent-sdk`) |
86
+ | `codex` | `npm i @openai/codex-sdk` (with Bun: `bun add @openai/codex-sdk`) |
87
87
  | `omp` | none; needs the `omp` binary on your `PATH` and a configured model |
88
88
 
89
89
  Without the SDK, `skaile run` exits 1 with `Claude Agent SDK not installed` (or `Codex SDK not installed`).
@@ -1,29 +1,30 @@
1
- import { getKnownKinds } from './chunk-CAHB6MHA.js';
2
- import './chunk-TCHRMVTO.js';
3
- import './chunk-D3B36CYC.js';
1
+ import { storeNotInstallableReason } from './chunk-U27JRO5L.js';
2
+ import { getKnownKinds } from './chunk-4NJ3QQHZ.js';
3
+ import './chunk-XBYSURMK.js';
4
+ import './chunk-X3RMRJNR.js';
4
5
  import './chunk-7RGTAEG6.js';
5
6
  import './chunk-NUELZWCF.js';
6
- import './chunk-2F5AWQX5.js';
7
- import './chunk-J4RBUFGM.js';
8
- import './chunk-COH6FQAG.js';
9
- import './chunk-R7FOF242.js';
7
+ import './chunk-DKGEV6SQ.js';
8
+ import './chunk-NVO6WECE.js';
9
+ import './chunk-PXDWTJ3P.js';
10
+ import './chunk-H5U7LNTJ.js';
10
11
  import './chunk-3TXEJN4W.js';
11
- import './chunk-ZCAJZ4B2.js';
12
- import './chunk-PBBPZYVG.js';
12
+ import './chunk-57SF6W6E.js';
13
+ import './chunk-BF422IDP.js';
13
14
  import './chunk-4GY63JU6.js';
14
- import { factoryAssetRoots } from './chunk-EDYHEMJA.js';
15
- import './chunk-PMECEZK3.js';
15
+ import { factoryAssetRoots } from './chunk-QO7CR3KB.js';
16
+ import './chunk-D54T2F54.js';
16
17
  import './chunk-5BEFNLOR.js';
17
18
  import './chunk-A2ULN3KX.js';
18
- import { scanRepo } from './chunk-ALEYHUC5.js';
19
+ import { scanRepo } from './chunk-L3ZGYSWY.js';
19
20
  import './chunk-L5VSIPQD.js';
20
- import './chunk-CPSIPIX7.js';
21
- import './chunk-ZPWTOUTK.js';
21
+ import './chunk-IG5LZ3WU.js';
22
+ import './chunk-IY5E7Y5W.js';
22
23
  import './chunk-RVRB27AN.js';
23
- import { parseRequires } from './chunk-SBSA3IQA.js';
24
- import './chunk-BNMZVPYA.js';
24
+ import { parseRequires } from './chunk-M3P4BYRK.js';
25
+ import './chunk-J4OYIYFQ.js';
25
26
  import './chunk-ICSCSM5D.js';
26
- import './chunk-DALV4HHP.js';
27
+ import './chunk-DKXNKFKP.js';
27
28
  import './chunk-MJHSLODD.js';
28
29
  import './chunk-C3CAXQMA.js';
29
30
  import './chunk-BOFL7GIF.js';
@@ -51,8 +52,8 @@ function libraryEntryOf(asset) {
51
52
  async function libraryAssets() {
52
53
  const notes = [];
53
54
  try {
54
- const { openLibraryManager } = await import('./open-library-BOSPJVID.js');
55
- const { getKindRegistry } = await import('./open-registry-4FI7HKET.js');
55
+ const { openLibraryManager } = await import('./open-library-PZAT3TJA.js');
56
+ const { getKindRegistry } = await import('./open-registry-W46UXZ3I.js');
56
57
  const { scanAuthoringLibraries } = await import('./library/index.js');
57
58
  const { library: index, close } = await openLibraryManager();
58
59
  try {
@@ -85,10 +86,12 @@ async function libraryAssets() {
85
86
  async function storeAssets(projectDir) {
86
87
  const notes = [];
87
88
  try {
88
- const { resolveCatalogSource } = await import('./open-library-BOSPJVID.js');
89
+ const { resolveCatalogSource } = await import('./open-library-PZAT3TJA.js');
89
90
  const { source, close } = await resolveCatalogSource({ projectDir });
90
91
  try {
91
- const assets = await source.listAssets();
92
+ const assets = (await source.listAssets()).filter(
93
+ (a) => storeNotInstallableReason(a) === void 0
94
+ );
92
95
  const entries = assets.map((a) => ({
93
96
  name: a.name,
94
97
  kind: a.kind ?? "skill",
@@ -164,5 +167,5 @@ async function gatherAssetFeeds(am, projectDir) {
164
167
  }
165
168
 
166
169
  export { gatherAssetFeeds };
167
- //# sourceMappingURL=asset-feeds-CXGQIDFR.js.map
168
- //# sourceMappingURL=asset-feeds-CXGQIDFR.js.map
170
+ //# sourceMappingURL=asset-feeds-ALMTHLPV.js.map
171
+ //# sourceMappingURL=asset-feeds-ALMTHLPV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../cli/src/asset-feeds.ts"],"names":[],"mappings":"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","file":"asset-feeds-ALMTHLPV.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 { storeNotInstallableReason } from \"./store-addable.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 // The store lists only what `skaile add` can install (see store-addable.ts).\n const assets = (await source.listAssets()).filter(\n (a) => storeNotInstallableReason(a) === undefined,\n );\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"]}
@@ -1,19 +1,19 @@
1
- export { WORKSPACE_MOUNT_ENV_VAR, deployAll, deployCatalogEntry, findAiAssetsRoot, isUnderWorkspaceMount, resolveFlowSkills, undeployCatalogEntry, workspaceMountDirs } from '../chunk-GCHPUTA3.js';
2
- import '../chunk-PBBPZYVG.js';
1
+ export { WORKSPACE_MOUNT_ENV_VAR, deployAll, deployCatalogEntry, findAiAssetsRoot, isUnderWorkspaceMount, resolveFlowSkills, undeployCatalogEntry, workspaceMountDirs } from '../chunk-ZU24LWBI.js';
2
+ import '../chunk-BF422IDP.js';
3
3
  import '../chunk-4GY63JU6.js';
4
- import '../chunk-EDYHEMJA.js';
5
- import '../chunk-PMECEZK3.js';
4
+ import '../chunk-QO7CR3KB.js';
5
+ import '../chunk-D54T2F54.js';
6
6
  import '../chunk-5BEFNLOR.js';
7
7
  import '../chunk-A2ULN3KX.js';
8
- import '../chunk-ALEYHUC5.js';
8
+ import '../chunk-L3ZGYSWY.js';
9
9
  import '../chunk-L5VSIPQD.js';
10
- import '../chunk-CPSIPIX7.js';
11
- import '../chunk-ZPWTOUTK.js';
10
+ import '../chunk-IG5LZ3WU.js';
11
+ import '../chunk-IY5E7Y5W.js';
12
12
  import '../chunk-RVRB27AN.js';
13
- import '../chunk-SBSA3IQA.js';
14
- import '../chunk-BNMZVPYA.js';
13
+ import '../chunk-M3P4BYRK.js';
14
+ import '../chunk-J4OYIYFQ.js';
15
15
  import '../chunk-ICSCSM5D.js';
16
- import '../chunk-DALV4HHP.js';
16
+ import '../chunk-DKXNKFKP.js';
17
17
  import '../chunk-MJHSLODD.js';
18
18
  import '../chunk-C3CAXQMA.js';
19
19
  import '../chunk-BOFL7GIF.js';
@@ -1,4 +1,4 @@
1
- export { BUILT_IN_FRAGMENTS, loadPromptExtensions, resolveFragments } from '../chunk-CGYEHQOX.js';
1
+ export { BUILT_IN_FRAGMENTS, loadPromptExtensions, resolveFragments } from '../chunk-NOA6EJXE.js';
2
2
  import '../chunk-NSBPE2FW.js';
3
3
  //# sourceMappingURL=fragments.js.map
4
4
  //# sourceMappingURL=fragments.js.map
@@ -1,30 +1,30 @@
1
- export { AssetManager, FACTORY_SOURCE_URL, MissingManifestError, installAgentInstances, normalizeRepoUrl, parseCanonicalLockKey, parseRefTolerant, renderMcpServerConfig, softDepName } from '../chunk-DZMNFCWB.js';
2
- import '../chunk-2F5AWQX5.js';
3
- import '../chunk-J4RBUFGM.js';
4
- import '../chunk-COH6FQAG.js';
5
- import '../chunk-R7FOF242.js';
1
+ export { AssetManager, FACTORY_SOURCE_URL, MissingManifestError, installAgentInstances, normalizeRepoUrl, parseCanonicalLockKey, parseRefTolerant, renderMcpServerConfig, softDepName } from '../chunk-Y7WKXPWS.js';
2
+ import '../chunk-DKGEV6SQ.js';
3
+ import '../chunk-NVO6WECE.js';
4
+ import '../chunk-PXDWTJ3P.js';
5
+ import '../chunk-H5U7LNTJ.js';
6
6
  import '../chunk-3TXEJN4W.js';
7
- export { SCAFFOLD_KINDS, createScaffold, deployAll, installAgent, installTargetOf, removeAsset } from '../chunk-FH7W6TJ4.js';
8
- export { BUILT_IN_FRAGMENTS, loadPromptExtensions, resolveFragments } from '../chunk-CGYEHQOX.js';
7
+ export { SCAFFOLD_KINDS, createScaffold, deployAll, installAgent, installTargetOf, removeAsset } from '../chunk-5FYOM4RF.js';
8
+ export { BUILT_IN_FRAGMENTS, loadPromptExtensions, resolveFragments } from '../chunk-NOA6EJXE.js';
9
9
  export { appendHistory, clearHistory, getRecentHistory, loadHistory } from '../chunk-KTBKW2FI.js';
10
10
  import '../chunk-UQ6LFBPZ.js';
11
- export { AGENT_RENDERERS, claudeCodeRenderer, codexRenderer, driverTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-HZXUXHIV.js';
12
- import '../chunk-ZCAJZ4B2.js';
13
- import '../chunk-PBBPZYVG.js';
11
+ export { AGENT_RENDERERS, claudeCodeRenderer, codexRenderer, driverTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-4L4R5LV3.js';
12
+ import '../chunk-57SF6W6E.js';
13
+ import '../chunk-BF422IDP.js';
14
14
  import '../chunk-4GY63JU6.js';
15
- import '../chunk-EDYHEMJA.js';
16
- import '../chunk-PMECEZK3.js';
15
+ import '../chunk-QO7CR3KB.js';
16
+ import '../chunk-D54T2F54.js';
17
17
  import '../chunk-5BEFNLOR.js';
18
18
  import '../chunk-A2ULN3KX.js';
19
- import '../chunk-ALEYHUC5.js';
19
+ import '../chunk-L3ZGYSWY.js';
20
20
  import '../chunk-L5VSIPQD.js';
21
- import '../chunk-CPSIPIX7.js';
22
- import '../chunk-ZPWTOUTK.js';
21
+ import '../chunk-IG5LZ3WU.js';
22
+ import '../chunk-IY5E7Y5W.js';
23
23
  import '../chunk-RVRB27AN.js';
24
- import '../chunk-SBSA3IQA.js';
25
- import '../chunk-BNMZVPYA.js';
24
+ import '../chunk-M3P4BYRK.js';
25
+ import '../chunk-J4OYIYFQ.js';
26
26
  import '../chunk-ICSCSM5D.js';
27
- import '../chunk-DALV4HHP.js';
27
+ import '../chunk-DKXNKFKP.js';
28
28
  import '../chunk-MJHSLODD.js';
29
29
  import '../chunk-C3CAXQMA.js';
30
30
  import '../chunk-BOFL7GIF.js';
@@ -1,22 +1,22 @@
1
- export { SCAFFOLD_KINDS, canonicalEntryRef, createScaffold, deployAll, deployAsset, deployedAssetDrift, diffDeployedAgent, installTargetOf, removeAsset } from '../chunk-FH7W6TJ4.js';
2
- import '../chunk-CGYEHQOX.js';
3
- import '../chunk-HZXUXHIV.js';
4
- import '../chunk-ZCAJZ4B2.js';
5
- import '../chunk-PBBPZYVG.js';
1
+ export { SCAFFOLD_KINDS, canonicalEntryRef, createScaffold, deployAll, deployAsset, deployedAssetDrift, diffDeployedAgent, installTargetOf, removeAsset } from '../chunk-5FYOM4RF.js';
2
+ import '../chunk-NOA6EJXE.js';
3
+ import '../chunk-4L4R5LV3.js';
4
+ import '../chunk-57SF6W6E.js';
5
+ import '../chunk-BF422IDP.js';
6
6
  import '../chunk-4GY63JU6.js';
7
- import '../chunk-EDYHEMJA.js';
8
- import '../chunk-PMECEZK3.js';
7
+ import '../chunk-QO7CR3KB.js';
8
+ import '../chunk-D54T2F54.js';
9
9
  import '../chunk-5BEFNLOR.js';
10
10
  import '../chunk-A2ULN3KX.js';
11
- import '../chunk-ALEYHUC5.js';
11
+ import '../chunk-L3ZGYSWY.js';
12
12
  import '../chunk-L5VSIPQD.js';
13
- import '../chunk-CPSIPIX7.js';
14
- import '../chunk-ZPWTOUTK.js';
13
+ import '../chunk-IG5LZ3WU.js';
14
+ import '../chunk-IY5E7Y5W.js';
15
15
  import '../chunk-RVRB27AN.js';
16
- import '../chunk-SBSA3IQA.js';
17
- import '../chunk-BNMZVPYA.js';
16
+ import '../chunk-M3P4BYRK.js';
17
+ import '../chunk-J4OYIYFQ.js';
18
18
  import '../chunk-ICSCSM5D.js';
19
- import '../chunk-DALV4HHP.js';
19
+ import '../chunk-DKXNKFKP.js';
20
20
  import '../chunk-MJHSLODD.js';
21
21
  import '../chunk-C3CAXQMA.js';
22
22
  import '../chunk-BOFL7GIF.js';
@@ -1,20 +1,20 @@
1
- export { AGENT_RENDERERS, CODEX_IDENTITY_DIR, claudeCodeRenderer, codexRenderer, driverTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-HZXUXHIV.js';
2
- import '../chunk-ZCAJZ4B2.js';
3
- import '../chunk-PBBPZYVG.js';
1
+ export { AGENT_RENDERERS, CODEX_IDENTITY_DIR, claudeCodeRenderer, codexRenderer, driverTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-4L4R5LV3.js';
2
+ import '../chunk-57SF6W6E.js';
3
+ import '../chunk-BF422IDP.js';
4
4
  import '../chunk-4GY63JU6.js';
5
- import '../chunk-EDYHEMJA.js';
6
- import '../chunk-PMECEZK3.js';
5
+ import '../chunk-QO7CR3KB.js';
6
+ import '../chunk-D54T2F54.js';
7
7
  import '../chunk-5BEFNLOR.js';
8
8
  import '../chunk-A2ULN3KX.js';
9
- import '../chunk-ALEYHUC5.js';
9
+ import '../chunk-L3ZGYSWY.js';
10
10
  import '../chunk-L5VSIPQD.js';
11
- import '../chunk-CPSIPIX7.js';
12
- import '../chunk-ZPWTOUTK.js';
11
+ import '../chunk-IG5LZ3WU.js';
12
+ import '../chunk-IY5E7Y5W.js';
13
13
  import '../chunk-RVRB27AN.js';
14
- import '../chunk-SBSA3IQA.js';
15
- import '../chunk-BNMZVPYA.js';
14
+ import '../chunk-M3P4BYRK.js';
15
+ import '../chunk-J4OYIYFQ.js';
16
16
  import '../chunk-ICSCSM5D.js';
17
- import '../chunk-DALV4HHP.js';
17
+ import '../chunk-DKXNKFKP.js';
18
18
  import '../chunk-MJHSLODD.js';
19
19
  import '../chunk-C3CAXQMA.js';
20
20
  import '../chunk-BOFL7GIF.js';
@@ -55,6 +55,11 @@ export interface FragmentContext {
55
55
  agentsDir: string;
56
56
  /** Sub-agent names from `manifest.requires[]`. */
57
57
  subAgents: string[];
58
+ /**
59
+ * `true` when the agent is rendered to be called by another agent (a `delegate` sub-agent, or a
60
+ * `role`): it is told it is a sub-agent, not the workspace's only agent.
61
+ */
62
+ subAgent?: boolean;
58
63
  /** Connectors declared in `skaile.yaml`. */
59
64
  connectors: ConnectorRef[];
60
65
  /** Resolved ability refs (installed skills). */
@@ -1 +1 @@
1
- {"version":3,"file":"fragments.d.ts","sourceRoot":"","sources":["../../../asset-manager/src/fragments.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,sFAAsF;IACtF,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,iDAAiD;IACjD,EAAE,EAAE,MAAM,CAAC;IACX,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAC;IAClB,yFAAyF;IACzF,SAAS,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,SAAS,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,4CAA4C;IAC5C,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,gDAAgD;IAChD,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,2DAA2D;IAC3D,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,SAAS,GAAG,iBAAiB,GAAG,iBAAiB,CAAC;AA0F1F;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,MAAM,GAAG,IAAI,CAK1F,CAAC;AAIF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,eAAe,EACpB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,GAAG,SAAS,EACvD,aAAa,EAAE,MAAM,GACpB,MAAM,EAAE,CA4BV;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,CASjG"}
1
+ {"version":3,"file":"fragments.d.ts","sourceRoot":"","sources":["../../../asset-manager/src/fragments.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,sFAAsF;IACtF,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,iDAAiD;IACjD,EAAE,EAAE,MAAM,CAAC;IACX,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAC;IAClB,yFAAyF;IACzF,SAAS,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,SAAS,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4CAA4C;IAC5C,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,gDAAgD;IAChD,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,2DAA2D;IAC3D,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,SAAS,GAAG,iBAAiB,GAAG,iBAAiB,CAAC;AAmG1F;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,MAAM,GAAG,IAAI,CAK1F,CAAC;AAIF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,eAAe,EACpB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,GAAG,SAAS,EACvD,aAAa,EAAE,MAAM,GACpB,MAAM,EAAE,CA4BV;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,CASjG"}