@skaile/workspaces 6.0.0 → 6.2.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 (431) hide show
  1. package/CHANGELOG.md +98 -0
  2. package/dist/{asset-feeds-PXUWCXVI.js → asset-feeds-KPKCE64E.js} +31 -23
  3. package/dist/asset-feeds-KPKCE64E.js.map +1 -0
  4. package/dist/asset-manager/catalog-deployer.js +10 -10
  5. package/dist/asset-manager/fragments.js +1 -1
  6. package/dist/asset-manager/index.js +19 -19
  7. package/dist/asset-manager/installer.js +13 -13
  8. package/dist/asset-manager/renderers.js +11 -11
  9. package/dist/asset-manager/src/index.d.ts +339 -19
  10. package/dist/asset-manager/src/index.d.ts.map +1 -1
  11. package/dist/asset-manager/src/installer.d.ts +40 -0
  12. package/dist/asset-manager/src/installer.d.ts.map +1 -1
  13. package/dist/asset-manager/src/mcp-config.d.ts +21 -0
  14. package/dist/asset-manager/src/mcp-config.d.ts.map +1 -1
  15. package/dist/asset-manager/src/renderers.d.ts +7 -0
  16. package/dist/asset-manager/src/renderers.d.ts.map +1 -1
  17. package/dist/bridge/harnesses/claude-sdk.js +18 -22
  18. package/dist/bridge/harnesses/claude-sdk.js.map +1 -1
  19. package/dist/bridge/harnesses/codex.js +24 -17
  20. package/dist/bridge/harnesses/codex.js.map +1 -1
  21. package/dist/bridge/harnesses/continue.js +14 -14
  22. package/dist/bridge/harnesses/echo.js +4 -4
  23. package/dist/bridge/harnesses/gemini.js +10 -10
  24. package/dist/bridge/harnesses/goose.js +14 -14
  25. package/dist/bridge/harnesses/omp.js +15 -8
  26. package/dist/bridge/harnesses/omp.js.map +1 -1
  27. package/dist/bridge/harnesses/opencode.js +14 -14
  28. package/dist/bridge/harnesses/qwen.js +10 -10
  29. package/dist/bridge/index.js +19 -19
  30. package/dist/bridge/src/claude-sdk-surface.d.ts +17 -0
  31. package/dist/bridge/src/claude-sdk-surface.d.ts.map +1 -0
  32. package/dist/bridge/src/harness-model-check.d.ts +30 -0
  33. package/dist/bridge/src/harness-model-check.d.ts.map +1 -1
  34. package/dist/bridge/src/harnesses/_subprocess-cli.d.ts.map +1 -1
  35. package/dist/bridge/src/harnesses/claude-sdk.d.ts.map +1 -1
  36. package/dist/bridge/src/harnesses/codex.d.ts.map +1 -1
  37. package/dist/bridge/src/harnesses/omp.d.ts.map +1 -1
  38. package/dist/bridge/src/index.d.ts +2 -1
  39. package/dist/bridge/src/index.d.ts.map +1 -1
  40. package/dist/bridge/src/normalizer.d.ts +3 -1
  41. package/dist/bridge/src/normalizer.d.ts.map +1 -1
  42. package/dist/bridge/src/runner-private-env.d.ts +7 -0
  43. package/dist/bridge/src/runner-private-env.d.ts.map +1 -1
  44. package/dist/{chunk-HK7HMEPT.js → chunk-27SXN33H.js} +13 -5
  45. package/dist/chunk-27SXN33H.js.map +1 -0
  46. package/dist/{chunk-TKHJXPSB.js → chunk-2XM3ZH36.js} +183 -33
  47. package/dist/chunk-2XM3ZH36.js.map +1 -0
  48. package/dist/{chunk-E3GPGTW3.js → chunk-3HACK2Z7.js} +142 -28
  49. package/dist/chunk-3HACK2Z7.js.map +1 -0
  50. package/dist/{chunk-T2BDID2J.js → chunk-5JPW27BI.js} +10 -9
  51. package/dist/chunk-5JPW27BI.js.map +1 -0
  52. package/dist/{chunk-2UUKCROR.js → chunk-5LQ62LNT.js} +4 -4
  53. package/dist/{chunk-2UUKCROR.js.map → chunk-5LQ62LNT.js.map} +1 -1
  54. package/dist/{chunk-UL22SDGR.js → chunk-6CYKTHNT.js} +194 -127
  55. package/dist/chunk-6CYKTHNT.js.map +1 -0
  56. package/dist/{chunk-XFIEVEU7.js → chunk-6OHZUUR7.js} +5 -4
  57. package/dist/chunk-6OHZUUR7.js.map +1 -0
  58. package/dist/{chunk-E572OHGY.js → chunk-76FLBODK.js} +4 -3
  59. package/dist/chunk-76FLBODK.js.map +1 -0
  60. package/dist/{chunk-GN4VVSAA.js → chunk-7DRFKAJZ.js} +7 -7
  61. package/dist/{chunk-GN4VVSAA.js.map → chunk-7DRFKAJZ.js.map} +1 -1
  62. package/dist/chunk-7H6XRCPG.js +31 -0
  63. package/dist/chunk-7H6XRCPG.js.map +1 -0
  64. package/dist/{chunk-MCUJTNY5.js → chunk-7Y6S4XLL.js} +3 -3
  65. package/dist/{chunk-MCUJTNY5.js.map → chunk-7Y6S4XLL.js.map} +1 -1
  66. package/dist/{chunk-DHYSUJ3H.js → chunk-BEYNH2LS.js} +4 -4
  67. package/dist/{chunk-DHYSUJ3H.js.map → chunk-BEYNH2LS.js.map} +1 -1
  68. package/dist/{chunk-GEQSUC6U.js → chunk-BOT64P3U.js} +4 -4
  69. package/dist/{chunk-GEQSUC6U.js.map → chunk-BOT64P3U.js.map} +1 -1
  70. package/dist/{chunk-L4YKW5AY.js → chunk-BRK5QZKI.js} +121 -20
  71. package/dist/chunk-BRK5QZKI.js.map +1 -0
  72. package/dist/{chunk-YGRZNFRO.js → chunk-BY5WIRCU.js} +58 -5
  73. package/dist/chunk-BY5WIRCU.js.map +1 -0
  74. package/dist/{chunk-Z7ZEZZB6.js → chunk-C5HFK34M.js} +3 -3
  75. package/dist/chunk-C5HFK34M.js.map +1 -0
  76. package/dist/{chunk-DUMTLYSO.js → chunk-COAFAYBS.js} +31 -7
  77. package/dist/chunk-COAFAYBS.js.map +1 -0
  78. package/dist/{chunk-7XSAW5OC.js → chunk-E5NQRHEB.js} +30 -7
  79. package/dist/chunk-E5NQRHEB.js.map +1 -0
  80. package/dist/{chunk-BFMYYNDT.js → chunk-F3D25RGM.js} +11 -3
  81. package/dist/chunk-F3D25RGM.js.map +1 -0
  82. package/dist/{chunk-VBI7HGHB.js → chunk-GF5JXQIZ.js} +3 -3
  83. package/dist/{chunk-VBI7HGHB.js.map → chunk-GF5JXQIZ.js.map} +1 -1
  84. package/dist/{chunk-ZFUZ5AKM.js → chunk-I7LC5TDY.js} +3 -3
  85. package/dist/{chunk-ZFUZ5AKM.js.map → chunk-I7LC5TDY.js.map} +1 -1
  86. package/dist/{chunk-3IXIEHUB.js → chunk-ICSGNT5P.js} +7 -7
  87. package/dist/{chunk-3IXIEHUB.js.map → chunk-ICSGNT5P.js.map} +1 -1
  88. package/dist/{chunk-WEH33JSG.js → chunk-ITFCWMOY.js} +93 -29
  89. package/dist/chunk-ITFCWMOY.js.map +1 -0
  90. package/dist/{chunk-WDXZA7QW.js → chunk-IZQOO6MN.js} +2 -2
  91. package/dist/{chunk-WDXZA7QW.js.map → chunk-IZQOO6MN.js.map} +1 -1
  92. package/dist/{chunk-WDAIWDLK.js → chunk-JFLQICIU.js} +5 -5
  93. package/dist/{chunk-WDAIWDLK.js.map → chunk-JFLQICIU.js.map} +1 -1
  94. package/dist/{chunk-ARWKK325.js → chunk-JJJ2G4K2.js} +5 -5
  95. package/dist/{chunk-ARWKK325.js.map → chunk-JJJ2G4K2.js.map} +1 -1
  96. package/dist/{chunk-GOCWM7FN.js → chunk-JMIKGAUA.js} +43 -4
  97. package/dist/chunk-JMIKGAUA.js.map +1 -0
  98. package/dist/{chunk-X3RMRJNR.js → chunk-JRN5QF4C.js} +8 -3
  99. package/dist/chunk-JRN5QF4C.js.map +1 -0
  100. package/dist/{chunk-SNEE6UGY.js → chunk-K3R2UKG7.js} +18 -12
  101. package/dist/chunk-K3R2UKG7.js.map +1 -0
  102. package/dist/{chunk-VXEYX73S.js → chunk-KB56WBQ3.js} +4 -4
  103. package/dist/{chunk-VXEYX73S.js.map → chunk-KB56WBQ3.js.map} +1 -1
  104. package/dist/{chunk-OHNKYHRR.js → chunk-KJSC2ZD6.js} +264 -18
  105. package/dist/chunk-KJSC2ZD6.js.map +1 -0
  106. package/dist/{chunk-UQ33Y4DM.js → chunk-KPKGWXUJ.js} +4 -4
  107. package/dist/{chunk-UQ33Y4DM.js.map → chunk-KPKGWXUJ.js.map} +1 -1
  108. package/dist/{chunk-AF432MS3.js → chunk-KXJMQTOU.js} +3 -3
  109. package/dist/{chunk-AF432MS3.js.map → chunk-KXJMQTOU.js.map} +1 -1
  110. package/dist/chunk-LRBP3234.js +302 -0
  111. package/dist/chunk-LRBP3234.js.map +1 -0
  112. package/dist/{chunk-UVVVR4XO.js → chunk-M4OG2YN4.js} +4 -4
  113. package/dist/{chunk-UVVVR4XO.js.map → chunk-M4OG2YN4.js.map} +1 -1
  114. package/dist/{chunk-QOM5Z62G.js → chunk-MAZ3UXJK.js} +17 -24
  115. package/dist/chunk-MAZ3UXJK.js.map +1 -0
  116. package/dist/{chunk-Y2TO2U7W.js → chunk-MM4YO3EL.js} +3 -3
  117. package/dist/{chunk-Y2TO2U7W.js.map → chunk-MM4YO3EL.js.map} +1 -1
  118. package/dist/{chunk-OULSJRXV.js → chunk-OCQNUV4T.js} +7 -7
  119. package/dist/{chunk-OULSJRXV.js.map → chunk-OCQNUV4T.js.map} +1 -1
  120. package/dist/{chunk-SZXGRHQQ.js → chunk-PJJSBZZP.js} +4 -4
  121. package/dist/{chunk-SZXGRHQQ.js.map → chunk-PJJSBZZP.js.map} +1 -1
  122. package/dist/{chunk-OAHVKSQJ.js → chunk-PKBLJI23.js} +1471 -126
  123. package/dist/chunk-PKBLJI23.js.map +1 -0
  124. package/dist/{chunk-NOA6EJXE.js → chunk-PKE3PXOK.js} +3 -3
  125. package/dist/{chunk-NOA6EJXE.js.map → chunk-PKE3PXOK.js.map} +1 -1
  126. package/dist/{chunk-WYHQUCHR.js → chunk-PMWRM4EJ.js} +109 -48
  127. package/dist/chunk-PMWRM4EJ.js.map +1 -0
  128. package/dist/{chunk-H6UVIKQ2.js → chunk-PNUM7GUY.js} +3 -3
  129. package/dist/{chunk-H6UVIKQ2.js.map → chunk-PNUM7GUY.js.map} +1 -1
  130. package/dist/{chunk-SRODW6M2.js → chunk-Q5RN4PWV.js} +3 -3
  131. package/dist/{chunk-SRODW6M2.js.map → chunk-Q5RN4PWV.js.map} +1 -1
  132. package/dist/{chunk-LN6QB7XI.js → chunk-QIHL3YPL.js} +4 -4
  133. package/dist/{chunk-LN6QB7XI.js.map → chunk-QIHL3YPL.js.map} +1 -1
  134. package/dist/{chunk-U56GGCC2.js → chunk-QK7AG5AV.js} +4 -4
  135. package/dist/{chunk-U56GGCC2.js.map → chunk-QK7AG5AV.js.map} +1 -1
  136. package/dist/{chunk-OTIB4D2K.js → chunk-QPWR3YMY.js} +15 -5
  137. package/dist/chunk-QPWR3YMY.js.map +1 -0
  138. package/dist/{chunk-4DWBSTYA.js → chunk-QXKUFROW.js} +22 -5
  139. package/dist/chunk-QXKUFROW.js.map +1 -0
  140. package/dist/{chunk-4XWLB7JB.js → chunk-RQMIZONH.js} +95 -35
  141. package/dist/chunk-RQMIZONH.js.map +1 -0
  142. package/dist/{chunk-LSI2IVFT.js → chunk-RXGPFAMN.js} +4 -3
  143. package/dist/chunk-RXGPFAMN.js.map +1 -0
  144. package/dist/{chunk-3JKGY2YC.js → chunk-S2H3RBK7.js} +182 -33
  145. package/dist/chunk-S2H3RBK7.js.map +1 -0
  146. package/dist/{chunk-VJRTDKXS.js → chunk-SJNZ4WPA.js} +165 -106
  147. package/dist/chunk-SJNZ4WPA.js.map +1 -0
  148. package/dist/{chunk-KX2PT5Q4.js → chunk-T2VBPVWZ.js} +77 -18
  149. package/dist/chunk-T2VBPVWZ.js.map +1 -0
  150. package/dist/{chunk-6Z5KTFJT.js → chunk-TSTRH4SM.js} +3 -3
  151. package/dist/{chunk-6Z5KTFJT.js.map → chunk-TSTRH4SM.js.map} +1 -1
  152. package/dist/{chunk-7CV3HFWJ.js → chunk-TZERN27L.js} +5 -5
  153. package/dist/{chunk-7CV3HFWJ.js.map → chunk-TZERN27L.js.map} +1 -1
  154. package/dist/{chunk-JDR6ILCW.js → chunk-U673DB5U.js} +4 -4
  155. package/dist/{chunk-JDR6ILCW.js.map → chunk-U673DB5U.js.map} +1 -1
  156. package/dist/{chunk-FKU57Q5Q.js → chunk-URCJIV7T.js} +3 -3
  157. package/dist/{chunk-FKU57Q5Q.js.map → chunk-URCJIV7T.js.map} +1 -1
  158. package/dist/{chunk-ADPM6AYF.js → chunk-VSX2G7LA.js} +3 -3
  159. package/dist/{chunk-ADPM6AYF.js.map → chunk-VSX2G7LA.js.map} +1 -1
  160. package/dist/{chunk-F2GOZMRA.js → chunk-X37JUNEW.js} +49 -49
  161. package/dist/chunk-X37JUNEW.js.map +1 -0
  162. package/dist/{chunk-NMI2TWMH.js → chunk-Z3IRZBXB.js} +158 -344
  163. package/dist/chunk-Z3IRZBXB.js.map +1 -0
  164. package/dist/{chunk-7TPYPVAH.js → chunk-ZWJCRHP3.js} +3 -3
  165. package/dist/{chunk-7TPYPVAH.js.map → chunk-ZWJCRHP3.js.map} +1 -1
  166. package/dist/{claude-code-VJGYBXQR.js → claude-code-BBMNVH2J.js} +5 -5
  167. package/dist/{claude-code-VJGYBXQR.js.map → claude-code-BBMNVH2J.js.map} +1 -1
  168. package/dist/cli/index.js +964 -501
  169. package/dist/cli/index.js.map +1 -1
  170. package/dist/cli/src/agent-pins.d.ts +11 -0
  171. package/dist/cli/src/agent-pins.d.ts.map +1 -1
  172. package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
  173. package/dist/cli/src/commands/catalog.d.ts +1 -1
  174. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  175. package/dist/cli/src/commands/config.d.ts.map +1 -1
  176. package/dist/cli/src/commands/diff.d.ts.map +1 -1
  177. package/dist/cli/src/commands/harness.d.ts +24 -0
  178. package/dist/cli/src/commands/harness.d.ts.map +1 -0
  179. package/dist/cli/src/commands/integration.d.ts.map +1 -1
  180. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  181. package/dist/cli/src/commands/library-index.d.ts +28 -3
  182. package/dist/cli/src/commands/library-index.d.ts.map +1 -1
  183. package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
  184. package/dist/cli/src/commands/migrate-assets.d.ts.map +1 -1
  185. package/dist/cli/src/commands/outdated.d.ts.map +1 -1
  186. package/dist/cli/src/commands/plugin-registry-cmd.d.ts.map +1 -1
  187. package/dist/cli/src/commands/project.d.ts +19 -1
  188. package/dist/cli/src/commands/project.d.ts.map +1 -1
  189. package/dist/cli/src/commands/rebuild.d.ts.map +1 -1
  190. package/dist/cli/src/commands/run.d.ts.map +1 -1
  191. package/dist/cli/src/commands/serve-preflight.d.ts +31 -1
  192. package/dist/cli/src/commands/serve-preflight.d.ts.map +1 -1
  193. package/dist/cli/src/commands/serve.d.ts +10 -0
  194. package/dist/cli/src/commands/serve.d.ts.map +1 -1
  195. package/dist/cli/src/commands/session-logs/local-query.d.ts +2 -0
  196. package/dist/cli/src/commands/session-logs/local-query.d.ts.map +1 -1
  197. package/dist/cli/src/commands/source-manifest-publish.d.ts.map +1 -1
  198. package/dist/cli/src/commands/source-manifest.d.ts +19 -7
  199. package/dist/cli/src/commands/source-manifest.d.ts.map +1 -1
  200. package/dist/cli/src/commands/source.d.ts +9 -2
  201. package/dist/cli/src/commands/source.d.ts.map +1 -1
  202. package/dist/cli/src/commands/store.d.ts.map +1 -1
  203. package/dist/cli/src/commands/update.d.ts.map +1 -1
  204. package/dist/cli/src/commands/validate-instances.d.ts.map +1 -1
  205. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  206. package/dist/cli/src/commands/why.d.ts.map +1 -1
  207. package/dist/cli/src/config-checks.d.ts +55 -0
  208. package/dist/cli/src/config-checks.d.ts.map +1 -0
  209. package/dist/cli/src/harness-error.d.ts +12 -1
  210. package/dist/cli/src/harness-error.d.ts.map +1 -1
  211. package/dist/cli/src/helpers.d.ts +18 -8
  212. package/dist/cli/src/helpers.d.ts.map +1 -1
  213. package/dist/cli/src/plugin-store/index.d.ts +10 -1
  214. package/dist/cli/src/plugin-store/index.d.ts.map +1 -1
  215. package/dist/cli/src/plugin-store/spec.d.ts +8 -0
  216. package/dist/cli/src/plugin-store/spec.d.ts.map +1 -1
  217. package/dist/cli/src/skill-checks.d.ts +27 -0
  218. package/dist/cli/src/skill-checks.d.ts.map +1 -1
  219. package/dist/cli/src/store-addable.d.ts +11 -0
  220. package/dist/cli/src/store-addable.d.ts.map +1 -1
  221. package/dist/connectors/config.js +5 -5
  222. package/dist/connectors/index.js +23 -23
  223. package/dist/connectors/src/connector-manager.d.ts.map +1 -1
  224. package/dist/connectors-47EM6C2P.js +48 -0
  225. package/dist/{connectors-CXZLXAFZ.js.map → connectors-47EM6C2P.js.map} +1 -1
  226. package/dist/core/framework.js +1 -1
  227. package/dist/core/index.js +9 -9
  228. package/dist/core/manifest.js +2 -2
  229. package/dist/core/models.js +1 -1
  230. package/dist/core/provider-registry-credentials.js +2 -2
  231. package/dist/core/provider-registry.js +1 -1
  232. package/dist/core/publish-manifest.js +3 -3
  233. package/dist/core/ref.js +1 -1
  234. package/dist/core/runtime-assets.js +5 -5
  235. package/dist/core/src/agent-instances.d.ts.map +1 -1
  236. package/dist/core/src/config-key-diagnostics.d.ts +9 -0
  237. package/dist/core/src/config-key-diagnostics.d.ts.map +1 -0
  238. package/dist/core/src/framework.d.ts +5 -3
  239. package/dist/core/src/framework.d.ts.map +1 -1
  240. package/dist/core/src/index.d.ts +3 -2
  241. package/dist/core/src/index.d.ts.map +1 -1
  242. package/dist/core/src/lock.d.ts +12 -0
  243. package/dist/core/src/lock.d.ts.map +1 -1
  244. package/dist/core/src/manifest.d.ts +25 -0
  245. package/dist/core/src/manifest.d.ts.map +1 -1
  246. package/dist/core/src/models.d.ts +15 -0
  247. package/dist/core/src/models.d.ts.map +1 -1
  248. package/dist/core/src/provider-registry.d.ts +6 -0
  249. package/dist/core/src/provider-registry.d.ts.map +1 -1
  250. package/dist/core/src/workspace-config.d.ts +18 -1
  251. package/dist/core/src/workspace-config.d.ts.map +1 -1
  252. package/dist/core/src/workspace-yaml-editor.d.ts +9 -2
  253. package/dist/core/src/workspace-yaml-editor.d.ts.map +1 -1
  254. package/dist/core/workspace-config.js +4 -4
  255. package/dist/deploy/index.js +9 -9
  256. package/dist/discovery/index.js +5 -5
  257. package/dist/discovery/src/builtin-providers.d.ts.map +1 -1
  258. package/dist/discovery/src/parse-manifest.d.ts.map +1 -1
  259. package/dist/{ensure-sources-UPTHZKGF.js → ensure-sources-K5EFNC3L.js} +36 -22
  260. package/dist/ensure-sources-K5EFNC3L.js.map +1 -0
  261. package/dist/factory-assets/connectors/box.js +23 -23
  262. package/dist/factory-assets/connectors/deploy.js +23 -23
  263. package/dist/factory-assets/connectors/devserver.js +23 -23
  264. package/dist/factory-assets/connectors/flow/adapter.js +23 -23
  265. package/dist/factory-assets/connectors/flow/contract/normalize.d.ts.map +1 -1
  266. package/dist/factory-assets/connectors/flow/contract.js +1 -1
  267. package/dist/factory-assets/connectors/flow/engine.js +11 -11
  268. package/dist/factory-assets/connectors/flow/run-flow.d.ts.map +1 -1
  269. package/dist/factory-assets/connectors/flow/run-flow.js +25 -25
  270. package/dist/factory-assets/connectors/flow.js +23 -23
  271. package/dist/factory-assets/connectors/git.js +23 -23
  272. package/dist/factory-assets/connectors/gmail.js +23 -23
  273. package/dist/factory-assets/connectors/googledrive.js +23 -23
  274. package/dist/factory-assets/connectors/local.js +23 -23
  275. package/dist/factory-assets/connectors/mattermost.js +23 -23
  276. package/dist/factory-assets/connectors/memory.js +23 -23
  277. package/dist/factory-assets/connectors/minio.js +23 -23
  278. package/dist/factory-assets/connectors/postgres.js +23 -23
  279. package/dist/factory-assets/connectors/s3.js +23 -23
  280. package/dist/factory-assets/connectors/sharepoint.js +23 -23
  281. package/dist/factory-assets/connectors/sqlite.js +23 -23
  282. package/dist/factory-assets/connectors/static-server.js +23 -23
  283. package/dist/factory-assets/connectors/tunnel.js +23 -23
  284. package/dist/factory-assets/connectors/webdav.js +23 -23
  285. package/dist/factory-assets/connectors/xstate-store.js +23 -23
  286. package/dist/factory-assets/connectors/xstate.js +23 -23
  287. package/dist/factory-assets/skills/authoring-skaile-assets/SKILL.md +1 -1
  288. package/dist/factory-assets/skills/authoring-skaile-manifests/SKILL.md +2 -2
  289. package/dist/factory-assets/skills/authoring-skaile-manifests/references/dependency-standard.md +3 -3
  290. package/dist/flows-KLBNSKLO.js +26 -0
  291. package/dist/{flows-TJQIMGUX.js.map → flows-KLBNSKLO.js.map} +1 -1
  292. package/dist/helpers-LUSV2ICC.js +52 -0
  293. package/dist/{helpers-DE53KG3E.js.map → helpers-LUSV2ICC.js.map} +1 -1
  294. package/dist/library/index.js +14 -14
  295. package/dist/library/install.js +5 -5
  296. package/dist/library/src/index.d.ts +2 -2
  297. package/dist/library/src/index.d.ts.map +1 -1
  298. package/dist/library/src/install/index.d.ts +1 -1
  299. package/dist/library/src/install/index.d.ts.map +1 -1
  300. package/dist/library/src/install/install-from-manifest.d.ts +13 -0
  301. package/dist/library/src/install/install-from-manifest.d.ts.map +1 -1
  302. package/dist/library/src/install/source-fetch-github.d.ts.map +1 -1
  303. package/dist/library/src/local/library-dir.d.ts +22 -5
  304. package/dist/library/src/local/library-dir.d.ts.map +1 -1
  305. package/dist/library/src/local/local-catalog-source.d.ts.map +1 -1
  306. package/dist/library/src/manifest-writer.d.ts.map +1 -1
  307. package/dist/library/src/remote/remote-catalog-source.d.ts +8 -0
  308. package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
  309. package/dist/library/src/remote/rest-catalog-source.d.ts +3 -2
  310. package/dist/library/src/remote/rest-catalog-source.d.ts.map +1 -1
  311. package/dist/{library-publish-KKQ2ULLX.js → library-publish-XMRCKRNR.js} +59 -58
  312. package/dist/library-publish-XMRCKRNR.js.map +1 -0
  313. package/dist/model-endpoint/index.js +12 -12
  314. package/dist/model-endpoint/src/openai-chat.d.ts +7 -2
  315. package/dist/model-endpoint/src/openai-chat.d.ts.map +1 -1
  316. package/dist/model-endpoint/src/openai-shared.d.ts +8 -0
  317. package/dist/model-endpoint/src/openai-shared.d.ts.map +1 -1
  318. package/dist/model-endpoint/src/server.d.ts.map +1 -1
  319. package/dist/model-endpoint/src/types.d.ts +1 -1
  320. package/dist/model-endpoint/src/types.d.ts.map +1 -1
  321. package/dist/model-endpoint/src/usage-cost.d.ts +23 -0
  322. package/dist/model-endpoint/src/usage-cost.d.ts.map +1 -0
  323. package/dist/open-library-XBR46DJL.js +56 -0
  324. package/dist/{open-library-RJGJIW5H.js.map → open-library-XBR46DJL.js.map} +1 -1
  325. package/dist/open-registry-W562DCDL.js +32 -0
  326. package/dist/{open-registry-3QS3J7KO.js.map → open-registry-W562DCDL.js.map} +1 -1
  327. package/dist/paths-2AZXB3QL.js +22 -0
  328. package/dist/{paths-QAV4C3KX.js.map → paths-2AZXB3QL.js.map} +1 -1
  329. package/dist/plugin-store-36SIL4TV.js +23 -0
  330. package/dist/{plugin-store-MSH6GK6T.js.map → plugin-store-36SIL4TV.js.map} +1 -1
  331. package/dist/project-D7GN7WLS.js +86 -0
  332. package/dist/{project-HZW2MZPA.js.map → project-D7GN7WLS.js.map} +1 -1
  333. package/dist/resolver/index.js +10 -10
  334. package/dist/runner/index.js +40 -40
  335. package/dist/runner/src/capability-roundtrip.d.ts +7 -6
  336. package/dist/runner/src/capability-roundtrip.d.ts.map +1 -1
  337. package/dist/runner/src/composition/content-source.d.ts.map +1 -1
  338. package/dist/runner/src/composition/errors.d.ts +16 -1
  339. package/dist/runner/src/composition/errors.d.ts.map +1 -1
  340. package/dist/runner/src/credential-notice.d.ts +3 -3
  341. package/dist/runner/src/credential-notice.d.ts.map +1 -1
  342. package/dist/runner/src/serve.d.ts +20 -7
  343. package/dist/runner/src/serve.d.ts.map +1 -1
  344. package/dist/sdk/asset-manager.js +19 -19
  345. package/dist/sdk/bridge.js +19 -19
  346. package/dist/sdk/core.js +9 -9
  347. package/dist/sdk/flow.js +11 -11
  348. package/dist/sdk/index.js +40 -40
  349. package/dist/sdk/resolver.js +10 -10
  350. package/dist/sdk/runner.js +40 -40
  351. package/dist/sdk/transport/ws/server.js +10 -10
  352. package/dist/sdk/transport/ws.js +10 -10
  353. package/dist/sdk/transport.js +10 -10
  354. package/dist/serve-preflight-CGA5G3AE.js +135 -0
  355. package/dist/serve-preflight-CGA5G3AE.js.map +1 -0
  356. package/dist/{setup-AGYB4PKR.js → setup-IBDNJAOU.js} +32 -32
  357. package/dist/{setup-AGYB4PKR.js.map → setup-IBDNJAOU.js.map} +1 -1
  358. package/dist/skills-CTTO7SZK.js +26 -0
  359. package/dist/{skills-2LMQ2IAD.js.map → skills-CTTO7SZK.js.map} +1 -1
  360. package/dist/source-2DJ5KNOI.js +85 -0
  361. package/dist/{source-GBMYD3RO.js.map → source-2DJ5KNOI.js.map} +1 -1
  362. package/dist/source-fetch-github-RWHV4I5Z.js +4 -0
  363. package/dist/{source-fetch-github-ST4MFL3D.js.map → source-fetch-github-RWHV4I5Z.js.map} +1 -1
  364. package/dist/{source-manifest-publish-FK22TVQT.js → source-manifest-publish-IYWUMUCY.js} +55 -57
  365. package/dist/source-manifest-publish-IYWUMUCY.js.map +1 -0
  366. package/dist/transport/index.js +10 -10
  367. package/dist/transport/ws/server.js +10 -10
  368. package/dist/transport/ws.js +10 -10
  369. package/dist/tui/index.js +48 -41
  370. package/dist/tui/index.js.map +1 -1
  371. package/dist/tui/src/repl.d.ts.map +1 -1
  372. package/dist/types/manifests.js +1 -1
  373. package/dist/types/src/install-manifest.d.ts +1 -1
  374. package/dist/types/src/install-manifest.d.ts.map +1 -1
  375. package/dist/types/src/manifests/index.d.ts +1 -1
  376. package/dist/types/src/manifests/index.d.ts.map +1 -1
  377. package/dist/types/src/manifests/scaffold-body.d.ts +2 -0
  378. package/dist/types/src/manifests/scaffold-body.d.ts.map +1 -1
  379. package/dist/workspace-plugin/adapters/mcp.js +30 -30
  380. package/dist/workspace-plugin/adapters/omp.js +15 -15
  381. package/dist/workspace-plugin/index.js +2 -2
  382. package/package.json +1 -1
  383. package/dist/asset-feeds-PXUWCXVI.js.map +0 -1
  384. package/dist/chunk-3JKGY2YC.js.map +0 -1
  385. package/dist/chunk-4DWBSTYA.js.map +0 -1
  386. package/dist/chunk-4XWLB7JB.js.map +0 -1
  387. package/dist/chunk-7XSAW5OC.js.map +0 -1
  388. package/dist/chunk-BFMYYNDT.js.map +0 -1
  389. package/dist/chunk-DUMTLYSO.js.map +0 -1
  390. package/dist/chunk-E3GPGTW3.js.map +0 -1
  391. package/dist/chunk-E572OHGY.js.map +0 -1
  392. package/dist/chunk-F2GOZMRA.js.map +0 -1
  393. package/dist/chunk-GOCWM7FN.js.map +0 -1
  394. package/dist/chunk-HK7HMEPT.js.map +0 -1
  395. package/dist/chunk-KX2PT5Q4.js.map +0 -1
  396. package/dist/chunk-L4YKW5AY.js.map +0 -1
  397. package/dist/chunk-LSI2IVFT.js.map +0 -1
  398. package/dist/chunk-NMI2TWMH.js.map +0 -1
  399. package/dist/chunk-OAHVKSQJ.js.map +0 -1
  400. package/dist/chunk-OHNKYHRR.js.map +0 -1
  401. package/dist/chunk-OTIB4D2K.js.map +0 -1
  402. package/dist/chunk-PUK7TQT4.js +0 -13
  403. package/dist/chunk-PUK7TQT4.js.map +0 -1
  404. package/dist/chunk-QOM5Z62G.js.map +0 -1
  405. package/dist/chunk-SNEE6UGY.js.map +0 -1
  406. package/dist/chunk-T2BDID2J.js.map +0 -1
  407. package/dist/chunk-TKHJXPSB.js.map +0 -1
  408. package/dist/chunk-UL22SDGR.js.map +0 -1
  409. package/dist/chunk-VJRTDKXS.js.map +0 -1
  410. package/dist/chunk-WEH33JSG.js.map +0 -1
  411. package/dist/chunk-WYHQUCHR.js.map +0 -1
  412. package/dist/chunk-X3RMRJNR.js.map +0 -1
  413. package/dist/chunk-XFIEVEU7.js.map +0 -1
  414. package/dist/chunk-YGRZNFRO.js.map +0 -1
  415. package/dist/chunk-Z7ZEZZB6.js.map +0 -1
  416. package/dist/connectors-CXZLXAFZ.js +0 -48
  417. package/dist/ensure-sources-UPTHZKGF.js.map +0 -1
  418. package/dist/flows-TJQIMGUX.js +0 -26
  419. package/dist/helpers-DE53KG3E.js +0 -38
  420. package/dist/library-publish-KKQ2ULLX.js.map +0 -1
  421. package/dist/open-library-RJGJIW5H.js +0 -42
  422. package/dist/open-registry-3QS3J7KO.js +0 -32
  423. package/dist/paths-QAV4C3KX.js +0 -22
  424. package/dist/plugin-store-MSH6GK6T.js +0 -23
  425. package/dist/project-HZW2MZPA.js +0 -84
  426. package/dist/serve-preflight-L4POEHNQ.js +0 -108
  427. package/dist/serve-preflight-L4POEHNQ.js.map +0 -1
  428. package/dist/skills-2LMQ2IAD.js +0 -26
  429. package/dist/source-GBMYD3RO.js +0 -85
  430. package/dist/source-fetch-github-ST4MFL3D.js +0 -4
  431. package/dist/source-manifest-publish-FK22TVQT.js.map +0 -1
@@ -1,14 +1,14 @@
1
- import { readManifestSourceConfig, discoverAssetsInTree, barePublisher, createDefaultKindRegistry, sharesItsFolder, SEMVER_RE, invalidSemverMessage, parseManifestFile } from './chunk-QOM5Z62G.js';
2
- import { installFromManifest, assertSafeManifestPath } from './chunk-7XSAW5OC.js';
3
- import { PresetManifestSchema } from './chunk-E572OHGY.js';
4
- import { defaultLibraryDir, resolveLibraryDir, GLOBAL_INSTALL_DIR_NAME, readLock, buildLibraryLockEntries, writeLock, mergeLockFile, buildLockFile, ManifestYamlEditor } from './chunk-L4YKW5AY.js';
5
- import { getGlobalCacheDir, storeManifestSlug, priorStoreManifestSlugs, resolveSourcePublisher } from './chunk-OHNKYHRR.js';
1
+ import { readManifestSourceConfig, discoverAssetsInTree, barePublisher, createDefaultKindRegistry, sharesItsFolder, SEMVER_RE, invalidSemverMessage, parseManifestFile } from './chunk-MAZ3UXJK.js';
2
+ import { installFromManifest, assertSafeManifestPath } from './chunk-E5NQRHEB.js';
3
+ import { PresetManifestSchema } from './chunk-76FLBODK.js';
4
+ import { defaultLibraryDir, resolveLibraryDir, GLOBAL_INSTALL_DIR_NAME, readLock, buildLibraryLockEntries, writeLock, mergeLockFile, buildLockFile, ManifestYamlEditor } from './chunk-BRK5QZKI.js';
5
+ import { getGlobalCacheDir, storeManifestSlug, priorStoreManifestSlugs, resolveSourcePublisher } from './chunk-KJSC2ZD6.js';
6
6
  import { userConfigPath, globalSkaileDir, mergeLegacyEntriesInto, migrateLegacyDir, globalCacheRoot } from './chunk-L5VSIPQD.js';
7
- import { encodeSkaileManifest, expandManifestFiles, SKAILE_MANIFEST_FILENAME, librarySymlinkMessage, loadSkPublishManifest } from './chunk-UQ33Y4DM.js';
8
- import { scanDirectory } from './chunk-GOCWM7FN.js';
9
- import { parseAssetRef, assetRefToStr, isValidAssetName } from './chunk-WDXZA7QW.js';
7
+ import { encodeSkaileManifest, expandManifestFiles, SKAILE_MANIFEST_FILENAME, librarySymlinkMessage, loadSkPublishManifest } from './chunk-KPKGWXUJ.js';
8
+ import { scanDirectory } from './chunk-JMIKGAUA.js';
9
+ import { parseAssetRef, assetRefToStr, isValidAssetName } from './chunk-IZQOO6MN.js';
10
10
  import { __export } from './chunk-NSBPE2FW.js';
11
- import * as fs11 from 'fs';
11
+ import * as fs12 from 'fs';
12
12
  import { existsSync, mkdirSync, symlinkSync, copyFileSync, cpSync } from 'fs';
13
13
  import * as path16 from 'path';
14
14
  import { resolve, relative, sep, join, dirname } from 'path';
@@ -121,9 +121,9 @@ function projectConfigPath(projectDir) {
121
121
  return path16.join(projectDir, ".skaile", CONFIG_FILENAME);
122
122
  }
123
123
  function loadConfigFile(filePath) {
124
- if (!fs11.existsSync(filePath)) return null;
124
+ if (!fs12.existsSync(filePath)) return null;
125
125
  try {
126
- const content = fs11.readFileSync(filePath, "utf-8");
126
+ const content = fs12.readFileSync(filePath, "utf-8");
127
127
  const raw = parse(content);
128
128
  if (!raw || typeof raw !== "object") return null;
129
129
  return SkaileConfigSchema.partial().parse(raw);
@@ -172,10 +172,10 @@ function resolveConfig(opts) {
172
172
  }
173
173
  function saveConfig(filePath, config) {
174
174
  const dir = path16.dirname(filePath);
175
- if (!fs11.existsSync(dir)) {
176
- fs11.mkdirSync(dir, { recursive: true });
175
+ if (!fs12.existsSync(dir)) {
176
+ fs12.mkdirSync(dir, { recursive: true });
177
177
  }
178
- fs11.writeFileSync(filePath, stringify(config, { indent: 2 }), "utf-8");
178
+ fs12.writeFileSync(filePath, stringify(config, { indent: 2 }), "utf-8");
179
179
  }
180
180
  var KnowledgeManifestSchema = z3.looseObject({
181
181
  name: z3.string().optional(),
@@ -202,9 +202,9 @@ function validateKnowledge(data) {
202
202
  // library/src/knowledge/knowledge-kind-provider.ts
203
203
  function collectDirRecursive(baseDir, relativeDir) {
204
204
  const full = path16.join(baseDir, relativeDir);
205
- if (!fs11.existsSync(full) || !fs11.statSync(full).isDirectory()) return [];
205
+ if (!fs12.existsSync(full) || !fs12.statSync(full).isDirectory()) return [];
206
206
  const results = [];
207
- for (const entry of fs11.readdirSync(full, { withFileTypes: true })) {
207
+ for (const entry of fs12.readdirSync(full, { withFileTypes: true })) {
208
208
  const rel = path16.posix.join(relativeDir, entry.name);
209
209
  if (entry.isDirectory()) {
210
210
  results.push(...collectDirRecursive(baseDir, rel));
@@ -312,7 +312,7 @@ var assignments = sqliteTable("assignments", {
312
312
  assignedAt: text("assigned_at").notNull()
313
313
  });
314
314
  function isClone(dir) {
315
- return fs11.existsSync(path16.join(dir, ".git"));
315
+ return fs12.existsSync(path16.join(dir, ".git"));
316
316
  }
317
317
  function getSidecarRoot() {
318
318
  const home = globalSkaileDir();
@@ -346,9 +346,9 @@ function deriveSlug(sourceConfig, sourcePath, existingSlugs) {
346
346
  }
347
347
  function listSidecarSlugsOnDisk() {
348
348
  const root = getSidecarRoot();
349
- if (!fs11.existsSync(root)) return [];
349
+ if (!fs12.existsSync(root)) return [];
350
350
  const out = [];
351
- for (const entry of fs11.readdirSync(root, { withFileTypes: true })) {
351
+ for (const entry of fs12.readdirSync(root, { withFileTypes: true })) {
352
352
  if (!entry.isDirectory()) continue;
353
353
  if (entry.name.startsWith(".")) continue;
354
354
  out.push(entry.name);
@@ -369,16 +369,16 @@ function getStoreManifestsDir() {
369
369
  function storeManifestFile(sourceUrl) {
370
370
  const dir = getStoreManifestsDir();
371
371
  const current = path16.join(dir, `${storeManifestSlug(sourceUrl)}.yaml`);
372
- if (fs11.existsSync(current)) return current;
372
+ if (fs12.existsSync(current)) return current;
373
373
  for (const slug of priorStoreManifestSlugs(sourceUrl)) {
374
374
  const old = path16.join(dir, `${slug}.yaml`);
375
- if (fs11.existsSync(old)) return old;
375
+ if (fs12.existsSync(old)) return old;
376
376
  }
377
377
  return current;
378
378
  }
379
379
  function curatedManifestOverlay(sourceUrl) {
380
380
  const file = storeManifestFile(sourceUrl);
381
- return fs11.existsSync(file) ? file : void 0;
381
+ return fs12.existsSync(file) ? file : void 0;
382
382
  }
383
383
  function commitStoreManifest(file, message) {
384
384
  const root = getStoreRoot();
@@ -410,14 +410,14 @@ function migratedMarkerPath() {
410
410
  }
411
411
  function collectSidecarMigrationCandidates(sidecarRoot) {
412
412
  const candidates = [];
413
- if (fs11.existsSync(sidecarRoot)) {
414
- for (const entry of fs11.readdirSync(sidecarRoot, { withFileTypes: true })) {
413
+ if (fs12.existsSync(sidecarRoot)) {
414
+ for (const entry of fs12.readdirSync(sidecarRoot, { withFileTypes: true })) {
415
415
  if (!entry.isDirectory()) continue;
416
416
  if (entry.name.startsWith(".")) continue;
417
417
  const sidecarDir = path16.join(sidecarRoot, entry.name);
418
418
  const current = path16.join(sidecarDir, "skaile.manifest.yaml");
419
419
  const legacy = path16.join(sidecarDir, ".skaile-source.yaml");
420
- const src = fs11.existsSync(current) ? current : fs11.existsSync(legacy) ? legacy : void 0;
420
+ const src = fs12.existsSync(current) ? current : fs12.existsSync(legacy) ? legacy : void 0;
421
421
  if (src) candidates.push({ src, slug: entry.name });
422
422
  }
423
423
  }
@@ -427,9 +427,9 @@ function moveSidecarManifests(candidates, manifestsDir) {
427
427
  let migrated = 0;
428
428
  for (const { src, slug } of candidates) {
429
429
  const dest = path16.join(manifestsDir, `${slug}.yaml`);
430
- if (fs11.existsSync(dest)) continue;
430
+ if (fs12.existsSync(dest)) continue;
431
431
  try {
432
- fs11.renameSync(src, dest);
432
+ fs12.renameSync(src, dest);
433
433
  migrated++;
434
434
  } catch (err) {
435
435
  process.stderr.write(
@@ -441,10 +441,10 @@ function moveSidecarManifests(candidates, manifestsDir) {
441
441
  return migrated;
442
442
  }
443
443
  function initStoreGitRepo(storeRoot) {
444
- if (fs11.existsSync(path16.join(storeRoot, ".git"))) return;
444
+ if (fs12.existsSync(path16.join(storeRoot, ".git"))) return;
445
445
  try {
446
446
  spawnSync("git", ["init", "--quiet"], { cwd: storeRoot, stdio: "ignore" });
447
- fs11.writeFileSync(
447
+ fs12.writeFileSync(
448
448
  path16.join(storeRoot, ".gitignore"),
449
449
  "# Remote-store cache \u2014 local to this machine.\nremote-cache/\n",
450
450
  "utf8"
@@ -455,14 +455,14 @@ function initStoreGitRepo(storeRoot) {
455
455
  function migrateSidecarsToStoreIfNeeded() {
456
456
  const storeRoot = getStoreRoot();
457
457
  const marker = migratedMarkerPath();
458
- if (fs11.existsSync(marker)) return { migrated: 0, storeRoot };
458
+ if (fs12.existsSync(marker)) return { migrated: 0, storeRoot };
459
459
  const sidecarRoot = getSidecarRoot();
460
460
  const manifestsDir = getStoreManifestsDir();
461
461
  const candidates = collectSidecarMigrationCandidates(sidecarRoot);
462
- fs11.mkdirSync(manifestsDir, { recursive: true });
462
+ fs12.mkdirSync(manifestsDir, { recursive: true });
463
463
  const migrated = moveSidecarManifests(candidates, manifestsDir);
464
464
  initStoreGitRepo(storeRoot);
465
- fs11.writeFileSync(marker, (/* @__PURE__ */ new Date()).toISOString(), "utf8");
465
+ fs12.writeFileSync(marker, (/* @__PURE__ */ new Date()).toISOString(), "utf8");
466
466
  return { migrated, storeRoot };
467
467
  }
468
468
 
@@ -707,7 +707,7 @@ async function purgeOrphanedAssetDefinitions(client) {
707
707
  await client.execute(`PRAGMA user_version = ${ORPHAN_PURGE_VERSION}`);
708
708
  }
709
709
  function assertNoLegacyLibDb(newDbPath) {
710
- if (fs11.existsSync(newDbPath)) return;
710
+ if (fs12.existsSync(newDbPath)) return;
711
711
  const parent = path16.dirname(newDbPath);
712
712
  const skaileHome = globalSkaileDir();
713
713
  const defaultIndexPath2 = path16.join(skaileHome, "index.db");
@@ -723,7 +723,7 @@ function assertNoLegacyLibDb(newDbPath) {
723
723
  candidates.push(path16.join(path16.dirname(parent), "library", "lib.db"));
724
724
  }
725
725
  for (const legacy of candidates) {
726
- if (!fs11.existsSync(legacy)) continue;
726
+ if (!fs12.existsSync(legacy)) continue;
727
727
  throw new Error(
728
728
  `Found legacy index database at ${legacy}. The lib.db \u2192 index.db relocation ran for one release and has been removed. Move the file manually to ${newDbPath} (and any -wal / -shm siblings), then retry.`
729
729
  );
@@ -898,12 +898,12 @@ var LocalIndex = class {
898
898
  dbPath = resolveIndexPath();
899
899
  this._kindRegistry = optionsOrDir?.kindRegistry;
900
900
  }
901
- if (!fs11.existsSync(dir)) {
902
- fs11.mkdirSync(dir, { recursive: true });
901
+ if (!fs12.existsSync(dir)) {
902
+ fs12.mkdirSync(dir, { recursive: true });
903
903
  }
904
904
  const dbParent = path16.dirname(dbPath);
905
- if (!fs11.existsSync(dbParent)) {
906
- fs11.mkdirSync(dbParent, { recursive: true });
905
+ if (!fs12.existsSync(dbParent)) {
906
+ fs12.mkdirSync(dbParent, { recursive: true });
907
907
  }
908
908
  this.libraryDir = dir;
909
909
  this.dbPath = dbPath;
@@ -1250,17 +1250,20 @@ var LocalIndex = class {
1250
1250
  var UNREGISTERED_FILE = ".unregistered-libraries";
1251
1251
  function libraryDirMissing(lib) {
1252
1252
  try {
1253
- return !fs11.statSync(lib.path).isDirectory();
1253
+ return !fs12.statSync(lib.path).isDirectory();
1254
1254
  } catch {
1255
1255
  return true;
1256
1256
  }
1257
1257
  }
1258
1258
  function missingLibraryDirMessage(lib) {
1259
- return `library "${lib.name}" is registered but its directory ${lib.path} is missing - run skaile library init ${lib.name} --path <dir> or skaile library remove ${lib.name}`;
1259
+ const cfg = lib.backendConfig;
1260
+ const cloneUrl = lib.ownership === "reader" && cfg && typeof cfg === "object" && "url" in cfg ? String(cfg.url) : void 0;
1261
+ const head = `library "${lib.name}" is registered but its directory ${lib.path} is missing - `;
1262
+ return cloneUrl ? `${head}it is the clone of the source ${cloneUrl}: run skaile source sync in a project that declares it, or skaile library remove ${lib.name}` : `${head}run skaile library init ${lib.name} --path <dir> or skaile library remove ${lib.name}`;
1260
1263
  }
1261
1264
  function realDir(dir) {
1262
1265
  try {
1263
- return fs11.realpathSync(dir);
1266
+ return fs12.realpathSync(dir);
1264
1267
  } catch {
1265
1268
  return path16.resolve(dir);
1266
1269
  }
@@ -1268,7 +1271,7 @@ function realDir(dir) {
1268
1271
  function unregisteredLibraryNames() {
1269
1272
  try {
1270
1273
  return new Set(
1271
- fs11.readFileSync(path16.join(resolveLibraryDir(), UNREGISTERED_FILE), "utf8").split("\n").map((l) => l.trim()).filter(Boolean)
1274
+ fs12.readFileSync(path16.join(resolveLibraryDir(), UNREGISTERED_FILE), "utf8").split("\n").map((l) => l.trim()).filter(Boolean)
1272
1275
  );
1273
1276
  } catch {
1274
1277
  return /* @__PURE__ */ new Set();
@@ -1279,8 +1282,8 @@ function markLibraryUnregistered(lib) {
1279
1282
  const known = unregisteredLibraryNames();
1280
1283
  const add = [.../* @__PURE__ */ new Set([lib.name, path16.basename(lib.path)])].filter((n) => !known.has(n));
1281
1284
  if (add.length === 0) return;
1282
- fs11.mkdirSync(resolveLibraryDir(), { recursive: true });
1283
- fs11.appendFileSync(
1285
+ fs12.mkdirSync(resolveLibraryDir(), { recursive: true });
1286
+ fs12.appendFileSync(
1284
1287
  path16.join(resolveLibraryDir(), UNREGISTERED_FILE),
1285
1288
  `${add.join("\n")}
1286
1289
  `,
@@ -1297,62 +1300,80 @@ function clearLibraryUnregistered(lib) {
1297
1300
  const keep = [...known].filter((n) => !drop.has(n));
1298
1301
  if (keep.length === known.size) return;
1299
1302
  const file = path16.join(resolveLibraryDir(), UNREGISTERED_FILE);
1300
- if (keep.length === 0) fs11.rmSync(file, { force: true });
1301
- else fs11.writeFileSync(file, `${keep.join("\n")}
1303
+ if (keep.length === 0) fs12.rmSync(file, { force: true });
1304
+ else fs12.writeFileSync(file, `${keep.join("\n")}
1302
1305
  `, "utf8");
1303
1306
  }
1304
1307
  var RENAMED_FILE = ".renamed-libraries";
1305
- function readRenames() {
1308
+ function readAllRenames() {
1306
1309
  const out = /* @__PURE__ */ new Map();
1307
1310
  try {
1308
- for (const line of fs11.readFileSync(path16.join(resolveLibraryDir(), RENAMED_FILE), "utf8").split("\n")) {
1309
- const [from, to] = line.split(" ").map((s) => s.trim());
1310
- if (from && to && from !== to) out.set(from, to);
1311
+ for (const line of fs12.readFileSync(path16.join(resolveLibraryDir(), RENAMED_FILE), "utf8").split("\n")) {
1312
+ const [from, to, flag] = line.split(" ").map((s) => s.trim());
1313
+ if (from && to && from !== to) out.set(from, { to, gone: flag === "gone" });
1311
1314
  }
1312
1315
  } catch {
1313
1316
  }
1314
1317
  return out;
1315
1318
  }
1316
- function writeRenames(renames) {
1319
+ function writeAllRenames(renames) {
1317
1320
  const file = path16.join(resolveLibraryDir(), RENAMED_FILE);
1318
1321
  if (renames.size === 0) {
1319
- fs11.rmSync(file, { force: true });
1322
+ fs12.rmSync(file, { force: true });
1320
1323
  return;
1321
1324
  }
1322
- fs11.mkdirSync(resolveLibraryDir(), { recursive: true });
1323
- fs11.writeFileSync(
1325
+ fs12.mkdirSync(resolveLibraryDir(), { recursive: true });
1326
+ fs12.writeFileSync(
1324
1327
  file,
1325
- `${[...renames].map(([from, to]) => `${from} ${to}`).join("\n")}
1328
+ `${[...renames].map(([from, r]) => `${from} ${r.to}${r.gone ? " gone" : ""}`).join("\n")}
1326
1329
  `,
1327
1330
  "utf8"
1328
1331
  );
1329
1332
  }
1330
1333
  function recordLibraryRename(from, to) {
1331
1334
  if (from === to) return;
1332
- const renames = readRenames();
1333
- for (const [k, v] of renames) if (v === from) renames.set(k, to);
1335
+ const renames = readAllRenames();
1336
+ for (const [k, r] of renames) if (r.to === from && !r.gone) renames.set(k, { to, gone: false });
1334
1337
  renames.delete(to);
1335
- renames.set(from, to);
1336
- for (const [k, v] of renames) if (k === v) renames.delete(k);
1337
- writeRenames(renames);
1338
+ renames.set(from, { to, gone: false });
1339
+ for (const [k, r] of renames) if (k === r.to) renames.delete(k);
1340
+ writeAllRenames(renames);
1338
1341
  }
1339
1342
  function renamedLibraryName(name) {
1340
- return readRenames().get(name);
1343
+ const r = readAllRenames().get(name);
1344
+ return r && !r.gone ? r.to : void 0;
1345
+ }
1346
+ function lastLibraryName(name) {
1347
+ const renames = readAllRenames();
1348
+ let at = name;
1349
+ const seen = /* @__PURE__ */ new Set();
1350
+ for (let next = renames.get(at); next && !seen.has(at); next = renames.get(at)) {
1351
+ seen.add(at);
1352
+ at = next.to;
1353
+ }
1354
+ return at === name ? void 0 : at;
1341
1355
  }
1342
1356
  function clearLibraryRenamed(name) {
1343
- const renames = readRenames();
1344
- if (renames.delete(name)) writeRenames(renames);
1357
+ const renames = readAllRenames();
1358
+ let changed = renames.delete(name);
1359
+ for (const [from, r] of renames) {
1360
+ if (r.gone && r.to === name) {
1361
+ renames.delete(from);
1362
+ changed = true;
1363
+ }
1364
+ }
1365
+ if (changed) writeAllRenames(renames);
1345
1366
  }
1346
1367
  function dropLibraryRenamesTo(name) {
1347
- const renames = readRenames();
1368
+ const renames = readAllRenames();
1348
1369
  let changed = false;
1349
- for (const [from, to] of renames) {
1350
- if (to === name) {
1351
- renames.delete(from);
1370
+ for (const [from, r] of renames) {
1371
+ if (r.to === name && !r.gone) {
1372
+ renames.set(from, { to: name, gone: true });
1352
1373
  changed = true;
1353
1374
  }
1354
1375
  }
1355
- if (changed) writeRenames(renames);
1376
+ if (changed) writeAllRenames(renames);
1356
1377
  }
1357
1378
 
1358
1379
  // library/src/user-library.ts
@@ -1886,8 +1907,8 @@ var LibraryManager = class {
1886
1907
  async removeLibrary(nameOrId, opts = {}) {
1887
1908
  const lib = await this.requireLibrary(nameOrId);
1888
1909
  await this.lib.removeSource(lib.id);
1889
- if (opts.purge && fs11.existsSync(lib.path)) {
1890
- fs11.rmSync(lib.path, { recursive: true, force: true });
1910
+ if (opts.purge && fs12.existsSync(lib.path)) {
1911
+ fs12.rmSync(lib.path, { recursive: true, force: true });
1891
1912
  }
1892
1913
  dropLibraryRenamesTo(lib.name);
1893
1914
  if (!opts.purge) markLibraryUnregistered(lib);
@@ -1906,7 +1927,7 @@ var LibraryManager = class {
1906
1927
  );
1907
1928
  if (writableDefault) return { library: writableDefault, created: false };
1908
1929
  const personalPath = path16.join(librariesDir, "personal");
1909
- fs11.mkdirSync(personalPath, { recursive: true });
1930
+ fs12.mkdirSync(personalPath, { recursive: true });
1910
1931
  const lib = await this.addLibrary({
1911
1932
  name: "personal",
1912
1933
  path: personalPath,
@@ -2089,12 +2110,20 @@ var LocalCatalogSource = class {
2089
2110
  }
2090
2111
  const keepRefs = assets.map((a) => a.ref);
2091
2112
  let pruned = [];
2092
- if (!syncOpts?.only && result.assets.length > 0) {
2113
+ if (!syncOpts?.only && (result.assets.length > 0 || isReadableDirectory(this.rootPath))) {
2093
2114
  pruned = await this.library.pruneAssetDefs(this.sourceId, keepRefs);
2094
2115
  }
2095
2116
  return { assetsFound: assets.length, assetsUpdated, errors, advisories, pruned };
2096
2117
  }
2097
2118
  };
2119
+ function isReadableDirectory(dir) {
2120
+ try {
2121
+ fs12.readdirSync(dir);
2122
+ return true;
2123
+ } catch {
2124
+ return false;
2125
+ }
2126
+ }
2098
2127
  function defToCatalogAsset(def) {
2099
2128
  return {
2100
2129
  id: def.id,
@@ -2231,11 +2260,11 @@ var SidecarGit = class {
2231
2260
  * @docLink packages/library/concepts#sidecar-git
2232
2261
  */
2233
2262
  async ensureInitialized() {
2234
- if (!fs11.existsSync(this.rootDir)) {
2235
- fs11.mkdirSync(this.rootDir, { recursive: true });
2263
+ if (!fs12.existsSync(this.rootDir)) {
2264
+ fs12.mkdirSync(this.rootDir, { recursive: true });
2236
2265
  }
2237
2266
  const gitDir = path16.join(this.rootDir, ".git");
2238
- const freshRepo = !fs11.existsSync(gitDir);
2267
+ const freshRepo = !fs12.existsSync(gitDir);
2239
2268
  if (freshRepo) {
2240
2269
  const init = this.spawn(["init", "-b", "main"]);
2241
2270
  if (init.exitCode !== 0) {
@@ -2243,9 +2272,9 @@ var SidecarGit = class {
2243
2272
  }
2244
2273
  }
2245
2274
  const attrsPath = path16.join(this.rootDir, ".gitattributes");
2246
- if (!fs11.existsSync(attrsPath)) fs11.writeFileSync(attrsPath, GITATTRIBUTES, "utf-8");
2275
+ if (!fs12.existsSync(attrsPath)) fs12.writeFileSync(attrsPath, GITATTRIBUTES, "utf-8");
2247
2276
  const readmePath = path16.join(this.rootDir, "README.md");
2248
- if (!fs11.existsSync(readmePath)) fs11.writeFileSync(readmePath, ROOT_README, "utf-8");
2277
+ if (!fs12.existsSync(readmePath)) fs12.writeFileSync(readmePath, ROOT_README, "utf-8");
2249
2278
  if (!this.hasGlobalGitConfig("user.name")) {
2250
2279
  this.spawn(["config", "user.name", FALLBACK_USER_NAME]);
2251
2280
  }
@@ -2271,7 +2300,7 @@ var SidecarGit = class {
2271
2300
  async commit(slug, message, opts) {
2272
2301
  if (opts?.skip) return;
2273
2302
  const slugDir = path16.join(this.rootDir, slug);
2274
- if (fs11.existsSync(slugDir)) {
2303
+ if (fs12.existsSync(slugDir)) {
2275
2304
  this.spawn(["add", "--", slug]);
2276
2305
  } else {
2277
2306
  this.spawn(["add", "-A"]);
@@ -2332,10 +2361,10 @@ ${result.stderr}`;
2332
2361
  function migrateWorkspaceConfig(dir, opts) {
2333
2362
  const filename = opts?.filename ?? "skaile.yaml";
2334
2363
  const filePath = path16.join(dir, filename);
2335
- if (!fs11.existsSync(filePath)) {
2364
+ if (!fs12.existsSync(filePath)) {
2336
2365
  return { migrated: false, version: 1, warnings: ["No skaile.yaml found"] };
2337
2366
  }
2338
- const content = fs11.readFileSync(filePath, "utf-8");
2367
+ const content = fs12.readFileSync(filePath, "utf-8");
2339
2368
  const raw = parse(content);
2340
2369
  if (!raw || typeof raw !== "object") {
2341
2370
  return { migrated: false, version: 1, warnings: ["Invalid YAML content"] };
@@ -2367,7 +2396,7 @@ function migrateWorkspaceConfig(dir, opts) {
2367
2396
  } else {
2368
2397
  doc.set("version", 2);
2369
2398
  }
2370
- fs11.writeFileSync(filePath, doc.toString(), "utf-8");
2399
+ fs12.writeFileSync(filePath, doc.toString(), "utf-8");
2371
2400
  }
2372
2401
  return {
2373
2402
  migrated: !opts?.dryRun,
@@ -3261,17 +3290,17 @@ var CatalogCache = class {
3261
3290
  /** Read a cached tarball from disk if present, otherwise `null`. */
3262
3291
  readTarball(sha256) {
3263
3292
  const p = this.tarballPath(sha256);
3264
- if (!fs11.existsSync(p)) return null;
3265
- return fs11.readFileSync(p);
3293
+ if (!fs12.existsSync(p)) return null;
3294
+ return fs12.readFileSync(p);
3266
3295
  }
3267
3296
  /** Persist a tarball blob to disk (atomic write). */
3268
3297
  writeTarball(sha256, bytes) {
3269
3298
  const dir = path16.join(this.dir, TARBALL_DIR);
3270
- if (!fs11.existsSync(dir)) fs11.mkdirSync(dir, { recursive: true });
3299
+ if (!fs12.existsSync(dir)) fs12.mkdirSync(dir, { recursive: true });
3271
3300
  const finalPath = this.tarballPath(sha256);
3272
3301
  const tmpPath = `${finalPath}.${process.pid}.${Math.random().toString(36).slice(2)}.tmp`;
3273
- fs11.writeFileSync(tmpPath, bytes);
3274
- fs11.renameSync(tmpPath, finalPath);
3302
+ fs12.writeFileSync(tmpPath, bytes);
3303
+ fs12.renameSync(tmpPath, finalPath);
3275
3304
  }
3276
3305
  // ── public: invalidation ────────────────────────────────────────────────
3277
3306
  /**
@@ -3291,8 +3320,8 @@ var CatalogCache = class {
3291
3320
  invalidateEverything() {
3292
3321
  this.invalidateAll();
3293
3322
  const tarballDir = path16.join(this.dir, TARBALL_DIR);
3294
- if (fs11.existsSync(tarballDir)) {
3295
- fs11.rmSync(tarballDir, { recursive: true, force: true });
3323
+ if (fs12.existsSync(tarballDir)) {
3324
+ fs12.rmSync(tarballDir, { recursive: true, force: true });
3296
3325
  }
3297
3326
  }
3298
3327
  /** Return whether `ttlMs` is zero (air-gapped mode). */
@@ -3301,9 +3330,9 @@ var CatalogCache = class {
3301
3330
  }
3302
3331
  // ── private ─────────────────────────────────────────────────────────────
3303
3332
  ensureDir() {
3304
- if (!fs11.existsSync(this.dir)) fs11.mkdirSync(this.dir, { recursive: true });
3333
+ if (!fs12.existsSync(this.dir)) fs12.mkdirSync(this.dir, { recursive: true });
3305
3334
  const tarballDir = path16.join(this.dir, TARBALL_DIR);
3306
- if (!fs11.existsSync(tarballDir)) fs11.mkdirSync(tarballDir, { recursive: true });
3335
+ if (!fs12.existsSync(tarballDir)) fs12.mkdirSync(tarballDir, { recursive: true });
3307
3336
  }
3308
3337
  indexPath() {
3309
3338
  return path16.join(this.dir, INDEX_FILE);
@@ -3311,12 +3340,12 @@ var CatalogCache = class {
3311
3340
  loadIndex() {
3312
3341
  if (this.index) return this.index;
3313
3342
  const p = this.indexPath();
3314
- if (!fs11.existsSync(p)) {
3343
+ if (!fs12.existsSync(p)) {
3315
3344
  this.index = { version: 1, resolve: {}, list: {} };
3316
3345
  return this.index;
3317
3346
  }
3318
3347
  try {
3319
- const raw = JSON.parse(fs11.readFileSync(p, "utf-8"));
3348
+ const raw = JSON.parse(fs12.readFileSync(p, "utf-8"));
3320
3349
  if (raw && typeof raw === "object" && raw.version === 1) {
3321
3350
  this.index = {
3322
3351
  version: 1,
@@ -3334,8 +3363,8 @@ var CatalogCache = class {
3334
3363
  this.index = idx;
3335
3364
  const p = this.indexPath();
3336
3365
  const tmp = `${p}.${process.pid}.${Math.random().toString(36).slice(2)}.tmp`;
3337
- fs11.writeFileSync(tmp, JSON.stringify(idx, null, 2), "utf-8");
3338
- fs11.renameSync(tmp, p);
3366
+ fs12.writeFileSync(tmp, JSON.stringify(idx, null, 2), "utf-8");
3367
+ fs12.renameSync(tmp, p);
3339
3368
  }
3340
3369
  };
3341
3370
  function filterKey(filter) {
@@ -3489,6 +3518,21 @@ var RemoteCatalogSource = class {
3489
3518
  (a) => (!filter.kind || a.kind === filter.kind) && (!filter.publisher || bare(a.publisher) === bare(filter.publisher)) && (!filter.prefix || `${bare(a.publisher)}/${a.name}`.startsWith(filter.prefix))
3490
3519
  ).map(cachedAsset);
3491
3520
  }
3521
+ /**
3522
+ * `true` when the cached catalog (a resolved row or the cached list, fresh or stale) holds
3523
+ * `ref`. Never touches the network: `check` and `doctor` use it to tell a store-supplied
3524
+ * lock entry from one whose source is gone (p1062). Pass the locked ref with its version
3525
+ * (`kind:@pub/name#1.0.0`): `add` caches the row under the ref it asked for, so an
3526
+ * unversioned lookup alone misses it (p380).
3527
+ */
3528
+ holdsCached(ref) {
3529
+ if (this.cache.getResolveStale(ref)?.value) return true;
3530
+ try {
3531
+ return this.cachedListedAsset(ref) !== null;
3532
+ } catch {
3533
+ return false;
3534
+ }
3535
+ }
3492
3536
  /**
3493
3537
  * Fetch `ref` from the store, bypassing the resolve cache, and cache the answer.
3494
3538
  * For a caller that knows the cached answer is wrong, e.g. a cached miss for an
@@ -4103,8 +4147,9 @@ var RestCatalogSource = class {
4103
4147
  }
4104
4148
  // ── extension API ───────────────────────────────────────────────────────
4105
4149
  /**
4106
- * Force a metadata-cache refresh. Wipes all resolve/list entries and
4107
- * re-fetches `listAssets()` (no filter) to pre-warm the canonical query.
4150
+ * Force a metadata-cache refresh. Re-fetches `listAssets()` (no filter), then wipes all
4151
+ * resolve/list entries and stores the fresh list. When the fetch fails the old entries stay,
4152
+ * so a failed `skaile update` keeps the warm cache for offline reads (p960).
4108
4153
  *
4109
4154
  * Driven by `skaile update`. Tarballs (content-addressed) are not touched.
4110
4155
  *
@@ -4115,7 +4160,6 @@ var RestCatalogSource = class {
4115
4160
  * error then reads `no answer from <url> within <n> s`.
4116
4161
  */
4117
4162
  async refresh(opts) {
4118
- this.cache.invalidateAll();
4119
4163
  let items;
4120
4164
  try {
4121
4165
  items = await this.fetchListNetwork(void 0, opts?.timeoutMs);
@@ -4126,6 +4170,7 @@ var RestCatalogSource = class {
4126
4170
  }
4127
4171
  throw err;
4128
4172
  }
4173
+ this.cache.invalidateAll();
4129
4174
  this.cache.setList(void 0, items);
4130
4175
  for (const item of items) {
4131
4176
  this.cache.setResolve(item.id, item);
@@ -4314,15 +4359,15 @@ function discoveredToAssetEntry(asset, repoPublisher, inheritPublisher) {
4314
4359
  }
4315
4360
  function writeCuratedManifest(input) {
4316
4361
  const manifestPath = input.manifestFile;
4317
- if (fs11.existsSync(manifestPath) && !input.force) {
4362
+ if (fs12.existsSync(manifestPath) && !input.force) {
4318
4363
  return { wrote: false, manifestPath, assetCount: 0 };
4319
4364
  }
4320
4365
  const publisher = input.publisher.startsWith("@") ? input.publisher.slice(1) : input.publisher;
4321
4366
  const inheritPublisher = input.inheritPublisher ?? false;
4322
4367
  const assets = input.assets.map((a) => discoveredToAssetEntry(a, publisher, inheritPublisher)).sort((a, b) => `${a.kind}:${a.name}`.localeCompare(`${b.kind}:${b.name}`));
4323
4368
  const manifest = { publisher, assets };
4324
- fs11.mkdirSync(path16.dirname(manifestPath), { recursive: true });
4325
- fs11.writeFileSync(manifestPath, encodeSkaileManifest(manifest), "utf-8");
4369
+ fs12.mkdirSync(path16.dirname(manifestPath), { recursive: true });
4370
+ fs12.writeFileSync(manifestPath, encodeSkaileManifest(manifest), "utf-8");
4326
4371
  return { wrote: true, manifestPath, assetCount: assets.length };
4327
4372
  }
4328
4373
  function filesEntryPaths(libraryPath, entry) {
@@ -4336,8 +4381,8 @@ var DEFAULT_ASSET_VERSION = "0.1.0";
4336
4381
  function openManifest(libraryPath) {
4337
4382
  const dir = path16.resolve(libraryPath);
4338
4383
  const file = path16.join(dir, SKAILE_MANIFEST_FILENAME);
4339
- if (!fs11.existsSync(file)) {
4340
- fs11.mkdirSync(dir, { recursive: true });
4384
+ if (!fs12.existsSync(file)) {
4385
+ fs12.mkdirSync(dir, { recursive: true });
4341
4386
  return { editor: ManifestYamlEditor.create(file), created: true };
4342
4387
  }
4343
4388
  const editor = ManifestYamlEditor.load(file);
@@ -4347,14 +4392,14 @@ function openManifest(libraryPath) {
4347
4392
  }
4348
4393
  function assertManifestEditable(libraryPath) {
4349
4394
  const file = path16.join(path16.resolve(libraryPath), SKAILE_MANIFEST_FILENAME);
4350
- if (!fs11.existsSync(file)) return;
4395
+ if (!fs12.existsSync(file)) return;
4351
4396
  openManifest(libraryPath);
4352
4397
  }
4353
4398
  function assetRootProblem(libraryPath, root) {
4354
4399
  const libDir = path16.resolve(libraryPath);
4355
4400
  let realLib;
4356
4401
  try {
4357
- realLib = fs11.realpathSync(libDir);
4402
+ realLib = fs12.realpathSync(libDir);
4358
4403
  } catch {
4359
4404
  return void 0;
4360
4405
  }
@@ -4373,12 +4418,12 @@ function assetRootProblem(libraryPath, root) {
4373
4418
  walked.push(part);
4374
4419
  let stat;
4375
4420
  try {
4376
- stat = fs11.lstatSync(current);
4421
+ stat = fs12.lstatSync(current);
4377
4422
  } catch {
4378
4423
  return void 0;
4379
4424
  }
4380
4425
  if (stat.isSymbolicLink()) {
4381
- return librarySymlinkMessage({ path: walked.join("/"), target: fs11.readlinkSync(current) });
4426
+ return librarySymlinkMessage({ path: walked.join("/"), target: fs12.readlinkSync(current) });
4382
4427
  }
4383
4428
  }
4384
4429
  return void 0;
@@ -4393,7 +4438,7 @@ function existingRootConflict(libraryPath, existing, root) {
4393
4438
  if (!existing?.root || existing.source) return void 0;
4394
4439
  const existingAbs = path16.resolve(libraryPath, existing.root);
4395
4440
  if (existingAbs === path16.resolve(libraryPath, root)) return void 0;
4396
- const stat = fs11.statSync(existingAbs, { throwIfNoEntry: false });
4441
+ const stat = fs12.statSync(existingAbs, { throwIfNoEntry: false });
4397
4442
  return stat?.isDirectory() ? existing.root : void 0;
4398
4443
  }
4399
4444
  function upsertManifestAsset(libraryPath, input) {
@@ -4429,7 +4474,7 @@ function missingRootAssets(libraryPath, manifest) {
4429
4474
  return (manifest.assets ?? []).filter((a) => {
4430
4475
  if (a.source || manifest.source || !a.root) return false;
4431
4476
  const dir = path16.resolve(libraryPath, a.root);
4432
- return !(fs11.existsSync(dir) && fs11.statSync(dir).isDirectory());
4477
+ return !(fs12.existsSync(dir) && fs12.statSync(dir).isDirectory());
4433
4478
  });
4434
4479
  }
4435
4480
  function pruneMissingRootAssets(libraryPath) {
@@ -4484,6 +4529,7 @@ function reconcileEntryNames(libraryPath, scanned, refused) {
4484
4529
  const holders = parsable.filter(
4485
4530
  (s) => s.kind === entry.kind && path16.resolve(path16.dirname(s.source)) === dir
4486
4531
  );
4532
+ if (holders.some((s) => declaresInvalidName(s.source, s.kind))) continue;
4487
4533
  if (holders.length === 0) {
4488
4534
  const renamedAway = refused.some(
4489
4535
  (s) => s.kind === entry.kind && s.name !== entry.name && path16.resolve(path16.dirname(s.source)) === dir
@@ -4562,6 +4608,16 @@ async function syncManifestWithDisk(libraryPath, defaultPublisher, registry, opt
4562
4608
  });
4563
4609
  continue;
4564
4610
  }
4611
+ if (declaresInvalidName(e.source, e.kind)) {
4612
+ failed.push({
4613
+ kind: e.kind,
4614
+ name: e.name,
4615
+ file: path16.relative(libraryPath, e.source),
4616
+ findings: opts.check?.(e) ?? [],
4617
+ inManifest: false
4618
+ });
4619
+ continue;
4620
+ }
4565
4621
  if (e.version && !SEMVER_RE.test(e.version)) {
4566
4622
  skipped.push({
4567
4623
  kind: e.kind,
@@ -4663,19 +4719,30 @@ async function unparsableAssetFiles(libraryPath, registry) {
4663
4719
  }
4664
4720
  function isParsable(file) {
4665
4721
  try {
4666
- return parseManifestFile(file, fs11.readFileSync(file, "utf-8")).ok;
4722
+ return parseManifestFile(file, fs12.readFileSync(file, "utf-8")).ok;
4667
4723
  } catch {
4668
4724
  return false;
4669
4725
  }
4670
4726
  }
4671
4727
  function parseFailureOf(file) {
4672
4728
  try {
4673
- const res = parseManifestFile(file, fs11.readFileSync(file, "utf-8"));
4729
+ const res = parseManifestFile(file, fs12.readFileSync(file, "utf-8"));
4674
4730
  return res.ok ? void 0 : res.reason;
4675
4731
  } catch (err) {
4676
4732
  return err instanceof Error ? err.message : String(err);
4677
4733
  }
4678
4734
  }
4735
+ function declaresInvalidName(file, kind) {
4736
+ try {
4737
+ const res = parseManifestFile(file, fs12.readFileSync(file, "utf-8"));
4738
+ if (!res.ok) return false;
4739
+ const declared = kind === "flow" ? res.data.id : res.data.name;
4740
+ if (declared === void 0 || declared === null || declared === "") return false;
4741
+ return typeof declared !== "string" || !isValidAssetName(declared);
4742
+ } catch {
4743
+ return false;
4744
+ }
4745
+ }
4679
4746
  var PinPolicySchema = z3.enum(PIN_POLICIES);
4680
4747
  var LibraryInstanceRefSchema = z3.object({
4681
4748
  id: z3.string().uuid(),
@@ -4729,8 +4796,8 @@ function parseWorkspaceV2(raw) {
4729
4796
  }
4730
4797
  function loadWorkspaceV2(dir, filename = "skaile.yaml") {
4731
4798
  const filePath = path16.join(dir, filename);
4732
- if (!fs11.existsSync(filePath)) return null;
4733
- const content = fs11.readFileSync(filePath, "utf-8");
4799
+ if (!fs12.existsSync(filePath)) return null;
4800
+ const content = fs12.readFileSync(filePath, "utf-8");
4734
4801
  const raw = parse(content);
4735
4802
  if (!raw || typeof raw !== "object") return null;
4736
4803
  return parseWorkspaceV2(raw);
@@ -4738,23 +4805,23 @@ function loadWorkspaceV2(dir, filename = "skaile.yaml") {
4738
4805
  function saveWorkspaceV2(dir, v2, filename = "skaile.yaml") {
4739
4806
  const filePath = path16.join(dir, filename);
4740
4807
  let existing = {};
4741
- if (fs11.existsSync(filePath)) {
4742
- const content = fs11.readFileSync(filePath, "utf-8");
4808
+ if (fs12.existsSync(filePath)) {
4809
+ const content = fs12.readFileSync(filePath, "utf-8");
4743
4810
  existing = parse(content) ?? {};
4744
4811
  }
4745
4812
  existing.version = 2;
4746
4813
  if (v2.library !== void 0) existing.library = v2.library;
4747
4814
  if (v2.presets_applied !== void 0) existing.presets_applied = v2.presets_applied;
4748
- if (!fs11.existsSync(dir)) {
4749
- fs11.mkdirSync(dir, { recursive: true });
4815
+ if (!fs12.existsSync(dir)) {
4816
+ fs12.mkdirSync(dir, { recursive: true });
4750
4817
  }
4751
- fs11.writeFileSync(filePath, stringify(existing, { indent: 2 }), "utf-8");
4818
+ fs12.writeFileSync(filePath, stringify(existing, { indent: 2 }), "utf-8");
4752
4819
  }
4753
4820
  var LOCK_FILENAME = "skaile.lock.yaml";
4754
4821
  function loadLockFile(dir) {
4755
4822
  const filePath = path16.join(dir, LOCK_FILENAME);
4756
- if (!fs11.existsSync(filePath)) return null;
4757
- const content = fs11.readFileSync(filePath, "utf-8");
4823
+ if (!fs12.existsSync(filePath)) return null;
4824
+ const content = fs12.readFileSync(filePath, "utf-8");
4758
4825
  const raw = parse(content);
4759
4826
  if (raw !== null && !("assignments" in raw) && "subscriptions" in raw) {
4760
4827
  const legacySubs = raw.subscriptions;
@@ -4771,10 +4838,10 @@ function loadLockFile(dir) {
4771
4838
  }
4772
4839
  function saveLockFile(dir, lock) {
4773
4840
  const filePath = path16.join(dir, LOCK_FILENAME);
4774
- if (!fs11.existsSync(dir)) {
4775
- fs11.mkdirSync(dir, { recursive: true });
4841
+ if (!fs12.existsSync(dir)) {
4842
+ fs12.mkdirSync(dir, { recursive: true });
4776
4843
  }
4777
- fs11.writeFileSync(
4844
+ fs12.writeFileSync(
4778
4845
  filePath,
4779
4846
  `# Auto-generated by skaile. Do not edit manually.
4780
4847
  ${stringify(lock, { indent: 2 })}`,
@@ -4792,13 +4859,13 @@ function createEmptyLockFile() {
4792
4859
  }
4793
4860
  function detectWorkspaceVersion(dir, filename = "skaile.yaml") {
4794
4861
  const filePath = path16.join(dir, filename);
4795
- if (!fs11.existsSync(filePath)) return null;
4796
- const content = fs11.readFileSync(filePath, "utf-8");
4862
+ if (!fs12.existsSync(filePath)) return null;
4863
+ const content = fs12.readFileSync(filePath, "utf-8");
4797
4864
  const raw = parse(content);
4798
4865
  if (!raw || typeof raw !== "object") return null;
4799
4866
  return raw.version === 2 ? 2 : 1;
4800
4867
  }
4801
4868
 
4802
- export { AssignmentNotFoundError, CatalogCache, CatalogConfigSchema, CatalogHttpError, DuplicateAssignmentError, DuplicateLibraryNameError, GitSyncDriver, InstanceHasConsumersError, InstanceNotFoundError, InterpolationError, KnowledgeManifestSchema, LIBRARY_BACKENDS, LIBRARY_OWNERSHIPS, LOCAL_CATALOG_URL, LibraryConfigSchema, LibraryError, LibraryInstanceRefSchema, LibraryManager, LibrarySectionSchema, LibrarySyncError, LocalCatalogSource, LocalIndex, LocalSyncDriver, LockAssignmentSchema, LockFileSchema, OfflineError, OperationNotPermittedError, PIN_POLICIES, PinPolicySchema, PresetAppliedSchema, PresetExpandedSchema, RemoteCatalogSource, RequiresEdgeSchema, RestCatalogSource, SidecarGit, SkaileConfigSchema, SourceNotFoundError, TarballHashMismatchError, UNLISTED_SCAN_SKIP_DIRS, UserLibraryNotFoundError, WorkspaceConfigV2Schema, applyNonStructuralUpgrade, applyPreset, applyPresetFromData, assertManifestEditable, assertValidLibraryName, assetRootProblem, classifyRef, cloneOrInitGitRepo, commitStoreManifest, conflictingAssetRoot, createEmptyLockFile, curatedManifestOverlay, deriveSlug, describeCatalogError, detectChanges, detectNestedPresetRefs, detectWorkspaceVersion, ensureGitRepo, evaluateUpgrade, extractLibraryInstanceId, extractReferencedKeys, filesEntryPaths, filterKey, getConfigDefaults, getDefaultValue, getSidecarRoot, getStoreManifestsDir, getStoreRoot, hasInterpolationTokens, installLibraryAsset, interpolate, isGitRepo, isLocalCatalogUrl, isSecretPlaceholder, knowledgeKindProvider, libraryDirMissing, listSidecarSlugsOnDisk, loadLockFile, loadWorkspaceV2, markLibraryUnregistered, migrateSidecarsToStoreIfNeeded, migrateWorkspaceConfig, missingLibraryDirMessage, missingRootAssets, parsePreset, parsePresetYaml, parseWorkspaceV2, projectConfigPath, pruneMissingRootAssets, queryInstancePickerChoices, recordLibraryRename, renamedLibraryName, resolveAllItems, resolveConfig, resolveIndexPath, resolveItem, resolvePin, resolveSidecarPaths, saveConfig, saveLockFile, saveWorkspaceV2, scanAuthoringLibraries, scanLibraryRoot, scanUnlistedAssets, setManifestPublisher, setOriginUrl, sha256Hex, stampManifestPublisher, storeManifestFile, storeSecrets, syncManifestWithDisk, trackOriginBranch, trpcGetUrl, unparsableAssetFiles, unregisteredLibraryNames, upsertManifestAsset, validateAllPlaceholders, validateKnowledge, validateNestingDepth, validatePlaceholder, writeCuratedManifest };
4803
- //# sourceMappingURL=chunk-UL22SDGR.js.map
4804
- //# sourceMappingURL=chunk-UL22SDGR.js.map
4869
+ export { AssignmentNotFoundError, CatalogCache, CatalogConfigSchema, CatalogHttpError, DuplicateAssignmentError, DuplicateLibraryNameError, GitSyncDriver, InstanceHasConsumersError, InstanceNotFoundError, InterpolationError, KnowledgeManifestSchema, LIBRARY_BACKENDS, LIBRARY_OWNERSHIPS, LOCAL_CATALOG_URL, LibraryConfigSchema, LibraryError, LibraryInstanceRefSchema, LibraryManager, LibrarySectionSchema, LibrarySyncError, LocalCatalogSource, LocalIndex, LocalSyncDriver, LockAssignmentSchema, LockFileSchema, OfflineError, OperationNotPermittedError, PIN_POLICIES, PinPolicySchema, PresetAppliedSchema, PresetExpandedSchema, RemoteCatalogSource, RequiresEdgeSchema, RestCatalogSource, SidecarGit, SkaileConfigSchema, SourceNotFoundError, TarballHashMismatchError, UNLISTED_SCAN_SKIP_DIRS, UserLibraryNotFoundError, WorkspaceConfigV2Schema, applyNonStructuralUpgrade, applyPreset, applyPresetFromData, assertManifestEditable, assertValidLibraryName, assetRootProblem, classifyRef, cloneOrInitGitRepo, commitStoreManifest, conflictingAssetRoot, createEmptyLockFile, curatedManifestOverlay, deriveSlug, describeCatalogError, detectChanges, detectNestedPresetRefs, detectWorkspaceVersion, ensureGitRepo, evaluateUpgrade, extractLibraryInstanceId, extractReferencedKeys, filesEntryPaths, filterKey, getConfigDefaults, getDefaultValue, getSidecarRoot, getStoreManifestsDir, getStoreRoot, hasInterpolationTokens, installLibraryAsset, interpolate, isGitRepo, isLocalCatalogUrl, isSecretPlaceholder, knowledgeKindProvider, lastLibraryName, libraryDirMissing, listSidecarSlugsOnDisk, loadLockFile, loadWorkspaceV2, markLibraryUnregistered, migrateSidecarsToStoreIfNeeded, migrateWorkspaceConfig, missingLibraryDirMessage, missingRootAssets, parsePreset, parsePresetYaml, parseWorkspaceV2, projectConfigPath, pruneMissingRootAssets, queryInstancePickerChoices, recordLibraryRename, renamedLibraryName, resolveAllItems, resolveConfig, resolveIndexPath, resolveItem, resolvePin, resolveSidecarPaths, saveConfig, saveLockFile, saveWorkspaceV2, scanAuthoringLibraries, scanLibraryRoot, scanUnlistedAssets, setManifestPublisher, setOriginUrl, sha256Hex, stampManifestPublisher, storeManifestFile, storeSecrets, syncManifestWithDisk, trackOriginBranch, trpcGetUrl, unparsableAssetFiles, unregisteredLibraryNames, upsertManifestAsset, validateAllPlaceholders, validateKnowledge, validateNestingDepth, validatePlaceholder, writeCuratedManifest };
4870
+ //# sourceMappingURL=chunk-6CYKTHNT.js.map
4871
+ //# sourceMappingURL=chunk-6CYKTHNT.js.map