@skaile/workspaces 4.37.0 → 4.38.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 (313) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/dist/app-sdk/index.js +1 -1
  3. package/dist/{asset-feeds-KTRFFJYM.js → asset-feeds-UYIFZKKG.js} +16 -16
  4. package/dist/asset-feeds-UYIFZKKG.js.map +1 -0
  5. package/dist/asset-manager/catalog-deployer.js +9 -8
  6. package/dist/asset-manager/index.js +15 -14
  7. package/dist/asset-manager/installer.js +11 -10
  8. package/dist/asset-manager/renderers.js +2 -2
  9. package/dist/asset-manager/src/index.d.ts +77 -18
  10. package/dist/asset-manager/src/index.d.ts.map +1 -1
  11. package/dist/asset-manager/src/installer.d.ts +11 -1
  12. package/dist/asset-manager/src/installer.d.ts.map +1 -1
  13. package/dist/bridge/drivers/claude-sdk.js +14 -13
  14. package/dist/bridge/drivers/claude-sdk.js.map +1 -1
  15. package/dist/bridge/drivers/codex.js +11 -10
  16. package/dist/bridge/drivers/codex.js.map +1 -1
  17. package/dist/bridge/drivers/continue.js +12 -11
  18. package/dist/bridge/drivers/continue.js.map +1 -1
  19. package/dist/bridge/drivers/echo.js +3 -3
  20. package/dist/bridge/drivers/gemini.js +6 -6
  21. package/dist/bridge/drivers/goose.js +12 -11
  22. package/dist/bridge/drivers/goose.js.map +1 -1
  23. package/dist/bridge/drivers/omp.js +4 -4
  24. package/dist/bridge/drivers/opencode.js +12 -11
  25. package/dist/bridge/drivers/opencode.js.map +1 -1
  26. package/dist/bridge/drivers/qwen.js +6 -6
  27. package/dist/bridge/index.js +15 -14
  28. package/dist/{chunk-SGMCSVTO.js → chunk-27DN4DZD.js} +8 -8
  29. package/dist/{chunk-SGMCSVTO.js.map → chunk-27DN4DZD.js.map} +1 -1
  30. package/dist/{chunk-VOEBLPXO.js → chunk-2EL2PBRC.js} +3 -3
  31. package/dist/{chunk-VOEBLPXO.js.map → chunk-2EL2PBRC.js.map} +1 -1
  32. package/dist/{chunk-VRFKCF3R.js → chunk-36ML6SFP.js} +4 -4
  33. package/dist/{chunk-VRFKCF3R.js.map → chunk-36ML6SFP.js.map} +1 -1
  34. package/dist/{chunk-UFBURH6K.js → chunk-4WKZEMBD.js} +4 -4
  35. package/dist/{chunk-UFBURH6K.js.map → chunk-4WKZEMBD.js.map} +1 -1
  36. package/dist/{chunk-2D3C4AJP.js → chunk-5CYEWBPB.js} +11 -4
  37. package/dist/chunk-5CYEWBPB.js.map +1 -0
  38. package/dist/{chunk-SQ7IN7KR.js → chunk-5K2VT6E2.js} +3 -3
  39. package/dist/{chunk-SQ7IN7KR.js.map → chunk-5K2VT6E2.js.map} +1 -1
  40. package/dist/{chunk-NTASYPDN.js → chunk-5NYBY6ZE.js} +3 -3
  41. package/dist/{chunk-NTASYPDN.js.map → chunk-5NYBY6ZE.js.map} +1 -1
  42. package/dist/{chunk-SOFPA4S4.js → chunk-6EMF4UZI.js} +8 -8
  43. package/dist/{chunk-SOFPA4S4.js.map → chunk-6EMF4UZI.js.map} +1 -1
  44. package/dist/{chunk-WQULDAH2.js → chunk-6KPQDP7P.js} +2 -2
  45. package/dist/{chunk-WQULDAH2.js.map → chunk-6KPQDP7P.js.map} +1 -1
  46. package/dist/{chunk-OPBGV4DX.js → chunk-6VRZ6M2L.js} +3 -3
  47. package/dist/{chunk-OPBGV4DX.js.map → chunk-6VRZ6M2L.js.map} +1 -1
  48. package/dist/{chunk-KN5Y5BXK.js → chunk-7FZSABQV.js} +5 -5
  49. package/dist/{chunk-KN5Y5BXK.js.map → chunk-7FZSABQV.js.map} +1 -1
  50. package/dist/{chunk-FLGLODDF.js → chunk-7RC37XFW.js} +3 -3
  51. package/dist/{chunk-FLGLODDF.js.map → chunk-7RC37XFW.js.map} +1 -1
  52. package/dist/{chunk-5SGS5SN2.js → chunk-7UL2SQQH.js} +4 -4
  53. package/dist/{chunk-5SGS5SN2.js.map → chunk-7UL2SQQH.js.map} +1 -1
  54. package/dist/{chunk-GEEW6SY2.js → chunk-A5EDMBFG.js} +2 -2
  55. package/dist/{chunk-GEEW6SY2.js.map → chunk-A5EDMBFG.js.map} +1 -1
  56. package/dist/{chunk-QABZZROM.js → chunk-ARUJBGAH.js} +3 -3
  57. package/dist/{chunk-QABZZROM.js.map → chunk-ARUJBGAH.js.map} +1 -1
  58. package/dist/{chunk-ENXE4BKS.js → chunk-BQ3HXZNT.js} +2 -2
  59. package/dist/{chunk-ENXE4BKS.js.map → chunk-BQ3HXZNT.js.map} +1 -1
  60. package/dist/{chunk-U4CNCL7Q.js → chunk-CACCIOQL.js} +12 -12
  61. package/dist/{chunk-U4CNCL7Q.js.map → chunk-CACCIOQL.js.map} +1 -1
  62. package/dist/{chunk-5JAO4MXA.js → chunk-DOVURNRK.js} +3 -3
  63. package/dist/{chunk-5JAO4MXA.js.map → chunk-DOVURNRK.js.map} +1 -1
  64. package/dist/{chunk-P4VHQA4N.js → chunk-DSB6X25D.js} +3 -3
  65. package/dist/{chunk-P4VHQA4N.js.map → chunk-DSB6X25D.js.map} +1 -1
  66. package/dist/{chunk-2QYQOJ2F.js → chunk-DV47JNI4.js} +3 -3
  67. package/dist/{chunk-2QYQOJ2F.js.map → chunk-DV47JNI4.js.map} +1 -1
  68. package/dist/{chunk-FZFCOQTI.js → chunk-EETXMMZS.js} +3 -3
  69. package/dist/{chunk-FZFCOQTI.js.map → chunk-EETXMMZS.js.map} +1 -1
  70. package/dist/{chunk-OEBAXTQ4.js → chunk-EOKAFBJ7.js} +3 -3
  71. package/dist/{chunk-OEBAXTQ4.js.map → chunk-EOKAFBJ7.js.map} +1 -1
  72. package/dist/{chunk-6BEGKO2Q.js → chunk-HUNZYTOS.js} +4 -3
  73. package/dist/chunk-HUNZYTOS.js.map +1 -0
  74. package/dist/{chunk-7YCPY6NC.js → chunk-HXG6IZSF.js} +6 -6
  75. package/dist/{chunk-7YCPY6NC.js.map → chunk-HXG6IZSF.js.map} +1 -1
  76. package/dist/{chunk-L7R52OOV.js → chunk-ILAZDNIA.js} +3 -3
  77. package/dist/{chunk-L7R52OOV.js.map → chunk-ILAZDNIA.js.map} +1 -1
  78. package/dist/{chunk-WTBXGJCD.js → chunk-J5UF3OOS.js} +10 -10
  79. package/dist/{chunk-WTBXGJCD.js.map → chunk-J5UF3OOS.js.map} +1 -1
  80. package/dist/{chunk-QKXDRBLL.js → chunk-JEPSP6XK.js} +11 -80
  81. package/dist/chunk-JEPSP6XK.js.map +1 -0
  82. package/dist/{chunk-KIFJWSNC.js → chunk-KAJH3XPW.js} +7 -3
  83. package/dist/chunk-KAJH3XPW.js.map +1 -0
  84. package/dist/chunk-LOHQTTUV.js +29 -0
  85. package/dist/chunk-LOHQTTUV.js.map +1 -0
  86. package/dist/{chunk-MDBAEEY5.js → chunk-MQ42OYKH.js} +159 -7
  87. package/dist/chunk-MQ42OYKH.js.map +1 -0
  88. package/dist/{chunk-YU433JEL.js → chunk-MS2JK4V7.js} +6 -6
  89. package/dist/{chunk-YU433JEL.js.map → chunk-MS2JK4V7.js.map} +1 -1
  90. package/dist/{chunk-DFZDL62S.js → chunk-OLMNDIAU.js} +14 -9
  91. package/dist/chunk-OLMNDIAU.js.map +1 -0
  92. package/dist/{chunk-3SUWLY3H.js → chunk-OQRB7JUS.js} +3 -3
  93. package/dist/{chunk-3SUWLY3H.js.map → chunk-OQRB7JUS.js.map} +1 -1
  94. package/dist/{chunk-RZXP5ZER.js → chunk-PRCUGFXV.js} +3 -3
  95. package/dist/{chunk-RZXP5ZER.js.map → chunk-PRCUGFXV.js.map} +1 -1
  96. package/dist/{chunk-MRS5YHPI.js → chunk-QBQITQAM.js} +3 -3
  97. package/dist/{chunk-MRS5YHPI.js.map → chunk-QBQITQAM.js.map} +1 -1
  98. package/dist/{chunk-R2SYODNK.js → chunk-QWWDDU5Z.js} +274 -67
  99. package/dist/chunk-QWWDDU5Z.js.map +1 -0
  100. package/dist/{chunk-UTZEHXYT.js → chunk-R2U346ER.js} +3 -3
  101. package/dist/{chunk-UTZEHXYT.js.map → chunk-R2U346ER.js.map} +1 -1
  102. package/dist/{chunk-USJWXEXS.js → chunk-R5ARWJGE.js} +46 -41
  103. package/dist/chunk-R5ARWJGE.js.map +1 -0
  104. package/dist/chunk-TLKM4M47.js +78 -0
  105. package/dist/chunk-TLKM4M47.js.map +1 -0
  106. package/dist/{chunk-NFECHLV6.js → chunk-TNWXGHLD.js} +3 -3
  107. package/dist/{chunk-NFECHLV6.js.map → chunk-TNWXGHLD.js.map} +1 -1
  108. package/dist/{chunk-H3KXUUYQ.js → chunk-VDBP6Y5M.js} +4 -4
  109. package/dist/{chunk-H3KXUUYQ.js.map → chunk-VDBP6Y5M.js.map} +1 -1
  110. package/dist/{chunk-XN7DAZB7.js → chunk-VJNTB4DN.js} +5 -5
  111. package/dist/chunk-VJNTB4DN.js.map +1 -0
  112. package/dist/{chunk-BSIHJZKN.js → chunk-XU7JET5Z.js} +107 -26
  113. package/dist/chunk-XU7JET5Z.js.map +1 -0
  114. package/dist/{chunk-A5RRXBLI.js → chunk-YCJ3PJNB.js} +5 -5
  115. package/dist/{chunk-A5RRXBLI.js.map → chunk-YCJ3PJNB.js.map} +1 -1
  116. package/dist/{chunk-VCLN2IUM.js → chunk-YCMZHL4T.js} +31 -27
  117. package/dist/chunk-YCMZHL4T.js.map +1 -0
  118. package/dist/{chunk-V2OQ3BI6.js → chunk-YNUBJY3L.js} +2 -2
  119. package/dist/chunk-YNUBJY3L.js.map +1 -0
  120. package/dist/{chunk-S63H4HDH.js → chunk-YQEF36D5.js} +4 -4
  121. package/dist/{chunk-S63H4HDH.js.map → chunk-YQEF36D5.js.map} +1 -1
  122. package/dist/{chunk-FJYOQMXT.js → chunk-YV3YI3TA.js} +32 -16
  123. package/dist/chunk-YV3YI3TA.js.map +1 -0
  124. package/dist/cli/index.js +755 -533
  125. package/dist/cli/index.js.map +1 -1
  126. package/dist/cli/src/asset-feeds.d.ts.map +1 -1
  127. package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
  128. package/dist/cli/src/commands/cache.d.ts.map +1 -1
  129. package/dist/cli/src/commands/catalog.d.ts +28 -3
  130. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  131. package/dist/cli/src/commands/complete-resolvers.d.ts +1 -7
  132. package/dist/cli/src/commands/complete-resolvers.d.ts.map +1 -1
  133. package/dist/cli/src/commands/complete.d.ts.map +1 -1
  134. package/dist/cli/src/commands/diff.d.ts +3 -1
  135. package/dist/cli/src/commands/diff.d.ts.map +1 -1
  136. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  137. package/dist/cli/src/commands/library-index.d.ts +8 -0
  138. package/dist/cli/src/commands/library-index.d.ts.map +1 -1
  139. package/dist/cli/src/commands/library-publish.d.ts +7 -2
  140. package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
  141. package/dist/cli/src/commands/manage.d.ts.map +1 -1
  142. package/dist/cli/src/commands/outdated.d.ts +12 -2
  143. package/dist/cli/src/commands/outdated.d.ts.map +1 -1
  144. package/dist/cli/src/commands/project.d.ts +2 -2
  145. package/dist/cli/src/commands/publish-core.d.ts +21 -0
  146. package/dist/cli/src/commands/publish-core.d.ts.map +1 -1
  147. package/dist/cli/src/commands/skailify-lib.d.ts +18 -1
  148. package/dist/cli/src/commands/skailify-lib.d.ts.map +1 -1
  149. package/dist/cli/src/commands/source-manifest-publish.d.ts.map +1 -1
  150. package/dist/cli/src/commands/store.d.ts.map +1 -1
  151. package/dist/cli/src/commands/update.d.ts.map +1 -1
  152. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  153. package/dist/cli/src/paths.d.ts +1 -1
  154. package/dist/cli/src/paths.d.ts.map +1 -1
  155. package/dist/cli/src/store-auth.d.ts.map +1 -1
  156. package/dist/connectors/config.js +6 -5
  157. package/dist/connectors/index.js +19 -18
  158. package/dist/connectors-shared/index.js +2 -2
  159. package/dist/core/index.js +8 -7
  160. package/dist/core/manifest.js +2 -2
  161. package/dist/core/models.js +1 -1
  162. package/dist/core/publish-manifest.js +2 -2
  163. package/dist/core/ref.js +1 -1
  164. package/dist/core/runtime-assets.js +6 -5
  165. package/dist/core/src/asset-roots.d.ts +2 -12
  166. package/dist/core/src/asset-roots.d.ts.map +1 -1
  167. package/dist/core/src/cache-paths.d.ts +7 -3
  168. package/dist/core/src/cache-paths.d.ts.map +1 -1
  169. package/dist/core/src/index.d.ts +3 -3
  170. package/dist/core/src/index.d.ts.map +1 -1
  171. package/dist/core/src/lock.d.ts +27 -4
  172. package/dist/core/src/lock.d.ts.map +1 -1
  173. package/dist/core/src/models.d.ts +26 -6
  174. package/dist/core/src/models.d.ts.map +1 -1
  175. package/dist/core/src/repo-manager.d.ts.map +1 -1
  176. package/dist/core/src/settings.d.ts +2 -1
  177. package/dist/core/src/settings.d.ts.map +1 -1
  178. package/dist/core/src/store.d.ts.map +1 -1
  179. package/dist/core/src/workspace-config.d.ts.map +1 -1
  180. package/dist/core/store.js +2 -1
  181. package/dist/core/workspace-config.js +5 -4
  182. package/dist/deploy/index.js +8 -7
  183. package/dist/deploy/index.js.map +1 -1
  184. package/dist/discovery/index.js +5 -5
  185. package/dist/discovery/src/domains.d.ts +6 -1
  186. package/dist/discovery/src/domains.d.ts.map +1 -1
  187. package/dist/discovery/src/index.d.ts +1 -1
  188. package/dist/discovery/src/index.d.ts.map +1 -1
  189. package/dist/{ensure-sources-IGU65O72.js → ensure-sources-VX63EKY7.js} +18 -17
  190. package/dist/ensure-sources-VX63EKY7.js.map +1 -0
  191. package/dist/factory-assets/connectors/box.js +19 -18
  192. package/dist/factory-assets/connectors/deploy.js +19 -18
  193. package/dist/factory-assets/connectors/devserver.js +19 -18
  194. package/dist/factory-assets/connectors/flow/adapter.js +19 -18
  195. package/dist/factory-assets/connectors/flow/engine.js +9 -8
  196. package/dist/factory-assets/connectors/flow/run-flow.js +21 -20
  197. package/dist/factory-assets/connectors/flow.js +19 -18
  198. package/dist/factory-assets/connectors/git.js +19 -18
  199. package/dist/factory-assets/connectors/gmail.js +19 -18
  200. package/dist/factory-assets/connectors/googledrive.js +19 -18
  201. package/dist/factory-assets/connectors/local.js +19 -18
  202. package/dist/factory-assets/connectors/mattermost.js +19 -18
  203. package/dist/factory-assets/connectors/memory.js +19 -18
  204. package/dist/factory-assets/connectors/minio.js +19 -18
  205. package/dist/factory-assets/connectors/postgres.js +19 -18
  206. package/dist/factory-assets/connectors/s3.js +19 -18
  207. package/dist/factory-assets/connectors/sharepoint.js +19 -18
  208. package/dist/factory-assets/connectors/sqlite.js +19 -18
  209. package/dist/factory-assets/connectors/static-server.js +19 -18
  210. package/dist/factory-assets/connectors/tunnel.js +19 -18
  211. package/dist/factory-assets/connectors/webdav.js +19 -18
  212. package/dist/factory-assets/connectors/xstate-store.js +19 -18
  213. package/dist/factory-assets/connectors/xstate.js +19 -18
  214. package/dist/flows-PX53XFV7.js +25 -0
  215. package/dist/{flows-6MDMBQUZ.js.map → flows-PX53XFV7.js.map} +1 -1
  216. package/dist/{helpers-IELIL4YR.js → helpers-DF55G2YC.js} +18 -17
  217. package/dist/{helpers-IELIL4YR.js.map → helpers-DF55G2YC.js.map} +1 -1
  218. package/dist/library/index.js +12 -11
  219. package/dist/library/install.js +2 -2
  220. package/dist/library/src/config.d.ts +11 -9
  221. package/dist/library/src/config.d.ts.map +1 -1
  222. package/dist/library/src/index.d.ts +2 -2
  223. package/dist/library/src/index.d.ts.map +1 -1
  224. package/dist/library/src/local/db.d.ts.map +1 -1
  225. package/dist/library/src/local/library-manager.d.ts +7 -0
  226. package/dist/library/src/local/library-manager.d.ts.map +1 -1
  227. package/dist/library/src/local/library.d.ts +5 -4
  228. package/dist/library/src/local/library.d.ts.map +1 -1
  229. package/dist/library/src/local/schema.d.ts +2 -0
  230. package/dist/library/src/local/schema.d.ts.map +1 -1
  231. package/dist/library/src/local/sidecar-paths.d.ts.map +1 -1
  232. package/dist/library/src/local/store-paths.d.ts.map +1 -1
  233. package/dist/library/src/remote/cache.d.ts.map +1 -1
  234. package/dist/library/src/sync/git-driver.d.ts +34 -0
  235. package/dist/library/src/sync/git-driver.d.ts.map +1 -1
  236. package/dist/{library-publish-YKBYHZ43.js → library-publish-2PNWJJOY.js} +95 -41
  237. package/dist/library-publish-2PNWJJOY.js.map +1 -0
  238. package/dist/open-library-SUVOMIWZ.js +38 -0
  239. package/dist/{open-library-ULRYWTEA.js.map → open-library-SUVOMIWZ.js.map} +1 -1
  240. package/dist/paths-W4LDORQQ.js +21 -0
  241. package/dist/{paths-4MTICP3T.js.map → paths-W4LDORQQ.js.map} +1 -1
  242. package/dist/{plugin-store-GQ4WQZJ2.js → plugin-store-D45CREMJ.js} +10 -9
  243. package/dist/plugin-store-D45CREMJ.js.map +1 -0
  244. package/dist/project-RTLVOXUU.js +34 -0
  245. package/dist/{project-VKYNDEB6.js.map → project-RTLVOXUU.js.map} +1 -1
  246. package/dist/resolver/index.js +9 -8
  247. package/dist/runner/index.js +28 -27
  248. package/dist/runner/src/composition/bootstrap.d.ts +1 -1
  249. package/dist/runner/src/composition/bootstrap.d.ts.map +1 -1
  250. package/dist/runner/src/runtime-session-emit.d.ts +2 -1
  251. package/dist/runner/src/runtime-session-emit.d.ts.map +1 -1
  252. package/dist/runner/src/serve.d.ts.map +1 -1
  253. package/dist/sdk/asset-manager.js +15 -14
  254. package/dist/sdk/bridge.js +15 -14
  255. package/dist/sdk/core.js +8 -7
  256. package/dist/sdk/flow.js +9 -8
  257. package/dist/sdk/index.js +28 -27
  258. package/dist/sdk/index.js.map +1 -1
  259. package/dist/sdk/resolver.js +9 -8
  260. package/dist/sdk/runner.js +28 -27
  261. package/dist/sdk/session.js +2 -2
  262. package/dist/sdk/types.js +1 -1
  263. package/dist/secrets/index.js +18 -1
  264. package/dist/secrets/src/providers/local.d.ts.map +1 -1
  265. package/dist/session/index.js +2 -2
  266. package/dist/{setup-INJFK3VJ.js → setup-ZA7VZL72.js} +25 -24
  267. package/dist/setup-ZA7VZL72.js.map +1 -0
  268. package/dist/skills-R3RPIPWP.js +25 -0
  269. package/dist/{skills-JHUY4DFE.js.map → skills-R3RPIPWP.js.map} +1 -1
  270. package/dist/{source-IZXICUBU.js → source-Y5YQ7M53.js} +21 -20
  271. package/dist/{source-IZXICUBU.js.map → source-Y5YQ7M53.js.map} +1 -1
  272. package/dist/{source-manifest-publish-4JHOT4PA.js → source-manifest-publish-RZIJNRIW.js} +24 -25
  273. package/dist/source-manifest-publish-RZIJNRIW.js.map +1 -0
  274. package/dist/tui/index.js +28 -27
  275. package/dist/tui/index.js.map +1 -1
  276. package/dist/types/index.js +1 -1
  277. package/dist/types/manifests.js +1 -1
  278. package/dist/types/src/events.d.ts +4 -2
  279. package/dist/types/src/events.d.ts.map +1 -1
  280. package/dist/types/src/manifests/index.d.ts +1 -1
  281. package/dist/types/src/manifests/index.d.ts.map +1 -1
  282. package/dist/types/src/manifests/skill.d.ts +10 -0
  283. package/dist/types/src/manifests/skill.d.ts.map +1 -1
  284. package/dist/workspace-plugin/adapters/mcp.js +15 -14
  285. package/dist/workspace-plugin/adapters/omp.js +7 -7
  286. package/dist/workspace-plugin/index.js +1 -1
  287. package/package.json +1 -1
  288. package/dist/asset-feeds-KTRFFJYM.js.map +0 -1
  289. package/dist/chunk-2D3C4AJP.js.map +0 -1
  290. package/dist/chunk-6BEGKO2Q.js.map +0 -1
  291. package/dist/chunk-BSIHJZKN.js.map +0 -1
  292. package/dist/chunk-DFZDL62S.js.map +0 -1
  293. package/dist/chunk-FJYOQMXT.js.map +0 -1
  294. package/dist/chunk-KIFJWSNC.js.map +0 -1
  295. package/dist/chunk-MDBAEEY5.js.map +0 -1
  296. package/dist/chunk-MIRWAK5C.js +0 -158
  297. package/dist/chunk-MIRWAK5C.js.map +0 -1
  298. package/dist/chunk-QKXDRBLL.js.map +0 -1
  299. package/dist/chunk-R2SYODNK.js.map +0 -1
  300. package/dist/chunk-USJWXEXS.js.map +0 -1
  301. package/dist/chunk-V2OQ3BI6.js.map +0 -1
  302. package/dist/chunk-VCLN2IUM.js.map +0 -1
  303. package/dist/chunk-XN7DAZB7.js.map +0 -1
  304. package/dist/ensure-sources-IGU65O72.js.map +0 -1
  305. package/dist/flows-6MDMBQUZ.js +0 -24
  306. package/dist/library-publish-YKBYHZ43.js.map +0 -1
  307. package/dist/open-library-ULRYWTEA.js +0 -37
  308. package/dist/paths-4MTICP3T.js +0 -20
  309. package/dist/plugin-store-GQ4WQZJ2.js.map +0 -1
  310. package/dist/project-VKYNDEB6.js +0 -33
  311. package/dist/setup-INJFK3VJ.js.map +0 -1
  312. package/dist/skills-JHUY4DFE.js +0 -24
  313. package/dist/source-manifest-publish-4JHOT4PA.js.map +0 -1
@@ -1,11 +1,13 @@
1
- import { getStoreManifestsDir } from './chunk-BSIHJZKN.js';
2
- import { deployAll, removeAsset, createScaffold } from './chunk-VCLN2IUM.js';
3
- import { resolveLibraryDir, writeLock, buildLockFile, readLock, verifyLock, extractForPatch, generatePatch, savePatch, applyPatch } from './chunk-FJYOQMXT.js';
4
- import { resolveRuntimeAssets, factoryAssetRoots } from './chunk-VRFKCF3R.js';
5
- import { deployedBase, isDeployed, deployedDir } from './chunk-KIFJWSNC.js';
6
- import { loadMcpServerDeclarations, globalSkaileDir, resolveGlobalHarnesses, globalCacheRoot, migrateLegacyDir, resolveGlobalSkWorkspaceConfig, resolveSkWorkspaceConfig, getGlobalCacheDir, sourceCacheKey, getRepoCommit, coerceVersion, matchPin, resolveAll, buildProvenanceIndex, ensureRepo, sourceShortName, scanRepo, SKAILE_YAML_DEFAULT, checkRepoStatus, resolveAsset, readLinks, storeManifestSlug } from './chunk-QKXDRBLL.js';
7
- import { scanDirectory, parseRequires } from './chunk-SQ7IN7KR.js';
8
- import { parseAssetRef, slugifyAssetName, assetRefToStr } from './chunk-GEEW6SY2.js';
1
+ import { getStoreManifestsDir } from './chunk-XU7JET5Z.js';
2
+ import { readManifestSourceConfig, discoverAssetsInTree } from './chunk-OLMNDIAU.js';
3
+ import { deployAll, removeAsset, createScaffold } from './chunk-YCMZHL4T.js';
4
+ import { resolveLibraryDir, buildLibraryLockEntries, writeLock, buildLockFile, readLock, verifyLock, extractForPatch, generatePatch, savePatch, applyPatch } from './chunk-YV3YI3TA.js';
5
+ import { resolveRuntimeAssets, factoryAssetRoots } from './chunk-36ML6SFP.js';
6
+ import { deployedBase, isDeployed, deployedDir } from './chunk-KAJH3XPW.js';
7
+ import { loadMcpServerDeclarations, resolveGlobalHarnesses, resolveGlobalSkWorkspaceConfig, resolveSkWorkspaceConfig, getGlobalCacheDir, sourceCacheKey, getRepoCommit, coerceVersion, matchPin, resolveAll, buildProvenanceIndex, ensureRepo, sourceShortName, scanRepo, SKAILE_YAML_DEFAULT, checkRepoStatus, resolveAsset, readLinks, storeManifestSlug } from './chunk-JEPSP6XK.js';
8
+ import { globalSkaileDir, globalCacheRoot, migrateLegacyDir } from './chunk-TLKM4M47.js';
9
+ import { scanDirectory, parseRequires } from './chunk-5K2VT6E2.js';
10
+ import { parseAssetRef, slugifyAssetName, assetRefToStr } from './chunk-A5EDMBFG.js';
9
11
  import { appendHistory, getRecentHistory, clearHistory } from './chunk-KTBKW2FI.js';
10
12
  import { commitChanges } from './chunk-UQ6LFBPZ.js';
11
13
  import { spawnSync } from 'child_process';
@@ -239,18 +241,50 @@ function commonDirPrefix(paths) {
239
241
  }
240
242
  function indexLockByKindName(lock) {
241
243
  const lockByKindName = /* @__PURE__ */ new Map();
242
- for (const [key] of Object.entries(lock?.assets ?? {})) {
244
+ for (const [key, entry] of Object.entries(lock?.assets ?? {})) {
243
245
  const parsed = parseCanonicalLockKey(key);
244
246
  if (parsed.kind && parsed.name && parsed.publisher && parsed.version) {
245
247
  lockByKindName.set(`${parsed.kind}:${parsed.name}`, {
246
248
  publisher: parsed.publisher,
247
249
  version: parsed.version,
248
- url: lock.assets[key].source.url
250
+ url: entry.source?.url ?? "",
251
+ library: entry.library !== void 0
249
252
  });
250
253
  }
251
254
  }
252
255
  return lockByKindName;
253
256
  }
257
+ function libraryDiskHashes(libPath, cache) {
258
+ let hashes = cache.get(libPath);
259
+ if (!hashes) {
260
+ const sourceConfig = readManifestSourceConfig(libPath) ?? {
261
+ version: 1,
262
+ publisher_default: "@library",
263
+ default_ref: "main",
264
+ publisher_overrides: [],
265
+ dev_paths: []
266
+ };
267
+ hashes = new Map(
268
+ discoverAssetsInTree(libPath, { sourceConfig }).assets.map((a) => [
269
+ `${a.kind}:${a.name}`,
270
+ a.sha256
271
+ ])
272
+ );
273
+ cache.set(libPath, hashes);
274
+ }
275
+ return hashes;
276
+ }
277
+ function newestLibraryDef(snap, libraryName, id) {
278
+ const lib = snap?.libraries.find((l) => l.name === libraryName);
279
+ if (!snap || !lib) return void 0;
280
+ let best;
281
+ for (const d of snap.defs) {
282
+ if (d.libraryId !== lib.id || d.kind !== id.kind || d.name !== id.name) continue;
283
+ if (d.publisher.replace(/^@/, "") !== id.publisher) continue;
284
+ if (!best || gt(coerceVersion(d.version), coerceVersion(best.version))) best = d;
285
+ }
286
+ return best;
287
+ }
254
288
  function computeSyncStatus(repoStatus) {
255
289
  if (!repoStatus) return "unknown";
256
290
  if (repoStatus.kind === "local") return "local";
@@ -596,38 +630,46 @@ var AssetManager = class {
596
630
  * the consume side of `library create` — a freshly authored asset is
597
631
  * deployable with `skaile add <kind>:@<publisher>/<name>` without publishing.
598
632
  *
599
- * Pure local read (no index, no network) and mirrors how `findSkills`
600
- * discovers library content. Library assets are deliberately NOT written to
601
- * the lock (a local authoring place is not a reproducible source); they are
602
- * re-discovered on every `add`/`install`, so reconcile never treats them as
603
- * stale.
633
+ * Local read (no network) and mirrors how `findSkills` discovers library
634
+ * content. The returned `libraryOf` map names the library each entry came from
635
+ * so callers can lock it as library-origin (see {@link libraryLockEntries}).
604
636
  *
605
- * @returns the matched deploy entries plus the set of `missing` refs covered.
637
+ * @returns the matched deploy entries, the set of `missing` refs covered, and
638
+ * each entry's originating library name.
606
639
  */
607
640
  async resolveLibraryEntries(missing) {
608
641
  const resolved = /* @__PURE__ */ new Set();
609
- if (missing.length === 0) return { entries: [], resolved };
610
- let librariesRoot;
642
+ const libraryOf = /* @__PURE__ */ new Map();
643
+ if (missing.length === 0) return { entries: [], resolved, libraryOf };
644
+ const roots = [];
645
+ for (const l of (await this.loadLibraryIndex())?.libraries ?? []) {
646
+ if (existsSync(l.path)) roots.push({ name: l.name, dir: l.path });
647
+ }
648
+ const registered = new Set(roots.map((r) => r.name));
611
649
  try {
612
- librariesRoot = resolveLibraryDir();
650
+ const librariesRoot = resolveLibraryDir();
651
+ if (existsSync(librariesRoot)) {
652
+ for (const dirent of readdirSync(librariesRoot, { withFileTypes: true })) {
653
+ if (dirent.isDirectory() && !registered.has(dirent.name)) {
654
+ roots.push({ name: dirent.name, dir: join(librariesRoot, dirent.name) });
655
+ }
656
+ }
657
+ }
613
658
  } catch {
614
- return { entries: [], resolved };
615
659
  }
616
- if (!existsSync(librariesRoot)) return { entries: [], resolved };
660
+ if (roots.length === 0) return { entries: [], resolved, libraryOf };
617
661
  const byKey = /* @__PURE__ */ new Map();
618
- for (const dirent of readdirSync(librariesRoot, { withFileTypes: true })) {
619
- if (!dirent.isDirectory()) continue;
620
- const libPath = join(librariesRoot, dirent.name);
621
- const publisher = readDeclaredPublisher(libPath) ?? slugifyAssetName(dirent.name);
622
- for (const entry of await scanDirectory(libPath, publisher)) {
662
+ for (const { name, dir } of roots) {
663
+ const publisher = readDeclaredPublisher(dir) ?? slugifyAssetName(name);
664
+ for (const entry of await scanDirectory(dir, publisher)) {
623
665
  const key = `${entry.kind}:@${entry.publisher}/${entry.name}`;
624
666
  const prev = byKey.get(key);
625
- if (!prev || gt(coerceVersion(entry.version ?? ""), coerceVersion(prev.version ?? ""))) {
626
- byKey.set(key, entry);
667
+ if (!prev || gt(coerceVersion(entry.version ?? ""), coerceVersion(prev.entry.version ?? ""))) {
668
+ byKey.set(key, { entry, library: name });
627
669
  }
628
670
  }
629
671
  }
630
- if (byKey.size === 0) return { entries: [], resolved };
672
+ if (byKey.size === 0) return { entries: [], resolved, libraryOf };
631
673
  const entries = [];
632
674
  for (const ref of missing) {
633
675
  let parsed;
@@ -637,13 +679,126 @@ var AssetManager = class {
637
679
  continue;
638
680
  }
639
681
  if (!parsed.publisher) continue;
640
- const entry = byKey.get(`${parsed.kind}:@${parsed.publisher}/${parsed.name}`);
641
- if (!entry) continue;
642
- if (parsed.pin && !matchPin(parsed.pin, entry.version ?? "")) continue;
643
- entries.push(entry);
682
+ const hit = byKey.get(`${parsed.kind}:@${parsed.publisher}/${parsed.name}`);
683
+ if (!hit) continue;
684
+ if (parsed.pin && !matchPin(parsed.pin, hit.entry.version ?? "")) continue;
685
+ entries.push(hit.entry);
686
+ libraryOf.set(hit.entry, hit.library);
644
687
  resolved.add(ref);
645
688
  }
646
- return { entries, resolved };
689
+ return { entries, resolved, libraryOf };
690
+ }
691
+ /**
692
+ * Open the local index and snapshot its libraries + asset definitions.
693
+ * Best-effort: no index file (never indexed), or any open/guard failure,
694
+ * yields `null` — a lock/outdated read must never create `index.db` or throw.
695
+ */
696
+ async loadLibraryIndex() {
697
+ try {
698
+ const { LocalIndex, resolveIndexPath } = await import('./library/index.js');
699
+ const indexPath = this.indexPathOverride ?? resolveIndexPath();
700
+ if (!existsSync(indexPath)) return null;
701
+ const index = new LocalIndex({ indexPath });
702
+ try {
703
+ return { libraries: await index.listSources(), defs: await index.listAssetDefs() };
704
+ } finally {
705
+ index.close();
706
+ }
707
+ } catch {
708
+ return null;
709
+ }
710
+ }
711
+ /**
712
+ * Library-origin lock entries for the assets {@link resolveLibraryEntries}
713
+ * matched. The locked version comes from the library index when it knows the
714
+ * asset (its manifest-declared version is authoritative), else from the
715
+ * on-disk asset. The hash is computed from the files on disk, so it matches
716
+ * what `install --locked` re-hashes.
717
+ */
718
+ async libraryLockEntries(lib) {
719
+ if (lib.entries.length === 0) return {};
720
+ const snap = await this.loadLibraryIndex();
721
+ const diskHashes = /* @__PURE__ */ new Map();
722
+ return buildLibraryLockEntries(
723
+ lib.entries.map((e) => {
724
+ const name = lib.libraryOf.get(e) ?? "";
725
+ const publisher = e.publisher ?? "";
726
+ const def = newestLibraryDef(snap, name, { kind: e.kind, publisher, name: e.name });
727
+ const libPath = this.libraryPath(name, snap);
728
+ const sha256 = (libPath ? libraryDiskHashes(libPath, diskHashes).get(`${e.kind}:${e.name}`) : void 0) ?? def?.sha256;
729
+ return {
730
+ kind: e.kind,
731
+ publisher,
732
+ name: e.name,
733
+ library: { name, version: def?.version || e.version || "0.0.0", sha256 }
734
+ };
735
+ })
736
+ );
737
+ }
738
+ /**
739
+ * Re-resolve every library-origin lock entry from its named library, for
740
+ * `install --locked`. An entry is restored only when its library is still
741
+ * registered/on disk, still holds the asset, and still offers the locked
742
+ * version; anything else is reported in `missing` with the reason.
743
+ */
744
+ async restoreLibraryLockEntries(lock) {
745
+ const entries = [];
746
+ const missing = [];
747
+ const locked = Object.entries(lock.assets).filter(([, e]) => e.library !== void 0);
748
+ if (locked.length === 0) return { entries, missing };
749
+ const snap = await this.loadLibraryIndex();
750
+ const diskHashes = /* @__PURE__ */ new Map();
751
+ for (const [ref, e] of locked) {
752
+ const origin = e.library;
753
+ const { publisher, kind, name } = parseCanonicalLockKey(ref);
754
+ if (!publisher || !kind || !name) {
755
+ missing.push(`${ref} (unparseable lock key)`);
756
+ continue;
757
+ }
758
+ const libPath = this.libraryPath(origin.name, snap);
759
+ if (!libPath) {
760
+ missing.push(`${ref} (library "${origin.name}" not found)`);
761
+ continue;
762
+ }
763
+ const found = (await scanDirectory(libPath, publisher)).find(
764
+ (x) => x.kind === kind && x.name === name
765
+ );
766
+ if (!found) {
767
+ missing.push(`${ref} (not found in library "${origin.name}")`);
768
+ continue;
769
+ }
770
+ const def = newestLibraryDef(snap, origin.name, { kind, publisher, name });
771
+ const current = def?.version || found.version || "0.0.0";
772
+ if (current !== origin.version) {
773
+ missing.push(
774
+ `${ref} (library "${origin.name}" is at ${current}, locked ${origin.version})`
775
+ );
776
+ continue;
777
+ }
778
+ if (origin.sha256) {
779
+ const onDisk = libraryDiskHashes(libPath, diskHashes).get(`${kind}:${name}`);
780
+ if (onDisk !== void 0 && onDisk !== origin.sha256) {
781
+ missing.push(`${ref} (library "${origin.name}" content changed since lock)`);
782
+ continue;
783
+ }
784
+ }
785
+ entries.push(found);
786
+ }
787
+ return { entries, missing };
788
+ }
789
+ /**
790
+ * On-disk root of the library named `name`: the registered path from the index
791
+ * when it exists, else `<libraries dir>/<name>`; `null` when neither is a directory.
792
+ */
793
+ libraryPath(name, snap) {
794
+ const registered = snap?.libraries.find((l) => l.name === name)?.path;
795
+ if (registered && existsSync(registered)) return registered;
796
+ try {
797
+ const guess = join(resolveLibraryDir(), name);
798
+ return existsSync(guess) ? guess : null;
799
+ } catch {
800
+ return null;
801
+ }
647
802
  }
648
803
  // ── Store fetch-then-deploy ────────────────────────────────────────────
649
804
  /** A candidate's stable identity key (`<publisher>/<kind>:<name>@<version>`). */
@@ -855,7 +1010,8 @@ var AssetManager = class {
855
1010
  stores
856
1011
  });
857
1012
  const lib = await this.resolveLibraryEntries(missing);
858
- const removed = this.reconcileRemovedAssets(resolved);
1013
+ const libraryLock = await this.libraryLockEntries(lib);
1014
+ const removed = this.reconcileRemovedAssets(resolved, new Set(Object.keys(libraryLock)));
859
1015
  const entries = [...await this.buildCatalogEntries(resolved, repositories), ...lib.entries];
860
1016
  const deployed = [
861
1017
  ...new Set(
@@ -865,9 +1021,9 @@ var AssetManager = class {
865
1021
  )
866
1022
  ];
867
1023
  await this.renderDriverMcpConfig();
868
- const lockWritten = resolved.length > 0 || existsSync(this.lockPath);
1024
+ const lockWritten = resolved.length > 0 || lib.entries.length > 0 || existsSync(this.lockPath);
869
1025
  if (lockWritten) {
870
- writeLock(this.lockPath, buildLockFile(resolved, overridesApplied));
1026
+ writeLock(this.lockPath, buildLockFile(resolved, overridesApplied, libraryLock));
871
1027
  }
872
1028
  this.recordInstallHistory(deployed, removed);
873
1029
  const { npmInstalled, npmFailed } = await this.installRuntimeAssetDeps();
@@ -918,13 +1074,16 @@ var AssetManager = class {
918
1074
  }
919
1075
  /**
920
1076
  * Remove stale assets — those recorded in the old lock but absent from the
921
- * newly resolved set. Returns the list of removed refs.
1077
+ * newly resolved set (`resolved` source candidates plus `keep`, the canonical
1078
+ * refs of library-origin assets locked in this run). Returns the list of
1079
+ * removed refs.
922
1080
  */
923
- reconcileRemovedAssets(resolved) {
1081
+ reconcileRemovedAssets(resolved, keep = /* @__PURE__ */ new Set()) {
924
1082
  const oldLock = this.tryReadLock();
925
- const resolvedRefs = new Set(
926
- resolved.map((c) => `${c.kind}:@${c.publisher}/${c.name}#${c.version}`)
927
- );
1083
+ const resolvedRefs = /* @__PURE__ */ new Set([
1084
+ ...resolved.map((c) => `${c.kind}:@${c.publisher}/${c.name}#${c.version}`),
1085
+ ...keep
1086
+ ]);
928
1087
  const removed = [];
929
1088
  if (oldLock) {
930
1089
  for (const ref of Object.keys(oldLock.assets)) {
@@ -1067,6 +1226,7 @@ var AssetManager = class {
1067
1226
  }
1068
1227
  const resolved = [];
1069
1228
  for (const [ref, entry] of Object.entries(lock.assets)) {
1229
+ if (!entry.source) continue;
1070
1230
  const { publisher, kind, name } = parseCanonicalLockKey(ref);
1071
1231
  if (!publisher || !kind || !name) continue;
1072
1232
  const slug = sourceCacheKey(entry.source.url);
@@ -1085,15 +1245,21 @@ var AssetManager = class {
1085
1245
  });
1086
1246
  if (!repositories[slug]) repositories[slug] = { url: entry.source.url, path: cloneDir };
1087
1247
  }
1248
+ const library = await this.restoreLibraryLockEntries(lock);
1088
1249
  const deployed = [
1089
1250
  ...new Set(
1090
1251
  this.targetHarnesses().flatMap(
1091
- (t) => deployAll(resolved, repositories, patches, this.deployOptsFor(t))
1252
+ (t) => deployAll(
1253
+ [...resolved, ...library.entries],
1254
+ repositories,
1255
+ patches,
1256
+ this.deployOptsFor(t)
1257
+ )
1092
1258
  )
1093
1259
  )
1094
1260
  ];
1095
1261
  await this.renderDriverMcpConfig();
1096
- return { deployed, removed: [], missing: [], lockWritten: false };
1262
+ return { deployed, removed: [], missing: library.missing, lockWritten: false };
1097
1263
  }
1098
1264
  /**
1099
1265
  * Add a single asset (and its transitive dependencies) to the workspace.
@@ -1137,15 +1303,26 @@ var AssetManager = class {
1137
1303
  ];
1138
1304
  this.addDependencyToConfig(ref);
1139
1305
  await this.renderDriverMcpConfig();
1140
- if (resolved.length > 0) {
1141
- const fresh = buildLockFile(resolved, overridesApplied);
1306
+ if (resolved.length > 0 || lib.entries.length > 0) {
1307
+ const fresh = buildLockFile(resolved, overridesApplied, await this.libraryLockEntries(lib));
1142
1308
  const prev = this.tryReadLock();
1143
1309
  if (prev) {
1144
1310
  const sources2 = new Map(prev.sources.map((s) => [s.url, s]));
1145
1311
  for (const s of fresh.sources) sources2.set(s.url, s);
1312
+ const assets = { ...prev.assets };
1313
+ for (const key of Object.keys(fresh.assets)) {
1314
+ if (!fresh.assets[key]?.library) continue;
1315
+ const freshId = parseCanonicalLockKey(key);
1316
+ for (const old of Object.keys(assets)) {
1317
+ const id = parseCanonicalLockKey(old);
1318
+ if (id.kind === freshId.kind && id.publisher === freshId.publisher && id.name === freshId.name) {
1319
+ delete assets[old];
1320
+ }
1321
+ }
1322
+ }
1146
1323
  writeLock(this.lockPath, {
1147
1324
  ...fresh,
1148
- assets: { ...prev.assets, ...fresh.assets },
1325
+ assets: { ...assets, ...fresh.assets },
1149
1326
  sources: [...sources2.values()].sort((a, b) => a.url.localeCompare(b.url)),
1150
1327
  // buildLockFile never emits a plugins slice — preserve the reconciler's.
1151
1328
  plugins: prev.plugins
@@ -1509,7 +1686,8 @@ var AssetManager = class {
1509
1686
  );
1510
1687
  if (match) return match;
1511
1688
  }
1512
- return null;
1689
+ const lib = await this.resolveLibraryEntries([ref]);
1690
+ return lib.entries[0] ?? null;
1513
1691
  }
1514
1692
  /**
1515
1693
  * List all assets currently deployed in the workspace (or global cache).
@@ -1705,8 +1883,8 @@ var AssetManager = class {
1705
1883
  const lockEntry = lockByKindName.get(`${d.kind}:${d.name}`);
1706
1884
  const publisher = lockEntry?.publisher ?? "";
1707
1885
  const version = lockEntry?.version ?? "";
1708
- const slug = lockEntry ? sourceCacheKey(lockEntry.url) : "";
1709
- const syncStatus = slug ? computeSyncStatus(repoStatuses.get(slug)) : "unknown";
1886
+ const slug = lockEntry && !lockEntry.library ? sourceCacheKey(lockEntry.url) : "";
1887
+ const syncStatus = lockEntry?.library ? "local" : slug ? computeSyncStatus(repoStatuses.get(slug)) : "unknown";
1710
1888
  const domain = publisher || "unknown";
1711
1889
  entries.push({ kind: d.kind, name: d.name, domain, publisher, version, syncStatus });
1712
1890
  }
@@ -1762,14 +1940,18 @@ var AssetManager = class {
1762
1940
  return [key, "direct (skaile.yaml)"];
1763
1941
  }
1764
1942
  /**
1765
- * List installed assets whose source repository is behind the remote.
1943
+ * List installed assets that have a newer upstream available.
1766
1944
  *
1767
- * Only remote repositories (not local paths) are checked for staleness.
1945
+ * Two kinds of staleness are reported:
1946
+ * - **Source assets** — only remote repositories (not local paths) are checked;
1947
+ * `behind` is the number of commits the local clone is missing.
1948
+ * - **Library assets** — a library-origin lock entry whose library index now
1949
+ * offers a newer version than the locked one; `behind` is 0, `latestVersion`
1950
+ * and `library` are set. A library not indexed (or removed) is not reported.
1768
1951
  *
1769
- * @returns Array of {@link OutdatedEntry} objects, one per asset in a repository
1770
- * that has commits not yet pulled locally.
1952
+ * @returns Array of {@link OutdatedEntry} objects.
1771
1953
  */
1772
- outdated() {
1954
+ async outdated() {
1773
1955
  const { repositories } = this.loadConfig();
1774
1956
  const lock = this.tryReadLock();
1775
1957
  if (!lock) return [];
@@ -1781,7 +1963,7 @@ var AssetManager = class {
1781
1963
  const status = checkRepoStatus(decl, slug, this.reposDir);
1782
1964
  if (status.behind <= 0) continue;
1783
1965
  for (const [ref, entry] of Object.entries(lock.assets)) {
1784
- if (entry.source.url !== src.url) continue;
1966
+ if (entry.source?.url !== src.url) continue;
1785
1967
  const { publisher, kind, name, version } = parseCanonicalLockKey(ref);
1786
1968
  if (!kind || !name) continue;
1787
1969
  result.push({
@@ -1793,6 +1975,26 @@ var AssetManager = class {
1793
1975
  });
1794
1976
  }
1795
1977
  }
1978
+ const libraryAssets = Object.entries(lock.assets).filter(([, e]) => e.library);
1979
+ if (libraryAssets.length > 0) {
1980
+ const snap = await this.loadLibraryIndex();
1981
+ for (const [ref, entry] of libraryAssets) {
1982
+ const origin = entry.library;
1983
+ const { publisher, kind, name } = parseCanonicalLockKey(ref);
1984
+ if (!publisher || !kind || !name) continue;
1985
+ const def = newestLibraryDef(snap, origin.name, { kind, publisher, name });
1986
+ if (!def || !gt(coerceVersion(def.version), coerceVersion(origin.version))) continue;
1987
+ result.push({
1988
+ kind,
1989
+ name,
1990
+ publisher,
1991
+ currentVersion: origin.version,
1992
+ behind: 0,
1993
+ latestVersion: def.version,
1994
+ library: origin.name
1995
+ });
1996
+ }
1997
+ }
1796
1998
  return result;
1797
1999
  }
1798
2000
  /**
@@ -1802,20 +2004,23 @@ var AssetManager = class {
1802
2004
  * was applied correctly.
1803
2005
  *
1804
2006
  * @param ref - Asset ref in `kind:name` form.
1805
- * @returns Unified diff string, or `null` when there are no differences or the
1806
- * asset is not deployed/resolvable.
2007
+ * @returns A {@link DiffResult}: `not-found` (unknown ref), `not-deployed`,
2008
+ * `identical`, or `differs` with the unified diff.
2009
+ * @throws When `diff(1)` itself fails (exit status other than 0/1).
1807
2010
  */
1808
2011
  async diff(ref) {
1809
2012
  const parsed = parseAssetRef(ref);
1810
2013
  const entry = await this.info(ref);
1811
- if (!entry) return null;
2014
+ if (!entry || !existsSync(entry.source)) return { status: "not-found" };
1812
2015
  const deployedPath = join(
1813
2016
  deployedBase(parsed.kind, this.driverTarget, this.global, this.projectDir),
1814
2017
  parsed.name
1815
2018
  );
1816
- if (!existsSync(deployedPath) || !existsSync(entry.source)) return null;
2019
+ if (!existsSync(deployedPath)) return { status: "not-deployed" };
1817
2020
  const r = spawnSync("diff", ["-ruN", entry.source, deployedPath], { encoding: "utf8" });
1818
- return r.status === 1 ? r.stdout : null;
2021
+ if (r.status === 1) return { status: "differs", diff: r.stdout };
2022
+ if (r.status === 0) return { status: "identical" };
2023
+ throw new Error(`diff failed for ${ref}: ${r.stderr || r.error?.message || "unknown error"}`);
1819
2024
  }
1820
2025
  // ── Lock ───────────────────────────────────────────────────────────────
1821
2026
  /**
@@ -1832,12 +2037,13 @@ var AssetManager = class {
1832
2037
  const provenanceIndex = await buildProvenanceIndex(this.buildClones(repositories), {
1833
2038
  projectDir: this.projectDir
1834
2039
  });
1835
- const { resolved, overridesApplied } = await this.resolveWithStores(dependencies, {
2040
+ const { resolved, missing, overridesApplied } = await this.resolveWithStores(dependencies, {
1836
2041
  provenanceIndex,
1837
2042
  overrides,
1838
2043
  stores
1839
2044
  });
1840
- const lockData = buildLockFile(resolved, overridesApplied);
2045
+ const libraryLock = await this.libraryLockEntries(await this.resolveLibraryEntries(missing));
2046
+ const lockData = buildLockFile(resolved, overridesApplied, libraryLock);
1841
2047
  writeLock(this.lockPath, lockData);
1842
2048
  return lockData;
1843
2049
  }
@@ -1973,11 +2179,12 @@ var AssetManager = class {
1973
2179
  * @param name - Asset name (also used as the directory name).
1974
2180
  * @param kind - Asset kind: `skill` | `agent` | `bundle` | `flow` | `prompt` | `contract`.
1975
2181
  * @param destDir - Parent directory to create the asset in.
2182
+ * @param opts - Optional scaffold content (`description`).
1976
2183
  * @returns `{ ok: true, path }` on success, `{ ok: false, path: errorMessage }` if the
1977
2184
  * directory already exists.
1978
2185
  */
1979
- create(name, kind, destDir) {
1980
- return createScaffold(name, kind, destDir);
2186
+ create(name, kind, destDir, opts) {
2187
+ return createScaffold(name, kind, destDir, opts);
1981
2188
  }
1982
2189
  // ── Contrib (REMOVED 2026-05-12) ───────────────────────────────────────
1983
2190
  //
@@ -2153,5 +2360,5 @@ var AssetManager = class {
2153
2360
  };
2154
2361
 
2155
2362
  export { AssetManager, FACTORY_SOURCE_URL, MissingManifestError, NON_DEPLOYABLE_KINDS, normalizeRepoUrl, parseCanonicalLockKey, parseRefTolerant, renderMcpServerConfig, softDepName };
2156
- //# sourceMappingURL=chunk-R2SYODNK.js.map
2157
- //# sourceMappingURL=chunk-R2SYODNK.js.map
2363
+ //# sourceMappingURL=chunk-QWWDDU5Z.js.map
2364
+ //# sourceMappingURL=chunk-QWWDDU5Z.js.map