@skaile/workspaces 5.18.0 → 5.19.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 (332) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/dist/{asset-feeds-WAKBHGEV.js → asset-feeds-QGLI3AXI.js} +16 -16
  3. package/dist/{asset-feeds-WAKBHGEV.js.map → asset-feeds-QGLI3AXI.js.map} +1 -1
  4. package/dist/asset-manager/catalog-deployer.js +5 -5
  5. package/dist/asset-manager/index.js +12 -12
  6. package/dist/asset-manager/installer.js +8 -8
  7. package/dist/asset-manager/renderers.js +7 -7
  8. package/dist/asset-manager/src/index.d.ts +91 -2
  9. package/dist/asset-manager/src/index.d.ts.map +1 -1
  10. package/dist/asset-manager/src/installer.d.ts.map +1 -1
  11. package/dist/asset-manager/src/mcp-config.d.ts +29 -3
  12. package/dist/asset-manager/src/mcp-config.d.ts.map +1 -1
  13. package/dist/bridge/drivers/claude-sdk.js +22 -20
  14. package/dist/bridge/drivers/claude-sdk.js.map +1 -1
  15. package/dist/bridge/drivers/codex.js +11 -11
  16. package/dist/bridge/drivers/continue.js +10 -10
  17. package/dist/bridge/drivers/echo.js +27 -8
  18. package/dist/bridge/drivers/echo.js.map +1 -1
  19. package/dist/bridge/drivers/gemini.js +8 -8
  20. package/dist/bridge/drivers/goose.js +10 -10
  21. package/dist/bridge/drivers/omp.js +18 -460
  22. package/dist/bridge/drivers/omp.js.map +1 -1
  23. package/dist/bridge/drivers/opencode.js +10 -10
  24. package/dist/bridge/drivers/qwen.js +8 -8
  25. package/dist/bridge/index.js +15 -13
  26. package/dist/bridge/src/driver-model-check.d.ts +8 -4
  27. package/dist/bridge/src/driver-model-check.d.ts.map +1 -1
  28. package/dist/bridge/src/drivers/_subprocess-cli.d.ts.map +1 -1
  29. package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
  30. package/dist/bridge/src/drivers/echo.d.ts +3 -0
  31. package/dist/bridge/src/drivers/echo.d.ts.map +1 -1
  32. package/dist/bridge/src/drivers/omp-models-yml.d.ts +11 -0
  33. package/dist/bridge/src/drivers/omp-models-yml.d.ts.map +1 -1
  34. package/dist/bridge/src/drivers/omp.d.ts.map +1 -1
  35. package/dist/{chunk-E5YNGE3I.js → chunk-25ZVWL2R.js} +4 -4
  36. package/dist/{chunk-E5YNGE3I.js.map → chunk-25ZVWL2R.js.map} +1 -1
  37. package/dist/{chunk-GRKU3S5V.js → chunk-2GXSSZAM.js} +3 -3
  38. package/dist/{chunk-GRKU3S5V.js.map → chunk-2GXSSZAM.js.map} +1 -1
  39. package/dist/{chunk-RO2BPKXK.js → chunk-2LSDMJI2.js} +3 -3
  40. package/dist/{chunk-RO2BPKXK.js.map → chunk-2LSDMJI2.js.map} +1 -1
  41. package/dist/{chunk-CKBCX3HQ.js → chunk-2PBSAH3Z.js} +4 -4
  42. package/dist/{chunk-CKBCX3HQ.js.map → chunk-2PBSAH3Z.js.map} +1 -1
  43. package/dist/{chunk-CKNIYIV2.js → chunk-335ENCCS.js} +5 -5
  44. package/dist/chunk-335ENCCS.js.map +1 -0
  45. package/dist/{chunk-V4RV2NJF.js → chunk-7NT4F6SR.js} +151 -27
  46. package/dist/chunk-7NT4F6SR.js.map +1 -0
  47. package/dist/{chunk-L6IFN6ER.js → chunk-7SCS64BG.js} +13 -7
  48. package/dist/chunk-7SCS64BG.js.map +1 -0
  49. package/dist/{chunk-U2FI547Z.js → chunk-7XSAW5OC.js} +3 -3
  50. package/dist/{chunk-U2FI547Z.js.map → chunk-7XSAW5OC.js.map} +1 -1
  51. package/dist/{chunk-ZNN7ONJX.js → chunk-A6SMCEEE.js} +2 -2
  52. package/dist/{chunk-ZNN7ONJX.js.map → chunk-A6SMCEEE.js.map} +1 -1
  53. package/dist/{chunk-SRNCN4X2.js → chunk-C7WBGSBV.js} +4 -4
  54. package/dist/{chunk-SRNCN4X2.js.map → chunk-C7WBGSBV.js.map} +1 -1
  55. package/dist/chunk-COJIL7G4.js +505 -0
  56. package/dist/chunk-COJIL7G4.js.map +1 -0
  57. package/dist/{chunk-X54YR4AW.js → chunk-CQJH4G2K.js} +2 -2
  58. package/dist/{chunk-X54YR4AW.js.map → chunk-CQJH4G2K.js.map} +1 -1
  59. package/dist/{chunk-WJLYL6RY.js → chunk-F6AA42GW.js} +5 -5
  60. package/dist/{chunk-WJLYL6RY.js.map → chunk-F6AA42GW.js.map} +1 -1
  61. package/dist/{chunk-EZVZDCHZ.js → chunk-FPHNJE4M.js} +102 -32
  62. package/dist/chunk-FPHNJE4M.js.map +1 -0
  63. package/dist/{chunk-EELKR2WP.js → chunk-HT35SQZD.js} +15 -14
  64. package/dist/chunk-HT35SQZD.js.map +1 -0
  65. package/dist/chunk-HU5HVKY7.js +285 -0
  66. package/dist/chunk-HU5HVKY7.js.map +1 -0
  67. package/dist/{chunk-HPVMTX6M.js → chunk-I37INEWE.js} +47 -12
  68. package/dist/chunk-I37INEWE.js.map +1 -0
  69. package/dist/{chunk-WJCQFNF6.js → chunk-I7TWVK6N.js} +3 -3
  70. package/dist/{chunk-WJCQFNF6.js.map → chunk-I7TWVK6N.js.map} +1 -1
  71. package/dist/{chunk-D6UBEYQH.js → chunk-IF6IA3PZ.js} +6 -6
  72. package/dist/chunk-IF6IA3PZ.js.map +1 -0
  73. package/dist/{chunk-DJD36HC5.js → chunk-IP2IPMEH.js} +7 -7
  74. package/dist/{chunk-DJD36HC5.js.map → chunk-IP2IPMEH.js.map} +1 -1
  75. package/dist/{chunk-ODDATIII.js → chunk-J24CY3PF.js} +8 -8
  76. package/dist/chunk-J24CY3PF.js.map +1 -0
  77. package/dist/{chunk-YZ3N7IUU.js → chunk-JTOWA6RS.js} +60 -19
  78. package/dist/{chunk-YZ3N7IUU.js.map → chunk-JTOWA6RS.js.map} +1 -1
  79. package/dist/{chunk-L5XUEC2W.js → chunk-MKRWN7XP.js} +4 -4
  80. package/dist/{chunk-L5XUEC2W.js.map → chunk-MKRWN7XP.js.map} +1 -1
  81. package/dist/{chunk-TDQ2ERCM.js → chunk-MRHVPQNO.js} +519 -86
  82. package/dist/chunk-MRHVPQNO.js.map +1 -0
  83. package/dist/{chunk-A2ULN3KX.js → chunk-MWXYN6NY.js} +2 -2
  84. package/dist/{chunk-A2ULN3KX.js.map → chunk-MWXYN6NY.js.map} +1 -1
  85. package/dist/{chunk-T2TQAH2X.js → chunk-N46LQR46.js} +74 -18
  86. package/dist/chunk-N46LQR46.js.map +1 -0
  87. package/dist/{chunk-CD7SVH6W.js → chunk-PYJS5K7V.js} +3 -3
  88. package/dist/{chunk-CD7SVH6W.js.map → chunk-PYJS5K7V.js.map} +1 -1
  89. package/dist/{chunk-K5LVU2MN.js → chunk-QG6GHTRM.js} +4 -4
  90. package/dist/{chunk-K5LVU2MN.js.map → chunk-QG6GHTRM.js.map} +1 -1
  91. package/dist/{chunk-RD6N2D7I.js → chunk-R4I3VBSS.js} +2 -2
  92. package/dist/{chunk-RD6N2D7I.js.map → chunk-R4I3VBSS.js.map} +1 -1
  93. package/dist/{chunk-JY7GVNYU.js → chunk-RO6VOM6Z.js} +15 -15
  94. package/dist/{chunk-JY7GVNYU.js.map → chunk-RO6VOM6Z.js.map} +1 -1
  95. package/dist/{chunk-B4X2N7JQ.js → chunk-RPZVHXQ3.js} +12 -12
  96. package/dist/chunk-RPZVHXQ3.js.map +1 -0
  97. package/dist/{chunk-KC6HGWXN.js → chunk-TIIXG3PN.js} +3 -3
  98. package/dist/{chunk-KC6HGWXN.js.map → chunk-TIIXG3PN.js.map} +1 -1
  99. package/dist/{chunk-CKICWXMU.js → chunk-UQ33Y4DM.js} +139 -10
  100. package/dist/chunk-UQ33Y4DM.js.map +1 -0
  101. package/dist/{chunk-2NOLF7B2.js → chunk-V257LUBM.js} +16 -7
  102. package/dist/chunk-V257LUBM.js.map +1 -0
  103. package/dist/{chunk-N5P2WBUL.js → chunk-VIM3PWZM.js} +3 -3
  104. package/dist/{chunk-N5P2WBUL.js.map → chunk-VIM3PWZM.js.map} +1 -1
  105. package/dist/{chunk-3KMREAR2.js → chunk-VJ7NU7GD.js} +22 -22
  106. package/dist/{chunk-3KMREAR2.js.map → chunk-VJ7NU7GD.js.map} +1 -1
  107. package/dist/{chunk-6HK6RUFM.js → chunk-VSZWNUZC.js} +3 -3
  108. package/dist/{chunk-6HK6RUFM.js.map → chunk-VSZWNUZC.js.map} +1 -1
  109. package/dist/{chunk-MQIRRN76.js → chunk-W4Q6CKJ5.js} +6 -6
  110. package/dist/chunk-W4Q6CKJ5.js.map +1 -0
  111. package/dist/{chunk-FHIMIXT3.js → chunk-WG6V4ISA.js} +34 -15
  112. package/dist/chunk-WG6V4ISA.js.map +1 -0
  113. package/dist/{chunk-DA2MCPFN.js → chunk-WOIRYY5L.js} +110 -37
  114. package/dist/chunk-WOIRYY5L.js.map +1 -0
  115. package/dist/{chunk-JJ7LDI3S.js → chunk-WST6UITC.js} +6 -6
  116. package/dist/{chunk-JJ7LDI3S.js.map → chunk-WST6UITC.js.map} +1 -1
  117. package/dist/{chunk-FV2MSBVA.js → chunk-X4ZZTHU3.js} +4 -4
  118. package/dist/{chunk-FV2MSBVA.js.map → chunk-X4ZZTHU3.js.map} +1 -1
  119. package/dist/{chunk-PZ6NF5DE.js → chunk-XJVBUDDJ.js} +5 -5
  120. package/dist/{chunk-PZ6NF5DE.js.map → chunk-XJVBUDDJ.js.map} +1 -1
  121. package/dist/{chunk-VKPBUPH7.js → chunk-XM6T2AZ2.js} +36 -11
  122. package/dist/chunk-XM6T2AZ2.js.map +1 -0
  123. package/dist/{chunk-YU6AURJY.js → chunk-XWOPZW26.js} +3 -3
  124. package/dist/{chunk-YU6AURJY.js.map → chunk-XWOPZW26.js.map} +1 -1
  125. package/dist/{chunk-LW7ZI6EQ.js → chunk-Y5MBW5EU.js} +3 -3
  126. package/dist/chunk-Y5MBW5EU.js.map +1 -0
  127. package/dist/{chunk-24AXETE3.js → chunk-ZQSOJH6I.js} +36 -18
  128. package/dist/chunk-ZQSOJH6I.js.map +1 -0
  129. package/dist/{chunk-JYWW32JI.js → chunk-ZX4KRWRB.js} +17 -5
  130. package/dist/chunk-ZX4KRWRB.js.map +1 -0
  131. package/dist/claude-code-2PU7TITZ.js +10 -0
  132. package/dist/claude-code-2PU7TITZ.js.map +1 -0
  133. package/dist/cli/index.js +574 -492
  134. package/dist/cli/index.js.map +1 -1
  135. package/dist/cli/src/agent-checks.d.ts +5 -0
  136. package/dist/cli/src/agent-checks.d.ts.map +1 -1
  137. package/dist/cli/src/agent-pins.d.ts +18 -0
  138. package/dist/cli/src/agent-pins.d.ts.map +1 -0
  139. package/dist/cli/src/commands/catalog.d.ts +6 -0
  140. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  141. package/dist/cli/src/commands/config.d.ts.map +1 -1
  142. package/dist/cli/src/commands/diff.d.ts.map +1 -1
  143. package/dist/cli/src/commands/flow.d.ts +8 -8
  144. package/dist/cli/src/commands/flow.d.ts.map +1 -1
  145. package/dist/cli/src/commands/integration.d.ts.map +1 -1
  146. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  147. package/dist/cli/src/commands/library-index.d.ts +17 -5
  148. package/dist/cli/src/commands/library-index.d.ts.map +1 -1
  149. package/dist/cli/src/commands/library-publish.d.ts +3 -0
  150. package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
  151. package/dist/cli/src/commands/migrate-assets.d.ts +2 -0
  152. package/dist/cli/src/commands/migrate-assets.d.ts.map +1 -1
  153. package/dist/cli/src/commands/migrate.d.ts.map +1 -1
  154. package/dist/cli/src/commands/outdated.d.ts.map +1 -1
  155. package/dist/cli/src/commands/plugin/claude-code.d.ts +6 -0
  156. package/dist/cli/src/commands/plugin/claude-code.d.ts.map +1 -1
  157. package/dist/cli/src/commands/plugin/codex.d.ts +19 -4
  158. package/dist/cli/src/commands/plugin/codex.d.ts.map +1 -1
  159. package/dist/cli/src/commands/preset-cmd.d.ts.map +1 -1
  160. package/dist/cli/src/commands/project.d.ts +6 -3
  161. package/dist/cli/src/commands/project.d.ts.map +1 -1
  162. package/dist/cli/src/commands/providers.d.ts +13 -0
  163. package/dist/cli/src/commands/providers.d.ts.map +1 -1
  164. package/dist/cli/src/commands/run.d.ts.map +1 -1
  165. package/dist/cli/src/commands/serve-preflight.d.ts +23 -0
  166. package/dist/cli/src/commands/serve-preflight.d.ts.map +1 -1
  167. package/dist/cli/src/commands/serve.d.ts.map +1 -1
  168. package/dist/cli/src/commands/update.d.ts.map +1 -1
  169. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  170. package/dist/cli/src/driver-error.d.ts +7 -0
  171. package/dist/cli/src/driver-error.d.ts.map +1 -1
  172. package/dist/cli/src/flow-discovery.d.ts +69 -53
  173. package/dist/cli/src/flow-discovery.d.ts.map +1 -1
  174. package/dist/cli/src/plugin-store/index.d.ts +6 -2
  175. package/dist/cli/src/plugin-store/index.d.ts.map +1 -1
  176. package/dist/cli/src/skill-checks.d.ts +32 -1
  177. package/dist/cli/src/skill-checks.d.ts.map +1 -1
  178. package/dist/connectors/config.js +3 -3
  179. package/dist/connectors/index.js +18 -16
  180. package/dist/{connectors-QL4GBMH3.js → connectors-RBGZ3M7G.js} +21 -19
  181. package/dist/{connectors-QL4GBMH3.js.map → connectors-RBGZ3M7G.js.map} +1 -1
  182. package/dist/core/discovery.js +1 -1
  183. package/dist/core/index.js +5 -5
  184. package/dist/core/publish-manifest.js +1 -1
  185. package/dist/core/runtime-assets.js +3 -3
  186. package/dist/core/src/asset-roots.d.ts +14 -0
  187. package/dist/core/src/asset-roots.d.ts.map +1 -1
  188. package/dist/core/src/bind.d.ts +33 -14
  189. package/dist/core/src/bind.d.ts.map +1 -1
  190. package/dist/core/src/discovery.d.ts +1 -1
  191. package/dist/core/src/index.d.ts +4 -4
  192. package/dist/core/src/index.d.ts.map +1 -1
  193. package/dist/core/src/lock.d.ts +8 -0
  194. package/dist/core/src/lock.d.ts.map +1 -1
  195. package/dist/core/src/publish-manifest.d.ts +45 -10
  196. package/dist/core/src/publish-manifest.d.ts.map +1 -1
  197. package/dist/core/src/workspace-config.d.ts +18 -1
  198. package/dist/core/src/workspace-config.d.ts.map +1 -1
  199. package/dist/core/workspace-config.js +2 -2
  200. package/dist/deploy/index.js +5 -5
  201. package/dist/discovery/index.js +3 -3
  202. package/dist/discovery/src/discover-manifest.d.ts +1 -1
  203. package/dist/discovery/src/discover-manifest.d.ts.map +1 -1
  204. package/dist/discovery/src/discover.d.ts.map +1 -1
  205. package/dist/discovery/src/tree-entries.d.ts.map +1 -1
  206. package/dist/{ensure-sources-CEFODJCE.js → ensure-sources-GKVLE6L5.js} +15 -15
  207. package/dist/{ensure-sources-CEFODJCE.js.map → ensure-sources-GKVLE6L5.js.map} +1 -1
  208. package/dist/factory-assets/connectors/box.js +18 -16
  209. package/dist/factory-assets/connectors/deploy.js +18 -16
  210. package/dist/factory-assets/connectors/devserver.js +18 -16
  211. package/dist/factory-assets/connectors/flow/adapter.js +18 -16
  212. package/dist/factory-assets/connectors/flow/engine/loader.d.ts +1 -1
  213. package/dist/factory-assets/connectors/flow/engine/locate.d.ts +8 -5
  214. package/dist/factory-assets/connectors/flow/engine/locate.d.ts.map +1 -1
  215. package/dist/factory-assets/connectors/flow/engine.js +6 -6
  216. package/dist/factory-assets/connectors/flow/run-flow.d.ts.map +1 -1
  217. package/dist/factory-assets/connectors/flow/run-flow.js +19 -17
  218. package/dist/factory-assets/connectors/flow.js +18 -16
  219. package/dist/factory-assets/connectors/git.js +18 -16
  220. package/dist/factory-assets/connectors/gmail.js +18 -16
  221. package/dist/factory-assets/connectors/googledrive.js +18 -16
  222. package/dist/factory-assets/connectors/local.js +18 -16
  223. package/dist/factory-assets/connectors/mattermost.js +18 -16
  224. package/dist/factory-assets/connectors/memory.js +18 -16
  225. package/dist/factory-assets/connectors/minio.js +18 -16
  226. package/dist/factory-assets/connectors/postgres.js +18 -16
  227. package/dist/factory-assets/connectors/s3.js +18 -16
  228. package/dist/factory-assets/connectors/sharepoint.js +18 -16
  229. package/dist/factory-assets/connectors/sqlite.js +18 -16
  230. package/dist/factory-assets/connectors/static-server.js +18 -16
  231. package/dist/factory-assets/connectors/tunnel.js +18 -16
  232. package/dist/factory-assets/connectors/webdav.js +18 -16
  233. package/dist/factory-assets/connectors/xstate/adapter.d.ts +1 -1
  234. package/dist/factory-assets/connectors/xstate/adapter.d.ts.map +1 -1
  235. package/dist/factory-assets/connectors/xstate-store.js +18 -16
  236. package/dist/factory-assets/connectors/xstate.js +18 -16
  237. package/dist/factory-assets/skills/skaile-manage-workspace/SKILL.md +1 -1
  238. package/dist/{flows-BHY73K3O.js → flows-W2FB7WIM.js} +8 -8
  239. package/dist/{flows-BHY73K3O.js.map → flows-W2FB7WIM.js.map} +1 -1
  240. package/dist/{helpers-R22QNPFN.js → helpers-34QNVIGB.js} +15 -15
  241. package/dist/{helpers-R22QNPFN.js.map → helpers-34QNVIGB.js.map} +1 -1
  242. package/dist/library/index.js +9 -9
  243. package/dist/library/install.js +2 -2
  244. package/dist/library/src/index.d.ts +1 -1
  245. package/dist/library/src/index.d.ts.map +1 -1
  246. package/dist/library/src/manifest-writer.d.ts +13 -0
  247. package/dist/library/src/manifest-writer.d.ts.map +1 -1
  248. package/dist/{library-publish-VBE3X2TH.js → library-publish-RUQTKTJU.js} +125 -48
  249. package/dist/library-publish-RUQTKTJU.js.map +1 -0
  250. package/dist/model-endpoint/index.js +8 -8
  251. package/dist/{open-library-JP5TC5UX.js → open-library-PVTIUQUF.js} +18 -18
  252. package/dist/{open-library-JP5TC5UX.js.map → open-library-PVTIUQUF.js.map} +1 -1
  253. package/dist/{open-registry-RBELV5YH.js → open-registry-SOIS3TA2.js} +13 -13
  254. package/dist/{open-registry-RBELV5YH.js.map → open-registry-SOIS3TA2.js.map} +1 -1
  255. package/dist/{paths-BFM6K2QO.js → paths-JLNX7Y4X.js} +8 -8
  256. package/dist/{paths-BFM6K2QO.js.map → paths-JLNX7Y4X.js.map} +1 -1
  257. package/dist/{plugin-store-QOQDM24E.js → plugin-store-G2GWAHSD.js} +8 -8
  258. package/dist/{plugin-store-QOQDM24E.js.map → plugin-store-G2GWAHSD.js.map} +1 -1
  259. package/dist/{project-6ETXGQWD.js → project-EX47PUBN.js} +38 -37
  260. package/dist/{project-6ETXGQWD.js.map → project-EX47PUBN.js.map} +1 -1
  261. package/dist/resolver/index.js +5 -5
  262. package/dist/runner/index.js +30 -29
  263. package/dist/runner/src/agents/instances.d.ts.map +1 -1
  264. package/dist/runner/src/composition/compile.d.ts +11 -0
  265. package/dist/runner/src/composition/compile.d.ts.map +1 -1
  266. package/dist/runner/src/composition/index.d.ts +1 -1
  267. package/dist/runner/src/composition/index.d.ts.map +1 -1
  268. package/dist/runner/src/serve.d.ts.map +1 -1
  269. package/dist/runner/src/turn-end-contract.d.ts +55 -0
  270. package/dist/runner/src/turn-end-contract.d.ts.map +1 -0
  271. package/dist/runner/src/turn-scheduler.d.ts +5 -0
  272. package/dist/runner/src/turn-scheduler.d.ts.map +1 -1
  273. package/dist/sdk/asset-manager.js +12 -12
  274. package/dist/sdk/bridge.js +15 -13
  275. package/dist/sdk/core.js +5 -5
  276. package/dist/sdk/flow.js +6 -6
  277. package/dist/sdk/index.js +30 -29
  278. package/dist/sdk/index.js.map +1 -1
  279. package/dist/sdk/resolver.js +5 -5
  280. package/dist/sdk/runner.js +30 -29
  281. package/dist/sdk/transport/ws/server.js +6 -6
  282. package/dist/sdk/transport/ws.js +6 -6
  283. package/dist/sdk/transport.js +6 -6
  284. package/dist/serve-preflight-QXRKGOI5.js +108 -0
  285. package/dist/serve-preflight-QXRKGOI5.js.map +1 -0
  286. package/dist/{setup-JQDTYPSD.js → setup-AFZQNGKA.js} +25 -23
  287. package/dist/setup-AFZQNGKA.js.map +1 -0
  288. package/dist/{skills-RSZVUIYZ.js → skills-YYYC6D5X.js} +8 -8
  289. package/dist/{skills-RSZVUIYZ.js.map → skills-YYYC6D5X.js.map} +1 -1
  290. package/dist/{source-FPLHY3DP.js → source-DGPCT5IC.js} +40 -39
  291. package/dist/{source-FPLHY3DP.js.map → source-DGPCT5IC.js.map} +1 -1
  292. package/dist/{source-manifest-publish-LY4H63VA.js → source-manifest-publish-AGJ63JF2.js} +42 -41
  293. package/dist/source-manifest-publish-AGJ63JF2.js.map +1 -0
  294. package/dist/transport/index.js +6 -6
  295. package/dist/transport/src/ws/server.d.ts +1 -1
  296. package/dist/transport/src/ws/server.d.ts.map +1 -1
  297. package/dist/transport/ws/server.js +6 -6
  298. package/dist/transport/ws.js +6 -6
  299. package/dist/tui/index.js +30 -29
  300. package/dist/tui/index.js.map +1 -1
  301. package/dist/types/manifests.js +1 -1
  302. package/dist/types/src/manifests/scaffold-body.d.ts +6 -3
  303. package/dist/types/src/manifests/scaffold-body.d.ts.map +1 -1
  304. package/dist/workspace-plugin/adapters/mcp.js +22 -20
  305. package/dist/workspace-plugin/adapters/omp.js +14 -14
  306. package/dist/workspace-plugin/index.js +1 -1
  307. package/package.json +1 -1
  308. package/dist/chunk-24AXETE3.js.map +0 -1
  309. package/dist/chunk-2NOLF7B2.js.map +0 -1
  310. package/dist/chunk-B4X2N7JQ.js.map +0 -1
  311. package/dist/chunk-CKICWXMU.js.map +0 -1
  312. package/dist/chunk-CKNIYIV2.js.map +0 -1
  313. package/dist/chunk-D6UBEYQH.js.map +0 -1
  314. package/dist/chunk-DA2MCPFN.js.map +0 -1
  315. package/dist/chunk-EELKR2WP.js.map +0 -1
  316. package/dist/chunk-EZVZDCHZ.js.map +0 -1
  317. package/dist/chunk-FHIMIXT3.js.map +0 -1
  318. package/dist/chunk-HPVMTX6M.js.map +0 -1
  319. package/dist/chunk-JYWW32JI.js.map +0 -1
  320. package/dist/chunk-L6IFN6ER.js.map +0 -1
  321. package/dist/chunk-LW7ZI6EQ.js.map +0 -1
  322. package/dist/chunk-MQIRRN76.js.map +0 -1
  323. package/dist/chunk-ODDATIII.js.map +0 -1
  324. package/dist/chunk-T2TQAH2X.js.map +0 -1
  325. package/dist/chunk-TDQ2ERCM.js.map +0 -1
  326. package/dist/chunk-V4RV2NJF.js.map +0 -1
  327. package/dist/chunk-VKPBUPH7.js.map +0 -1
  328. package/dist/library-publish-VBE3X2TH.js.map +0 -1
  329. package/dist/serve-preflight-BTGTZUDN.js +0 -60
  330. package/dist/serve-preflight-BTGTZUDN.js.map +0 -1
  331. package/dist/setup-JQDTYPSD.js.map +0 -1
  332. package/dist/source-manifest-publish-LY4H63VA.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,93 @@
1
1
  # Changelog
2
2
 
3
+ ## 5.19.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#1098](https://github.com/skaile-ai/workspaces/pull/1098) [`2477eac`](https://github.com/skaile-ai/workspaces/commit/2477eacb22a659a5e69c301581b4dc0b576e5718) Thanks [@mortegro](https://github.com/mortegro)! - Composed agents run after `add`/`install`, a `../` compose ref works, and `run --instance` only warns about its own instance.
8
+
9
+ - `add`, `install`, `install --locked` and `update` compile an agent that declares an `inline-snapshot` item (a persona, or an item with `binding: inline-snapshot`), once per lock revision. A `compile_manifest.json` that `skaile rebuild` wrote is kept while the items still serve the same bytes; the next `install` no longer deletes it, so `run` stops failing with `composition_rebuild_required`. `skaile rebuild` only refreshes the pin (p413, p1310).
10
+ - `skaile check` and `skaile doctor` report an agent that `run` would refuse with `composition_rebuild_required`, in the words `run` prints, and exit 1 (p1310).
11
+ - A `composes:` ref that leaves the agent folder (`../shared-rules/extra`) is copied into the agent's cache folder (`.skaile/cache/agents/<name>/composes/<name>`) and the ref points there, so `run` serves it (p1312).
12
+ - `skaile run --instance <id>` no longer prints the connector-slot and sub-agent warnings of the project's other instances, the primary agent included (p1315).
13
+ - The omp start sweep also removes a unix socket in `$TMPDIR/skaile-omp-agent` that is older than a day and has no listener (p1316).
14
+ - The `role requires io` check for an instance that sets `lifecycle: role` on an asset without `io` runs in `skaile validate` (p1313).
15
+
16
+ - [#1098](https://github.com/skaile-ai/workspaces/pull/1098) [`2477eac`](https://github.com/skaile-ai/workspaces/commit/2477eacb22a659a5e69c301581b4dc0b576e5718) Thanks [@mortegro](https://github.com/mortegro)! - Authoring: `validate`, `library index`, the publish plan and `add` give one verdict per problem.
17
+
18
+ - A `metadata.requires` ref that no registered library holds warns in `validate` and `library index`, like a `dependencies:` entry. The publish plan also asks the store: it refuses the plan (exit 1) when the store does not list the ref, warns when the store cannot be asked, and says nothing when the store lists it. The plan now applies the same check to manifest `dependencies:` refs, which it never refused before (p1200).
19
+ - `files:` entries are honoured in a library: `validate` and the plan no longer call them "on disk but not in the manifest", `library index` adds no `root:`, and `add` and the lock hash use the listed files only (p1201).
20
+ - `add` and `install` also withhold `.git-credentials`, `kubeconfig`, `.pgpass`, `.dockercfg`, `credentials.json`, `client_secret*.json`, `*.jks`, `*.keystore`, `.my.cnf`, `secret.txt`, `api_key.txt` and similar files, and name them. The scaffolded `.gitignore` covers them (p1202).
21
+ - A missing `description` says `description is required: say what the <kind> does and when to use it` instead of the zod text (p1203).
22
+ - `add` of an asset whose directory was deleted names `skaile library index <lib>` (p1204).
23
+ - A skill, agent, prompt or contract with an empty body is refused like the scaffold placeholder (p1205).
24
+ - A SKILL.md without front matter gets one message in `validate`, `library index` and the plan (p1206).
25
+ - `library create` refuses a name that already exists in another directory of the library (p48).
26
+ - `library create` prints `Indexed - add it` only for an asset that `library index` accepts; a scaffold that index rejects prints `not ready to add yet` (p1314, p1351).
27
+ - A 0.1 agent whose `requires:` holds objects validates; the deprecated field only warns (p1311).
28
+ - `reads_from:` / `writes_to:` are an unknown-key warning for agents, prompts, contracts and flows, as for skills (p486).
29
+
30
+ - [#1098](https://github.com/skaile-ai/workspaces/pull/1098) [`2477eac`](https://github.com/skaile-ai/workspaces/commit/2477eacb22a659a5e69c301581b4dc0b576e5718) Thanks [@mortegro](https://github.com/mortegro)! - Flows belong to the project, and one verdict applies to a flow the engine cannot load.
31
+
32
+ - `skaile flow list`, `flow show <id>` and `skaile run <id>` see the flows the project declared and deployed (its `.skaile/flows/`, its `ai-assets/` tree and the built-in flows) only. Registered libraries, source clones and `~/.skaile/` no longer leak in, so a flow that runs for you also runs for a teammate with the same `skaile.yaml` (p1353).
33
+ - `flow list --all` and `flow show --all` add the flows of your libraries, cached sources and `~/.skaile/` under **Not in this project**, each with its `skaile add flow:@<publisher>/<name>` line. `run <id>` of a library flow the project has not added exits 1 with `Flow not found` and that `skaile add` line.
34
+ - `install` and `update` refuse a declared flow the flow engine cannot load, like `add`, and write nothing. `check` and `doctor` exit 1 and name a deployed flow the engine rejects (p1192).
35
+ - A library flow whose `id:` differs from its file name is no flow for `flow list --all`, `flow show --all` and `run`, the same rule `validate`, `library index`, the publish plan and `add` apply (p871).
36
+ - Sub-flow `run.flow` targets, `skaile resume` and `skaile serve` resolve a flow over the same project roots as `skaile run <id>`. A flow that only a library, a source clone or `~/.skaile/` holds is not found there either, and the error says to `skaile add flow:@<publisher>/<name>` first (p1353).
37
+
38
+ - [#1098](https://github.com/skaile-ai/workspaces/pull/1098) [`2477eac`](https://github.com/skaile-ai/workspaces/commit/2477eacb22a659a5e69c301581b4dc0b576e5718) Thanks [@mortegro](https://github.com/mortegro)! - Harness drivers and config: one model rule per driver, a full `config unset`, quieter driver failures.
39
+
40
+ - The model prefix rule is per driver (p1111). `omp` and `claude-sdk` keep their leniency: while an enabled `llm` registry entry exists, a `<head>/<model>` with an unknown head is a vendor-scoped model id (`meta-llama/Llama-3.3-70B`). `codex` talks to OpenAI only, so it refuses a head that is neither a registered provider nor `openai`, also when other providers are registered: `run --dry-run`, a real run and `repl` exit 1 with `provider '<head>' is not configured: run skaile providers list`.
41
+ - `config unset` is the full inverse of `config set` (p1270): it also removes `catalog.url`, `catalog.cache_ttl` and `catalog.framing` (the default applies again) and `apiKey.<provider>` (removes the entry from the user registry, like `providers rm`).
42
+ - `integration uninstall` in a moved project removes the codex trust entry of the old path when that directory is gone, and names the old path in the line it prints. An old path that still exists, or an entry you edited, stays and the line says why (p1271).
43
+ - A plugin that cannot be installed with npm prints its error code and first detail (`npm E404: 404 Not Found - GET …`), not npm's pointer to its log file (p1272).
44
+ - A failed `omp` start is printed once, as the `✗` line; its stderr is no longer repeated as `[warn]` lines, and an unusable registry entry is one `! provider … is not used` line, not a raw JSON record (p598). `claude-sdk` warns about a registry entry its SDK cannot speak only when the run selects it, as one plain line (p773).
45
+ - `config set driver bogus` and `run --driver bogus --dry-run` exit 1 with `Unknown agent driver` (p1022).
46
+ - A legacy `agent-config.default.provider` key in `skaile.yaml` gives one line in `list` and `run` (no stack), and `validate` reports it and exits 1 (p1352).
47
+ - The `--full` Claude Code plugin copy of the project's skills is refreshed by `add`, `remove`, `install` and `update`, and `integration status` marks a copy that differs from the project (p1350).
48
+
49
+ - [#1098](https://github.com/skaile-ai/workspaces/pull/1098) [`2477eac`](https://github.com/skaile-ai/workspaces/commit/2477eacb22a659a5e69c301581b4dc0b576e5718) Thanks [@mortegro](https://github.com/mortegro)! - Sources, libraries and the lock: `install` restores, only `update` moves the lock.
50
+
51
+ - A git library deploys, locks and compares what git would publish: tracked files plus untracked files that are not ignored. A file the library `.gitignore` excludes (`example.html`, `.scratch/`) is no longer copied, hashed or locked, so a clone of the library satisfies the lock (p1255).
52
+ - A locked asset is judged against the library its lock entry names, so `check` and `install --locked` stay green when the default library holds the same ref with other files (p1256).
53
+ - A library that is older than the lock leaves the lock and the deployed copy alone on `install` and `install --locked`; only `update` moves it (`replaced 0.3.0 -> 0.1.0`). `outdated` and `check` say `library is at 0.1.0, locked 0.3.0` (p1257).
54
+ - `install`, `install --locked` and `update` fail with the `register it again` sentence of `check` for an asset whose source was removed from `skaile.yaml`, and never clone it again. The cached clone of a removed source is not offered as a `did you mean` publisher (p1062).
55
+ - `source remove` points to `--purge` or `skaile cache clean --global`; `cache clean` without `--global` does not remove source clones, and the docs explain the project and global cache (p1220).
56
+ - `library rename` back to a former name renames the lock entries written under the interim name, so the advice names the library the user knows (p893).
57
+ - A fresh clone of a project with an agent instance: `check`, `doctor`, `outdated` and `diff` advise `skaile install --locked`, which makes them green (p1240).
58
+ - `migrate assets --write` refuses two bundles that become one preset: exit 1, both files named, nothing written (p1241).
59
+ - `install` stops before it prunes an undeclared lock entry whose deployed folder holds your edits, names the files and needs `--force` (OQ6).
60
+
61
+ - [#1098](https://github.com/skaile-ai/workspaces/pull/1098) [`2477eac`](https://github.com/skaile-ai/workspaces/commit/2477eacb22a659a5e69c301581b4dc0b576e5718) Thanks [@mortegro](https://github.com/mortegro)! - Store assets and `mcp-server`: a portable committed `.mcp.json`, a pending render, locked versions.
62
+
63
+ - `add` of a store skill reads the `requires` of its own manifest, deploys the assets it names (any kind) and locks them, so `check`, `doctor` and `install --locked` stay green (p1221).
64
+ - A changed `mcp_servers` entry is a pending render, not drift: `check` and `doctor` print `.mcp.json is out of date for skaile.yaml - run skaile install` and exit 1; `install` writes it. The `add` warning ends with `then run skaile install`. A hand edit of the entry is still drift (p1290).
65
+ - `info` of a locked asset shows `locked X (latest Y)`; `outdated` lists a ref pinned in `skaile.yaml` below the newest version as `pinned` and does not fail on it (p1291).
66
+ - `.mcp.json` is portable: `${workspace}` renders as `.` (the project root), never as the absolute path of one checkout; an entry an older release wrote with an absolute path is a pending render. `init` does not ignore `.mcp.json` or `.skaile/assets/` (p1294).
67
+ - `add` of an `mcp-server` refuses a secret field set to a literal value; only `env:NAME` is accepted. `install` stops rendering such a server and removes its `.mcp.json` entry until the field is `env:KEY`, and prints the skip reason (p1292, p1294).
68
+ - `diff mcp-server:` exits 1 when a payload file is missing or extra (p1293).
69
+ - A lock whose `commit` or `sha256` is all digits reads as text; a value that is not hex fails with one line naming the entry (p1295).
70
+ - The `add` line for an `mcp-server` names the `.mcp.json` entry and the payload folder it wrote, instead of saying it is not deployed (p1296).
71
+
72
+ - [#1098](https://github.com/skaile-ai/workspaces/pull/1098) [`2477eac`](https://github.com/skaile-ai/workspaces/commit/2477eacb22a659a5e69c301581b4dc0b576e5718) Thanks [@mortegro](https://github.com/mortegro)! - Protocol and serve: busy ports are refused, every turn ends with `finished`.
73
+
74
+ - The websocket port and the model endpoint port share one bind helper. Before it listens, it connects to the port on `127.0.0.1`, `::1` and the chosen host; a holder on `::`, `0.0.0.0` or `127.0.0.1` makes `serve` exit 1 with one line (p842, p1006).
75
+ - Every turn of every driver ends with `finished`, then `status idle`. A failed turn sends one fatal `error`, then `finished`, then `status idle`. omp sends `finished` now, and a failed claude-sdk turn no longer sends a second fatal `error` (p459, p460). `events.md` states the rule.
76
+ - `runner.set_state` on a store of adapter `xstate` finds `xstate` in the project first, then next to skaile, and a miss names the package and both places (p1171).
77
+ - `serve --managed-codex-config <bad path>` exits 1 with one line (p1330).
78
+ - `serve --model <bad>` is checked against the driver (omp registry entries) before the ready line (p1334). Only a `--model` given on the command line is checked, against the local `providers.yml` narrowed by `--providers`; a model from `skaile.yaml` or the settings, and a project with `secrets.provider: provisioned`, are not (the platform supplies its registry at `session_init`).
79
+ - `validate` of a project does not refuse a directory symlink outside an asset folder; only libraries and asset folders are refused, and the connector real-path check judges the rest (p1332).
80
+
81
+ ### Patch Changes
82
+
83
+ - [#1098](https://github.com/skaile-ai/workspaces/pull/1098) [`2477eac`](https://github.com/skaile-ai/workspaces/commit/2477eacb22a659a5e69c301581b4dc0b576e5718) Thanks [@mortegro](https://github.com/mortegro)! - Docs: fix the defects of the v10 critique. The protocol sample prints 4.19.0, the `sources[]` shape reads `{url, pin?, publisher?}` (also in the legacy-key text), the version waterfall starts with the version of the asset file, the factory skill `skaile-manage-workspace` no longer lists `provider` as a personal setting, tutorial 01 describes the one-line "referenced files outside the asset filter" note, and the pages for `cache`, `config unset`, `source remove --force`, `integration uninstall --driver codex`, `repl`, `run`, `serve`, `diff`, the `mcp-server` deploy, the `--full` plugin copy, composed agents and the older-library lock case match the behaviour.
84
+
85
+ ## 5.18.1
86
+
87
+ ### Patch Changes
88
+
89
+ - [#1095](https://github.com/skaile-ai/workspaces/pull/1095) [`f73d02a`](https://github.com/skaile-ai/workspaces/commit/f73d02af44d2e2e9fbbbf8605b1dca8a87b7fbfc) Thanks [@Frozen666](https://github.com/Frozen666)! - The echo driver's `test question` keyword now asks a real question. It emits an `AskUserQuestion` tool call, which the normalizer turns into a `question` event with the options PostgreSQL, MySQL and SQLite, instead of a plain text reply. Hosts that open a "waiting on you" state only on a `question` event (the Skaile platform's needs-you marker) can now test that path on the echo driver. No text or turn summary follows the question, so it stays open; the turn still ends, and the answer arrives as a fresh prompt.
90
+
3
91
  ## 5.18.0
4
92
 
5
93
  ### Minor Changes
@@ -1,25 +1,25 @@
1
1
  import { storeNotInstallableReason } from './chunk-PUK7TQT4.js';
2
- import { getKnownKinds } from './chunk-WJLYL6RY.js';
3
- import './chunk-D6UBEYQH.js';
2
+ import { getKnownKinds } from './chunk-F6AA42GW.js';
3
+ import './chunk-IF6IA3PZ.js';
4
4
  import './chunk-7RGTAEG6.js';
5
- import './chunk-VKPBUPH7.js';
6
- import './chunk-HPVMTX6M.js';
7
- import './chunk-U2FI547Z.js';
5
+ import './chunk-XM6T2AZ2.js';
6
+ import './chunk-I37INEWE.js';
7
+ import './chunk-7XSAW5OC.js';
8
8
  import './chunk-BFMYYNDT.js';
9
9
  import './chunk-3TXEJN4W.js';
10
10
  import './chunk-X3RMRJNR.js';
11
11
  import './chunk-NUELZWCF.js';
12
- import './chunk-CKNIYIV2.js';
13
- import './chunk-T2TQAH2X.js';
12
+ import './chunk-335ENCCS.js';
13
+ import './chunk-N46LQR46.js';
14
14
  import './chunk-4GY63JU6.js';
15
- import { factoryAssetRoots } from './chunk-KC6HGWXN.js';
15
+ import { factoryAssetRoots } from './chunk-TIIXG3PN.js';
16
16
  import './chunk-5TBFN46Z.js';
17
17
  import './chunk-5BEFNLOR.js';
18
- import './chunk-A2ULN3KX.js';
19
- import { scanRepo } from './chunk-2NOLF7B2.js';
18
+ import './chunk-MWXYN6NY.js';
19
+ import { scanRepo } from './chunk-V257LUBM.js';
20
20
  import './chunk-L5VSIPQD.js';
21
21
  import './chunk-IG5LZ3WU.js';
22
- import './chunk-CKICWXMU.js';
22
+ import './chunk-UQ33Y4DM.js';
23
23
  import './chunk-RVRB27AN.js';
24
24
  import { parseRequires } from './chunk-GOCWM7FN.js';
25
25
  import './chunk-WDXZA7QW.js';
@@ -52,8 +52,8 @@ function libraryEntryOf(asset) {
52
52
  async function libraryAssets() {
53
53
  const notes = [];
54
54
  try {
55
- const { openLibraryManager } = await import('./open-library-JP5TC5UX.js');
56
- const { getKindRegistry } = await import('./open-registry-RBELV5YH.js');
55
+ const { openLibraryManager } = await import('./open-library-PVTIUQUF.js');
56
+ const { getKindRegistry } = await import('./open-registry-SOIS3TA2.js');
57
57
  const { scanAuthoringLibraries } = await import('./library/index.js');
58
58
  const { library: index, close } = await openLibraryManager();
59
59
  try {
@@ -86,7 +86,7 @@ async function libraryAssets() {
86
86
  async function storeAssets(projectDir) {
87
87
  const notes = [];
88
88
  try {
89
- const { resolveCatalogSource } = await import('./open-library-JP5TC5UX.js');
89
+ const { resolveCatalogSource } = await import('./open-library-PVTIUQUF.js');
90
90
  const { source, close } = await resolveCatalogSource({ projectDir });
91
91
  try {
92
92
  const assets = (await source.listAssets()).filter(
@@ -167,5 +167,5 @@ async function gatherAssetFeeds(am, projectDir) {
167
167
  }
168
168
 
169
169
  export { gatherAssetFeeds };
170
- //# sourceMappingURL=asset-feeds-WAKBHGEV.js.map
171
- //# sourceMappingURL=asset-feeds-WAKBHGEV.js.map
170
+ //# sourceMappingURL=asset-feeds-QGLI3AXI.js.map
171
+ //# sourceMappingURL=asset-feeds-QGLI3AXI.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../cli/src/asset-feeds.ts"],"names":[],"mappings":"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","file":"asset-feeds-WAKBHGEV.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
+ {"version":3,"sources":["../cli/src/asset-feeds.ts"],"names":[],"mappings":"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","file":"asset-feeds-QGLI3AXI.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,14 +1,14 @@
1
1
  export { WORKSPACE_MOUNT_ENV_VAR, deployAll, deployCatalogEntry, findAiAssetsRoot, isUnderWorkspaceMount, resolveFlowSkills, undeployCatalogEntry, workspaceMountDirs } from '../chunk-H6UVIKQ2.js';
2
- import '../chunk-T2TQAH2X.js';
2
+ import '../chunk-N46LQR46.js';
3
3
  import '../chunk-4GY63JU6.js';
4
- import '../chunk-KC6HGWXN.js';
4
+ import '../chunk-TIIXG3PN.js';
5
5
  import '../chunk-5TBFN46Z.js';
6
6
  import '../chunk-5BEFNLOR.js';
7
- import '../chunk-A2ULN3KX.js';
8
- import '../chunk-2NOLF7B2.js';
7
+ import '../chunk-MWXYN6NY.js';
8
+ import '../chunk-V257LUBM.js';
9
9
  import '../chunk-L5VSIPQD.js';
10
10
  import '../chunk-IG5LZ3WU.js';
11
- import '../chunk-CKICWXMU.js';
11
+ import '../chunk-UQ33Y4DM.js';
12
12
  import '../chunk-RVRB27AN.js';
13
13
  import '../chunk-GOCWM7FN.js';
14
14
  import '../chunk-WDXZA7QW.js';
@@ -1,29 +1,29 @@
1
- export { AssetManager, FACTORY_SOURCE_URL, LibraryEntryError, MissingManifestError, installAgentInstances, normalizeRepoUrl, parseCanonicalLockKey, parseRefTolerant, renderMcpServerConfig, softDepName } from '../chunk-TDQ2ERCM.js';
2
- import '../chunk-VKPBUPH7.js';
3
- import '../chunk-HPVMTX6M.js';
4
- import '../chunk-U2FI547Z.js';
1
+ export { AssetManager, FACTORY_SOURCE_URL, LibraryEntryError, MissingManifestError, installAgentInstances, normalizeRepoUrl, parseCanonicalLockKey, parseRefTolerant, renderMcpServerConfig, softDepName } from '../chunk-MRHVPQNO.js';
2
+ import '../chunk-XM6T2AZ2.js';
3
+ import '../chunk-I37INEWE.js';
4
+ import '../chunk-7XSAW5OC.js';
5
5
  import '../chunk-BFMYYNDT.js';
6
6
  import '../chunk-3TXEJN4W.js';
7
7
  import '../chunk-ISHJITXJ.js';
8
8
  import '../chunk-LNFKL23K.js';
9
9
  import '../chunk-X3RMRJNR.js';
10
10
  import '../chunk-NUELZWCF.js';
11
- export { SCAFFOLD_KINDS, createScaffold, deployAll, installAgent, installTargetOf, removeAsset } from '../chunk-YZ3N7IUU.js';
11
+ export { SCAFFOLD_KINDS, createScaffold, deployAll, installAgent, installTargetOf, removeAsset } from '../chunk-JTOWA6RS.js';
12
12
  export { BUILT_IN_FRAGMENTS, loadPromptExtensions, resolveFragments } from '../chunk-NOA6EJXE.js';
13
13
  export { appendHistory, clearHistory, getRecentHistory, loadHistory } from '../chunk-KTBKW2FI.js';
14
14
  import '../chunk-UQ6LFBPZ.js';
15
- export { AGENT_RENDERERS, claudeCodeRenderer, codexRenderer, driverTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-SRNCN4X2.js';
16
- import '../chunk-CKNIYIV2.js';
17
- import '../chunk-T2TQAH2X.js';
15
+ export { AGENT_RENDERERS, claudeCodeRenderer, codexRenderer, driverTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-C7WBGSBV.js';
16
+ import '../chunk-335ENCCS.js';
17
+ import '../chunk-N46LQR46.js';
18
18
  import '../chunk-4GY63JU6.js';
19
- import '../chunk-KC6HGWXN.js';
19
+ import '../chunk-TIIXG3PN.js';
20
20
  import '../chunk-5TBFN46Z.js';
21
21
  import '../chunk-5BEFNLOR.js';
22
- import '../chunk-A2ULN3KX.js';
23
- import '../chunk-2NOLF7B2.js';
22
+ import '../chunk-MWXYN6NY.js';
23
+ import '../chunk-V257LUBM.js';
24
24
  import '../chunk-L5VSIPQD.js';
25
25
  import '../chunk-IG5LZ3WU.js';
26
- import '../chunk-CKICWXMU.js';
26
+ import '../chunk-UQ33Y4DM.js';
27
27
  import '../chunk-RVRB27AN.js';
28
28
  import '../chunk-GOCWM7FN.js';
29
29
  import '../chunk-WDXZA7QW.js';
@@ -1,17 +1,17 @@
1
- export { SCAFFOLD_KINDS, assertNoLibrarySymlinks, canonicalEntryRef, createScaffold, deployAll, deployAsset, deployedAssetDrift, diffDeployedAgent, installTargetOf, readKeptLegacyCopies, removeAsset, writeKeptLegacyCopies } from '../chunk-YZ3N7IUU.js';
1
+ export { SCAFFOLD_KINDS, assertNoLibrarySymlinks, canonicalEntryRef, createScaffold, deployAll, deployAsset, deployedAssetDrift, diffDeployedAgent, installTargetOf, readKeptLegacyCopies, removeAsset, writeKeptLegacyCopies } from '../chunk-JTOWA6RS.js';
2
2
  import '../chunk-NOA6EJXE.js';
3
- import '../chunk-SRNCN4X2.js';
4
- import '../chunk-CKNIYIV2.js';
5
- import '../chunk-T2TQAH2X.js';
3
+ import '../chunk-C7WBGSBV.js';
4
+ import '../chunk-335ENCCS.js';
5
+ import '../chunk-N46LQR46.js';
6
6
  import '../chunk-4GY63JU6.js';
7
- import '../chunk-KC6HGWXN.js';
7
+ import '../chunk-TIIXG3PN.js';
8
8
  import '../chunk-5TBFN46Z.js';
9
9
  import '../chunk-5BEFNLOR.js';
10
- import '../chunk-A2ULN3KX.js';
11
- import '../chunk-2NOLF7B2.js';
10
+ import '../chunk-MWXYN6NY.js';
11
+ import '../chunk-V257LUBM.js';
12
12
  import '../chunk-L5VSIPQD.js';
13
13
  import '../chunk-IG5LZ3WU.js';
14
- import '../chunk-CKICWXMU.js';
14
+ import '../chunk-UQ33Y4DM.js';
15
15
  import '../chunk-RVRB27AN.js';
16
16
  import '../chunk-GOCWM7FN.js';
17
17
  import '../chunk-WDXZA7QW.js';
@@ -1,15 +1,15 @@
1
- export { AGENT_RENDERERS, CODEX_IDENTITY_DIR, claudeCodeRenderer, codexRenderer, driverTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-SRNCN4X2.js';
2
- import '../chunk-CKNIYIV2.js';
3
- import '../chunk-T2TQAH2X.js';
1
+ export { AGENT_RENDERERS, CODEX_IDENTITY_DIR, claudeCodeRenderer, codexRenderer, driverTargetSupportsAgents, ompRenderer, renderAgentToFramework } from '../chunk-C7WBGSBV.js';
2
+ import '../chunk-335ENCCS.js';
3
+ import '../chunk-N46LQR46.js';
4
4
  import '../chunk-4GY63JU6.js';
5
- import '../chunk-KC6HGWXN.js';
5
+ import '../chunk-TIIXG3PN.js';
6
6
  import '../chunk-5TBFN46Z.js';
7
7
  import '../chunk-5BEFNLOR.js';
8
- import '../chunk-A2ULN3KX.js';
9
- import '../chunk-2NOLF7B2.js';
8
+ import '../chunk-MWXYN6NY.js';
9
+ import '../chunk-V257LUBM.js';
10
10
  import '../chunk-L5VSIPQD.js';
11
11
  import '../chunk-IG5LZ3WU.js';
12
- import '../chunk-CKICWXMU.js';
12
+ import '../chunk-UQ33Y4DM.js';
13
13
  import '../chunk-RVRB27AN.js';
14
14
  import '../chunk-GOCWM7FN.js';
15
15
  import '../chunk-WDXZA7QW.js';
@@ -415,6 +415,11 @@ export interface OutdatedEntry {
415
415
  * `skaile update` (or `skaile install`) re-locks and re-deploys them.
416
416
  */
417
417
  contentChanged?: boolean;
418
+ /**
419
+ * Library-origin asset only: the library now holds this OLDER version than the lock. `install`
420
+ * keeps the lock and the deployed copy; only `update` moves it back (`replaced X → Y`).
421
+ */
422
+ libraryOlder?: string;
418
423
  /**
419
424
  * Library-origin asset only: the library `update` would re-lock the asset from, when it is
420
425
  * not the one the lock names (`library`), e.g. after `skaile library default <other>`.
@@ -426,6 +431,12 @@ export interface OutdatedEntry {
426
431
  * re-keyed (`0.0.0-sha.7de3555 → 0.2.0`, p914).
427
432
  */
428
433
  rekeyTo?: string;
434
+ /**
435
+ * Set when the row only reports a newer version than the `#version` pin of the asset's ref
436
+ * in `skaile.yaml` (`latestVersion`). The pin is deliberate: `update` leaves it and `outdated`
437
+ * does not fail on it.
438
+ */
439
+ pinned?: boolean;
429
440
  /**
430
441
  * Set on a `problem` row whose cause `skaile install` cannot fix: the asset's library is
431
442
  * gone or its publisher changed, so the ref resolves nowhere. `problem` names what to
@@ -440,7 +451,9 @@ export interface OutdatedEntry {
440
451
  * - `not-found` — the ref resolves to no asset (source, store or library).
441
452
  * - `not-deployed` — the asset resolves, but there is no deployed copy to compare.
442
453
  * - `identical` — the deployed copy matches the source.
443
- * - `differs` — the deployed copy differs; `diff` carries the unified diff.
454
+ * - `differs` — the deployed copy differs; `diff` carries the unified diff. `fileSetDiffers` is
455
+ * set when a file is missing from the deployed copy or one is not part of the asset (an
456
+ * `mcp-server` payload): that is a state problem as for a skill, so `diff` lists it and exits 1.
444
457
  * - `no-files` — the asset kind has no files of its own (a preset: its items are the assets to
445
458
  * compare) and the lock records it.
446
459
  *
@@ -457,6 +470,7 @@ export type DiffResult = {
457
470
  } | {
458
471
  status: "differs";
459
472
  diff: string;
473
+ fileSetDiffers?: true;
460
474
  };
461
475
  /**
462
476
  * A node in the resolved dependency tree (returned by `AssetManager.tree()`).
@@ -532,7 +546,7 @@ export interface DepIssue {
532
546
  * @docLink packages/asset-manager/concepts#asset-manager
533
547
  */
534
548
  export interface LockGap {
535
- type: "declared" | "invalid" | "drift" | "pin" | "requires" | "unresolved" | "library" | "incomplete" | "content" | "modified" | "agent" | "source";
549
+ type: "declared" | "invalid" | "drift" | "pin" | "requires" | "unresolved" | "library" | "incomplete" | "content" | "modified" | "agent" | "flow" | "render" | "source";
536
550
  /** The ref to act on: the declared ref, the unmet dependency `kind:name`, or the asset itself. */
537
551
  ref: string;
538
552
  /** Set on a `requires` gap: the requiring asset, `kind:@publisher/name` (`kind:name` when the lock knows no publisher). */
@@ -831,6 +845,26 @@ export declare class AssetManager {
831
845
  * row. Empty for a global manager and for a project that locks no `mcp-server`.
832
846
  */
833
847
  private mcpDriftRows;
848
+ /**
849
+ * What the render wrote for the `mcp-server` asset `name` into the coding agent's MCP
850
+ * config: the config file and, for a server with a payload, the payload directory
851
+ * (project-relative). `written` is false when the render left the server out (see
852
+ * {@link AssetManager.mcpNotices}). `undefined` when the harness has no MCP config skaile
853
+ * writes (`codex`, `omp`) or for a global manager: the asset is composed at run time only.
854
+ */
855
+ mcpRenderFootprint(name: string): Promise<{
856
+ file: string;
857
+ payloadDir?: string;
858
+ written: boolean;
859
+ } | undefined>;
860
+ /**
861
+ * The declared MCP servers whose `.mcp.json` entry skaile wrote and nothing edited, but that
862
+ * `skaile.yaml` (or a newer asset) now renders differently: the config waits for
863
+ * `skaile install`. Covers a locked `mcp-server` and an `mcp_servers:` entry alike; the
864
+ * server is named by its lock identity when it has one, else `mcp-server:<id>`. Empty for a
865
+ * global manager.
866
+ */
867
+ private mcpPendingRender;
834
868
  /**
835
869
  * Render the project's declared MCP servers into the driver target's own
836
870
  * native MCP config (`<project>/.mcp.json` for `claude-code`), so the coding
@@ -1156,6 +1190,15 @@ export declare class AssetManager {
1156
1190
  private libraryHoldingLockedBytes;
1157
1191
  /** On-disk root of the library `origin` names; `null` unless {@link lockedLibrary} says `ok`. */
1158
1192
  private libraryPath;
1193
+ /**
1194
+ * Rename the library every library-origin lock entry names: `library rename <interim> <old>`
1195
+ * puts a library back under its old name, and an entry locked in between would keep the
1196
+ * interim name, so a later "register library again" advice would name a library nobody knows
1197
+ * any more (p893). Nothing is written when no entry names `from`.
1198
+ *
1199
+ * @returns the number of lock entries renamed.
1200
+ */
1201
+ renameLockedLibrary(from: string, to: string): number;
1159
1202
  /**
1160
1203
  * The `kind:@publisher/name` identities the lock holds for one `kind` and `name`, whatever
1161
1204
  * their publisher. `diff` uses it to accept a ref without a publisher only when it names
@@ -1248,6 +1291,16 @@ export declare class AssetManager {
1248
1291
  * @returns Map of candidate key → staged primary-manifest path.
1249
1292
  */
1250
1293
  private stageStoreAssets;
1294
+ /**
1295
+ * The requirements a store candidate's own manifest declares (`metadata.requires`, a manifest
1296
+ * `dependencies:`) that its catalog row did not list, read from the staged bytes. The catalog
1297
+ * row is the store's own summary and may hold only same-kind ones; the deployed copy is what
1298
+ * `check` reads, so a requirement only the manifest names would be missing right after `add`
1299
+ * (p1221). Each one is added to the candidate's `deps` and `storeRequires` (the lock records
1300
+ * them) and returned so the caller resolves, deploys and locks it like any other dependency.
1301
+ * A candidate whose bytes come from a source clone, or that has none, adds nothing.
1302
+ */
1303
+ private readStoreCandidateRequires;
1251
1304
  /** Repo-relative path of a candidate's primary manifest (un-stripped). */
1252
1305
  private primaryManifestRel;
1253
1306
  /**
@@ -1340,6 +1393,12 @@ export declare class AssetManager {
1340
1393
  private ensureSourceClonesQuiet;
1341
1394
  /** Lock entries `skaile asset install` wrote (copied/linked straight into the project). */
1342
1395
  private directInstallLockEntries;
1396
+ /**
1397
+ * Refuse to prune a stale lock entry (in the old lock, not in the new resolved set, with no
1398
+ * other version taking its place) whose deployed folder holds hand edits: the files that differ
1399
+ * from the lock are named, nothing is removed, and `--force` prunes anyway (OQ6).
1400
+ */
1401
+ private assertNoHandEditsPruned;
1343
1402
  /**
1344
1403
  * Remove stale assets — those recorded in the old lock but absent from the
1345
1404
  * newly resolved set (`resolved` source candidates plus `keep`, the canonical
@@ -1736,6 +1795,13 @@ export declare class AssetManager {
1736
1795
  * @throws {Error} with a `migrate-skaile-manifest` hint on legacy `repositories:` / `ai_resources:` keys.
1737
1796
  */
1738
1797
  listDeclared(kind?: string): Promise<DeclaredAsset[]>;
1798
+ /**
1799
+ * One note per locked library asset whose library went back to an older version than the lock
1800
+ * (`library is at 0.1.0, locked 0.3.0`). Not drift: `install` keeps the lock and only `update`
1801
+ * moves it, so `check` and `doctor` print the note as a `!` line and still exit 0 (p1257).
1802
+ * Empty for a global manager or when the libraries cannot be read.
1803
+ */
1804
+ libraryOlderNotices(): Promise<string[]>;
1739
1805
  /**
1740
1806
  * Notes about the project's `mcp-server`s that are not drift and fail nothing: a declared
1741
1807
  * server skaile does not write to the coding agent's MCP config (`reason` from the last
@@ -1861,6 +1927,13 @@ export declare class AssetManager {
1861
1927
  * @returns Array of {@link OutdatedEntry} objects.
1862
1928
  */
1863
1929
  outdated(): Promise<OutdatedEntry[]>;
1930
+ /**
1931
+ * List a locked asset whose `skaile.yaml` ref carries a `#version` pin while a source, a
1932
+ * library or a store holds a newer one: `locked 0.7.0 -> 0.9.0 (pinned)`. The pin is the
1933
+ * user's choice, so the row only informs (`pinned`): `update` leaves it, `outdated` does not
1934
+ * fail on it (OQ13, p1291). An asset already listed keeps its own row.
1935
+ */
1936
+ private addPinnedRows;
1864
1937
  /**
1865
1938
  * List a source asset locked under a `0.0.0-sha.<commit>` key whose file now declares a
1866
1939
  * version: the next `install` or `update` re-keys it (`replaced 0.0.0-sha.7de3555 → 0.2.0`),
@@ -2029,6 +2102,12 @@ export declare class AssetManager {
2029
2102
  * that holds it, writes the publisher, or drops the binding.
2030
2103
  */
2031
2104
  private unboundAgentAdvice;
2105
+ /**
2106
+ * Whether the library a locked agent names is here and holds the agent, or the agent comes
2107
+ * from a source or store: `install --locked` restores it, so its missing cache is no fault of
2108
+ * the library.
2109
+ */
2110
+ private lockedAgentLibraryHolds;
2032
2111
  /** @deprecated Use `(await projectState()).gaps`; removed in the next major. */
2033
2112
  lockGaps(): Promise<LockGap[]>;
2034
2113
  /**
@@ -2058,6 +2137,16 @@ export declare class AssetManager {
2058
2137
  * @param named - `kind:name` identities already reported; they are skipped.
2059
2138
  */
2060
2139
  private libraryOriginGaps;
2140
+ /**
2141
+ * The locked source assets whose source is no longer in `skaile.yaml` `sources:` (`source
2142
+ * remove`, a hand edit), keyed by lock key. ONE sentence for it: `check`, `doctor`, `outdated`,
2143
+ * `install`, `install --locked` and `update` all say it (p1062), and none re-clones the source.
2144
+ * A source of a store-resolved lock entry is not told apart from one, so no GitHub source is
2145
+ * called missing while a `stores:` entry exists.
2146
+ *
2147
+ * @param inScope - Only these lock keys count (`install` prunes an undeclared entry as usual).
2148
+ */
2149
+ private orphanedSourceGaps;
2061
2150
  /**
2062
2151
  * Locked source assets whose source cannot supply them any more: the source is no longer in
2063
2152
  * `skaile.yaml` `sources:` (`source remove`, a hand edit), or it is there but now publishes