@skaile/workspaces 5.9.0 → 5.11.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 (316) hide show
  1. package/CHANGELOG.md +145 -0
  2. package/README.md +12 -0
  3. package/dist/{asset-feeds-XMKKUUK6.js → asset-feeds-CXGQIDFR.js} +19 -19
  4. package/dist/{asset-feeds-XMKKUUK6.js.map → asset-feeds-CXGQIDFR.js.map} +1 -1
  5. package/dist/asset-manager/catalog-deployer.js +8 -8
  6. package/dist/asset-manager/index.js +14 -14
  7. package/dist/asset-manager/installer.js +10 -10
  8. package/dist/asset-manager/renderers.js +9 -9
  9. package/dist/asset-manager/src/index.d.ts +400 -35
  10. package/dist/asset-manager/src/index.d.ts.map +1 -1
  11. package/dist/asset-manager/src/install-agent.d.ts +3 -1
  12. package/dist/asset-manager/src/install-agent.d.ts.map +1 -1
  13. package/dist/asset-manager/src/install-instances.d.ts +31 -1
  14. package/dist/asset-manager/src/install-instances.d.ts.map +1 -1
  15. package/dist/asset-manager/src/installer.d.ts +43 -3
  16. package/dist/asset-manager/src/installer.d.ts.map +1 -1
  17. package/dist/asset-manager/src/renderers.d.ts +4 -5
  18. package/dist/asset-manager/src/renderers.d.ts.map +1 -1
  19. package/dist/bridge/drivers/claude-sdk.js +11 -11
  20. package/dist/bridge/drivers/codex.js +11 -11
  21. package/dist/bridge/drivers/continue.js +10 -10
  22. package/dist/bridge/drivers/echo.js +2 -2
  23. package/dist/bridge/drivers/gemini.js +7 -7
  24. package/dist/bridge/drivers/goose.js +10 -10
  25. package/dist/bridge/drivers/omp.js +19 -3
  26. package/dist/bridge/drivers/omp.js.map +1 -1
  27. package/dist/bridge/drivers/opencode.js +10 -10
  28. package/dist/bridge/drivers/qwen.js +7 -7
  29. package/dist/bridge/index.js +12 -12
  30. package/dist/bridge/src/drivers/omp.d.ts.map +1 -1
  31. package/dist/{chunk-4MQS7CAF.js → chunk-2F5AWQX5.js} +437 -175
  32. package/dist/chunk-2F5AWQX5.js.map +1 -0
  33. package/dist/{chunk-UM7RIAHO.js → chunk-3SM2DL2T.js} +8 -8
  34. package/dist/{chunk-UM7RIAHO.js.map → chunk-3SM2DL2T.js.map} +1 -1
  35. package/dist/{chunk-5NNNV76P.js → chunk-47U4GZ4M.js} +2 -2
  36. package/dist/{chunk-5NNNV76P.js.map → chunk-47U4GZ4M.js.map} +1 -1
  37. package/dist/{chunk-TTRYE6AC.js → chunk-4A4OD24G.js} +9 -9
  38. package/dist/{chunk-TTRYE6AC.js.map → chunk-4A4OD24G.js.map} +1 -1
  39. package/dist/{chunk-ZTBAYUDY.js → chunk-6O2X3GPW.js} +2 -2
  40. package/dist/{chunk-ZTBAYUDY.js.map → chunk-6O2X3GPW.js.map} +1 -1
  41. package/dist/{chunk-JAKOMFC6.js → chunk-ALEYHUC5.js} +114 -46
  42. package/dist/chunk-ALEYHUC5.js.map +1 -0
  43. package/dist/{chunk-QVNRCDTV.js → chunk-BNMZVPYA.js} +7 -7
  44. package/dist/chunk-BNMZVPYA.js.map +1 -0
  45. package/dist/{chunk-2FRUUDZY.js → chunk-CAHB6MHA.js} +5 -5
  46. package/dist/{chunk-2FRUUDZY.js.map → chunk-CAHB6MHA.js.map} +1 -1
  47. package/dist/{chunk-GKMZ6THE.js → chunk-CJERAGFY.js} +44 -33
  48. package/dist/chunk-CJERAGFY.js.map +1 -0
  49. package/dist/{chunk-CKQEIY43.js → chunk-COH6FQAG.js} +4 -4
  50. package/dist/{chunk-CKQEIY43.js.map → chunk-COH6FQAG.js.map} +1 -1
  51. package/dist/{chunk-UO7WPLDY.js → chunk-CPWLNZGJ.js} +3 -3
  52. package/dist/{chunk-UO7WPLDY.js.map → chunk-CPWLNZGJ.js.map} +1 -1
  53. package/dist/{chunk-MGGFBZWA.js → chunk-D3B36CYC.js} +4 -3
  54. package/dist/chunk-D3B36CYC.js.map +1 -0
  55. package/dist/{chunk-UMVKJM4Q.js → chunk-DALV4HHP.js} +18 -3
  56. package/dist/chunk-DALV4HHP.js.map +1 -0
  57. package/dist/{chunk-IMKSM5NL.js → chunk-DZMNFCWB.js} +1447 -199
  58. package/dist/chunk-DZMNFCWB.js.map +1 -0
  59. package/dist/{chunk-GB7WDMH2.js → chunk-EDYHEMJA.js} +4 -4
  60. package/dist/{chunk-GB7WDMH2.js.map → chunk-EDYHEMJA.js.map} +1 -1
  61. package/dist/{chunk-YSHVQGUS.js → chunk-FH7W6TJ4.js} +164 -41
  62. package/dist/chunk-FH7W6TJ4.js.map +1 -0
  63. package/dist/{chunk-W5DWWE4Y.js → chunk-G4FFOV3N.js} +4 -4
  64. package/dist/{chunk-W5DWWE4Y.js.map → chunk-G4FFOV3N.js.map} +1 -1
  65. package/dist/{chunk-2LWYNQK7.js → chunk-GCHPUTA3.js} +3 -3
  66. package/dist/{chunk-2LWYNQK7.js.map → chunk-GCHPUTA3.js.map} +1 -1
  67. package/dist/{chunk-JZ5EHBPI.js → chunk-GV4DZ6MT.js} +20 -4
  68. package/dist/chunk-GV4DZ6MT.js.map +1 -0
  69. package/dist/{chunk-S53LOR7B.js → chunk-HCEVNYSH.js} +3 -3
  70. package/dist/{chunk-S53LOR7B.js.map → chunk-HCEVNYSH.js.map} +1 -1
  71. package/dist/{chunk-EF7NPDDU.js → chunk-HZXUXHIV.js} +31 -17
  72. package/dist/chunk-HZXUXHIV.js.map +1 -0
  73. package/dist/{chunk-IR33D6EP.js → chunk-IER3KIPH.js} +5 -5
  74. package/dist/{chunk-IR33D6EP.js.map → chunk-IER3KIPH.js.map} +1 -1
  75. package/dist/{chunk-Y7QA2OLD.js → chunk-J4RBUFGM.js} +22 -20
  76. package/dist/chunk-J4RBUFGM.js.map +1 -0
  77. package/dist/{chunk-J7U3PIOE.js → chunk-M3B6EIJD.js} +4 -4
  78. package/dist/{chunk-J7U3PIOE.js.map → chunk-M3B6EIJD.js.map} +1 -1
  79. package/dist/{chunk-DNZYOKOJ.js → chunk-MZG34MBZ.js} +3 -3
  80. package/dist/{chunk-DNZYOKOJ.js.map → chunk-MZG34MBZ.js.map} +1 -1
  81. package/dist/{chunk-V2DXZYBB.js → chunk-NWDSLXOX.js} +3 -3
  82. package/dist/{chunk-V2DXZYBB.js.map → chunk-NWDSLXOX.js.map} +1 -1
  83. package/dist/{chunk-36AFURKZ.js → chunk-PBBPZYVG.js} +61 -12
  84. package/dist/chunk-PBBPZYVG.js.map +1 -0
  85. package/dist/{chunk-P67WJVP4.js → chunk-PQFHMQHQ.js} +10 -9
  86. package/dist/chunk-PQFHMQHQ.js.map +1 -0
  87. package/dist/{chunk-UAROCOXF.js → chunk-QVFAS5IO.js} +3 -3
  88. package/dist/{chunk-UAROCOXF.js.map → chunk-QVFAS5IO.js.map} +1 -1
  89. package/dist/{chunk-K3CVFRVS.js → chunk-QZNJOHN6.js} +3 -3
  90. package/dist/{chunk-K3CVFRVS.js.map → chunk-QZNJOHN6.js.map} +1 -1
  91. package/dist/{chunk-FVJK4QWM.js → chunk-R7NHYEJF.js} +4 -4
  92. package/dist/{chunk-FVJK4QWM.js.map → chunk-R7NHYEJF.js.map} +1 -1
  93. package/dist/{chunk-GXLQLPE5.js → chunk-RYYLMBA2.js} +5 -5
  94. package/dist/{chunk-GXLQLPE5.js.map → chunk-RYYLMBA2.js.map} +1 -1
  95. package/dist/{chunk-Y4N2NUZD.js → chunk-S3O3GKB7.js} +4 -4
  96. package/dist/{chunk-Y4N2NUZD.js.map → chunk-S3O3GKB7.js.map} +1 -1
  97. package/dist/{chunk-GTILM2CI.js → chunk-SBSA3IQA.js} +43 -12
  98. package/dist/chunk-SBSA3IQA.js.map +1 -0
  99. package/dist/{chunk-4PTSR4UU.js → chunk-T42WRQ4O.js} +3 -3
  100. package/dist/{chunk-4PTSR4UU.js.map → chunk-T42WRQ4O.js.map} +1 -1
  101. package/dist/{chunk-MR5HBOUF.js → chunk-T7CTHHG7.js} +3 -3
  102. package/dist/{chunk-MR5HBOUF.js.map → chunk-T7CTHHG7.js.map} +1 -1
  103. package/dist/{chunk-FZNG4V4J.js → chunk-TCHRMVTO.js} +4 -4
  104. package/dist/{chunk-FZNG4V4J.js.map → chunk-TCHRMVTO.js.map} +1 -1
  105. package/dist/{chunk-LAMCXQGA.js → chunk-VLTQGE2E.js} +75 -25
  106. package/dist/chunk-VLTQGE2E.js.map +1 -0
  107. package/dist/{chunk-7AI3Q5AQ.js → chunk-WSBKB4CJ.js} +71 -24
  108. package/dist/chunk-WSBKB4CJ.js.map +1 -0
  109. package/dist/{chunk-CGT45WN7.js → chunk-X77SUM4P.js} +3 -3
  110. package/dist/{chunk-CGT45WN7.js.map → chunk-X77SUM4P.js.map} +1 -1
  111. package/dist/{chunk-SCOT677Q.js → chunk-XDKH7XSA.js} +5 -5
  112. package/dist/{chunk-SCOT677Q.js.map → chunk-XDKH7XSA.js.map} +1 -1
  113. package/dist/{chunk-QVEKLSEH.js → chunk-XUSALIEI.js} +6 -6
  114. package/dist/{chunk-QVEKLSEH.js.map → chunk-XUSALIEI.js.map} +1 -1
  115. package/dist/{chunk-FYXZRVID.js → chunk-Y3HTGHJC.js} +3 -3
  116. package/dist/{chunk-FYXZRVID.js.map → chunk-Y3HTGHJC.js.map} +1 -1
  117. package/dist/chunk-YOH2L76X.js +505 -0
  118. package/dist/chunk-YOH2L76X.js.map +1 -0
  119. package/dist/{chunk-B6GIW55K.js → chunk-ZCAJZ4B2.js} +7 -4
  120. package/dist/chunk-ZCAJZ4B2.js.map +1 -0
  121. package/dist/{chunk-BTE2V4IW.js → chunk-ZPWTOUTK.js} +76 -7
  122. package/dist/{chunk-BTE2V4IW.js.map → chunk-ZPWTOUTK.js.map} +1 -1
  123. package/dist/cli/index.js +1034 -794
  124. package/dist/cli/index.js.map +1 -1
  125. package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
  126. package/dist/cli/src/commands/catalog.d.ts +8 -5
  127. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  128. package/dist/cli/src/commands/diff.d.ts +4 -2
  129. package/dist/cli/src/commands/diff.d.ts.map +1 -1
  130. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  131. package/dist/cli/src/commands/library-index.d.ts +34 -2
  132. package/dist/cli/src/commands/library-index.d.ts.map +1 -1
  133. package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
  134. package/dist/cli/src/commands/manage.d.ts +12 -5
  135. package/dist/cli/src/commands/manage.d.ts.map +1 -1
  136. package/dist/cli/src/commands/migrate-assets.d.ts.map +1 -1
  137. package/dist/cli/src/commands/outdated.d.ts +7 -5
  138. package/dist/cli/src/commands/outdated.d.ts.map +1 -1
  139. package/dist/cli/src/commands/project.d.ts +13 -8
  140. package/dist/cli/src/commands/project.d.ts.map +1 -1
  141. package/dist/cli/src/commands/run.d.ts.map +1 -1
  142. package/dist/cli/src/commands/source.d.ts +30 -1
  143. package/dist/cli/src/commands/source.d.ts.map +1 -1
  144. package/dist/cli/src/commands/update.d.ts.map +1 -1
  145. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  146. package/dist/cli/src/commands/why.d.ts +1 -0
  147. package/dist/cli/src/commands/why.d.ts.map +1 -1
  148. package/dist/cli/src/helpers.d.ts +12 -0
  149. package/dist/cli/src/helpers.d.ts.map +1 -1
  150. package/dist/cli/src/skill-checks.d.ts +57 -4
  151. package/dist/cli/src/skill-checks.d.ts.map +1 -1
  152. package/dist/connectors/config.js +5 -5
  153. package/dist/connectors/index.js +16 -16
  154. package/dist/{connectors-C7UQ73BK.js → connectors-4QWAKPHB.js} +19 -19
  155. package/dist/{connectors-C7UQ73BK.js.map → connectors-4QWAKPHB.js.map} +1 -1
  156. package/dist/core/index.js +7 -7
  157. package/dist/core/logging.js +1 -1
  158. package/dist/core/manifest.js +2 -2
  159. package/dist/core/models.js +1 -1
  160. package/dist/core/publish-manifest.js +2 -2
  161. package/dist/core/ref.js +1 -1
  162. package/dist/core/runtime-assets.js +5 -5
  163. package/dist/core/src/index.d.ts +2 -1
  164. package/dist/core/src/index.d.ts.map +1 -1
  165. package/dist/core/src/lock.d.ts +6 -2
  166. package/dist/core/src/lock.d.ts.map +1 -1
  167. package/dist/core/src/logging/sinks/sqlite-runtime.d.ts.map +1 -1
  168. package/dist/core/src/manifest.d.ts.map +1 -1
  169. package/dist/core/src/models.d.ts +22 -6
  170. package/dist/core/src/models.d.ts.map +1 -1
  171. package/dist/core/src/publish-manifest.d.ts +29 -3
  172. package/dist/core/src/publish-manifest.d.ts.map +1 -1
  173. package/dist/core/src/repo-manager.d.ts.map +1 -1
  174. package/dist/core/src/requirements.d.ts +26 -0
  175. package/dist/core/src/requirements.d.ts.map +1 -0
  176. package/dist/core/src/walker.d.ts.map +1 -1
  177. package/dist/core/src/workspace-config.d.ts +22 -1
  178. package/dist/core/src/workspace-config.d.ts.map +1 -1
  179. package/dist/core/src/workspace-yaml-editor.d.ts +4 -1
  180. package/dist/core/src/workspace-yaml-editor.d.ts.map +1 -1
  181. package/dist/core/workspace-config.js +4 -4
  182. package/dist/deploy/index.js +7 -7
  183. package/dist/discovery/index.js +5 -5
  184. package/dist/discovery/src/builtin-providers.d.ts.map +1 -1
  185. package/dist/discovery/src/discover-manifest.d.ts.map +1 -1
  186. package/dist/discovery/src/discover.d.ts.map +1 -1
  187. package/dist/discovery/src/source-config.d.ts.map +1 -1
  188. package/dist/discovery/src/tree-entries.d.ts.map +1 -1
  189. package/dist/{ensure-sources-SRC2DVR5.js → ensure-sources-2RONZKCU.js} +17 -17
  190. package/dist/{ensure-sources-SRC2DVR5.js.map → ensure-sources-2RONZKCU.js.map} +1 -1
  191. package/dist/factory-assets/connectors/box.js +16 -16
  192. package/dist/factory-assets/connectors/deploy.js +16 -16
  193. package/dist/factory-assets/connectors/devserver.js +16 -16
  194. package/dist/factory-assets/connectors/flow/adapter.js +16 -16
  195. package/dist/factory-assets/connectors/flow/contract/normalize.d.ts.map +1 -1
  196. package/dist/factory-assets/connectors/flow/contract.js +1 -1
  197. package/dist/factory-assets/connectors/flow/engine.js +9 -9
  198. package/dist/factory-assets/connectors/flow/run-flow.js +18 -18
  199. package/dist/factory-assets/connectors/flow.js +16 -16
  200. package/dist/factory-assets/connectors/git.js +16 -16
  201. package/dist/factory-assets/connectors/gmail.js +16 -16
  202. package/dist/factory-assets/connectors/googledrive.js +16 -16
  203. package/dist/factory-assets/connectors/local.js +16 -16
  204. package/dist/factory-assets/connectors/mattermost.js +16 -16
  205. package/dist/factory-assets/connectors/memory.js +16 -16
  206. package/dist/factory-assets/connectors/minio.js +16 -16
  207. package/dist/factory-assets/connectors/postgres.js +16 -16
  208. package/dist/factory-assets/connectors/s3.js +16 -16
  209. package/dist/factory-assets/connectors/sharepoint.js +16 -16
  210. package/dist/factory-assets/connectors/sqlite.js +16 -16
  211. package/dist/factory-assets/connectors/static-server.js +16 -16
  212. package/dist/factory-assets/connectors/tunnel.js +16 -16
  213. package/dist/factory-assets/connectors/webdav.js +16 -16
  214. package/dist/factory-assets/connectors/xstate-store.js +16 -16
  215. package/dist/factory-assets/connectors/xstate.js +16 -16
  216. package/dist/factory-assets/skills/authoring-skaile-manifests/SKILL.md +9 -3
  217. package/dist/factory-assets/skills/authoring-skaile-manifests/references/dependency-standard.md +4 -2
  218. package/dist/{flows-CBYRSAGS.js → flows-EQF2CH4U.js} +12 -12
  219. package/dist/{flows-CBYRSAGS.js.map → flows-EQF2CH4U.js.map} +1 -1
  220. package/dist/{helpers-XAEKCZKT.js → helpers-CFK6YP6R.js} +17 -17
  221. package/dist/{helpers-XAEKCZKT.js.map → helpers-CFK6YP6R.js.map} +1 -1
  222. package/dist/library/index.js +11 -11
  223. package/dist/library/install.js +3 -3
  224. package/dist/library/src/index.d.ts +2 -1
  225. package/dist/library/src/index.d.ts.map +1 -1
  226. package/dist/library/src/local/library-dir.d.ts +68 -0
  227. package/dist/library/src/local/library-dir.d.ts.map +1 -0
  228. package/dist/library/src/local/library-manager.d.ts +10 -1
  229. package/dist/library/src/local/library-manager.d.ts.map +1 -1
  230. package/dist/library/src/local/library.d.ts +2 -2
  231. package/dist/library/src/local/library.d.ts.map +1 -1
  232. package/dist/library/src/local/local-catalog-source.d.ts +9 -0
  233. package/dist/library/src/local/local-catalog-source.d.ts.map +1 -1
  234. package/dist/library/src/manifest-writer.d.ts +55 -4
  235. package/dist/library/src/manifest-writer.d.ts.map +1 -1
  236. package/dist/library/src/remote/cache.d.ts +18 -1
  237. package/dist/library/src/remote/cache.d.ts.map +1 -1
  238. package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
  239. package/dist/library/src/remote/rest-catalog-source.d.ts.map +1 -1
  240. package/dist/library/src/sync/git-driver.d.ts +7 -6
  241. package/dist/library/src/sync/git-driver.d.ts.map +1 -1
  242. package/dist/{library-publish-VJSWMOLH.js → library-publish-53UTB3MB.js} +151 -42
  243. package/dist/library-publish-53UTB3MB.js.map +1 -0
  244. package/dist/open-library-BOSPJVID.js +40 -0
  245. package/dist/{open-library-DB2PNL2X.js.map → open-library-BOSPJVID.js.map} +1 -1
  246. package/dist/open-registry-4FI7HKET.js +32 -0
  247. package/dist/{open-registry-ZUZJ7MS7.js.map → open-registry-4FI7HKET.js.map} +1 -1
  248. package/dist/paths-SUS4S4YT.js +22 -0
  249. package/dist/{paths-FQ64OLJG.js.map → paths-SUS4S4YT.js.map} +1 -1
  250. package/dist/{plugin-store-MPAMD5OT.js → plugin-store-AGQDMING.js} +9 -9
  251. package/dist/{plugin-store-MPAMD5OT.js.map → plugin-store-AGQDMING.js.map} +1 -1
  252. package/dist/project-I55A4O2T.js +41 -0
  253. package/dist/{project-I6NX3NFB.js.map → project-I55A4O2T.js.map} +1 -1
  254. package/dist/resolver/index.js +8 -8
  255. package/dist/runner/index.js +30 -30
  256. package/dist/runner/src/agent.d.ts.map +1 -1
  257. package/dist/runner/src/serve.d.ts.map +1 -1
  258. package/dist/runner/src/usage-limit-turn-hold.d.ts +51 -0
  259. package/dist/runner/src/usage-limit-turn-hold.d.ts.map +1 -0
  260. package/dist/sdk/asset-manager.js +14 -14
  261. package/dist/sdk/bridge.js +12 -12
  262. package/dist/sdk/core.js +7 -7
  263. package/dist/sdk/flow.js +9 -9
  264. package/dist/sdk/index.js +30 -30
  265. package/dist/sdk/resolver.js +8 -8
  266. package/dist/sdk/runner.js +30 -30
  267. package/dist/{setup-B7JUHYJW.js → setup-7DQJKHUI.js} +22 -22
  268. package/dist/{setup-B7JUHYJW.js.map → setup-7DQJKHUI.js.map} +1 -1
  269. package/dist/{skills-TVO26Y4V.js → skills-NUEN5NDX.js} +13 -13
  270. package/dist/{skills-TVO26Y4V.js.map → skills-NUEN5NDX.js.map} +1 -1
  271. package/dist/source-G2LV5LVD.js +41 -0
  272. package/dist/{source-PJBMDCKX.js.map → source-G2LV5LVD.js.map} +1 -1
  273. package/dist/{source-manifest-publish-LLJWXGID.js → source-manifest-publish-6RM7SWLZ.js} +24 -24
  274. package/dist/{source-manifest-publish-LLJWXGID.js.map → source-manifest-publish-6RM7SWLZ.js.map} +1 -1
  275. package/dist/tui/index.js +61 -41
  276. package/dist/tui/index.js.map +1 -1
  277. package/dist/tui/src/repl.d.ts.map +1 -1
  278. package/dist/types/manifests.js +1 -1
  279. package/dist/types/src/manifests/agent.d.ts +2 -0
  280. package/dist/types/src/manifests/agent.d.ts.map +1 -1
  281. package/dist/types/src/manifests/contract.d.ts +2 -0
  282. package/dist/types/src/manifests/contract.d.ts.map +1 -1
  283. package/dist/types/src/manifests/index.d.ts +3 -3
  284. package/dist/types/src/manifests/index.d.ts.map +1 -1
  285. package/dist/types/src/manifests/preset.d.ts +1 -1
  286. package/dist/types/src/manifests/prompt.d.ts +2 -0
  287. package/dist/types/src/manifests/prompt.d.ts.map +1 -1
  288. package/dist/workspace-plugin/adapters/mcp.js +23 -23
  289. package/dist/workspace-plugin/adapters/omp.js +14 -14
  290. package/dist/workspace-plugin/index.js +2 -2
  291. package/package.json +1 -1
  292. package/dist/chunk-36AFURKZ.js.map +0 -1
  293. package/dist/chunk-4MQS7CAF.js.map +0 -1
  294. package/dist/chunk-7AI3Q5AQ.js.map +0 -1
  295. package/dist/chunk-B6GIW55K.js.map +0 -1
  296. package/dist/chunk-EF7NPDDU.js.map +0 -1
  297. package/dist/chunk-GKMZ6THE.js.map +0 -1
  298. package/dist/chunk-GTILM2CI.js.map +0 -1
  299. package/dist/chunk-IMKSM5NL.js.map +0 -1
  300. package/dist/chunk-JAKOMFC6.js.map +0 -1
  301. package/dist/chunk-JZ5EHBPI.js.map +0 -1
  302. package/dist/chunk-LAMCXQGA.js.map +0 -1
  303. package/dist/chunk-MGGFBZWA.js.map +0 -1
  304. package/dist/chunk-P67WJVP4.js.map +0 -1
  305. package/dist/chunk-QVNRCDTV.js.map +0 -1
  306. package/dist/chunk-UMVKJM4Q.js.map +0 -1
  307. package/dist/chunk-Y7QA2OLD.js.map +0 -1
  308. package/dist/chunk-YSHVQGUS.js.map +0 -1
  309. package/dist/chunk-ZAOGFXDO.js +0 -112
  310. package/dist/chunk-ZAOGFXDO.js.map +0 -1
  311. package/dist/library-publish-VJSWMOLH.js.map +0 -1
  312. package/dist/open-library-DB2PNL2X.js +0 -40
  313. package/dist/open-registry-ZUZJ7MS7.js +0 -32
  314. package/dist/paths-FQ64OLJG.js +0 -22
  315. package/dist/project-I6NX3NFB.js +0 -41
  316. package/dist/source-PJBMDCKX.js +0 -41
@@ -32,6 +32,17 @@ export interface LibraryHolder {
32
32
  /** `true` for the holder `add <ref>` deploys. */
33
33
  picked: boolean;
34
34
  }
35
+ /**
36
+ * One origin that holds a ref, see {@link AssetManager.refOrigins}: the bundled factory
37
+ * source, a project source clone, or a registered library.
38
+ */
39
+ export interface RefOrigin {
40
+ kind: "factory" | "source" | "library";
41
+ /** `factory`, the source's short name, or the library name. */
42
+ label: string;
43
+ version: string;
44
+ description: string;
45
+ }
35
46
  /**
36
47
  * Parse a canonical lock key (`<kind>:@<publisher>/<name>#<version>`) into its
37
48
  * parts. The lock key is a canonical asset ref, so this delegates to the one ref
@@ -68,6 +79,15 @@ export declare function softDepName(ref: string): string;
68
79
  * @internal Exported for unit tests; not part of the stable public surface.
69
80
  */
70
81
  export declare function parseRefTolerant(ref: string): AssetRef | null;
82
+ /** A locked asset that now resolves from another library than its lock entry named. */
83
+ export interface LibraryMove {
84
+ /** `kind:@publisher/name` (no version). */
85
+ ref: string;
86
+ /** Library name the lock entry recorded. */
87
+ from: string;
88
+ /** Library name the asset resolved from now. */
89
+ to: string;
90
+ }
71
91
  /**
72
92
  * Reconciliation state of a declared dependency relative to the lock + disk.
73
93
  * `invalid` flags a `dependencies:` entry that isn't a parseable canonical ref —
@@ -193,6 +213,22 @@ export interface RepoStatusInfo {
193
213
  /** Error message when status check failed. */
194
214
  error?: string;
195
215
  }
216
+ /** One deployed copy `install` made equal to its locked bytes again. */
217
+ export interface RestoredAsset {
218
+ /** Canonical ref of the asset. */
219
+ ref: string;
220
+ /** Deployed files whose hand edit was overwritten (project-relative POSIX paths). */
221
+ restored: string[];
222
+ /** Files the asset does not ship that were deleted from its deployed directory. */
223
+ removed: string[];
224
+ }
225
+ /** One asset `install` moved from one locked version to another. */
226
+ export interface ReplacedAsset {
227
+ /** `kind:@publisher/name`, no version. */
228
+ ref: string;
229
+ from: string;
230
+ to: string;
231
+ }
196
232
  /**
197
233
  * Result of a full `skaile install` or `skaile add` run.
198
234
  *
@@ -208,9 +244,9 @@ export interface InstallResult {
208
244
  * non-locked path every entry is a bare ref; the reason a miss happened lives in
209
245
  * {@link InstallResult.missingHints}. The `--locked` path still appends its prose
210
246
  * (`ref (not found in library "x")`) to the entry, and also lists every
211
- * {@link AssetManager.lockGaps} gap (a declared dependency or a locked asset's
212
- * `requires` with no lock entry, a lock that contradicts a `skaile.yaml` pin) as its
213
- * one-line message.
247
+ * {@link AssetManager.projectState} gap (a declared dependency or a locked asset's
248
+ * `requires` with no lock entry, a lock that contradicts a `skaile.yaml` pin, a library
249
+ * that cannot supply a locked asset) as its one-line message.
214
250
  */
215
251
  missing: string[];
216
252
  /**
@@ -228,6 +264,24 @@ export interface InstallResult {
228
264
  * content. A re-lock can happen with nothing to deploy. Absent when none changed.
229
265
  */
230
266
  relocked?: string[];
267
+ /**
268
+ * Library-origin assets whose lock entry now names another library than before. `install`
269
+ * keeps a locked asset on its library; only `update`, a pin, or a locked library that no
270
+ * longer holds the asset moves it. Absent when none moved.
271
+ */
272
+ moved?: LibraryMove[];
273
+ /**
274
+ * Assets whose locked version `install` replaced with another version of the same asset
275
+ * (`ref` is `kind:@publisher/name`). Not part of {@link InstallResult.removed}: nothing
276
+ * left the project. Absent when none changed.
277
+ */
278
+ replaced?: ReplacedAsset[];
279
+ /**
280
+ * Deployed copies `install` made equal to their locked bytes again: a file edited by hand
281
+ * (`restored`) or an extra file in the asset directory (`removed`), both as project-relative
282
+ * POSIX paths. Absent when every deployed copy already matched.
283
+ */
284
+ restored?: RestoredAsset[];
231
285
  /** Whether `skaile.lock.yaml` was written or updated. */
232
286
  lockWritten: boolean;
233
287
  /**
@@ -259,6 +313,11 @@ export interface InstallResult {
259
313
  * `skaile.yaml` (only files an earlier `skaile install` rendered are ever removed).
260
314
  */
261
315
  agentFilesRemoved?: string[];
316
+ /**
317
+ * Agent instances of `skaile.yaml` whose `ref` resolves to no agent (never added, or gone):
318
+ * one message each. Their earlier rendering is kept. `skaile install` fails on a non-empty list.
319
+ */
320
+ agentInstanceErrors?: string[];
262
321
  }
263
322
  /**
264
323
  * An installed asset whose source repository is behind the remote.
@@ -283,7 +342,7 @@ export interface OutdatedEntry {
283
342
  /**
284
343
  * Set when the locked asset cannot be checked or is not in place: its library is
285
344
  * not registered (renamed or removed), its deployed copy is gone, or the lock does not
286
- * cover it ({@link AssetManager.lockGaps}). Such a row has no `latestVersion`.
345
+ * cover it ({@link AssetManager.projectState}). Such a row has no `latestVersion`.
287
346
  */
288
347
  problem?: string;
289
348
  /**
@@ -307,6 +366,8 @@ export interface OutdatedEntry {
307
366
  * - `not-deployed` — the asset resolves, but there is no deployed copy to compare.
308
367
  * - `identical` — the deployed copy matches the source.
309
368
  * - `differs` — the deployed copy differs; `diff` carries the unified diff.
369
+ * - `no-files` — the asset kind has no files of its own (a preset: its items are the assets to
370
+ * compare) and the lock records it.
310
371
  *
311
372
  * @docLink packages/asset-manager/concepts#asset-manager
312
373
  */
@@ -316,6 +377,8 @@ export type DiffResult = {
316
377
  status: "not-deployed";
317
378
  } | {
318
379
  status: "identical";
380
+ } | {
381
+ status: "no-files";
319
382
  } | {
320
383
  status: "differs";
321
384
  diff: string;
@@ -337,6 +400,14 @@ export interface RemoveResult {
337
400
  changed: boolean;
338
401
  /** Canonical refs (`kind:@publisher/name`) of the orphaned dependencies dropped as well. */
339
402
  pruned: string[];
403
+ /**
404
+ * Set when the removal was refused because other assets still require it; nothing was
405
+ * removed. `ref` is the asset (`kind:@publisher/name`), `requiredBy` the refs requiring it.
406
+ */
407
+ blocked?: {
408
+ ref: string;
409
+ requiredBy: string[];
410
+ };
340
411
  }
341
412
  /**
342
413
  * A missing dependency detected by `AssetManager.doctor()`.
@@ -367,21 +438,35 @@ export interface DepIssue {
367
438
  fix?: string;
368
439
  }
369
440
  /**
370
- * One way the lock fails to cover or match the project; see {@link AssetManager.lockGaps}.
441
+ * One way the project differs from what it declares and locks; see {@link AssetManager.projectState}.
371
442
  *
372
443
  * @docLink packages/asset-manager/concepts#asset-manager
373
444
  */
374
445
  export interface LockGap {
375
- type: "declared" | "invalid" | "drift" | "pin" | "requires" | "unresolved";
376
- /** The ref to act on: the declared ref, the unmet dependency `kind:name`, or the unresolvable asset. */
446
+ type: "declared" | "invalid" | "drift" | "pin" | "requires" | "unresolved" | "library" | "incomplete" | "content" | "modified" | "agent";
447
+ /** The ref to act on: the declared ref, the unmet dependency `kind:name`, or the asset itself. */
377
448
  ref: string;
378
- /** What is wrong, as a phrase that follows `ref` (e.g. `is declared but does not resolve — run …`). */
449
+ /** Set on a `requires` gap: the requiring asset, `kind:@publisher/name` (`kind:name` when the lock knows no publisher). */
450
+ asset?: string;
451
+ /** What is wrong, as a phrase that follows `ref` (e.g. `is declared but not locked — run …`). */
379
452
  reason: string;
380
453
  /** One line naming the gap, without a leading status mark: `${ref} ${reason}`, except a `requires` gap, which leads with the requiring asset. */
381
454
  message: string;
382
455
  /** Set when `skaile install` cannot fix the gap; `reason` then names what to change instead. */
383
456
  manualFix?: true;
384
457
  }
458
+ /**
459
+ * The project's state as {@link AssetManager.projectState} computes it: the one verdict
460
+ * `check`, `doctor`, `outdated`, `diff` and `install --locked` share.
461
+ *
462
+ * @docLink packages/asset-manager/concepts#asset-manager
463
+ */
464
+ export interface ProjectState {
465
+ /** Every problem, one {@link LockGap} each; empty when the project is as declared and locked. */
466
+ gaps: LockGap[];
467
+ /** What {@link AssetManager.doctor} found: the unmet requirements (a `doctor` table row each) and the locked assets nothing provides. */
468
+ requirements: DepIssue[];
469
+ }
385
470
  /**
386
471
  * A single deployed asset shown in the workspace overview.
387
472
  *
@@ -481,8 +566,9 @@ export interface AssetManagerOptions {
481
566
  */
482
567
  indexPath?: string;
483
568
  /**
484
- * Receives the warning printed when one ref is held by several local
485
- * libraries (which library was chosen and why). Defaults to `console.warn`
569
+ * Receives the warning printed when {@link AssetManager.add} picks one ref out of several
570
+ * local libraries (which library was chosen and why); no other method warns. Defaults to
571
+ * `console.warn`
486
572
  * with a `skaile:` prefix. A CLI with a live spinner passes a collector and
487
573
  * prints the lines after the spinner stops, so frames can't overwrite them.
488
574
  */
@@ -596,8 +682,8 @@ export declare class AssetManager {
596
682
  * Render every agent instance of `skaile.yaml` into the driver target's native
597
683
  * agent files (`.claude/agents/<id>.md`, …) and prune the renderings of
598
684
  * instances that left the config. Runs after the skills deploy, so composed
599
- * skills resolve. Project scope only. Never fails an install — a render error
600
- * is warned and swallowed.
685
+ * skills resolve. Project scope only. An instance whose `ref` resolves to no agent is
686
+ * reported in `agentInstanceErrors`; any other render error is warned and swallowed.
601
687
  */
602
688
  private renderAgentInstances;
603
689
  private loadConfig;
@@ -625,6 +711,11 @@ export declare class AssetManager {
625
711
  *
626
712
  * @param opts.quiet - Skip the cross-library collision warning (a lookup that only
627
713
  * builds an error hint must not warn).
714
+ * @param opts.library - Resolve only from this library (the one a lock entry names), not
715
+ * from every registered one. Never warns: no choice is made between libraries.
716
+ * @param opts.lockedLibraries - `kind:publisher/name` → the library its lock entry names
717
+ * ({@link AssetManager.lockedLibraryNames}). A ref listed here resolves from that library
718
+ * when it holds a match, whatever the default library is.
628
719
  * @returns the matched deploy entries, the set of `missing` refs covered, and
629
720
  * each entry's originating library name.
630
721
  */
@@ -647,10 +738,47 @@ export declare class AssetManager {
647
738
  * @returns `kind:@publisher/name` → holders; refs held by one library are absent.
648
739
  */
649
740
  libraryHolders(): Promise<Map<string, LibraryHolder[]>>;
741
+ /**
742
+ * Every asset a registered library holds, read from the library directories themselves
743
+ * (not the local index, which keeps one row per ref and version and loses a ref when
744
+ * another library re-publishes it). One row per holder, all versions.
745
+ *
746
+ * @returns `[]` when no library holds an asset. Never warns.
747
+ */
748
+ libraryAssets(): Promise<Array<{
749
+ entry: CatalogEntry;
750
+ library: string;
751
+ }>>;
752
+ /**
753
+ * Every origin that holds `ref` (`kind:@publisher/name`) with the version it holds, in
754
+ * the order `add <ref>` prefers them, so the first row is the one `add` deploys: the
755
+ * project's source clones and the bundled factory source (highest version first), then
756
+ * the registered libraries. `add`, `info` and `search` all read this, so the three name
757
+ * one origin for one ref. Stores are not asked (no network).
758
+ *
759
+ * @returns one row per origin and version; `[]` for a ref without a publisher or one
760
+ * nothing holds. Never warns.
761
+ */
762
+ refOrigins(ref: string): Promise<RefOrigin[]>;
763
+ /**
764
+ * Every ref (`kind:@publisher/name`) that several origins hold at different versions,
765
+ * with its origins in {@link refOrigins} order. A ref the origins hold at one version
766
+ * has nothing to choose between and is left out.
767
+ */
768
+ competingOrigins(): Promise<Map<string, RefOrigin[]>>;
769
+ /**
770
+ * The origins of {@link refOrigins} for every ref, or for the one `only` names
771
+ * (`kind:@publisher/name`), keyed by `kind:@publisher/name`.
772
+ */
773
+ private collectOrigins;
650
774
  /**
651
775
  * Where each missed publisher-qualified ref went when its publisher changed, for every
652
776
  * ref at once (one library scan, one lock read):
653
- * - `moved` when a registered library holds the same kind + name under another publisher;
777
+ * - `moved` when a registered library holds the same kind + name under another publisher.
778
+ * When the lock ties the missed ref to a library, only that library is looked at (an
779
+ * asset of the same name in another library is a different asset). Without a lock
780
+ * entry, a library asset the project already declares or locks under its own ref is
781
+ * not offered, and two candidate publishers are ambiguous: no hint;
654
782
  * - `lockedAs` when the lock holds the same kind + name under another publisher, records
655
783
  * the library it came from, and that library now holds the asset under yet another
656
784
  * publisher than the locked one. An unrelated asset that merely shares kind + name does
@@ -716,8 +844,34 @@ export declare class AssetManager {
716
844
  * preferring it would lock a stale version after an in-place bump. The hash is
717
845
  * computed from the files on disk, so it matches what `install --locked`
718
846
  * re-hashes.
847
+ *
848
+ * A git-backed library also records its remote URL. When the previous lock names the
849
+ * library under another name that {@link lockedLibrary} matched to this one by URL (a
850
+ * teammate registered the same remote under a different name), the entry keeps the locked
851
+ * name and URL: the lock does not change because it was installed on another machine.
719
852
  */
720
853
  private libraryLockEntries;
854
+ /**
855
+ * Lock keys that `skaile.yaml` still wants: the entries a declared ref names, plus every
856
+ * entry such an asset requires, transitively. All keys when a `preset:` is declared.
857
+ */
858
+ private declaredLockKeys;
859
+ /**
860
+ * The `Missing:` lines of every library-origin lock entry whose library cannot supply
861
+ * assets on this machine (not registered, or registered with its directory gone). Plain
862
+ * `install` stops on a non-empty list, the same lines `install --locked` prints: it must
863
+ * not re-resolve a locked asset from another origin. The ONE function that decides "the
864
+ * locked library is not here", so a lock-recorded URL fallback extends it in one place.
865
+ *
866
+ * Only entries `skaile.yaml` still declares, or that a declared asset requires
867
+ * (transitively, read from the deployed copy), count. A stale entry nothing declares is
868
+ * pruned by `install` as usual, so a removed dependency whose library is gone can be
869
+ * cleaned up. With a declared `preset:` every entry counts: the lock records no edge
870
+ * from a preset to its items, and the preset's own library may be the one that is gone.
871
+ *
872
+ * @param declared - The `dependencies:` refs as written in `skaile.yaml`.
873
+ */
874
+ private unavailableLockedLibraries;
721
875
  /**
722
876
  * Re-resolve every library-origin lock entry from its named library, for
723
877
  * `install --locked`. An entry is restored only when its library is still
@@ -726,10 +880,41 @@ export declare class AssetManager {
726
880
  */
727
881
  private restoreLibraryLockEntries;
728
882
  /**
729
- * On-disk root of the library named `name`: the registered path from the index
730
- * when it exists, else `<libraries dir>/<name>`; `null` when neither is a directory.
883
+ * Whether a deployed copy exists for the lock entries `install` kept for the unresolved
884
+ * `ref`. A kind with no install target has no deployed copy.
731
885
  */
886
+ private keptCopyDeployed;
887
+ /**
888
+ * How the library `origin` names stands on this machine. THE one lookup of a locked library
889
+ * ("is it registered here?"): `check`, `outdated`, `install` and `install --locked` all ask it.
890
+ *
891
+ * - registered in the index under its name: `ok` at its registered path, or `dir-missing` when
892
+ * that directory is gone;
893
+ * - not registered: a directory `<libraries dir>/<name>` nobody unregistered still counts as a
894
+ * hand-made library (`ok`). One `library remove` unregistered without `--purge` does not
895
+ * (it stays on disk but no longer resolves), and neither does the reserved `installed` folder.
896
+ * - otherwise, when the lock recorded the library's remote URL: another registered library
897
+ * whose git remote is the same repository (`.git` suffix, trailing `/` and the
898
+ * `git@host:o/r` / `https://host/o/r` forms do not matter) and whose directory exists is
899
+ * `ok`, with `name` set to the name it is registered under here. The library name is
900
+ * machine-local; the remote is what a clone shares.
901
+ */
902
+ private lockedLibrary;
903
+ /** On-disk root of the library `origin` names; `null` unless {@link lockedLibrary} says `ok`. */
732
904
  private libraryPath;
905
+ /**
906
+ * Where each library-origin lock entry of this project resolves on this machine: identity
907
+ * `kind:publisher/name` (no scope sigil, no version) → the name the locked library is
908
+ * registered under here. The name differs from the locked one when the lock's remote URL
909
+ * matched another registered library ({@link lockedLibrary}). A deployed entry whose library
910
+ * resolves nowhere (not registered, directory gone) maps to `null`.
911
+ *
912
+ * Direct `asset install` entries (`library.installed`) are included and resolved the same
913
+ * way, but they map to the locked library name when that lookup fails: such a copy sits in
914
+ * the project and does not depend on the library still being registered. A missing or
915
+ * unreadable lock yields an empty map. `skaile manage` uses it to tick the right library row.
916
+ */
917
+ lockedLibraryNames(): Promise<Map<string, string | null>>;
733
918
  /** A candidate's stable identity key (`<publisher>/<kind>:<name>@<version>`). */
734
919
  private candidateKey;
735
920
  /**
@@ -819,11 +1004,15 @@ export declare class AssetManager {
819
1004
  * @param opts.link - When `true`, symlink local-path assets instead of copying them
820
1005
  * (the author dev-loop). Machine-local / not for committing; a no-op for
821
1006
  * store/factory sources. Defaults to copy.
1007
+ * @param opts.moveLibraries - When `true` (`skaile update`), a locked library asset is
1008
+ * re-resolved from every library and may move to another one; {@link InstallResult.moved}
1009
+ * lists the moves. Without it a locked asset stays on the library its lock entry names.
822
1010
  * @returns {@link InstallResult} summarising what was deployed, what was missing, and any collisions.
823
1011
  */
824
1012
  install(opts?: {
825
1013
  locked?: boolean;
826
1014
  link?: boolean;
1015
+ moveLibraries?: boolean;
827
1016
  }): Promise<InstallResult>;
828
1017
  /**
829
1018
  * Extend `kept` (see {@link keptLockEntries}) with every previous lock entry a kept asset
@@ -833,8 +1022,13 @@ export declare class AssetManager {
833
1022
  * cannot be read has no known requirements.
834
1023
  */
835
1024
  private keepRequiredByKept;
836
- /** Publisher-qualified refs the deployed copy of the asset behind lock `key` requires. */
837
- private deployedRequirements;
1025
+ /**
1026
+ * Publisher-qualified refs the deployed copy of `id` requires, read from its own
1027
+ * manifest file (`metadata.requires`, a manifest `dependencies:` entry): the one place
1028
+ * the requirements stay knowable when no source or library holds the asset any more.
1029
+ * A copy that is not deployed or cannot be read has no known requirements.
1030
+ */
1031
+ private deployedRequirementsOf;
838
1032
  /**
839
1033
  * Ensure all source clones are present/up to date. Returns an early
840
1034
  * {@link InstallResult} describing the failed source on the first error, or
@@ -873,7 +1067,29 @@ export declare class AssetManager {
873
1067
  * to pull every connector's deps). Future: add a flag to opt in.
874
1068
  */
875
1069
  private installRuntimeAssetDeps;
1070
+ /**
1071
+ * Give every ref `install` could not resolve, and that has no hint yet, the fix the shared
1072
+ * {@link AssetManager.projectState} names for it (a declared ref no library or source holds,
1073
+ * a requirement nothing holds). Runs after the deploy, so a requirer is known by then.
1074
+ * Mutates `hints`: ` <reason>` follows the ref in the `Missing:` line.
1075
+ */
1076
+ private adviseMissing;
876
1077
  private installLocked;
1078
+ /**
1079
+ * Parse the ref `add` was given. A ref the grammar rejects fails with the parser's message
1080
+ * minus its manifest-migration advice (it points at a skill that is not for `add`), and:
1081
+ * - a publisher-less ref (`report-html`, `skill:report-html`) names the assets of that
1082
+ * kind and name that `add` can resolve (a source, the bundled factory source or a
1083
+ * library holds them), so `Did you mean` never names an asset that does not resolve;
1084
+ * - a `@version` suffix (`skill:@acme/x@1.0.0`) says the pin is written `#<version>`.
1085
+ */
1086
+ private parseAddRef;
1087
+ /**
1088
+ * The publisher-qualified refs of the assets named like the publisher-less `ref` that
1089
+ * `add` resolves: held by a source clone, the bundled factory source or a registered
1090
+ * library. A ref without a kind means a skill, as the grammar says.
1091
+ */
1092
+ private resolvableMatches;
877
1093
  /**
878
1094
  * Add a single asset (and its transitive dependencies) to the workspace.
879
1095
  *
@@ -887,6 +1103,8 @@ export declare class AssetManager {
887
1103
  * store/factory sources. Defaults to copy.
888
1104
  * @param opts.onLibraryOrigin - Called once per deployed library-origin asset with its
889
1105
  * canonical ref and the name of the library it was resolved from.
1106
+ * @param opts.onLibraryMoved - Called once per asset whose lock entry named another library
1107
+ * than the one this add resolved it from.
890
1108
  * @param opts.onPresets - Called once with the presets expanded into this add (the
891
1109
  * added preset and any it nests); a library-held preset names its library.
892
1110
  * @returns Array of asset refs that were deployed in this call.
@@ -896,7 +1114,13 @@ export declare class AssetManager {
896
1114
  add(ref: string, opts?: {
897
1115
  link?: boolean;
898
1116
  onLibraryOrigin?: (deployedRef: string, library: string) => void;
1117
+ /** Called per already-locked asset this add moved to another library than its lock entry named. */
1118
+ onLibraryMoved?: (move: LibraryMove) => void;
899
1119
  onPresets?: (presets: PresetExpansion[]) => void;
1120
+ /** Called per symlink an asset's copy deploy leaves out (`ref`, path under the asset dir). */
1121
+ onSkippedSymlink?: (ref: string, path: string) => void;
1122
+ /** Called per `.env` file in an asset's directory that a copy deploy leaves out. */
1123
+ onEnvFile?: (ref: string, path: string) => void;
900
1124
  }): Promise<string[]>;
901
1125
  /**
902
1126
  * Report the body-link **soft dependencies** of the given assets that are not
@@ -1039,10 +1263,16 @@ export declare class AssetManager {
1039
1263
  * preset's items count as its requirements. They are undeployed and unlocked;
1040
1264
  * a dependency still declared or required elsewhere stays.
1041
1265
  *
1266
+ * An asset another locked asset (or a declared preset) requires is kept and reported in
1267
+ * `blocked`, nothing changes, unless `opts.force` (see {@link requiredByOthers}).
1268
+ *
1042
1269
  * @returns `changed` as {@link remove}; `pruned` the canonical refs
1043
- * (`kind:@publisher/name`) of the dependencies dropped as well.
1270
+ * (`kind:@publisher/name`) of the dependencies dropped as well; `blocked` when the
1271
+ * removal was refused.
1044
1272
  */
1045
- removeWithDependencies(ref: string): Promise<RemoveResult>;
1273
+ removeWithDependencies(ref: string, opts?: {
1274
+ force?: boolean;
1275
+ }): Promise<RemoveResult>;
1046
1276
  /**
1047
1277
  * Resolve the identity {@link remove} acts on. A publisher-qualified ref is taken
1048
1278
  * as written; a short ref (`kind:name`, or just `name`) is matched on kind + name
@@ -1053,6 +1283,21 @@ export declare class AssetManager {
1053
1283
  * @throws On a malformed ref, or when a short ref matches more than one asset.
1054
1284
  */
1055
1285
  private resolveRemoveTarget;
1286
+ /**
1287
+ * The reverse guard of {@link removeWithDependencies}: which other locked assets (and
1288
+ * declared presets) require `target`. Their requirements are read the way {@link lockedGraph}
1289
+ * reads them for pruning. Never touches the project.
1290
+ *
1291
+ * @returns `ref` and `requiredBy` (both `kind:@publisher/name`, version-agnostic), or `null`
1292
+ * when `target` is not locked or nothing else requires it.
1293
+ */
1294
+ private requiredByOthers;
1295
+ /**
1296
+ * Publishers under which the lock or `skaile.yaml` track `kind:name`. A deployed dir carries
1297
+ * no publisher, so this is what says whose copy it is. `undefined` stands for a
1298
+ * publisher-less declaration.
1299
+ */
1300
+ private trackedPublishers;
1056
1301
  /** Undeploy `parsed` from every target harness and drop its declaration and lock entry. */
1057
1302
  private removeResolved;
1058
1303
  /**
@@ -1238,6 +1483,14 @@ export declare class AssetManager {
1238
1483
  * instead. `[]` when the asset is not in the lock file.
1239
1484
  */
1240
1485
  why(ref: string): Promise<string[]>;
1486
+ /**
1487
+ * The {@link AssetManager.why} chain of a preset. A preset is never a lock asset: its record
1488
+ * is the lock's `presets` slice. Declared in `skaile.yaml` it is `direct`; one only a declared
1489
+ * preset nests is traced through the presets that list it.
1490
+ *
1491
+ * @returns `[]` when the lock does not record the preset.
1492
+ */
1493
+ private whyPreset;
1241
1494
  /**
1242
1495
  * List installed assets that have a newer upstream available.
1243
1496
  *
@@ -1248,20 +1501,33 @@ export declare class AssetManager {
1248
1501
  * - **Library assets** — a library-origin lock entry whose library files on disk
1249
1502
  * (not the index, which lags until `skaile library index`) hold a newer version
1250
1503
  * than the locked one (`latestVersion`, `library` set), or the same version with
1251
- * different bytes (`contentChanged`). `behind` is 0. An unregistered library is a
1252
- * `problem` row.
1253
- * - **Lock gaps** — every {@link AssetManager.lockGaps} gap (a declared dependency or a
1254
- * deployed asset's `requires` with no lock entry, a lock that contradicts a
1255
- * `skaile.yaml` pin) as a `problem` row, so `outdated` agrees with `check`.
1504
+ * different bytes (`contentChanged`). `behind` is 0.
1505
+ * - **Project state** — every {@link AssetManager.projectState} gap (an unregistered or
1506
+ * renamed library, a missing deployed copy, a declared dependency or a deployed asset's
1507
+ * `requires` with no lock entry, a lock that contradicts a `skaile.yaml` pin) as a
1508
+ * `problem` row, so `outdated` lists what `check`, `doctor` and `install --locked` fail
1509
+ * on. An asset that also has a version row is listed once, with that row.
1256
1510
  *
1257
1511
  * @returns Array of {@link OutdatedEntry} objects.
1258
1512
  */
1259
1513
  outdated(): Promise<OutdatedEntry[]>;
1260
1514
  /**
1261
- * Append one `problem` row per {@link AssetManager.lockGaps} gap whose asset is not
1262
- * listed yet, so `outdated` reports the same set `check` and `install --locked` fail on.
1515
+ * Add one `problem` row per {@link AssetManager.projectState} gap whose asset is not
1516
+ * listed yet, so `outdated` lists the same assets `check`, `doctor` and `install --locked`
1517
+ * fail on. An asset that is behind its source and also broken is listed once, with its
1518
+ * version row.
1263
1519
  */
1264
1520
  private addLockGapRows;
1521
+ /**
1522
+ * The deploy entry of a library-origin asset from the library its lock entry records,
1523
+ * at the locked version when that library still holds it (else its newest). Other
1524
+ * libraries holding the same ref are not consulted: the lock already chose.
1525
+ *
1526
+ * @param want - Kind, name and optional publisher of the asset.
1527
+ * @returns `null` when the lock has no library-origin entry for it, or the recorded
1528
+ * library is gone or no longer holds it (callers fall back to a general lookup).
1529
+ */
1530
+ private lockedLibraryEntry;
1265
1531
  /**
1266
1532
  * Produce a unified diff from the deployed asset to its catalog source: `-` lines
1267
1533
  * are in the deployed copy only (local edits `update` would overwrite), `+` lines
@@ -1341,24 +1607,114 @@ export declare class AssetManager {
1341
1607
  */
1342
1608
  doctor(): Promise<DepIssue[]>;
1343
1609
  /**
1344
- * Everything the lock does not cover or contradicts, in one list: the set
1345
- * `skaile check`, `skaile install --locked` and `skaile outdated` all report.
1610
+ * The project's state as one verdict: every way the project differs from what it
1611
+ * declares and locks. `skaile check`, `skaile doctor`, `skaile outdated`, `skaile diff`
1612
+ * and `skaile install --locked` all take their verdict and exit code from this one list,
1613
+ * so one situation reads the same in all five.
1346
1614
  *
1347
1615
  * - `declared` — a `skaile.yaml` dependency with no lock entry (library or source gone,
1348
1616
  * unresolvable ref, never installed);
1349
1617
  * - `invalid` — a `dependencies:` entry that is not a parseable ref;
1350
- * - `drift` — declared + locked but its deployed files are missing;
1618
+ * - `drift` — a locked asset whose deployed files are missing;
1351
1619
  * - `pin` — a declared `#pin` that no lock entry for that asset satisfies;
1352
- * - `requires` — a deployed asset's `requires` that is not deployed (so not locked either);
1353
- * - `unresolved` — a lock-managed asset that no source or library holds any more.
1620
+ * - `requires` — a deployed asset's `requires` (or a declared preset's item) that is not
1621
+ * deployed (so not locked either);
1622
+ * - `unresolved` — a lock-managed deployed asset that no source or library holds any more;
1623
+ * - `library` — a locked library asset whose library is not registered (renamed or
1624
+ * removed) or no longer holds it, while another library holds it now;
1625
+ * - `incomplete` — a deployed library asset that lacks files of its library entry;
1626
+ * - `content` — a locked library asset whose files in the library changed since the lock
1627
+ * (or whose lock hash predates the one shared asset hash); `skaile install` re-locks it;
1628
+ * - `agent` — an `agents.<id>.ref` (or `agent.definition`) that binds to no agent.
1629
+ *
1630
+ * An asset appears once for what the lock says about it (`unresolved`, else `library`,
1631
+ * else `drift`). A declared ref no registered library or source holds names
1632
+ * `skaile library init` / `skaile remove`, never `skaile install`: `install` has nothing
1633
+ * to resolve it from.
1354
1634
  *
1355
- * Project mode only: a global manager (`global: true`) returns `[]`. A project without
1356
- * `skaile.yaml` has no declared set, so only the `requires` / `unresolved` gaps of
1357
- * deployed assets can appear.
1635
+ * Project mode only: a global manager (`global: true`) has no gaps. A project without
1636
+ * `skaile.yaml` has no declared set, so only the lock and deployed-asset gaps can appear.
1358
1637
  *
1359
- * @returns One {@link LockGap} per gap; empty when the lock covers everything declared.
1638
+ * @returns The {@link ProjectState}; `gaps` is empty when the project is as declared and locked.
1360
1639
  */
1640
+ projectState(): Promise<ProjectState>;
1641
+ /**
1642
+ * Why the `agent:` ref of agent instance `id` binds to nothing, as the phrase that follows
1643
+ * the ref in a {@link LockGap}; see {@link AssetManager.unboundAgentAdvice}.
1644
+ */
1645
+ private unboundAgentReason;
1646
+ /**
1647
+ * What is wrong with an `agent:` ref bound by an agent instance and what to do (`lead`, then
1648
+ * `advice`). `skaile add` is named only when a registered library or source holds the agent
1649
+ * and `add` takes the ref (it needs a publisher); otherwise the user registers the library
1650
+ * that holds it, writes the publisher, or drops the binding.
1651
+ */
1652
+ private unboundAgentAdvice;
1653
+ /** @deprecated Use `(await projectState()).gaps`; removed in the next major. */
1361
1654
  lockGaps(): Promise<LockGap[]>;
1655
+ /**
1656
+ * The {@link ProjectState} gaps that name `ref`: as the gap's own ref, or as the asset
1657
+ * whose requirement is unmet. A ref without a publisher matches any publisher.
1658
+ *
1659
+ * @param ref - Asset ref in `kind:name` or `kind:@publisher/name` form.
1660
+ */
1661
+ gapsOf(ref: string): Promise<LockGap[]>;
1662
+ /**
1663
+ * Locked library assets whose library cannot supply them: the library is not registered
1664
+ * (renamed or removed) or no longer holds the asset. Another library holding it makes the
1665
+ * gap fixable by `skaile install` (it re-locks); otherwise the user registers the library
1666
+ * again or drops the dependency.
1667
+ *
1668
+ * @param named - `kind:name` identities already reported; they are skipped.
1669
+ */
1670
+ private libraryOriginGaps;
1671
+ /**
1672
+ * The {@link RestoredAsset} rows for the drifted copies (see {@link lockedCopyDrift}) a
1673
+ * deploy just wrote again: those whose ref is among the `deployed` canonical refs.
1674
+ */
1675
+ private restoredCopies;
1676
+ /**
1677
+ * Locked assets whose deployed copy differs from the bytes the lock covers: a file edited by
1678
+ * hand, or a file the asset does not ship. One row per asset, `ref` being `kind:@publisher/name`
1679
+ * and `key` its lock key. The one comparison behind the `modified` gap and the `Restored` lines
1680
+ * of `install`.
1681
+ *
1682
+ * - A library-origin asset is compared with its library's files, but only while those equal the
1683
+ * locked hash (changed library content is the `content` gap's business), both modified and
1684
+ * extra files.
1685
+ * - A source asset is compared with the per-file hashes the lock records (modified files only:
1686
+ * the lock lists what the source covers, not what the deploy copies).
1687
+ *
1688
+ * An agent (rendered, not copied), a `--link` deploy, an asset with a configured patch, and a
1689
+ * copy that is missing are not compared: other gaps cover them. Project mode only.
1690
+ */
1691
+ private lockedCopyDrift;
1692
+ /**
1693
+ * Locked assets (declared or required by one) whose deployed copy is gone: `skaile install`
1694
+ * restores them. Same deployability rule as {@link AssetManager.listDeclared}'s `drift`.
1695
+ *
1696
+ * @param named - `kind:name` identities already reported; they are skipped.
1697
+ */
1698
+ private undeployedLockGaps;
1699
+ /**
1700
+ * The `skaile.yaml` side of {@link AssetManager.projectState}: declared refs that do not
1701
+ * parse, never resolved into the lock, are not materialized, or contradict a `#pin`.
1702
+ * A project with no (or an unreadable) `skaile.yaml` has no declared set to reconcile.
1703
+ *
1704
+ * @param requirements - What {@link AssetManager.doctor} found; a declared preset whose
1705
+ * items it already named needs no second line.
1706
+ * @param named - `kind:name` identities already reported; a declared asset among them
1707
+ * needs no `drift` line.
1708
+ */
1709
+ private declaredGaps;
1710
+ /** Whether the lock's `presets` slice records `want` (kind, name and, when both carry one, publisher). */
1711
+ private presetRecorded;
1712
+ /**
1713
+ * Whether `skaile install` can resolve a declared ref: a source or library holds it, or the
1714
+ * project declares a store that may. The global catalog is not asked: a check never goes
1715
+ * to the network.
1716
+ */
1717
+ private declaredRefResolvable;
1362
1718
  /**
1363
1719
  * Items of each declared `preset:` dependency that the lock does not cover.
1364
1720
  *
@@ -1456,6 +1812,15 @@ export declare class AssetManager {
1456
1812
  * @returns `true` when a declaration was removed.
1457
1813
  */
1458
1814
  private removeDependencyFromConfig;
1815
+ /**
1816
+ * Drop the agent instances of `skaile.yaml` (`agents.<id>`, or the `agent.definition`
1817
+ * default) whose `ref` binds to `target`, and the native agent files an install rendered for
1818
+ * them. Only an `agent` target has bindings; project mode only. A `ref` without a publisher
1819
+ * matches any publisher, and a pin is ignored.
1820
+ *
1821
+ * @returns `true` when a binding was removed.
1822
+ */
1823
+ private removeAgentBindings;
1459
1824
  private resolveRepoDir;
1460
1825
  }
1461
1826
  export { installAgent } from "./install-agent.js";