@skaile/workspaces 5.12.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 (343) hide show
  1. package/CHANGELOG.md +96 -0
  2. package/README.md +2 -2
  3. package/dist/{asset-feeds-AM6PSSGM.js → asset-feeds-ALMTHLPV.js} +20 -20
  4. package/dist/{asset-feeds-AM6PSSGM.js.map → asset-feeds-ALMTHLPV.js.map} +1 -1
  5. package/dist/asset-manager/catalog-deployer.js +9 -9
  6. package/dist/asset-manager/index.js +15 -15
  7. package/dist/asset-manager/installer.js +11 -11
  8. package/dist/asset-manager/renderers.js +10 -10
  9. package/dist/asset-manager/src/index.d.ts +53 -10
  10. package/dist/asset-manager/src/index.d.ts.map +1 -1
  11. package/dist/asset-manager/src/installer.d.ts +0 -10
  12. package/dist/asset-manager/src/installer.d.ts.map +1 -1
  13. package/dist/bridge/drivers/claude-sdk.js +15 -13
  14. package/dist/bridge/drivers/claude-sdk.js.map +1 -1
  15. package/dist/bridge/drivers/codex.js +72 -27
  16. package/dist/bridge/drivers/codex.js.map +1 -1
  17. package/dist/bridge/drivers/continue.js +11 -11
  18. package/dist/bridge/drivers/echo.js +1 -1
  19. package/dist/bridge/drivers/gemini.js +6 -6
  20. package/dist/bridge/drivers/goose.js +11 -11
  21. package/dist/bridge/drivers/omp.js +102 -27
  22. package/dist/bridge/drivers/omp.js.map +1 -1
  23. package/dist/bridge/drivers/opencode.js +11 -11
  24. package/dist/bridge/drivers/qwen.js +6 -6
  25. package/dist/bridge/index.js +13 -13
  26. package/dist/bridge/src/codex/config-toml.d.ts +8 -0
  27. package/dist/bridge/src/codex/config-toml.d.ts.map +1 -1
  28. package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
  29. package/dist/bridge/src/drivers/codex.d.ts +6 -0
  30. package/dist/bridge/src/drivers/codex.d.ts.map +1 -1
  31. package/dist/bridge/src/drivers/omp-models-yml.d.ts +32 -0
  32. package/dist/bridge/src/drivers/omp-models-yml.d.ts.map +1 -1
  33. package/dist/bridge/src/drivers/omp.d.ts +20 -6
  34. package/dist/bridge/src/drivers/omp.d.ts.map +1 -1
  35. package/dist/{chunk-QCEKGYHF.js → chunk-2BIESC6S.js} +3 -3
  36. package/dist/{chunk-QCEKGYHF.js.map → chunk-2BIESC6S.js.map} +1 -1
  37. package/dist/{chunk-NGJIVDDD.js → chunk-4DLQESIY.js} +3 -3
  38. package/dist/{chunk-NGJIVDDD.js.map → chunk-4DLQESIY.js.map} +1 -1
  39. package/dist/{chunk-7QWQTA5S.js → chunk-4L4R5LV3.js} +4 -4
  40. package/dist/{chunk-7QWQTA5S.js.map → chunk-4L4R5LV3.js.map} +1 -1
  41. package/dist/{chunk-GWD3QNVS.js → chunk-4NJ3QQHZ.js} +5 -5
  42. package/dist/{chunk-GWD3QNVS.js.map → chunk-4NJ3QQHZ.js.map} +1 -1
  43. package/dist/{chunk-6VLHITAM.js → chunk-57SF6W6E.js} +4 -3
  44. package/dist/chunk-57SF6W6E.js.map +1 -0
  45. package/dist/{chunk-NJV5SLEK.js → chunk-5FYOM4RF.js} +46 -46
  46. package/dist/chunk-5FYOM4RF.js.map +1 -0
  47. package/dist/{chunk-ICIYSJBQ.js → chunk-5SKVCMRC.js} +15 -7
  48. package/dist/chunk-5SKVCMRC.js.map +1 -0
  49. package/dist/{chunk-P23WJCH2.js → chunk-6GICC4RJ.js} +23 -18
  50. package/dist/chunk-6GICC4RJ.js.map +1 -0
  51. package/dist/{chunk-3HUV2LJF.js → chunk-6JKIOPT3.js} +4 -4
  52. package/dist/{chunk-3HUV2LJF.js.map → chunk-6JKIOPT3.js.map} +1 -1
  53. package/dist/{chunk-NDF24LYP.js → chunk-6NQDDCIL.js} +3 -3
  54. package/dist/{chunk-NDF24LYP.js.map → chunk-6NQDDCIL.js.map} +1 -1
  55. package/dist/{chunk-VRLKHL74.js → chunk-7SMP4GNW.js} +6 -6
  56. package/dist/{chunk-VRLKHL74.js.map → chunk-7SMP4GNW.js.map} +1 -1
  57. package/dist/{chunk-XMAJJPA4.js → chunk-AHCI4V5L.js} +3 -3
  58. package/dist/{chunk-XMAJJPA4.js.map → chunk-AHCI4V5L.js.map} +1 -1
  59. package/dist/{chunk-NJXR5OAM.js → chunk-B7CZYFB2.js} +4 -4
  60. package/dist/{chunk-NJXR5OAM.js.map → chunk-B7CZYFB2.js.map} +1 -1
  61. package/dist/{chunk-T5TSLSRO.js → chunk-BF422IDP.js} +8 -8
  62. package/dist/{chunk-T5TSLSRO.js.map → chunk-BF422IDP.js.map} +1 -1
  63. package/dist/{chunk-MF54ZHWT.js → chunk-BVJU2GKE.js} +2 -2
  64. package/dist/{chunk-MF54ZHWT.js.map → chunk-BVJU2GKE.js.map} +1 -1
  65. package/dist/{chunk-PMECEZK3.js → chunk-D54T2F54.js} +5 -4
  66. package/dist/chunk-D54T2F54.js.map +1 -0
  67. package/dist/{chunk-C3BMXXTN.js → chunk-DKGEV6SQ.js} +68 -24
  68. package/dist/chunk-DKGEV6SQ.js.map +1 -0
  69. package/dist/chunk-FB3NREF7.js +649 -0
  70. package/dist/chunk-FB3NREF7.js.map +1 -0
  71. package/dist/{chunk-3LVB3HGH.js → chunk-FHDK3BFD.js} +3 -3
  72. package/dist/{chunk-3LVB3HGH.js.map → chunk-FHDK3BFD.js.map} +1 -1
  73. package/dist/{chunk-2X3JBVGD.js → chunk-GMDSRSGI.js} +18 -9
  74. package/dist/chunk-GMDSRSGI.js.map +1 -0
  75. package/dist/{chunk-N5M2EISA.js → chunk-HBZD3MIW.js} +97 -54
  76. package/dist/chunk-HBZD3MIW.js.map +1 -0
  77. package/dist/{chunk-SMT3LNAG.js → chunk-HWGYJMME.js} +4 -4
  78. package/dist/{chunk-SMT3LNAG.js.map → chunk-HWGYJMME.js.map} +1 -1
  79. package/dist/{chunk-CPSIPIX7.js → chunk-IG5LZ3WU.js} +8 -6
  80. package/dist/chunk-IG5LZ3WU.js.map +1 -0
  81. package/dist/{chunk-CTP3XBMF.js → chunk-IY5E7Y5W.js} +57 -7
  82. package/dist/chunk-IY5E7Y5W.js.map +1 -0
  83. package/dist/{chunk-YQU2BPQD.js → chunk-J4DB5G36.js} +2 -2
  84. package/dist/{chunk-YQU2BPQD.js.map → chunk-J4DB5G36.js.map} +1 -1
  85. package/dist/{chunk-PNTXHTBC.js → chunk-J4OYIYFQ.js} +2 -2
  86. package/dist/{chunk-PNTXHTBC.js.map → chunk-J4OYIYFQ.js.map} +1 -1
  87. package/dist/{chunk-PNOGX36L.js → chunk-L3ZGYSWY.js} +85 -24
  88. package/dist/chunk-L3ZGYSWY.js.map +1 -0
  89. package/dist/{chunk-XTVSNWLL.js → chunk-M3P4BYRK.js} +34 -11
  90. package/dist/chunk-M3P4BYRK.js.map +1 -0
  91. package/dist/{chunk-X6LKA3TJ.js → chunk-NDUYFYJB.js} +5 -5
  92. package/dist/{chunk-X6LKA3TJ.js.map → chunk-NDUYFYJB.js.map} +1 -1
  93. package/dist/{chunk-7CR2OZPA.js → chunk-NVO6WECE.js} +9 -8
  94. package/dist/chunk-NVO6WECE.js.map +1 -0
  95. package/dist/chunk-PN44DOGP.js +345 -0
  96. package/dist/chunk-PN44DOGP.js.map +1 -0
  97. package/dist/{chunk-UTKENBB6.js → chunk-PXDWTJ3P.js} +4 -4
  98. package/dist/{chunk-UTKENBB6.js.map → chunk-PXDWTJ3P.js.map} +1 -1
  99. package/dist/{chunk-POQ6PGNE.js → chunk-PYTTF754.js} +22 -6
  100. package/dist/chunk-PYTTF754.js.map +1 -0
  101. package/dist/chunk-PZOO7L26.js +64 -0
  102. package/dist/chunk-PZOO7L26.js.map +1 -0
  103. package/dist/{chunk-SHQMPGOL.js → chunk-QO7CR3KB.js} +10 -5
  104. package/dist/chunk-QO7CR3KB.js.map +1 -0
  105. package/dist/{chunk-KVSDRB35.js → chunk-R6QHJEHE.js} +5 -5
  106. package/dist/{chunk-KVSDRB35.js.map → chunk-R6QHJEHE.js.map} +1 -1
  107. package/dist/chunk-U27JRO5L.js +13 -0
  108. package/dist/chunk-U27JRO5L.js.map +1 -0
  109. package/dist/{chunk-G3X4MLDB.js → chunk-USHB5KEY.js} +3 -3
  110. package/dist/{chunk-G3X4MLDB.js.map → chunk-USHB5KEY.js.map} +1 -1
  111. package/dist/{chunk-HYMERG57.js → chunk-V5JHD4I2.js} +3 -3
  112. package/dist/{chunk-HYMERG57.js.map → chunk-V5JHD4I2.js.map} +1 -1
  113. package/dist/{chunk-JQ3DXNQV.js → chunk-VLBIME5L.js} +6 -6
  114. package/dist/{chunk-JQ3DXNQV.js.map → chunk-VLBIME5L.js.map} +1 -1
  115. package/dist/{chunk-7XWUJC3A.js → chunk-XBYSURMK.js} +3 -3
  116. package/dist/{chunk-7XWUJC3A.js.map → chunk-XBYSURMK.js.map} +1 -1
  117. package/dist/{chunk-XZY6SBGU.js → chunk-XJYBCDY2.js} +3 -3
  118. package/dist/{chunk-XZY6SBGU.js.map → chunk-XJYBCDY2.js.map} +1 -1
  119. package/dist/{chunk-27L6BBAT.js → chunk-Y4Z7LGSH.js} +8 -8
  120. package/dist/{chunk-27L6BBAT.js.map → chunk-Y4Z7LGSH.js.map} +1 -1
  121. package/dist/{chunk-TVAR4JHA.js → chunk-Y7WKXPWS.js} +320 -51
  122. package/dist/chunk-Y7WKXPWS.js.map +1 -0
  123. package/dist/{chunk-2JFIFDDO.js → chunk-YTZFSKWL.js} +3 -3
  124. package/dist/{chunk-2JFIFDDO.js.map → chunk-YTZFSKWL.js.map} +1 -1
  125. package/dist/{chunk-WI4T3KIS.js → chunk-ZSMMX3JD.js} +130 -23
  126. package/dist/chunk-ZSMMX3JD.js.map +1 -0
  127. package/dist/{chunk-DCHQ6BAZ.js → chunk-ZU24LWBI.js} +3 -3
  128. package/dist/{chunk-DCHQ6BAZ.js.map → chunk-ZU24LWBI.js.map} +1 -1
  129. package/dist/cli/index.js +469 -227
  130. package/dist/cli/index.js.map +1 -1
  131. package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
  132. package/dist/cli/src/commands/catalog-cmd.d.ts.map +1 -1
  133. package/dist/cli/src/commands/catalog.d.ts +2 -0
  134. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  135. package/dist/cli/src/commands/diff.d.ts +1 -1
  136. package/dist/cli/src/commands/diff.d.ts.map +1 -1
  137. package/dist/cli/src/commands/integration.d.ts.map +1 -1
  138. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  139. package/dist/cli/src/commands/library-index.d.ts +10 -0
  140. package/dist/cli/src/commands/library-index.d.ts.map +1 -1
  141. package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
  142. package/dist/cli/src/commands/plugin/claude-code.d.ts.map +1 -1
  143. package/dist/cli/src/commands/plugin/types.d.ts +2 -0
  144. package/dist/cli/src/commands/plugin/types.d.ts.map +1 -1
  145. package/dist/cli/src/commands/plugin-registry-cmd.d.ts.map +1 -1
  146. package/dist/cli/src/commands/preset-apply.d.ts.map +1 -1
  147. package/dist/cli/src/commands/project.d.ts +8 -0
  148. package/dist/cli/src/commands/project.d.ts.map +1 -1
  149. package/dist/cli/src/commands/run.d.ts +9 -0
  150. package/dist/cli/src/commands/run.d.ts.map +1 -1
  151. package/dist/cli/src/commands/serve-preflight.d.ts +2 -1
  152. package/dist/cli/src/commands/serve-preflight.d.ts.map +1 -1
  153. package/dist/cli/src/commands/serve.d.ts.map +1 -1
  154. package/dist/cli/src/commands/source-manifest.d.ts +1 -0
  155. package/dist/cli/src/commands/source-manifest.d.ts.map +1 -1
  156. package/dist/cli/src/commands/source.d.ts +9 -1
  157. package/dist/cli/src/commands/source.d.ts.map +1 -1
  158. package/dist/cli/src/commands/store.d.ts.map +1 -1
  159. package/dist/cli/src/commands/update.d.ts.map +1 -1
  160. package/dist/cli/src/commands/validate-instances.d.ts.map +1 -1
  161. package/dist/cli/src/commands/validate.d.ts +3 -2
  162. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  163. package/dist/cli/src/driver-error.d.ts +7 -0
  164. package/dist/cli/src/driver-error.d.ts.map +1 -1
  165. package/dist/cli/src/helpers.d.ts +6 -0
  166. package/dist/cli/src/helpers.d.ts.map +1 -1
  167. package/dist/cli/src/plugin-store/index.d.ts +1 -1
  168. package/dist/cli/src/plugin-store/index.d.ts.map +1 -1
  169. package/dist/cli/src/plugin-store/reconcile.d.ts +24 -4
  170. package/dist/cli/src/plugin-store/reconcile.d.ts.map +1 -1
  171. package/dist/cli/src/skill-checks.d.ts +15 -4
  172. package/dist/cli/src/skill-checks.d.ts.map +1 -1
  173. package/dist/cli/src/store-addable.d.ts +7 -8
  174. package/dist/cli/src/store-addable.d.ts.map +1 -1
  175. package/dist/connectors/config.js +6 -6
  176. package/dist/connectors/index.js +16 -16
  177. package/dist/connectors/src/config.d.ts.map +1 -1
  178. package/dist/{connectors-UNKUKEPG.js → connectors-GFKMKAXV.js} +19 -19
  179. package/dist/{connectors-UNKUKEPG.js.map → connectors-GFKMKAXV.js.map} +1 -1
  180. package/dist/core/driver-targets.js +1 -1
  181. package/dist/core/index.js +8 -8
  182. package/dist/core/manifest.js +2 -2
  183. package/dist/core/models.js +1 -1
  184. package/dist/core/publish-manifest.js +4 -2
  185. package/dist/core/ref.js +1 -1
  186. package/dist/core/runtime-assets.js +6 -6
  187. package/dist/core/src/agent-instances.d.ts +5 -0
  188. package/dist/core/src/agent-instances.d.ts.map +1 -1
  189. package/dist/core/src/driver-targets.d.ts.map +1 -1
  190. package/dist/core/src/index.d.ts +1 -1
  191. package/dist/core/src/index.d.ts.map +1 -1
  192. package/dist/core/src/manifest.d.ts +9 -3
  193. package/dist/core/src/manifest.d.ts.map +1 -1
  194. package/dist/core/src/models.d.ts +8 -0
  195. package/dist/core/src/models.d.ts.map +1 -1
  196. package/dist/core/src/publish-manifest.d.ts +38 -1
  197. package/dist/core/src/publish-manifest.d.ts.map +1 -1
  198. package/dist/core/src/repo-manager.d.ts +8 -3
  199. package/dist/core/src/repo-manager.d.ts.map +1 -1
  200. package/dist/core/src/runtime-assets.d.ts.map +1 -1
  201. package/dist/core/src/store.d.ts +4 -0
  202. package/dist/core/src/store.d.ts.map +1 -1
  203. package/dist/core/src/walker.d.ts +2 -0
  204. package/dist/core/src/walker.d.ts.map +1 -1
  205. package/dist/core/src/workspace-config.d.ts +24 -2
  206. package/dist/core/src/workspace-config.d.ts.map +1 -1
  207. package/dist/core/store.js +2 -2
  208. package/dist/core/workspace-config.js +5 -5
  209. package/dist/deploy/index.js +8 -8
  210. package/dist/discovery/index.js +5 -5
  211. package/dist/discovery/src/parse-manifest.d.ts.map +1 -1
  212. package/dist/discovery/src/source-config.d.ts +5 -3
  213. package/dist/discovery/src/source-config.d.ts.map +1 -1
  214. package/dist/{ensure-sources-POMEQSTM.js → ensure-sources-VUKHL65L.js} +18 -18
  215. package/dist/{ensure-sources-POMEQSTM.js.map → ensure-sources-VUKHL65L.js.map} +1 -1
  216. package/dist/factory-assets/README.md +1 -1
  217. package/dist/factory-assets/connectors/box.js +16 -16
  218. package/dist/factory-assets/connectors/deploy.js +16 -16
  219. package/dist/factory-assets/connectors/devserver.js +16 -16
  220. package/dist/factory-assets/connectors/flow/adapter.js +16 -16
  221. package/dist/factory-assets/connectors/flow/engine.js +9 -9
  222. package/dist/factory-assets/connectors/flow/run-flow.d.ts.map +1 -1
  223. package/dist/factory-assets/connectors/flow/run-flow.js +18 -18
  224. package/dist/factory-assets/connectors/flow.js +16 -16
  225. package/dist/factory-assets/connectors/git.js +16 -16
  226. package/dist/factory-assets/connectors/gmail.js +16 -16
  227. package/dist/factory-assets/connectors/googledrive.js +16 -16
  228. package/dist/factory-assets/connectors/local.js +16 -16
  229. package/dist/factory-assets/connectors/mattermost.js +16 -16
  230. package/dist/factory-assets/connectors/memory.js +16 -16
  231. package/dist/factory-assets/connectors/minio.js +16 -16
  232. package/dist/factory-assets/connectors/postgres.js +16 -16
  233. package/dist/factory-assets/connectors/s3.js +16 -16
  234. package/dist/factory-assets/connectors/sharepoint.js +16 -16
  235. package/dist/factory-assets/connectors/sqlite.js +16 -16
  236. package/dist/factory-assets/connectors/static-server.js +16 -16
  237. package/dist/factory-assets/connectors/tunnel.js +16 -16
  238. package/dist/factory-assets/connectors/webdav.js +16 -16
  239. package/dist/factory-assets/connectors/xstate-store.js +16 -16
  240. package/dist/factory-assets/connectors/xstate.js +16 -16
  241. package/dist/{flows-DVKMZKM4.js → flows-A4YALSZY.js} +13 -13
  242. package/dist/{flows-DVKMZKM4.js.map → flows-A4YALSZY.js.map} +1 -1
  243. package/dist/{helpers-Y4OT7VIS.js → helpers-53XZW7KF.js} +18 -18
  244. package/dist/{helpers-Y4OT7VIS.js.map → helpers-53XZW7KF.js.map} +1 -1
  245. package/dist/library/index.js +12 -12
  246. package/dist/library/install.js +5 -3
  247. package/dist/library/src/local/local-catalog-source.d.ts +6 -0
  248. package/dist/library/src/local/local-catalog-source.d.ts.map +1 -1
  249. package/dist/library/src/manifest-writer.d.ts +1 -1
  250. package/dist/library/src/manifest-writer.d.ts.map +1 -1
  251. package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
  252. package/dist/library/src/user-library.d.ts +2 -0
  253. package/dist/library/src/user-library.d.ts.map +1 -1
  254. package/dist/{library-publish-DI4Q5UOG.js → library-publish-FFIPWIRM.js} +28 -25
  255. package/dist/library-publish-FFIPWIRM.js.map +1 -0
  256. package/dist/open-library-PZAT3TJA.js +40 -0
  257. package/dist/{open-library-N6ESO6IK.js.map → open-library-PZAT3TJA.js.map} +1 -1
  258. package/dist/open-registry-W46UXZ3I.js +32 -0
  259. package/dist/{open-registry-CBZ5MWTT.js.map → open-registry-W46UXZ3I.js.map} +1 -1
  260. package/dist/paths-KKY3NSBZ.js +22 -0
  261. package/dist/{paths-U6W6MQNQ.js.map → paths-KKY3NSBZ.js.map} +1 -1
  262. package/dist/{plugin-store-XMZSPVBF.js → plugin-store-CK7YWRIC.js} +62 -20
  263. package/dist/plugin-store-CK7YWRIC.js.map +1 -0
  264. package/dist/plugins/src/catalog-source.d.ts +6 -0
  265. package/dist/plugins/src/catalog-source.d.ts.map +1 -1
  266. package/dist/project-EZUH7PUJ.js +79 -0
  267. package/dist/{project-UP52HEHC.js.map → project-EZUH7PUJ.js.map} +1 -1
  268. package/dist/resolver/index.js +9 -9
  269. package/dist/runner/index.js +29 -29
  270. package/dist/runner/src/agent.d.ts.map +1 -1
  271. package/dist/runner/src/composition/index.d.ts +1 -1
  272. package/dist/runner/src/composition/index.d.ts.map +1 -1
  273. package/dist/runner/src/composition/prompt-sections.d.ts +18 -6
  274. package/dist/runner/src/composition/prompt-sections.d.ts.map +1 -1
  275. package/dist/runner/src/serve.d.ts.map +1 -1
  276. package/dist/runner/src/session-builder.d.ts.map +1 -1
  277. package/dist/runner/src/session.d.ts +2 -0
  278. package/dist/runner/src/session.d.ts.map +1 -1
  279. package/dist/runner/src/ws-auth-warning.d.ts +17 -0
  280. package/dist/runner/src/ws-auth-warning.d.ts.map +1 -0
  281. package/dist/sdk/asset-manager.js +15 -15
  282. package/dist/sdk/bridge.js +13 -13
  283. package/dist/sdk/core.js +8 -8
  284. package/dist/sdk/flow.js +9 -9
  285. package/dist/sdk/index.js +29 -29
  286. package/dist/sdk/resolver.js +9 -9
  287. package/dist/sdk/runner.js +29 -29
  288. package/dist/serve-preflight-F7MYF747.js +64 -0
  289. package/dist/serve-preflight-F7MYF747.js.map +1 -0
  290. package/dist/{setup-5IRUH5OS.js → setup-L632QIHV.js} +23 -23
  291. package/dist/{setup-5IRUH5OS.js.map → setup-L632QIHV.js.map} +1 -1
  292. package/dist/skills-OY3Y5GKA.js +26 -0
  293. package/dist/{skills-HA36RFNM.js.map → skills-OY3Y5GKA.js.map} +1 -1
  294. package/dist/source-36FHMN5V.js +42 -0
  295. package/dist/{source-DX5SGWEI.js.map → source-36FHMN5V.js.map} +1 -1
  296. package/dist/{source-manifest-publish-NMRLXWVW.js → source-manifest-publish-NIXJSJ22.js} +25 -24
  297. package/dist/source-manifest-publish-NIXJSJ22.js.map +1 -0
  298. package/dist/tui/index.js +46 -36
  299. package/dist/tui/index.js.map +1 -1
  300. package/dist/tui/src/repl.d.ts.map +1 -1
  301. package/dist/types/manifests.js +1 -1
  302. package/dist/types/src/lifecycle.d.ts +2 -1
  303. package/dist/types/src/lifecycle.d.ts.map +1 -1
  304. package/dist/types/src/manifests/preset.d.ts +6 -1
  305. package/dist/types/src/manifests/preset.d.ts.map +1 -1
  306. package/dist/workspace-plugin/adapters/mcp.js +23 -23
  307. package/dist/workspace-plugin/adapters/omp.js +14 -14
  308. package/dist/workspace-plugin/index.js +1 -1
  309. package/package.json +1 -1
  310. package/dist/chunk-2X3JBVGD.js.map +0 -1
  311. package/dist/chunk-6VLHITAM.js.map +0 -1
  312. package/dist/chunk-7CR2OZPA.js.map +0 -1
  313. package/dist/chunk-C3BMXXTN.js.map +0 -1
  314. package/dist/chunk-CPSIPIX7.js.map +0 -1
  315. package/dist/chunk-CTP3XBMF.js.map +0 -1
  316. package/dist/chunk-ICIYSJBQ.js.map +0 -1
  317. package/dist/chunk-ID745F3R.js +0 -625
  318. package/dist/chunk-ID745F3R.js.map +0 -1
  319. package/dist/chunk-K4VOEYOR.js +0 -21
  320. package/dist/chunk-K4VOEYOR.js.map +0 -1
  321. package/dist/chunk-N5M2EISA.js.map +0 -1
  322. package/dist/chunk-NJV5SLEK.js.map +0 -1
  323. package/dist/chunk-NR7H7ZJP.js +0 -400
  324. package/dist/chunk-NR7H7ZJP.js.map +0 -1
  325. package/dist/chunk-P23WJCH2.js.map +0 -1
  326. package/dist/chunk-PMECEZK3.js.map +0 -1
  327. package/dist/chunk-PNOGX36L.js.map +0 -1
  328. package/dist/chunk-POQ6PGNE.js.map +0 -1
  329. package/dist/chunk-SHQMPGOL.js.map +0 -1
  330. package/dist/chunk-TVAR4JHA.js.map +0 -1
  331. package/dist/chunk-WI4T3KIS.js.map +0 -1
  332. package/dist/chunk-XTVSNWLL.js.map +0 -1
  333. package/dist/library-publish-DI4Q5UOG.js.map +0 -1
  334. package/dist/open-library-N6ESO6IK.js +0 -40
  335. package/dist/open-registry-CBZ5MWTT.js +0 -32
  336. package/dist/paths-U6W6MQNQ.js +0 -22
  337. package/dist/plugin-store-XMZSPVBF.js.map +0 -1
  338. package/dist/project-UP52HEHC.js +0 -79
  339. package/dist/serve-preflight-6P2JJEJ3.js +0 -47
  340. package/dist/serve-preflight-6P2JJEJ3.js.map +0 -1
  341. package/dist/skills-HA36RFNM.js +0 -26
  342. package/dist/source-DX5SGWEI.js +0 -41
  343. package/dist/source-manifest-publish-NMRLXWVW.js.map +0 -1
@@ -1,20 +1,20 @@
1
- import { unregisteredLibraryNames, renamedLibraryName, resolveConfig, RemoteCatalogSource, OfflineError, describeCatalogError, CatalogHttpError, scanUnlistedAssets, getStoreManifestsDir, missingLibraryDirMessage } from './chunk-C3BMXXTN.js';
2
- import { readManifestSourceConfig, discoverAssetsInTree, isManifestMode } from './chunk-7CR2OZPA.js';
3
- import { installTargetOf, canonicalEntryRef, deployAll, removeAsset, diffDeployedAgent, removeExcludedLeftovers, deployedAssetDrift, createScaffold, installAgent } from './chunk-NJV5SLEK.js';
1
+ import { unregisteredLibraryNames, renamedLibraryName, resolveConfig, RemoteCatalogSource, OfflineError, describeCatalogError, CatalogHttpError, scanUnlistedAssets, getStoreManifestsDir, missingLibraryDirMessage } from './chunk-DKGEV6SQ.js';
2
+ import { readManifestSourceConfig, discoverAssetsInTree, isManifestMode } from './chunk-NVO6WECE.js';
3
+ import { installTargetOf, canonicalEntryRef, deployedAssetDrift, deployAll, removeAsset, diffDeployedAgent, createScaffold, installAgent } from './chunk-5FYOM4RF.js';
4
4
  import { appendHistory, getRecentHistory, clearHistory } from './chunk-KTBKW2FI.js';
5
5
  import { commitChanges } from './chunk-UQ6LFBPZ.js';
6
- import { driverTargetSupportsAgents, CODEX_IDENTITY_DIR } from './chunk-7QWQTA5S.js';
7
- import { resolveConfiguredDriverTarget, GLOBAL_INSTALL_DIR_NAME, resolveLibraryDir, buildLibraryLockEntries, computeHash, buildLockFile, writeLock, readLock, verifyLock, mergeLockFile, extractForPatch, generatePatch, savePatch, applyPatch, LOCK_SCHEMA_VERSION } from './chunk-T5TSLSRO.js';
8
- import { resolveRuntimeAssets, factoryAssetRoots } from './chunk-SHQMPGOL.js';
9
- import { deployedBase, deployedDir, isDeployed, deployedPaths } from './chunk-PMECEZK3.js';
10
- import { resolveSkWorkspaceConfig, effectiveAgentInstances, loadMcpServerDeclarations, resolveGlobalHarnesses, resolveGlobalSkWorkspaceConfig, getGlobalCacheDir, sourceCacheKey, getRepoCommit, matchPin, buildProvenanceIndex, coerceVersion, sourceShortName, readLinks, isCommitOnRemote, resolveAll, agentSourceCacheDir, ensureRepo, scanRepo, SKAILE_YAML_DEFAULT, checkRepoStatus, resolveAsset, MAX_PRESET_DEPTH, PresetDepthError, DEFAULT_AGENT_INSTANCE_ID, resolveAgentDefinitionDir, storeManifestSlug } from './chunk-PNOGX36L.js';
6
+ import { driverTargetSupportsAgents, CODEX_IDENTITY_DIR } from './chunk-4L4R5LV3.js';
7
+ import { resolveConfiguredDriverTarget, GLOBAL_INSTALL_DIR_NAME, resolveLibraryDir, buildLibraryLockEntries, computeHash, buildLockFile, writeLock, readLock, verifyLock, mergeLockFile, extractForPatch, generatePatch, savePatch, applyPatch, LOCK_SCHEMA_VERSION } from './chunk-BF422IDP.js';
8
+ import { resolveRuntimeAssets, factoryAssetRoots } from './chunk-QO7CR3KB.js';
9
+ import { deployedBase, deployedDir, isDeployed, deployedPaths } from './chunk-D54T2F54.js';
10
+ import { resolveSkWorkspaceConfig, effectiveAgentInstances, loadMcpServerDeclarations, resolveGlobalHarnesses, resolveGlobalSkWorkspaceConfig, getGlobalCacheDir, sourceCacheKey, getRepoCommit, matchPin, buildProvenanceIndex, coerceVersion, sourceShortName, readLinks, isCommitOnRemote, resolveAll, agentSourceCacheDir, ensureRepo, scanRepo, SKAILE_YAML_DEFAULT, checkRepoStatus, resolveAsset, MAX_PRESET_DEPTH, PresetDepthError, DEFAULT_AGENT_INSTANCE_ID, resolveAgentDefinitionDir, storeManifestSlug } from './chunk-L3ZGYSWY.js';
11
11
  import { globalSkaileDir, globalCacheRoot, migrateLegacyDir } from './chunk-L5VSIPQD.js';
12
- import { DRIVER_TARGETS } from './chunk-CPSIPIX7.js';
13
- import { loadSkPublishManifest } from './chunk-CTP3XBMF.js';
14
- import { scanDirectory, parseRequires, dedupeRequirements } from './chunk-XTVSNWLL.js';
15
- import { parseAssetRef, parseAssetRefLoose, assetRefToStr, slugifyAssetName, depToStr, parseDep } from './chunk-PNTXHTBC.js';
12
+ import { DRIVER_TARGETS } from './chunk-IG5LZ3WU.js';
13
+ import { loadSkPublishManifest } from './chunk-IY5E7Y5W.js';
14
+ import { scanDirectory, parseFrontmatter, parseRequires, dedupeRequirements } from './chunk-M3P4BYRK.js';
15
+ import { parseAssetRef, parseAssetRefLoose, assetRefToStr, slugifyAssetName, depToStr, parseDep } from './chunk-J4OYIYFQ.js';
16
16
  import { spawnSync } from 'child_process';
17
- import { existsSync, rmSync, readdirSync, lstatSync, unlinkSync, mkdirSync, writeFileSync, readFileSync } from 'fs';
17
+ import { existsSync, rmSync, readdirSync, lstatSync, readFileSync, unlinkSync, mkdirSync, writeFileSync } from 'fs';
18
18
  import path, { resolve, dirname, sep, join, relative, posix } from 'path';
19
19
  import { gt } from 'semver';
20
20
  import { stringify, parse } from 'yaml';
@@ -693,7 +693,11 @@ function withKeptLockEntries(lock, kept) {
693
693
  }
694
694
  function relockedRefs(prev, next) {
695
695
  if (!prev) return [];
696
- const fingerprint = (e) => [e.library?.version ?? "", e.library?.sha256 ?? e.sha256, e.source?.commit ?? ""].join("\0");
696
+ const fingerprint = (e, key) => [
697
+ e.library?.version ?? "",
698
+ e.library?.sha256 ?? e.sha256,
699
+ key.includes("#0.0.0-sha.") ? "" : e.source?.commit ?? ""
700
+ ].join("\0");
697
701
  const out = [];
698
702
  for (const [key, entry] of Object.entries(next.assets)) {
699
703
  if (entry.library?.installed) continue;
@@ -703,7 +707,8 @@ function relockedRefs(prev, next) {
703
707
  return o.kind === id.kind && o.name === id.name && o.publisher === id.publisher;
704
708
  });
705
709
  if (!before) continue;
706
- if (before[0] !== key || fingerprint(before[1]) !== fingerprint(entry)) out.push(key);
710
+ if (before[0] !== key || fingerprint(before[1], before[0]) !== fingerprint(entry, key))
711
+ out.push(key);
707
712
  }
708
713
  return out;
709
714
  }
@@ -1001,7 +1006,11 @@ var AssetManager = class {
1001
1006
  for (const s of sources) {
1002
1007
  const slug = sourceCacheKey(s.url);
1003
1008
  if (repositories[slug]) continue;
1004
- repositories[slug] = { path: join(sourcesDir, slug), url: s.url };
1009
+ repositories[slug] = {
1010
+ path: join(sourcesDir, slug),
1011
+ url: s.url,
1012
+ ...s.publisher ? { publisher: s.publisher } : {}
1013
+ };
1005
1014
  }
1006
1015
  const factory = resolveFactorySource();
1007
1016
  const factoryUrl = normalizeRepoUrl(FACTORY_SOURCE_URL);
@@ -1029,6 +1038,7 @@ var AssetManager = class {
1029
1038
  sourceUrl: decl.url ?? localPath,
1030
1039
  commit,
1031
1040
  tag: decl.branch,
1041
+ ...decl.publisher ? { publisher: decl.publisher } : {},
1032
1042
  // A curated store manifest (`source manifest init` → the flat
1033
1043
  // `~/.skaile/store/manifests/<slug>.yaml`) is the authoritative inventory
1034
1044
  // for a foreign source. Point the walker at it so `add`/resolve honor the
@@ -1630,6 +1640,83 @@ var AssetManager = class {
1630
1640
  );
1631
1641
  }
1632
1642
  }
1643
+ /**
1644
+ * Refuse to deploy over a folder (or agent file) the project did not put there: it is on disk,
1645
+ * but no lock entry of the same kind and name owns it, so it is the user's own work and the
1646
+ * deploy would replace it and `remove` would delete it. Throws one line naming the folder.
1647
+ *
1648
+ * A folder the deploy would rewrite with the same content is adopted silently (the way back
1649
+ * from `asset import`: the project's own copy is what the library now holds): every file in
1650
+ * it is shipped by the asset with the same bytes, or the same body and an asset frontmatter
1651
+ * that only adds to the folder's (import normalizes it). Nothing is lost then.
1652
+ *
1653
+ * @param incoming - Assets about to be deployed, with the entry whose bytes would be written
1654
+ * when there is one.
1655
+ * @param owned - Assets the lock holds; one of the same kind and name, from any publisher,
1656
+ * owns the folder (a publisher clash is {@link assertNoFolderCollision}'s refusal).
1657
+ */
1658
+ assertNoUnownedFolder(incoming, owned) {
1659
+ for (const { id: a, entry } of incoming) {
1660
+ if (!a.kind || !a.name) continue;
1661
+ const component = installTargetOf(this.registry, a.kind);
1662
+ if (!component) continue;
1663
+ const isOwned = owned.some(
1664
+ (o) => !!o.kind && o.name === a.name && installTargetOf(this.registry, o.kind) === component
1665
+ );
1666
+ if (isOwned) continue;
1667
+ for (const target of this.targetHarnesses()) {
1668
+ const held = deployedPaths(component, a.name, target, this.global, this.projectDir).find(
1669
+ (p) => existsSync(p)
1670
+ );
1671
+ if (!held) continue;
1672
+ if (entry && this.deployWouldOnlyRewriteSame(entry, target)) continue;
1673
+ const shown = this.global ? held : relative(this.projectDir, held);
1674
+ throw new Error(
1675
+ `${assetRefToStr({ kind: a.kind, name: a.name, publisher: a.publisher })} would overwrite ${shown}, which no lock entry owns (your own files?) \u2014 move it away, or pass --force to replace it`
1676
+ );
1677
+ }
1678
+ }
1679
+ }
1680
+ /**
1681
+ * Whether deploying `entry` over the folder already in `target` loses nothing: the folder
1682
+ * holds no file the asset does not ship, and each of its files equals the asset's, or is a
1683
+ * markdown file with the same body whose frontmatter the asset's only extends.
1684
+ */
1685
+ deployWouldOnlyRewriteSame(entry, target) {
1686
+ const drift = deployedAssetDrift(entry, {
1687
+ registry: this.registry,
1688
+ driverTarget: target,
1689
+ global: this.global,
1690
+ cwd: this.projectDir
1691
+ });
1692
+ if (!drift || drift.extra.length > 0) return false;
1693
+ if (drift.modified.length === 0) return true;
1694
+ const component = installTargetOf(this.registry, entry.kind);
1695
+ if (!component) return false;
1696
+ const dest = deployedDir(component, entry.name, target, this.global, this.projectDir);
1697
+ let assetRoot;
1698
+ try {
1699
+ assetRoot = lstatSync(entry.source).isDirectory() ? entry.source : dirname(entry.source);
1700
+ } catch {
1701
+ return false;
1702
+ }
1703
+ return drift.modified.every((rel) => {
1704
+ if (!/\.md$/i.test(rel)) return false;
1705
+ try {
1706
+ const mine = parseFrontmatter(readFileSync(join(dest, rel), "utf8"));
1707
+ const theirs = parseFrontmatter(readFileSync(join(assetRoot, rel), "utf8"));
1708
+ if (mine.body !== theirs.body) return false;
1709
+ const covered = (have, want) => Object.entries(have).every(([k, v]) => {
1710
+ const w = want[k];
1711
+ if (JSON.stringify(v) === JSON.stringify(w)) return true;
1712
+ return k === "metadata" && !!v && typeof v === "object" && !!w && typeof w === "object" && covered(v, w);
1713
+ });
1714
+ return covered(mine.data, theirs.data);
1715
+ } catch {
1716
+ return false;
1717
+ }
1718
+ });
1719
+ }
1633
1720
  /**
1634
1721
  * Open the local index and snapshot its libraries + asset definitions.
1635
1722
  * Best-effort: no index file (never indexed), or any open/guard failure,
@@ -2124,8 +2211,38 @@ var AssetManager = class {
2124
2211
  const id = refIdentity(m);
2125
2212
  return !lib.resolved.has(m) && !(id !== null && covered.has(id));
2126
2213
  });
2214
+ this.keepUnchangedSourceVersions(resolved, [...deps, ...opts.declaredRefs ?? []]);
2127
2215
  return { resolved, missing: stillMissing, overridesApplied, lib, presets, requiredBy };
2128
2216
  }
2217
+ /**
2218
+ * A source asset without a declared version is keyed `0.0.0-sha.<repo commit>`, so every
2219
+ * commit of its repo would re-key (and re-lock, and report as updated) every asset of
2220
+ * that repo, changed or not. Keep the locked key and version of an asset whose files hash
2221
+ * to what the lock holds: `update` then re-locks only what changed, as `outdated` lists.
2222
+ * The commit stays the clone's, so the lock's `sources:` row still names the bytes' commit.
2223
+ * A ref the user pinned (`#<version>`) keeps the version it names.
2224
+ */
2225
+ keepUnchangedSourceVersions(resolved, requested) {
2226
+ const prev = this.tryReadLock();
2227
+ if (!prev) return;
2228
+ const pinned = /* @__PURE__ */ new Set();
2229
+ for (const ref of requested) {
2230
+ const id = refIdentity(ref);
2231
+ if (id !== null && ref.includes("#")) pinned.add(id);
2232
+ }
2233
+ for (const c of resolved) {
2234
+ if (!c.version.startsWith("0.0.0-sha.")) continue;
2235
+ const id = `${c.publisher}/${c.kind}:${c.name}`;
2236
+ if (pinned.has(id)) continue;
2237
+ for (const [key, entry] of Object.entries(prev.assets)) {
2238
+ const o = parseCanonicalLockKey(key);
2239
+ if (o.kind !== c.kind || o.name !== c.name || o.publisher !== c.publisher) continue;
2240
+ if (!o.version?.startsWith("0.0.0-sha.")) continue;
2241
+ if (entry.source?.url === c.sourceUrl && entry.sha256 === c.sha256) c.version = o.version;
2242
+ break;
2243
+ }
2244
+ }
2245
+ }
2129
2246
  /** The catalog fetcher to use: an injected one, else built from `stores`. */
2130
2247
  storeFetcherFor(stores) {
2131
2248
  return this.injectedStoreFetcher ?? this.buildStoreFetcher(stores);
@@ -2328,7 +2445,11 @@ var AssetManager = class {
2328
2445
  };
2329
2446
  }
2330
2447
  }
2331
- const cloneError = this.ensureSourceClones(repositories, sources);
2448
+ const cloneError = this.ensureSourceClones(
2449
+ repositories,
2450
+ sources,
2451
+ opts?.moveLibraries ? void 0 : lockForLibraries
2452
+ );
2332
2453
  if (cloneError) return cloneError;
2333
2454
  const provenanceIndex = await buildProvenanceIndex(this.buildClones(repositories), {
2334
2455
  projectDir: this.projectDir,
@@ -2357,7 +2478,8 @@ var AssetManager = class {
2357
2478
  const hints = {};
2358
2479
  for (const [m, parents] of unmetByNew) {
2359
2480
  const requirer = parents.map((p) => p.split("#")[0]).join(", ");
2360
- hints[m] = ` is required by ${requirer} (not found \u2014 ${REGISTER_HOLDER}, or drop ${requirer} with \`skaile remove ${parents[0].split("#")[0]}\`) \u2014 nothing was installed`;
2481
+ const unreachable = [...this.storeFailures.values()];
2482
+ hints[m] = unreachable.length > 0 ? ` is required by ${requirer} (store unreachable, so it was not looked up: ${unreachable.join("; ")} \u2014 check the URL with \`skaile catalog test\`) \u2014 nothing was installed` : ` is required by ${requirer} (not found \u2014 ${REGISTER_HOLDER}, or drop ${requirer} with \`skaile remove ${parents[0].split("#")[0]}\`) \u2014 nothing was installed`;
2361
2483
  }
2362
2484
  return {
2363
2485
  deployed: [],
@@ -2401,7 +2523,7 @@ var AssetManager = class {
2401
2523
  )
2402
2524
  )
2403
2525
  ];
2404
- let restored = this.restoredCopies(copyDrift, deployed);
2526
+ const restored = this.restoredCopies(copyDrift, deployed);
2405
2527
  await this.renderDriverMcpConfig();
2406
2528
  const agentRender = await this.renderAgentInstances();
2407
2529
  const lockWanted = resolved.length > 0 || lib.entries.length > 0 || existsSync(this.lockPath);
@@ -2409,9 +2531,8 @@ var AssetManager = class {
2409
2531
  let relocked = [];
2410
2532
  let moved = [];
2411
2533
  if (lockWanted) {
2412
- const lockData = withKeptLockEntries(freshLock, kept);
2534
+ const lockData = this.withRenderedAgents(withKeptLockEntries(freshLock, kept));
2413
2535
  relocked = relockedRefs(prevLock, lockData);
2414
- restored = [...restored, ...this.removeExcludedLeftovers(relocked)];
2415
2536
  moved = libraryMoves(prevLock, libraryLock);
2416
2537
  lockWritten = writeLock(this.lockPath, lockData);
2417
2538
  }
@@ -2488,13 +2609,25 @@ var AssetManager = class {
2488
2609
  * {@link InstallResult} describing the failed source on the first error, or
2489
2610
  * `null` when every clone succeeds.
2490
2611
  */
2491
- ensureSourceClones(repositories, sources) {
2612
+ ensureSourceClones(repositories, sources, lock) {
2492
2613
  const pinBySlug = pinsBySlug(sources);
2614
+ const lockedCommit = /* @__PURE__ */ new Map();
2615
+ for (const s of lock?.sources ?? []) {
2616
+ if (!/^0*$/.test(s.commit)) lockedCommit.set(sourceCacheKey(s.url), s.commit);
2617
+ }
2493
2618
  for (const [name, decl] of Object.entries(repositories)) {
2494
2619
  try {
2620
+ const declaredPin = pinBySlug.get(name);
2621
+ let locked = decl.url && !decl.factory ? lockedCommit.get(name) : void 0;
2622
+ if (locked && declaredPin === void 0) {
2623
+ const dir = this.resolveRepoDir(decl, name);
2624
+ const head = dir ? getRepoCommit(dir) : void 0;
2625
+ if (dir && head && head !== locked && !isCommitOnRemote(dir, head)) locked = void 0;
2626
+ }
2495
2627
  ensureRepo(decl, name, this.reposDir, {
2496
2628
  projectDir: this.projectDir,
2497
- pin: pinBySlug.get(name)
2629
+ pin: declaredPin ?? locked,
2630
+ ...declaredPin === void 0 && locked ? { strictPin: true } : {}
2498
2631
  });
2499
2632
  } catch (err) {
2500
2633
  return {
@@ -2773,7 +2906,7 @@ var AssetManager = class {
2773
2906
  const candidate = this.lockedCandidate(key, entry, repositories);
2774
2907
  if (!candidate) continue;
2775
2908
  candidates.push(candidate);
2776
- if (isFactoryUrl(candidate.sourceUrl) || this.candidateHasLocalBytes(candidate, repositories)) {
2909
+ if (this.candidateHasLocalBytes(candidate, repositories)) {
2777
2910
  cloneOrigin[key] = entry;
2778
2911
  }
2779
2912
  }
@@ -2996,7 +3129,28 @@ var AssetManager = class {
2996
3129
  ...dependencies.map((d) => parseAssetRefLoose(d) ?? {})
2997
3130
  ]
2998
3131
  );
3132
+ if (!opts?.force) {
3133
+ this.assertNoUnownedFolder(
3134
+ [
3135
+ ...resolved.map((c) => ({
3136
+ id: c,
3137
+ entry: this.candidateToCatalogEntry(c, repositories)
3138
+ })),
3139
+ ...lib.entries.map((e) => ({ id: this.entryIdentity(e), entry: e }))
3140
+ ],
3141
+ [
3142
+ ...Object.keys(this.tryReadLock()?.assets ?? {}).map(parseCanonicalLockKey),
3143
+ ...dependencies.map((d) => parseAssetRefLoose(d) ?? {})
3144
+ ]
3145
+ );
3146
+ }
2999
3147
  if (missing.length > 0) {
3148
+ const unreachable = [...this.storeFailures.values()];
3149
+ if (unreachable.length > 0) {
3150
+ throw new Error(
3151
+ `Store unreachable \u2014 ${ref.split("#")[0]} requires ${missing.join(", ")}, which was not looked up: ${unreachable.join("; ")}. Check the URL with \`skaile catalog test\`; a library or source can still hold the requirement \u2014 nothing was added`
3152
+ );
3153
+ }
3000
3154
  throw new Error(
3001
3155
  `${ref.split("#")[0]} requires ${missing.join(", ")} (not found \u2014 ${REGISTER_HOLDER}, or remove the requirement from the asset's manifest) \u2014 nothing was added`
3002
3156
  );
@@ -3035,7 +3189,7 @@ var AssetManager = class {
3035
3189
  if (opts?.onLibraryMoved) {
3036
3190
  for (const m of libraryMoves(prevLock, libraryLock)) opts.onLibraryMoved(m);
3037
3191
  }
3038
- writeLock(this.lockPath, mergeLockFile(prevLock, fresh));
3192
+ writeLock(this.lockPath, mergeLockFile(prevLock, this.withRenderedAgents(fresh)));
3039
3193
  }
3040
3194
  for (const d of deployed) {
3041
3195
  appendHistory(this.projectDir, {
@@ -3548,7 +3702,13 @@ var AssetManager = class {
3548
3702
  for (const [name, decl] of Object.entries(repositories)) {
3549
3703
  const repoDir = this.resolveRepoDir(decl, name);
3550
3704
  if (!repoDir) continue;
3551
- all = [...all, ...await scanRepo(repoDir, name, { knownKinds: this.knownKinds })];
3705
+ all = [
3706
+ ...all,
3707
+ ...await scanRepo(repoDir, name, {
3708
+ knownKinds: this.knownKinds,
3709
+ declaredPublisher: decl.publisher
3710
+ })
3711
+ ];
3552
3712
  }
3553
3713
  if (kind) all = all.filter((e) => e.kind === kind);
3554
3714
  if (query) {
@@ -3593,7 +3753,10 @@ var AssetManager = class {
3593
3753
  for (const [name, decl] of Object.entries(repositories)) {
3594
3754
  const repoDir = this.resolveRepoDir(decl, name);
3595
3755
  if (!repoDir) continue;
3596
- const entries = await scanRepo(repoDir, name, { knownKinds: this.knownKinds });
3756
+ const entries = await scanRepo(repoDir, name, {
3757
+ knownKinds: this.knownKinds,
3758
+ declaredPublisher: decl.publisher
3759
+ });
3597
3760
  const match = entries.find(
3598
3761
  (e) => e.kind === parsed.kind && e.name === parsed.name && (!parsed.publisher || e.publisher === parsed.publisher)
3599
3762
  );
@@ -4398,8 +4561,14 @@ var AssetManager = class {
4398
4561
  stores,
4399
4562
  declaredRefs: dependencies
4400
4563
  });
4564
+ this.assertSourceCommitsPublished(resolved, repositories);
4401
4565
  const libraryLock = await this.libraryLockEntries(lib);
4402
4566
  const lockData = buildLockFile(resolved, overridesApplied, libraryLock);
4567
+ const prior = this.tryReadLock();
4568
+ for (const [key, entry] of Object.entries(lockData.assets)) {
4569
+ const rendered = prior?.assets[key]?.rendered;
4570
+ if (rendered) entry.rendered = rendered;
4571
+ }
4403
4572
  writeLock(this.lockPath, lockData);
4404
4573
  return lockData;
4405
4574
  }
@@ -4643,7 +4812,19 @@ var AssetManager = class {
4643
4812
  }
4644
4813
  const asset = lockIdentity(i.assetKind, i.assetName);
4645
4814
  const dep = `${i.depKind}:${i.depName}`;
4646
- if (i.inRepos) {
4815
+ const depId = /^@([^/]+)\/(.+)$/.exec(i.depName);
4816
+ const lockedOnly = lockedIds.some(
4817
+ (id) => id.kind === i.depKind && id.name === (depId ? depId[2] : i.depName) && (!depId || id.publisher === depId[1])
4818
+ );
4819
+ if (lockedOnly) {
4820
+ gaps.push({
4821
+ type: "requires",
4822
+ ref: dep,
4823
+ asset,
4824
+ reason: `is required by ${asset} but locked and not deployed (run skaile install --locked)`,
4825
+ message: `${asset} requires ${dep} (run skaile install --locked)`
4826
+ });
4827
+ } else if (i.inRepos) {
4647
4828
  gaps.push({
4648
4829
  type: "requires",
4649
4830
  ref: dep,
@@ -4916,26 +5097,53 @@ var AssetManager = class {
4916
5097
  return gaps;
4917
5098
  }
4918
5099
  /**
4919
- * Remove the files a deploy never writes (`.env`, `.venv/`, `.pytest_cache/`, ...) from the
4920
- * deployed folders of re-locked assets, as {@link RestoredAsset} rows. The lock covers what
4921
- * the exclusion list leaves; the extras an older release copied are the owner's to drop, and
4922
- * this is the one point where they are: the lock was just rewritten.
4923
- *
4924
- * @param refs - Lock keys the install re-locked (hash or commit changed).
5100
+ * Record, on every agent entry of `lock` that has none, the files the agent's harness
5101
+ * rendering occupies and their sha256. Call it after the deploy, so the bytes hashed are the
5102
+ * ones `install` just wrote; {@link lockedCopyDrift} compares later edits with them.
5103
+ * Entries that carry a record (kept from an earlier lock) are left as they are.
4925
5104
  */
4926
- removeExcludedLeftovers(refs) {
4927
- const out = [];
4928
- for (const key of refs) {
5105
+ withRenderedAgents(lock) {
5106
+ if (this.global) return lock;
5107
+ for (const [key, entry] of Object.entries(lock.assets)) {
5108
+ if (entry.rendered || entry.library?.installed) continue;
4929
5109
  const { kind, name } = parseCanonicalLockKey(key);
4930
- const component = kind ? this.installTarget(kind) : void 0;
4931
- if (!kind || !name || !component || component === "agent") continue;
4932
- const dest = deployedDir(component, name, this.driverTarget, this.global, this.projectDir);
4933
- const removed = removeExcludedLeftovers(dest);
4934
- if (removed.length === 0) continue;
4935
- const dir = relative(this.projectDir, dest).split(sep).join("/");
4936
- out.push({ ref: key, restored: [], removed: removed.map((f) => `${dir}/${f}`) });
5110
+ if (!kind || !name || this.installTarget(kind) !== "agent") continue;
5111
+ const rendered = this.renderedAgentFiles(name);
5112
+ if (rendered.length > 0) entry.rendered = rendered;
4937
5113
  }
4938
- return out;
5114
+ return lock;
5115
+ }
5116
+ /** The files of one agent's rendering for the active harness, project-relative, with sha256. */
5117
+ renderedAgentFiles(name) {
5118
+ const out = [];
5119
+ const walk = (path2) => {
5120
+ let stat;
5121
+ try {
5122
+ stat = lstatSync(path2);
5123
+ } catch {
5124
+ return;
5125
+ }
5126
+ if (stat.isSymbolicLink()) return;
5127
+ if (stat.isDirectory()) {
5128
+ for (const child of readdirSync(path2).sort()) walk(join(path2, child));
5129
+ } else if (stat.isFile()) {
5130
+ out.push({
5131
+ path: relative(this.projectDir, path2).split(sep).join("/"),
5132
+ sha256: computeHash(path2)
5133
+ });
5134
+ }
5135
+ };
5136
+ for (const path2 of deployedPaths("agent", name, this.driverTarget, false, this.projectDir)) {
5137
+ walk(path2);
5138
+ }
5139
+ walk(
5140
+ join(
5141
+ dirname(deployedBase("agent", this.driverTarget, false, this.projectDir)),
5142
+ CODEX_IDENTITY_DIR,
5143
+ `${name}.md`
5144
+ )
5145
+ );
5146
+ return out.sort((a, b) => a.path.localeCompare(b.path));
4939
5147
  }
4940
5148
  /**
4941
5149
  * The {@link RestoredAsset} rows for the drifted copies (see {@link lockedCopyDrift}) a
@@ -4946,6 +5154,10 @@ var AssetManager = class {
4946
5154
  const out = [];
4947
5155
  for (const d of drifts) {
4948
5156
  if (!rewritten.has(d.ref)) continue;
5157
+ if (d.rendered) {
5158
+ out.push({ ref: d.key, restored: [...d.modified], removed: [] });
5159
+ continue;
5160
+ }
4949
5161
  const { kind, name } = parseCanonicalLockKey(d.key);
4950
5162
  const component = kind ? this.installTarget(kind) : void 0;
4951
5163
  if (!kind || !name || !component) continue;
@@ -4973,8 +5185,10 @@ var AssetManager = class {
4973
5185
  * - A source asset is compared with the per-file hashes the lock records (modified files only:
4974
5186
  * the lock lists what the source covers, not what the deploy copies).
4975
5187
  *
4976
- * An agent (rendered, not copied), a `--link` deploy, an asset with a configured patch, and a
4977
- * copy that is missing are not compared: other gaps cover them. Project mode only.
5188
+ * A `--link` deploy, an asset with a configured patch, and a copy that is missing are not
5189
+ * compared: other gaps cover them. An agent (rendered, not copied) is compared with the
5190
+ * hashes of its rendered files the lock records (`LockEntry.rendered`); its `modified` paths
5191
+ * are project-relative. Project mode only.
4978
5192
  */
4979
5193
  async lockedCopyDrift() {
4980
5194
  if (this.global) return [];
@@ -5028,6 +5242,24 @@ var AssetManager = class {
5028
5242
  if (modified.length > 0)
5029
5243
  out.push({ ref: refOf(key), key, modified, extra: [], library: false });
5030
5244
  }
5245
+ for (const [key, entry] of Object.entries(lock.assets)) {
5246
+ if (!entry.rendered || entry.rendered.length === 0 || entry.library?.installed) continue;
5247
+ const { kind, name } = parseCanonicalLockKey(key);
5248
+ if (!kind || !name || this.installTarget(kind) !== "agent") continue;
5249
+ if (patches[`${kind}:${name}`]) continue;
5250
+ const modified = [];
5251
+ for (const f of entry.rendered) {
5252
+ const file = join(this.projectDir, f.path);
5253
+ if (!existsSync(file)) continue;
5254
+ try {
5255
+ if (computeHash(file) !== f.sha256) modified.push(f.path);
5256
+ } catch {
5257
+ modified.push(f.path);
5258
+ }
5259
+ }
5260
+ if (modified.length > 0)
5261
+ out.push({ ref: refOf(key), key, modified, extra: [], library: false, rendered: true });
5262
+ }
5031
5263
  return out;
5032
5264
  }
5033
5265
  /**
@@ -5045,7 +5277,7 @@ var AssetManager = class {
5045
5277
  if (!kind || !name || !component || named.has(`${kind}:${name}`)) continue;
5046
5278
  if (isDeployed(component, name, this.driverTarget, this.global, this.projectDir)) continue;
5047
5279
  const ref = publisher ? `${kind}:@${publisher}/${name}` : `${kind}:${name}`;
5048
- const reason = "is locked but its deployed copy is missing \u2014 run `skaile install`";
5280
+ const reason = "is locked but its deployed copy is missing \u2014 run `skaile install --locked`";
5049
5281
  gaps.push({ type: "drift", ref, reason, message: `${ref} ${reason}` });
5050
5282
  }
5051
5283
  return gaps;
@@ -5096,7 +5328,12 @@ var AssetManager = class {
5096
5328
  manualFix: true
5097
5329
  };
5098
5330
  } else if (await this.declaredRefResolvable(d.ref)) {
5099
- gap = { type: "declared", reason: "is declared but not locked \u2014 run `skaile install`" };
5331
+ const unmet = await this.unmetRequirementOf(d.ref);
5332
+ gap = unmet ? {
5333
+ type: "declared",
5334
+ reason: `requires ${unmet} but no library or source holds it \u2014 ${REGISTER_HOLDER}, or drop ${d.ref.split("#")[0]} with \`skaile remove ${d.ref.split("#")[0]}\``,
5335
+ manualFix: true
5336
+ } : { type: "declared", reason: "is declared but not locked \u2014 run `skaile install`" };
5100
5337
  } else {
5101
5338
  gap = {
5102
5339
  type: "declared",
@@ -5138,6 +5375,38 @@ var AssetManager = class {
5138
5375
  return p !== null && p.kind === want.kind && p.name === want.name && (!want.publisher || !p.publisher || p.publisher === want.publisher);
5139
5376
  });
5140
5377
  }
5378
+ /**
5379
+ * The first requirement, direct or transitive, of the declared `ref` that no local source or
5380
+ * library holds and that nothing in the project already provides — the case `install` ends
5381
+ * with `Missing: … nothing was installed`. `undefined` when every requirement is held, when a
5382
+ * store is declared (it may hold the requirement and a check never goes to the network), or
5383
+ * when `ref` itself resolves to nothing.
5384
+ */
5385
+ async unmetRequirementOf(ref) {
5386
+ if (this.loadConfig().stores.length > 0) return void 0;
5387
+ const lockedIds = Object.keys(this.tryReadLock()?.assets ?? {}).map(parseCanonicalLockKey);
5388
+ const seen = /* @__PURE__ */ new Set();
5389
+ const queue = [ref];
5390
+ for (let cur = queue.shift(); cur !== void 0; cur = queue.shift()) {
5391
+ const id = refIdentity(cur);
5392
+ if (id !== null) {
5393
+ if (seen.has(id)) continue;
5394
+ seen.add(id);
5395
+ }
5396
+ const entry = await this.info(cur);
5397
+ if (!entry) {
5398
+ if (cur === ref) return void 0;
5399
+ const want = parseRefTolerant(cur);
5400
+ const locked = want !== null && lockedIds.some(
5401
+ (l) => l.kind === want.kind && l.name === want.name && (!want.publisher || l.publisher === want.publisher)
5402
+ );
5403
+ if (!locked) return cur;
5404
+ continue;
5405
+ }
5406
+ queue.push(...libraryEntryDepRefs(entry));
5407
+ }
5408
+ return void 0;
5409
+ }
5141
5410
  /**
5142
5411
  * Whether `skaile install` can resolve a declared ref: a source or library holds it, or the
5143
5412
  * project declares a store that may. The global catalog is not asked: a check never goes
@@ -5480,5 +5749,5 @@ var AssetManager = class {
5480
5749
  };
5481
5750
 
5482
5751
  export { AssetManager, FACTORY_SOURCE_URL, MissingManifestError, installAgentInstances, normalizeRepoUrl, parseCanonicalLockKey, parseRefTolerant, renderMcpServerConfig, softDepName };
5483
- //# sourceMappingURL=chunk-TVAR4JHA.js.map
5484
- //# sourceMappingURL=chunk-TVAR4JHA.js.map
5752
+ //# sourceMappingURL=chunk-Y7WKXPWS.js.map
5753
+ //# sourceMappingURL=chunk-Y7WKXPWS.js.map