@skaile/workspaces 6.4.0 → 6.5.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 (384) hide show
  1. package/CHANGELOG.md +50 -1
  2. package/README.md +4 -0
  3. package/dist/ai-sdk.js +54 -24
  4. package/dist/ai-sdk.js.map +1 -1
  5. package/dist/app-sdk/index.js +1 -1
  6. package/dist/{asset-feeds-UJSYGKCX.js → asset-feeds-4I6Z4OI3.js} +21 -21
  7. package/dist/{asset-feeds-UJSYGKCX.js.map → asset-feeds-4I6Z4OI3.js.map} +1 -1
  8. package/dist/asset-manager/catalog-deployer.js +7 -7
  9. package/dist/asset-manager/index.js +13 -13
  10. package/dist/asset-manager/installer.js +9 -9
  11. package/dist/asset-manager/renderers.js +8 -8
  12. package/dist/asset-manager/src/index.d.ts +114 -12
  13. package/dist/asset-manager/src/index.d.ts.map +1 -1
  14. package/dist/asset-manager/src/installer.d.ts +6 -0
  15. package/dist/asset-manager/src/installer.d.ts.map +1 -1
  16. package/dist/bridge/harnesses/claude-sdk.js +23 -18
  17. package/dist/bridge/harnesses/claude-sdk.js.map +1 -1
  18. package/dist/bridge/harnesses/codex.js +36 -34
  19. package/dist/bridge/harnesses/codex.js.map +1 -1
  20. package/dist/bridge/harnesses/continue.js +11 -12
  21. package/dist/bridge/harnesses/continue.js.map +1 -1
  22. package/dist/bridge/harnesses/echo.js +4 -5
  23. package/dist/bridge/harnesses/echo.js.map +1 -1
  24. package/dist/bridge/harnesses/gemini.js +8 -9
  25. package/dist/bridge/harnesses/goose.js +11 -12
  26. package/dist/bridge/harnesses/goose.js.map +1 -1
  27. package/dist/bridge/harnesses/omp.js +16 -11
  28. package/dist/bridge/harnesses/omp.js.map +1 -1
  29. package/dist/bridge/harnesses/opencode.js +11 -12
  30. package/dist/bridge/harnesses/opencode.js.map +1 -1
  31. package/dist/bridge/harnesses/qwen.js +8 -9
  32. package/dist/bridge/harnesses/qwen.js.map +1 -1
  33. package/dist/bridge/index.js +19 -20
  34. package/dist/bridge/src/ai-sdk.d.ts +0 -2
  35. package/dist/bridge/src/ai-sdk.d.ts.map +1 -1
  36. package/dist/bridge/src/codex/login-fallback.d.ts +39 -0
  37. package/dist/bridge/src/codex/login-fallback.d.ts.map +1 -0
  38. package/dist/bridge/src/error-classifier.d.ts +6 -0
  39. package/dist/bridge/src/error-classifier.d.ts.map +1 -1
  40. package/dist/bridge/src/harnesses/claude-sdk.d.ts.map +1 -1
  41. package/dist/bridge/src/harnesses/codex.d.ts +0 -6
  42. package/dist/bridge/src/harnesses/codex.d.ts.map +1 -1
  43. package/dist/bridge/src/harnesses/omp.d.ts.map +1 -1
  44. package/dist/bridge/src/index.d.ts +1 -0
  45. package/dist/bridge/src/index.d.ts.map +1 -1
  46. package/dist/{chunk-WENTJ5KP.js → chunk-22ZX33H6.js} +6 -6
  47. package/dist/{chunk-WENTJ5KP.js.map → chunk-22ZX33H6.js.map} +1 -1
  48. package/dist/{chunk-U6S5CXKB.js → chunk-23SG4JRV.js} +4 -4
  49. package/dist/{chunk-U6S5CXKB.js.map → chunk-23SG4JRV.js.map} +1 -1
  50. package/dist/{chunk-YJNE4V2M.js → chunk-2HS357RA.js} +70 -37
  51. package/dist/chunk-2HS357RA.js.map +1 -0
  52. package/dist/{chunk-O7KAQQAI.js → chunk-2IAWVUW3.js} +4 -4
  53. package/dist/{chunk-O7KAQQAI.js.map → chunk-2IAWVUW3.js.map} +1 -1
  54. package/dist/{chunk-GTMANMBZ.js → chunk-2M3VLKT2.js} +3 -3
  55. package/dist/{chunk-GTMANMBZ.js.map → chunk-2M3VLKT2.js.map} +1 -1
  56. package/dist/{chunk-BUU2DLPC.js → chunk-3DA74PLW.js} +3 -3
  57. package/dist/{chunk-BUU2DLPC.js.map → chunk-3DA74PLW.js.map} +1 -1
  58. package/dist/{chunk-SISUT7VR.js → chunk-3KSLUVKB.js} +7 -7
  59. package/dist/{chunk-SISUT7VR.js.map → chunk-3KSLUVKB.js.map} +1 -1
  60. package/dist/{chunk-6OHZUUR7.js → chunk-5DE3DGVR.js} +11 -5
  61. package/dist/chunk-5DE3DGVR.js.map +1 -0
  62. package/dist/{chunk-45KLCFQB.js → chunk-6EKQENAP.js} +6 -6
  63. package/dist/{chunk-45KLCFQB.js.map → chunk-6EKQENAP.js.map} +1 -1
  64. package/dist/{chunk-E237FGGX.js → chunk-6Y3SC7O4.js} +4 -4
  65. package/dist/{chunk-E237FGGX.js.map → chunk-6Y3SC7O4.js.map} +1 -1
  66. package/dist/{chunk-IYZAJ2J2.js → chunk-7EMS2GZO.js} +36 -36
  67. package/dist/chunk-7EMS2GZO.js.map +1 -0
  68. package/dist/{chunk-UBLZALKP.js → chunk-7H4GTP7V.js} +3 -3
  69. package/dist/{chunk-UBLZALKP.js.map → chunk-7H4GTP7V.js.map} +1 -1
  70. package/dist/{chunk-RKI35EAN.js → chunk-AFTZNR2W.js} +3 -3
  71. package/dist/{chunk-RKI35EAN.js.map → chunk-AFTZNR2W.js.map} +1 -1
  72. package/dist/{chunk-VV2DJT4I.js → chunk-AVFRFGM2.js} +3 -3
  73. package/dist/{chunk-VV2DJT4I.js.map → chunk-AVFRFGM2.js.map} +1 -1
  74. package/dist/{chunk-5T3DTK7A.js → chunk-B436SG5P.js} +8 -9
  75. package/dist/chunk-B436SG5P.js.map +1 -0
  76. package/dist/{chunk-EXRQKOY6.js → chunk-B4BLJUYN.js} +69 -26
  77. package/dist/chunk-B4BLJUYN.js.map +1 -0
  78. package/dist/{chunk-HXZ3FQQN.js → chunk-DNXPXJ3X.js} +82 -50
  79. package/dist/chunk-DNXPXJ3X.js.map +1 -0
  80. package/dist/{chunk-QSIFEHSN.js → chunk-E6UWI3TP.js} +3 -3
  81. package/dist/{chunk-QSIFEHSN.js.map → chunk-E6UWI3TP.js.map} +1 -1
  82. package/dist/{chunk-PTBX55QF.js → chunk-EN5REMWV.js} +4 -4
  83. package/dist/{chunk-PTBX55QF.js.map → chunk-EN5REMWV.js.map} +1 -1
  84. package/dist/{chunk-G63KOHFS.js → chunk-EO7KGX6P.js} +4 -4
  85. package/dist/{chunk-G63KOHFS.js.map → chunk-EO7KGX6P.js.map} +1 -1
  86. package/dist/{chunk-TF5CWJQZ.js → chunk-ETF6Q3R3.js} +23 -80
  87. package/dist/chunk-ETF6Q3R3.js.map +1 -0
  88. package/dist/{chunk-3ENE6ZOF.js → chunk-G4NCSYWR.js} +9 -8
  89. package/dist/chunk-G4NCSYWR.js.map +1 -0
  90. package/dist/{chunk-VZU67OKK.js → chunk-G5SYFFMD.js} +2 -2
  91. package/dist/{chunk-VZU67OKK.js.map → chunk-G5SYFFMD.js.map} +1 -1
  92. package/dist/{chunk-L4OYPFLB.js → chunk-HPA3RP5E.js} +4 -4
  93. package/dist/{chunk-L4OYPFLB.js.map → chunk-HPA3RP5E.js.map} +1 -1
  94. package/dist/{chunk-TGB4E5Z6.js → chunk-IS3NIZBX.js} +414 -95
  95. package/dist/chunk-IS3NIZBX.js.map +1 -0
  96. package/dist/{chunk-6WQGJF65.js → chunk-IWKKTCXY.js} +85 -16
  97. package/dist/chunk-IWKKTCXY.js.map +1 -0
  98. package/dist/{chunk-2WOA3TKK.js → chunk-J5JWLKLB.js} +34 -19
  99. package/dist/chunk-J5JWLKLB.js.map +1 -0
  100. package/dist/chunk-J6YPKMMY.js +83 -0
  101. package/dist/chunk-J6YPKMMY.js.map +1 -0
  102. package/dist/{chunk-TDKZL5ZC.js → chunk-K4DHYTUM.js} +4 -4
  103. package/dist/{chunk-TDKZL5ZC.js.map → chunk-K4DHYTUM.js.map} +1 -1
  104. package/dist/{chunk-24D7IW5O.js → chunk-KA2GLAPS.js} +7 -8
  105. package/dist/chunk-KA2GLAPS.js.map +1 -0
  106. package/dist/{chunk-BOS7P2Y4.js → chunk-KSH5CFQS.js} +3 -3
  107. package/dist/{chunk-BOS7P2Y4.js.map → chunk-KSH5CFQS.js.map} +1 -1
  108. package/dist/{chunk-UUKCPPTQ.js → chunk-KSUT5KAE.js} +3 -3
  109. package/dist/{chunk-UUKCPPTQ.js.map → chunk-KSUT5KAE.js.map} +1 -1
  110. package/dist/{chunk-TPQKFX6X.js → chunk-KUADKMNX.js} +4 -4
  111. package/dist/{chunk-TPQKFX6X.js.map → chunk-KUADKMNX.js.map} +1 -1
  112. package/dist/{chunk-L45IHRDH.js → chunk-KYNCY3F3.js} +3 -3
  113. package/dist/{chunk-L45IHRDH.js.map → chunk-KYNCY3F3.js.map} +1 -1
  114. package/dist/{chunk-ACBL7X62.js → chunk-LE6QS4PG.js} +3 -3
  115. package/dist/{chunk-ACBL7X62.js.map → chunk-LE6QS4PG.js.map} +1 -1
  116. package/dist/{chunk-6UP2EDFN.js → chunk-NSIOBKDX.js} +313 -4
  117. package/dist/chunk-NSIOBKDX.js.map +1 -0
  118. package/dist/{chunk-YFGXYQW4.js → chunk-OBZ5WQ32.js} +3 -3
  119. package/dist/{chunk-YFGXYQW4.js.map → chunk-OBZ5WQ32.js.map} +1 -1
  120. package/dist/{chunk-JSWMRYLM.js → chunk-OLHHN3NO.js} +31 -7
  121. package/dist/chunk-OLHHN3NO.js.map +1 -0
  122. package/dist/{chunk-UAOHR6AL.js → chunk-S7DVT2BV.js} +4 -4
  123. package/dist/{chunk-UAOHR6AL.js.map → chunk-S7DVT2BV.js.map} +1 -1
  124. package/dist/{chunk-IZV3HDVG.js → chunk-SN663FCA.js} +5 -5
  125. package/dist/{chunk-IZV3HDVG.js.map → chunk-SN663FCA.js.map} +1 -1
  126. package/dist/{serve-preflight-NPWI4MV6.js → chunk-SRTWKZP2.js} +30 -61
  127. package/dist/chunk-SRTWKZP2.js.map +1 -0
  128. package/dist/{chunk-6X3GDPCB.js → chunk-SZTHSPRC.js} +3 -4
  129. package/dist/chunk-SZTHSPRC.js.map +1 -0
  130. package/dist/{chunk-V4OXHEWY.js → chunk-T7HGEMNB.js} +4 -4
  131. package/dist/{chunk-V4OXHEWY.js.map → chunk-T7HGEMNB.js.map} +1 -1
  132. package/dist/{chunk-DCJ4BION.js → chunk-TDPQOR3C.js} +2 -2
  133. package/dist/{chunk-DCJ4BION.js.map → chunk-TDPQOR3C.js.map} +1 -1
  134. package/dist/{chunk-GBXQFJ4G.js → chunk-TGUMN5G7.js} +310 -175
  135. package/dist/chunk-TGUMN5G7.js.map +1 -0
  136. package/dist/{chunk-UVTN4O7N.js → chunk-THX5EE3K.js} +33 -10
  137. package/dist/chunk-THX5EE3K.js.map +1 -0
  138. package/dist/{chunk-VSCLUPGZ.js → chunk-TNQLDEM6.js} +82 -32
  139. package/dist/chunk-TNQLDEM6.js.map +1 -0
  140. package/dist/{chunk-P7EL7QRD.js → chunk-TROEC2Z2.js} +34 -20
  141. package/dist/chunk-TROEC2Z2.js.map +1 -0
  142. package/dist/{chunk-CK3CJSRY.js → chunk-U6KRTCNA.js} +4 -4
  143. package/dist/{chunk-CK3CJSRY.js.map → chunk-U6KRTCNA.js.map} +1 -1
  144. package/dist/{chunk-ABVWUM2E.js → chunk-UMLCKKIA.js} +47 -25
  145. package/dist/chunk-UMLCKKIA.js.map +1 -0
  146. package/dist/{chunk-Q4XWCVFA.js → chunk-USVUS4DJ.js} +8 -8
  147. package/dist/{chunk-Q4XWCVFA.js.map → chunk-USVUS4DJ.js.map} +1 -1
  148. package/dist/{chunk-DF5WJC3Q.js → chunk-UZET67SO.js} +4 -4
  149. package/dist/{chunk-DF5WJC3Q.js.map → chunk-UZET67SO.js.map} +1 -1
  150. package/dist/{chunk-IZQOO6MN.js → chunk-V5KG6CCV.js} +2 -2
  151. package/dist/{chunk-IZQOO6MN.js.map → chunk-V5KG6CCV.js.map} +1 -1
  152. package/dist/{chunk-76FLBODK.js → chunk-VT6G5AJV.js} +10 -7
  153. package/dist/chunk-VT6G5AJV.js.map +1 -0
  154. package/dist/{chunk-C7TQARGC.js → chunk-W5KCAWGN.js} +3 -3
  155. package/dist/{chunk-C7TQARGC.js.map → chunk-W5KCAWGN.js.map} +1 -1
  156. package/dist/{chunk-HSF665NV.js → chunk-WFLQMAR5.js} +5 -5
  157. package/dist/{chunk-HSF665NV.js.map → chunk-WFLQMAR5.js.map} +1 -1
  158. package/dist/{chunk-ZWCGJYR7.js → chunk-X44XKBZX.js} +3 -3
  159. package/dist/{chunk-ZWCGJYR7.js.map → chunk-X44XKBZX.js.map} +1 -1
  160. package/dist/{chunk-5NHBLKKU.js → chunk-YBEJCQE5.js} +3 -3
  161. package/dist/{chunk-5NHBLKKU.js.map → chunk-YBEJCQE5.js.map} +1 -1
  162. package/dist/{chunk-BX7PSWJA.js → chunk-YRC2EFOU.js} +4 -4
  163. package/dist/{chunk-BX7PSWJA.js.map → chunk-YRC2EFOU.js.map} +1 -1
  164. package/dist/{chunk-76WSWPOB.js → chunk-Z2X7UZEZ.js} +15 -6
  165. package/dist/chunk-Z2X7UZEZ.js.map +1 -0
  166. package/dist/{chunk-U3SXCVR7.js → chunk-ZUU2PLA3.js} +4 -4
  167. package/dist/{chunk-U3SXCVR7.js.map → chunk-ZUU2PLA3.js.map} +1 -1
  168. package/dist/{claude-code-UBT4ZME7.js → claude-code-JY6CYEG7.js} +4 -4
  169. package/dist/{claude-code-UBT4ZME7.js.map → claude-code-JY6CYEG7.js.map} +1 -1
  170. package/dist/cli/index.js +306 -160
  171. package/dist/cli/index.js.map +1 -1
  172. package/dist/cli/src/commands/cache.d.ts.map +1 -1
  173. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  174. package/dist/cli/src/commands/config.d.ts.map +1 -1
  175. package/dist/cli/src/commands/connector.d.ts.map +1 -1
  176. package/dist/cli/src/commands/deploy.d.ts.map +1 -1
  177. package/dist/cli/src/commands/harness.d.ts +5 -4
  178. package/dist/cli/src/commands/harness.d.ts.map +1 -1
  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 +6 -0
  182. package/dist/cli/src/commands/library-index.d.ts.map +1 -1
  183. package/dist/cli/src/commands/migrate-files.d.ts +3 -6
  184. package/dist/cli/src/commands/migrate-files.d.ts.map +1 -1
  185. package/dist/cli/src/commands/migrate-harness.d.ts +4 -3
  186. package/dist/cli/src/commands/migrate-harness.d.ts.map +1 -1
  187. package/dist/cli/src/commands/migrate.d.ts +2 -2
  188. package/dist/cli/src/commands/outdated.d.ts.map +1 -1
  189. package/dist/cli/src/commands/plugin-registry-cmd.d.ts.map +1 -1
  190. package/dist/cli/src/commands/project.d.ts +7 -1
  191. package/dist/cli/src/commands/project.d.ts.map +1 -1
  192. package/dist/cli/src/commands/run.d.ts.map +1 -1
  193. package/dist/cli/src/commands/serve-preflight.d.ts +21 -0
  194. package/dist/cli/src/commands/serve-preflight.d.ts.map +1 -1
  195. package/dist/cli/src/commands/serve.d.ts.map +1 -1
  196. package/dist/cli/src/commands/source-manifest.d.ts.map +1 -1
  197. package/dist/cli/src/commands/source.d.ts +8 -0
  198. package/dist/cli/src/commands/source.d.ts.map +1 -1
  199. package/dist/cli/src/commands/update.d.ts.map +1 -1
  200. package/dist/cli/src/commands/validate-instances.d.ts +6 -0
  201. package/dist/cli/src/commands/validate-instances.d.ts.map +1 -1
  202. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  203. package/dist/cli/src/commands/verify.d.ts.map +1 -1
  204. package/dist/cli/src/config-checks.d.ts +8 -0
  205. package/dist/cli/src/config-checks.d.ts.map +1 -1
  206. package/dist/cli/src/ensure-sources.d.ts.map +1 -1
  207. package/dist/cli/src/helpers.d.ts +3 -2
  208. package/dist/cli/src/helpers.d.ts.map +1 -1
  209. package/dist/cli/src/plugin-store/index.d.ts.map +1 -1
  210. package/dist/cli/src/plugin-store/reconcile.d.ts.map +1 -1
  211. package/dist/cli/src/plugin-store/spec.d.ts +1 -0
  212. package/dist/cli/src/plugin-store/spec.d.ts.map +1 -1
  213. package/dist/cli/src/skill-checks.d.ts +2 -0
  214. package/dist/cli/src/skill-checks.d.ts.map +1 -1
  215. package/dist/connectors/config.js +5 -5
  216. package/dist/connectors/index.js +23 -24
  217. package/dist/connectors/src/index.d.ts +2 -2
  218. package/dist/connectors/src/index.d.ts.map +1 -1
  219. package/dist/connectors/src/managed-gitconfig.d.ts +22 -0
  220. package/dist/connectors/src/managed-gitconfig.d.ts.map +1 -1
  221. package/dist/connectors/src/npm-installer.d.ts +11 -3
  222. package/dist/connectors/src/npm-installer.d.ts.map +1 -1
  223. package/dist/connectors-VLFOQNS6.js +49 -0
  224. package/dist/{connectors-4WH32NK2.js.map → connectors-VLFOQNS6.js.map} +1 -1
  225. package/dist/connectors-shared/index.js +2 -2
  226. package/dist/core/index.js +6 -6
  227. package/dist/core/manifest.js +2 -2
  228. package/dist/core/models.js +1 -1
  229. package/dist/core/publish-manifest.js +3 -3
  230. package/dist/core/ref.js +1 -1
  231. package/dist/core/runtime-assets.js +5 -5
  232. package/dist/core/src/agent-instances.d.ts +6 -0
  233. package/dist/core/src/agent-instances.d.ts.map +1 -1
  234. package/dist/core/src/config-key-diagnostics.d.ts +2 -1
  235. package/dist/core/src/config-key-diagnostics.d.ts.map +1 -1
  236. package/dist/core/src/index.d.ts +4 -4
  237. package/dist/core/src/index.d.ts.map +1 -1
  238. package/dist/core/src/lock.d.ts +20 -1
  239. package/dist/core/src/lock.d.ts.map +1 -1
  240. package/dist/core/src/manifest-yaml-editor.d.ts +4 -1
  241. package/dist/core/src/manifest-yaml-editor.d.ts.map +1 -1
  242. package/dist/core/src/models.d.ts +10 -0
  243. package/dist/core/src/models.d.ts.map +1 -1
  244. package/dist/core/src/repo-manager.d.ts +11 -0
  245. package/dist/core/src/repo-manager.d.ts.map +1 -1
  246. package/dist/core/src/runtime-assets.d.ts +12 -1
  247. package/dist/core/src/runtime-assets.d.ts.map +1 -1
  248. package/dist/core/src/walker.d.ts +3 -0
  249. package/dist/core/src/walker.d.ts.map +1 -1
  250. package/dist/core/src/workspace-config.d.ts +4 -2
  251. package/dist/core/src/workspace-config.d.ts.map +1 -1
  252. package/dist/core/workspace-config.js +4 -4
  253. package/dist/deploy/index.js +6 -6
  254. package/dist/discovery/index.js +5 -5
  255. package/dist/{ensure-sources-UC2RBYMP.js → ensure-sources-6O54DUQB.js} +31 -31
  256. package/dist/ensure-sources-6O54DUQB.js.map +1 -0
  257. package/dist/factory-assets/connectors/box.js +23 -24
  258. package/dist/factory-assets/connectors/deploy.js +23 -24
  259. package/dist/factory-assets/connectors/devserver.js +23 -24
  260. package/dist/factory-assets/connectors/flow/adapter.js +23 -24
  261. package/dist/factory-assets/connectors/flow/engine.js +7 -7
  262. package/dist/factory-assets/connectors/flow/run-flow.js +25 -26
  263. package/dist/factory-assets/connectors/flow.js +23 -24
  264. package/dist/factory-assets/connectors/git.js +23 -24
  265. package/dist/factory-assets/connectors/gmail.js +23 -24
  266. package/dist/factory-assets/connectors/googledrive.js +23 -24
  267. package/dist/factory-assets/connectors/local.js +23 -24
  268. package/dist/factory-assets/connectors/mattermost.js +23 -24
  269. package/dist/factory-assets/connectors/memory.js +23 -24
  270. package/dist/factory-assets/connectors/minio.js +23 -24
  271. package/dist/factory-assets/connectors/postgres.js +23 -24
  272. package/dist/factory-assets/connectors/s3.js +23 -24
  273. package/dist/factory-assets/connectors/sharepoint.js +23 -24
  274. package/dist/factory-assets/connectors/sqlite.js +23 -24
  275. package/dist/factory-assets/connectors/static-server.js +23 -24
  276. package/dist/factory-assets/connectors/tunnel.js +23 -24
  277. package/dist/factory-assets/connectors/webdav.js +23 -24
  278. package/dist/factory-assets/connectors/xstate-store.js +23 -24
  279. package/dist/factory-assets/connectors/xstate.js +23 -24
  280. package/dist/factory-assets/skills/authoring-skaile-assets/SKILL.md +2 -1
  281. package/dist/{flows-LYTKNGKE.js → flows-CIUPK7SB.js} +11 -11
  282. package/dist/{flows-LYTKNGKE.js.map → flows-CIUPK7SB.js.map} +1 -1
  283. package/dist/{helpers-SSSKT5XK.js → helpers-YHDQHQEQ.js} +28 -29
  284. package/dist/{helpers-SSSKT5XK.js.map → helpers-YHDQHQEQ.js.map} +1 -1
  285. package/dist/library/index.js +10 -10
  286. package/dist/library/install.js +4 -4
  287. package/dist/library/src/manifest-writer.d.ts +9 -0
  288. package/dist/library/src/manifest-writer.d.ts.map +1 -1
  289. package/dist/library/src/remote/remote-catalog-source.d.ts +9 -0
  290. package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
  291. package/dist/library/src/remote/rest-catalog-source.d.ts +1 -0
  292. package/dist/library/src/remote/rest-catalog-source.d.ts.map +1 -1
  293. package/dist/{library-publish-GQMNTAKK.js → library-publish-MUGUST43.js} +53 -53
  294. package/dist/{library-publish-GQMNTAKK.js.map → library-publish-MUGUST43.js.map} +1 -1
  295. package/dist/model-endpoint/index.js +9 -10
  296. package/dist/open-library-BVQCB37E.js +57 -0
  297. package/dist/{open-library-XGUCUJYE.js.map → open-library-BVQCB37E.js.map} +1 -1
  298. package/dist/{open-registry-DIFEPDF6.js → open-registry-JCSIAKEC.js} +14 -14
  299. package/dist/{open-registry-DIFEPDF6.js.map → open-registry-JCSIAKEC.js.map} +1 -1
  300. package/dist/{paths-G4GFJLE2.js → paths-XLKCAFRZ.js} +9 -9
  301. package/dist/{paths-G4GFJLE2.js.map → paths-XLKCAFRZ.js.map} +1 -1
  302. package/dist/{plugin-store-BBLDFD3L.js → plugin-store-NGRUTCJI.js} +9 -9
  303. package/dist/{plugin-store-BBLDFD3L.js.map → plugin-store-NGRUTCJI.js.map} +1 -1
  304. package/dist/project-BGYMLAS6.js +88 -0
  305. package/dist/{project-LB745WVZ.js.map → project-BGYMLAS6.js.map} +1 -1
  306. package/dist/resolver/index.js +7 -7
  307. package/dist/runner/index.js +38 -39
  308. package/dist/runner/src/composition/resolve-instance.d.ts.map +1 -1
  309. package/dist/runner/src/composition/resolve.d.ts +6 -0
  310. package/dist/runner/src/composition/resolve.d.ts.map +1 -1
  311. package/dist/runner/src/credential-notice.d.ts +3 -2
  312. package/dist/runner/src/credential-notice.d.ts.map +1 -1
  313. package/dist/runner/src/resources.d.ts.map +1 -1
  314. package/dist/runner/src/serve.d.ts.map +1 -1
  315. package/dist/sdk/asset-manager.js +13 -13
  316. package/dist/sdk/bridge.js +19 -20
  317. package/dist/sdk/core.js +6 -6
  318. package/dist/sdk/flow.js +7 -7
  319. package/dist/sdk/index.js +38 -39
  320. package/dist/sdk/index.js.map +1 -1
  321. package/dist/sdk/resolver.js +7 -7
  322. package/dist/sdk/runner.js +38 -39
  323. package/dist/sdk/session.js +2 -2
  324. package/dist/sdk/transport/ws/server.js +7 -7
  325. package/dist/sdk/transport/ws.js +7 -7
  326. package/dist/sdk/transport.js +7 -7
  327. package/dist/sdk/types.js +1 -1
  328. package/dist/serve-preflight-GQY5DZX6.js +56 -0
  329. package/dist/serve-preflight-GQY5DZX6.js.map +1 -0
  330. package/dist/session/index.js +2 -2
  331. package/dist/{setup-X6ZYH2MW.js → setup-2NWSKSCO.js} +29 -30
  332. package/dist/setup-2NWSKSCO.js.map +1 -0
  333. package/dist/{skills-62PXDBPJ.js → skills-PXZOL2FZ.js} +12 -12
  334. package/dist/{skills-62PXDBPJ.js.map → skills-PXZOL2FZ.js.map} +1 -1
  335. package/dist/source-XA3L4H6I.js +86 -0
  336. package/dist/{source-LAYCTRHP.js.map → source-XA3L4H6I.js.map} +1 -1
  337. package/dist/{source-manifest-publish-3S6PJ25W.js → source-manifest-publish-QEGMTS33.js} +50 -51
  338. package/dist/source-manifest-publish-QEGMTS33.js.map +1 -0
  339. package/dist/transport/index.js +7 -7
  340. package/dist/transport/ws/server.js +7 -7
  341. package/dist/transport/ws.js +7 -7
  342. package/dist/tui/index.js +38 -39
  343. package/dist/tui/index.js.map +1 -1
  344. package/dist/types/index.js +1 -1
  345. package/dist/types/manifests.js +1 -1
  346. package/dist/types/src/manifests/agent.d.ts +2 -2
  347. package/dist/types/src/manifests/agent.d.ts.map +1 -1
  348. package/dist/types/src/version.d.ts +8 -8
  349. package/dist/workspace-plugin/adapters/mcp.js +30 -31
  350. package/dist/workspace-plugin/adapters/omp.js +14 -14
  351. package/dist/workspace-plugin/index.js +1 -1
  352. package/package.json +1 -1
  353. package/dist/chunk-24D7IW5O.js.map +0 -1
  354. package/dist/chunk-2WOA3TKK.js.map +0 -1
  355. package/dist/chunk-3ENE6ZOF.js.map +0 -1
  356. package/dist/chunk-5T3DTK7A.js.map +0 -1
  357. package/dist/chunk-6OHZUUR7.js.map +0 -1
  358. package/dist/chunk-6UP2EDFN.js.map +0 -1
  359. package/dist/chunk-6WQGJF65.js.map +0 -1
  360. package/dist/chunk-6X3GDPCB.js.map +0 -1
  361. package/dist/chunk-76FLBODK.js.map +0 -1
  362. package/dist/chunk-76WSWPOB.js.map +0 -1
  363. package/dist/chunk-ABVWUM2E.js.map +0 -1
  364. package/dist/chunk-EXRQKOY6.js.map +0 -1
  365. package/dist/chunk-GBXQFJ4G.js.map +0 -1
  366. package/dist/chunk-HXZ3FQQN.js.map +0 -1
  367. package/dist/chunk-IYZAJ2J2.js.map +0 -1
  368. package/dist/chunk-JSWMRYLM.js.map +0 -1
  369. package/dist/chunk-P7EL7QRD.js.map +0 -1
  370. package/dist/chunk-QJQQNBVT.js +0 -315
  371. package/dist/chunk-QJQQNBVT.js.map +0 -1
  372. package/dist/chunk-TF5CWJQZ.js.map +0 -1
  373. package/dist/chunk-TGB4E5Z6.js.map +0 -1
  374. package/dist/chunk-UVTN4O7N.js.map +0 -1
  375. package/dist/chunk-VSCLUPGZ.js.map +0 -1
  376. package/dist/chunk-YJNE4V2M.js.map +0 -1
  377. package/dist/connectors-4WH32NK2.js +0 -50
  378. package/dist/ensure-sources-UC2RBYMP.js.map +0 -1
  379. package/dist/open-library-XGUCUJYE.js +0 -58
  380. package/dist/project-LB745WVZ.js +0 -88
  381. package/dist/serve-preflight-NPWI4MV6.js.map +0 -1
  382. package/dist/setup-X6ZYH2MW.js.map +0 -1
  383. package/dist/source-LAYCTRHP.js +0 -87
  384. package/dist/source-manifest-publish-3S6PJ25W.js.map +0 -1
package/dist/cli/index.js CHANGED
@@ -1,94 +1,95 @@
1
1
  #!/usr/bin/env node
2
- import { status, enable, disable, install, uninstall } from '../chunk-ACBL7X62.js';
3
- import { makeValidateCommand, scanIdentities } from '../chunk-P7EL7QRD.js';
4
- import { storeNotInstallableReason, mcpNotRunnableHere } from '../chunk-TDKZL5ZC.js';
5
- import { makeProvidersCommand, loadRegistryView, addProviderEntry, ProviderRegistryWriteError, removeProviderEntry } from '../chunk-45KLCFQB.js';
6
- import { makeInstallCommand, makeCheckCommand, makeCleanCommand, pinComposedAgents, reportRewritten, reportReplaced, reportRelocked, reportMoved, reportStoreNotChecked, globalProblems, editedConventionFiles, supportsInstallManifest, runYamlInstall, REF_HINT, reportInstalledSoftDeps } from '../chunk-2WOA3TKK.js';
7
- import { reportUnknownHarnesses, reportProjectConfig, agentInstanceErrorLines, isRecord } from '../chunk-TF5CWJQZ.js';
2
+ import { status, enable, disable, install, uninstall } from '../chunk-LE6QS4PG.js';
3
+ import { makeValidateCommand, scanIdentities } from '../chunk-TROEC2Z2.js';
4
+ import { storeNotInstallableReason, mcpNotRunnableHere } from '../chunk-K4DHYTUM.js';
5
+ import { checkHarnessSdk } from '../chunk-SRTWKZP2.js';
6
+ import { makeProvidersCommand, loadRegistryView, addProviderEntry, ProviderRegistryWriteError, removeProviderEntry } from '../chunk-6EKQENAP.js';
7
+ import { makeInstallCommand, makeCheckCommand, makeCleanCommand, pinComposedAgents, reportRewritten, reportReplaced, reportRelocked, reportMoved, reportStoreNotChecked, globalProblems, editedConventionFiles, supportsInstallManifest, runYamlInstall, REF_HINT, reportInstalledSoftDeps } from '../chunk-J5JWLKLB.js';
8
+ import { reportUnknownHarnesses, reportProjectConfig, agentInstanceErrorLines } from '../chunk-J6YPKMMY.js';
9
+ import { isRecord } from '../chunk-ETF6Q3R3.js';
8
10
  import { createSpinner } from '../chunk-NESV47MF.js';
9
- import { loadDeclaredPlugins } from '../chunk-UVTN4O7N.js';
10
- import { getStoreConfig, storeFetch, isStoreAuthenticated, getStoreToken } from '../chunk-TPQKFX6X.js';
11
- import { makeSourceCommand, syncProjectSources, divergedSourceClones } from '../chunk-HXZ3FQQN.js';
12
- import { libraryAssetRefusals, manifestEntryRenames, deviceLogin, loadStoreAuthConfig, logout, hasStoredAuth, exitOnLibrarySymlinks, resolveLibraryPublisherDetailed, getStoreIdentity, warnLibraryNameFallback, indexLibrary, warnIgnoredDomainFiles, removedDomainOption, rejectRemovedDomainOption, requireValidPublisherOrExit, exitOnManifestPublisherProblems, findAssetManifestFile, checkAssetFile, registerLibraryAsset, DOMAIN_REMOVED_HINT, reportLibrarySymlinks, checkAsset, manifestPublisherProblems, exitOnManifestPathProblems, manifestRequiresProblems, composeRefContext, registeredAssetKeys, assetEntryRef, duplicateAssetMessage, manifestParseFailureLine, manifestParseErrorText, unresolvedManifestDependencies, findEntryManifestFile, unheldRequiresOfFile, warnLegacyBundleFiles, checkComposeKinds } from '../chunk-IYZAJ2J2.js';
13
- import { openCatalogSource, LocalCatalogDisabledError, openLibraryManager, openLibrary } from '../chunk-BX7PSWJA.js';
14
- import { getKindRegistry, getKnownKinds } from '../chunk-HSF665NV.js';
15
- import { AI_RESOURCES } from '../chunk-DF5WJC3Q.js';
16
- import { logErr, unknownHarnessTargetMessage, S, logOk, setActiveCommand, logInfo, logWarnErr, unknownHarnessMessage, logWarn, TARGET_DEFAULT_HINT, parseHarnessFilter, requireProjectConfig, deferredWarnings, warnPlaceholderBodies, warnFilesOnlyDelegates, reportLegacyOmpCopies, logNoProject, warnStaleHarnessCopies, kindColorPad, kindColor, colorRef, formatSoftDepSection, bareSoftDepName, driverAliasOption, foldDriverFlag, friendlyHarnessError, harnessErrorNotes, formatSoftDepHint, formatRelativeTime, formatSoftDepRemovePreview, formatSoftDepAddPreview, fitWidth, KIND_COL_WIDTH } from '../chunk-76WSWPOB.js';
11
+ import { loadDeclaredPlugins } from '../chunk-THX5EE3K.js';
12
+ import { getStoreConfig, storeFetch, isStoreAuthenticated, getStoreToken } from '../chunk-KUADKMNX.js';
13
+ import { makeSourceCommand, syncProjectSources, divergedSourceClones } from '../chunk-DNXPXJ3X.js';
14
+ import { manifestEntryFilesRefusals, libraryAssetRefusals, manifestEntryRenames, deviceLogin, loadStoreAuthConfig, logout, hasStoredAuth, exitOnLibrarySymlinks, resolveLibraryPublisherDetailed, getStoreIdentity, warnLibraryNameFallback, indexLibrary, warnIgnoredDomainFiles, removedDomainOption, rejectRemovedDomainOption, requireValidPublisherOrExit, exitOnManifestPublisherProblems, findAssetManifestFile, checkAssetFile, registerLibraryAsset, DOMAIN_REMOVED_HINT, reportLibrarySymlinks, checkAsset, manifestPublisherProblems, exitOnManifestPathProblems, manifestRequiresProblems, composeRefContext, registeredAssetKeys, assetEntryRef, duplicateAssetMessage, manifestParseFailureLine, manifestParseErrorText, unresolvedManifestDependencies, findEntryManifestFile, unheldRequiresOfFile, warnLegacyBundleFiles, checkComposeKinds } from '../chunk-7EMS2GZO.js';
15
+ import { openCatalogSource, LocalCatalogDisabledError, openLibraryManager, openLibrary } from '../chunk-YRC2EFOU.js';
16
+ import { getKindRegistry, getKnownKinds } from '../chunk-WFLQMAR5.js';
17
+ import { AI_RESOURCES } from '../chunk-UZET67SO.js';
18
+ import { logErr, unknownHarnessTargetMessage, S, logOk, setActiveCommand, logInfo, logWarnErr, unknownHarnessMessage, logWarn, TARGET_DEFAULT_HINT, parseHarnessFilter, requireProjectConfig, deferredWarnings, warnPlaceholderBodies, warnFilesOnlyDelegates, reportLegacyOmpCopies, logNoProject, warnStaleHarnessCopies, kindColorPad, kindColor, colorRef, formatSoftDepSection, bareSoftDepName, driverAliasOption, foldDriverFlag, friendlyHarnessError, harnessErrorNotes, formatSoftDepHint, formatRelativeTime, formatSoftDepRemovePreview, formatSoftDepAddPreview, fitWidth, KIND_COL_WIDTH } from '../chunk-Z2X7UZEZ.js';
17
19
  import { LocalSecretsProvider } from '../chunk-ILFGVSTJ.js';
18
- import { resolveInstanceAgentDir, instanceSessionOverrides, runAgentChat, isCompositionError, resolveSessionId, loadSessionById, loadSession, listSessions, setCurrentSession, deleteSession, clearSession, loadAgentManifest, hashAgentFiles, createCompositionContentSource, compileComposition, manifestModelForHarness, instanceForSession, resolveAgentInstance, describeComposition, MarkdownStreamer, createFinalTextFallback } from '../chunk-VSCLUPGZ.js';
19
- import '../chunk-DCJ4BION.js';
20
- import '../chunk-SISUT7VR.js';
21
- import '../chunk-YFGXYQW4.js';
22
- import '../chunk-5NHBLKKU.js';
20
+ import { resolveInstanceAgentDir, instanceSessionOverrides, runAgentChat, isCompositionError, resolveSessionId, loadSessionById, loadSession, listSessions, setCurrentSession, deleteSession, clearSession, loadAgentManifest, hashAgentFiles, createCompositionContentSource, compileComposition, manifestModelForHarness, instanceForSession, resolveAgentInstance, describeComposition, MarkdownStreamer, createFinalTextFallback } from '../chunk-TNQLDEM6.js';
21
+ import '../chunk-TDPQOR3C.js';
22
+ import '../chunk-3KSLUVKB.js';
23
+ import '../chunk-OBZ5WQ32.js';
24
+ import '../chunk-YBEJCQE5.js';
23
25
  import '../chunk-WYZXSJBK.js';
24
- import '../chunk-E237FGGX.js';
25
- import '../chunk-L45IHRDH.js';
26
+ import '../chunk-6Y3SC7O4.js';
27
+ import '../chunk-KYNCY3F3.js';
26
28
  import '../chunk-KW37WNXY.js';
27
29
  import '../chunk-3MWQKQUB.js';
28
- import '../chunk-IZV3HDVG.js';
30
+ import '../chunk-SN663FCA.js';
29
31
  import '../chunk-O7SG5PC2.js';
30
32
  import '../chunk-7QBNJTTQ.js';
31
33
  import '../chunk-O2SYFJWP.js';
32
- import '../chunk-UBLZALKP.js';
34
+ import '../chunk-7H4GTP7V.js';
33
35
  import '../chunk-32NA4TVC.js';
34
36
  import '../chunk-W3UDISS2.js';
35
37
  import '../chunk-HTGTNN2B.js';
36
- import { runFlow, resumeFlow } from '../chunk-Q4XWCVFA.js';
38
+ import { runFlow, resumeFlow } from '../chunk-USVUS4DJ.js';
37
39
  import '../chunk-4R6DROGN.js';
38
- import { parseSkillRequirements, validateRequirements } from '../chunk-C7TQARGC.js';
39
- import '../chunk-BUU2DLPC.js';
40
- import '../chunk-EXRQKOY6.js';
41
- import '../chunk-GTMANMBZ.js';
42
- import '../chunk-O7KAQQAI.js';
43
- import { checkHarnessModel, checkModelProvider } from '../chunk-5T3DTK7A.js';
44
- import '../chunk-UAOHR6AL.js';
45
- import '../chunk-PTBX55QF.js';
46
- import '../chunk-JSWMRYLM.js';
40
+ import { parseSkillRequirements, validateRequirements } from '../chunk-W5KCAWGN.js';
41
+ import '../chunk-3DA74PLW.js';
42
+ import '../chunk-B4BLJUYN.js';
43
+ import '../chunk-2M3VLKT2.js';
44
+ import '../chunk-2IAWVUW3.js';
45
+ import { checkHarnessModel, checkModelProvider } from '../chunk-B436SG5P.js';
46
+ import '../chunk-S7DVT2BV.js';
47
+ import '../chunk-EN5REMWV.js';
48
+ import '../chunk-OLHHN3NO.js';
47
49
  import '../chunk-LOO5CB5M.js';
48
- import '../chunk-UUKCPPTQ.js';
49
- import '../chunk-U3SXCVR7.js';
50
- import '../chunk-6X3GDPCB.js';
51
- import '../chunk-6OHZUUR7.js';
50
+ import '../chunk-KSUT5KAE.js';
51
+ import '../chunk-ZUU2PLA3.js';
52
+ import '../chunk-5DE3DGVR.js';
52
53
  import '../chunk-7DN6JKP2.js';
53
- import '../chunk-QSIFEHSN.js';
54
- import { listHarnesses } from '../chunk-QJQQNBVT.js';
54
+ import '../chunk-E6UWI3TP.js';
55
+ import '../chunk-EO7KGX6P.js';
56
+ import '../chunk-SZTHSPRC.js';
57
+ import { listHarnesses, getProviderPreset, AI_PROVIDER_PRESETS } from '../chunk-NSIOBKDX.js';
55
58
  import '../chunk-G5SUWZEU.js';
56
- import '../chunk-G63KOHFS.js';
57
- import { getProviderPreset, AI_PROVIDER_PRESETS } from '../chunk-6UP2EDFN.js';
58
59
  import '../chunk-IFGTRL2I.js';
59
- import { loadFlow, flowLookupRoots, findFlowFileInRoots, loadAllFlowEntries } from '../chunk-ZWCGJYR7.js';
60
+ import { loadFlow, flowLookupRoots, findFlowFileInRoots, loadAllFlowEntries } from '../chunk-X44XKBZX.js';
60
61
  import '../chunk-WD3L5QSU.js';
61
62
  import { nodeLabel, nodeSkillAsset, nodeIsInert, nodeIsOptional, nodeRunKind, nodeAssets } from '../chunk-7RGTAEG6.js';
62
- import '../chunk-VZU67OKK.js';
63
- import { setLibraryAssetCheck, setRenamedEntryLookup, LibraryEntryError, AssetManager, parseRefTolerant, MissingManifestError, parseCanonicalLockKey, normalizeRepoUrl } from '../chunk-TGB4E5Z6.js';
64
- import { CatalogHttpError, libraryDirMissing, missingLibraryDirMessage, cloneOrInitGitRepo, trackOriginBranch, stampManifestPublisher, isGitRepo, ensureGitRepo, conflictingAssetRoot, scanUnlistedAssets, setManifestPublisher, LIBRARY_OWNERSHIPS, assertManifestEditable, installLibraryAsset, getStoreManifestsDir, assertValidLibraryName, unparsableAssetFiles, syncManifestWithDisk, renamedLibraryName, storeManifestFile, getDefaultValue, isSecretPlaceholder } from '../chunk-GBXQFJ4G.js';
65
- import { flowFileNameError, SEMVER_RE } from '../chunk-WENTJ5KP.js';
66
- import '../chunk-CK3CJSRY.js';
63
+ import '../chunk-G5SYFFMD.js';
64
+ import { setLibraryAssetCheck, setRenamedEntryLookup, LibraryEntryError, AssetManager, parseRefTolerant, MissingManifestError, parseCanonicalLockKey, normalizeRepoUrl } from '../chunk-IS3NIZBX.js';
65
+ import { CatalogHttpError, libraryDirMissing, missingLibraryDirMessage, cloneOrInitGitRepo, trackOriginBranch, stampManifestPublisher, isGitRepo, ensureGitRepo, conflictingAssetRoot, scanUnlistedAssets, setManifestPublisher, LIBRARY_OWNERSHIPS, assertManifestEditable, installLibraryAsset, getStoreManifestsDir, assertValidLibraryName, unparsableAssetFiles, syncManifestWithDisk, renamedLibraryName, storeManifestFile, getDefaultValue, isSecretPlaceholder } from '../chunk-TGUMN5G7.js';
66
+ import { flowFileNameError, SEMVER_RE } from '../chunk-22ZX33H6.js';
67
+ import '../chunk-U6KRTCNA.js';
67
68
  import '../chunk-F3D25RGM.js';
68
69
  import '../chunk-3TXEJN4W.js';
69
70
  import '../chunk-ISHJITXJ.js';
70
71
  import '../chunk-LNFKL23K.js';
71
72
  import '../chunk-JRN5QF4C.js';
72
73
  import '../chunk-NUELZWCF.js';
73
- import { installTargetOf, SCAFFOLD_KINDS } from '../chunk-YJNE4V2M.js';
74
+ import { installTargetOf, SCAFFOLD_KINDS } from '../chunk-2HS357RA.js';
74
75
  import '../chunk-PKE3PXOK.js';
75
76
  import '../chunk-KTBKW2FI.js';
76
77
  import '../chunk-UQ6LFBPZ.js';
77
- import '../chunk-V4OXHEWY.js';
78
- import { effectiveComposes, validatePreset, validateAgent, composeSlotDiagnostics, agentDeprecationDiagnostics, SLOT_ID_PATTERN } from '../chunk-76FLBODK.js';
79
- import { loadSettings, globalSettingsPath, resolveSettings, projectSettingsPath, saveSettings, WorkspaceYamlEditor, resolveLibraryDir, checkAgentSkillConformance, resolveSettingsWithSources, resolveConfiguredHarnessName, readLock, FACTORY_SOURCE_URL, globalInstallDir, GLOBAL_INSTALL_DIR_NAME, workspaceProviderRegistryPath, userProviderRegistryPath, loadProviderRegistryFile, aiResourceRoots } from '../chunk-ABVWUM2E.js';
78
+ import '../chunk-T7HGEMNB.js';
79
+ import { effectiveComposes, validatePreset, validateAgent, composeSlotDiagnostics, agentDeprecationDiagnostics, SLOT_ID_PATTERN } from '../chunk-VT6G5AJV.js';
80
+ import { LockParseError, loadSettings, globalSettingsPath, resolveSettings, projectSettingsPath, saveSettings, WorkspaceYamlEditor, readLock, resolveLibraryDir, checkAgentSkillConformance, resolveSettingsWithSources, resolveConfiguredHarnessName, FACTORY_SOURCE_URL, globalInstallDir, GLOBAL_INSTALL_DIR_NAME, workspaceProviderRegistryPath, userProviderRegistryPath, loadProviderRegistryFile, aiResourceRoots } from '../chunk-UMLCKKIA.js';
80
81
  import '../chunk-4GY63JU6.js';
81
- import { factoryAssetRoots } from '../chunk-3ENE6ZOF.js';
82
+ import { factoryAssetRoots } from '../chunk-G4NCSYWR.js';
82
83
  import { deployedDir } from '../chunk-5KRMNUL4.js';
83
84
  import { DEFAULT_HARNESS_ID, HARNESS_DEFAULTS } from '../chunk-C5HFK34M.js';
84
85
  import { findKindDirs } from '../chunk-MWXYN6NY.js';
85
- import { SourceEntryError, LegacyKeyError, ConfigParseError, resolveSkWorkspaceConfig, sourceCacheKey, getGlobalCacheDir, resolveAgentDir, AgentRefResolutionError, resolveAgentDefinitionDir, effectiveAgentInstances, matchPin, coerceVersion, loadSkWorkspaceConfig, configParseErrorOf, findWorkspaceRoot, isWorkspaceConfigFilename, SKAILE_YAML_DEFAULT, AGENT_PROFILE_FIELDS } from '../chunk-6WQGJF65.js';
86
+ import { SourceEntryError, LegacyKeyError, ConfigParseError, resolveSkWorkspaceConfig, sourceCacheKey, getGlobalCacheDir, resolveAgentDir, AgentRefResolutionError, resolveAgentDefinitionDir, effectiveAgentInstances, matchPin, coerceVersion, loadSkWorkspaceConfig, configParseErrorOf, findWorkspaceRoot, isWorkspaceConfigFilename, SKAILE_YAML_DEFAULT, AGENT_PROFILE_FIELDS } from '../chunk-IWKKTCXY.js';
86
87
  import { globalCacheRoot, globalSkaileDir, userConfigPath } from '../chunk-L5VSIPQD.js';
87
88
  import { HARNESS_TARGETS, SUPPORTED_HARNESSES, harnessNameForHarnessId } from '../chunk-VTETQCR6.js';
88
- import { SKAILE_MANIFEST_FILENAME, loadSkPublishManifest, decodeSkaileManifest, LIBRARY_GITIGNORE, librarySymlinkMessage, isNonAssetPath, isNonAssetDir, encodeSkaileManifest } from '../chunk-U6S5CXKB.js';
89
- import { setWalkTruncationSink, dedupeRequirements, parseFrontmatter, scanDirectory, parseRequires } from '../chunk-VV2DJT4I.js';
89
+ import { SKAILE_MANIFEST_FILENAME, loadSkPublishManifest, decodeSkaileManifest, LIBRARY_GITIGNORE, librarySymlinkMessage, isNonAssetPath, isNonAssetDir, encodeSkaileManifest } from '../chunk-23SG4JRV.js';
90
+ import { setWalkTruncationSink, dedupeRequirements, parseFrontmatter, scanDirectory, parseRequires } from '../chunk-AVFRFGM2.js';
90
91
  import { pluginTitle } from '../chunk-RVRB27AN.js';
91
- import { parseAssetRef, isValidPublisher, PUBLISHER_HINT, isValidAssetName, ASSET_NAME_HINT, depToStr, assetRefToStr, slugifyAssetName, parseAssetRefLoose } from '../chunk-IZQOO6MN.js';
92
+ import { parseAssetRef, isValidPublisher, PUBLISHER_HINT, isValidAssetName, ASSET_NAME_HINT, depToStr, assetRefToStr, slugifyAssetName, parseAssetRefLoose } from '../chunk-V5KG6CCV.js';
92
93
  import { portableSpawn, portableSpawnSync } from '../chunk-VSX2G7LA.js';
93
94
  import { parseModelRef, resolveEntryBaseUrl } from '../chunk-RXGPFAMN.js';
94
95
  import { openSqlite } from '../chunk-DKXNKFKP.js';
@@ -238,19 +239,20 @@ async function runSearch(kind, query, opts) {
238
239
  }
239
240
  }
240
241
  async function searchIndex(query, kind, projectDir) {
241
- const { openLibrary: openLibrary2 } = await import('../open-library-XGUCUJYE.js');
242
+ const { openLibrary: openLibrary2 } = await import('../open-library-BVQCB37E.js');
242
243
  const library = await openLibrary2();
243
244
  try {
244
245
  const { libraryDirMissing: libraryDirMissing2 } = await import('../library/index.js');
245
- const sources = await library.listSources();
246
- const gone = new Set(sources.filter(libraryDirMissing2).map((l) => l.id));
247
- for (const id of new AssetManager({
246
+ const allSources = await library.listSources();
247
+ const gone = new Set(allSources.filter(libraryDirMissing2).map((l) => l.id));
248
+ const { libraries: sources, defs: allDefs } = new AssetManager({
248
249
  registry: getKindRegistry(),
249
250
  projectDir
250
- }).undeclaredSourceClones(sources)) {
251
- gone.add(id);
252
- }
253
- const defs = (await library.listAssetDefs(kind ? { kind } : {})).filter((d) => !d.libraryId || !gone.has(d.libraryId));
251
+ }).scopeLibraryIndex(
252
+ allSources,
253
+ await library.listAssetDefs(kind ? { kind } : {})
254
+ );
255
+ const defs = allDefs.filter((d) => !d.libraryId || !gone.has(d.libraryId));
254
256
  const libraryNames = new Map(sources.map((l) => [l.id, l.name]));
255
257
  let entries = defs.map(
256
258
  (d) => ({
@@ -413,14 +415,14 @@ async function withAddVersions(entries, projectDir) {
413
415
  }
414
416
  async function searchLocal(query, kind, opts, showStore, airGapped) {
415
417
  const projectDir = path19__default.resolve(opts.projectDir);
416
- const { restoreSourceReaders } = await import('../source-LAYCTRHP.js');
418
+ const { restoreSourceReaders } = await import('../source-XA3L4H6I.js');
417
419
  for (const name of await restoreSourceReaders(projectDir)) {
418
420
  logInfo(`Re-registered source "${name}" (its library entry was removed elsewhere).`);
419
421
  }
420
422
  const factory = await searchFactory(projectDir, query, kind);
421
423
  let entries = unionEntries(await searchIndex(query, kind, projectDir), factory);
422
424
  if (entries.length === 0 && !query && !kind && !airGapped) {
423
- const { autoSyncForSearch } = await import('../source-LAYCTRHP.js');
425
+ const { autoSyncForSearch } = await import('../source-XA3L4H6I.js');
424
426
  if (await autoSyncForSearch(projectDir)) {
425
427
  entries = unionEntries(await searchIndex(query, kind, projectDir), factory);
426
428
  }
@@ -538,7 +540,7 @@ async function searchStore(query, kind, opts, airGapped) {
538
540
  logInfo("air-gapped (cache_ttl: 0) \u2014 local sources only");
539
541
  return "skipped";
540
542
  }
541
- const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-XGUCUJYE.js');
543
+ const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-BVQCB37E.js');
542
544
  try {
543
545
  const remote = await openCatalogSource2({ projectDir: path19__default.resolve(opts.projectDir) });
544
546
  const assets = await remote.listAssets(kind ? { kind } : {});
@@ -698,6 +700,7 @@ function makeAddCommand() {
698
700
  let presets = [];
699
701
  const skippedSecrets = /* @__PURE__ */ new Set();
700
702
  let plan = [];
703
+ const agentBound = [];
701
704
  const added = await am2.add(ref, {
702
705
  link: opts.link,
703
706
  force: opts.force,
@@ -711,6 +714,10 @@ function makeAddCommand() {
711
714
  onPlaceholderBody: (deployedRef) => placeholderBodies.push(deployedRef),
712
715
  onPlaceholderDescription: (deployedRef) => placeholderDescriptions.push(deployedRef),
713
716
  onLibraryMoved: (m) => warnings.push(`${m.ref} moved from ${m.from} to ${m.to}`),
717
+ onAgentBound: (id) => agentBound.push({ id }),
718
+ onAgentBindingKept: (id, keptRef) => warnings.push(
719
+ `agents.${id} already binds ${keptRef}; bind this one under another id in skaile.yaml`
720
+ ),
714
721
  onPresets: (expanded) => {
715
722
  presets = expanded;
716
723
  },
@@ -747,6 +754,11 @@ function makeAddCommand() {
747
754
  onError: logErr,
748
755
  onHint: (line) => logInfo(S.dim(line))
749
756
  });
757
+ for (const { id } of agentBound) {
758
+ logInfo(
759
+ `Bound agent instance ${S.cmd(id)} in skaile.yaml (${S.dim(`run it with skaile run --instance ${id}`)})`
760
+ );
761
+ }
750
762
  if (added.length === 0) {
751
763
  const parsedRef = parseAssetRef(ref);
752
764
  const kind = parsedRef.kind;
@@ -1054,7 +1066,8 @@ function readTextOrEmpty(file) {
1054
1066
  }
1055
1067
  }
1056
1068
  function infoShowsLocked(locked, latest) {
1057
- return locked !== void 0 && !locked.startsWith("0.0.0-sha") && latest !== void 0 && latest !== locked;
1069
+ return locked !== void 0 && !locked.startsWith("0.0.0-sha") && // An empty `latest` is unknown, like an absent one: a store row without a version (p1893).
1070
+ latest !== void 0 && latest !== "" && latest !== locked;
1058
1071
  }
1059
1072
  function infoVersionLine(locked, latest) {
1060
1073
  if (infoShowsLocked(locked, latest)) return `locked ${locked} (latest ${latest})`;
@@ -1102,7 +1115,7 @@ async function resolveInfoEntry(am2, ref, opts) {
1102
1115
  return { entry: match ?? deployed };
1103
1116
  }
1104
1117
  const lookup = opts.storeLookup ?? (async (filter) => {
1105
- const { resolveCatalogSource } = await import('../open-library-XGUCUJYE.js');
1118
+ const { resolveCatalogSource } = await import('../open-library-BVQCB37E.js');
1106
1119
  const { source, close } = await resolveCatalogSource({ projectDir: opts.projectDir });
1107
1120
  try {
1108
1121
  return await source.listAssets(filter);
@@ -1118,7 +1131,7 @@ async function resolveInfoEntry(am2, ref, opts) {
1118
1131
  );
1119
1132
  return { entry: hit ? catalogAssetToEntry(hit) : null };
1120
1133
  } catch (err) {
1121
- const { LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-XGUCUJYE.js');
1134
+ const { LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-BVQCB37E.js');
1122
1135
  const storeNote = err instanceof Error ? err.message : String(err);
1123
1136
  const disabled = err instanceof LocalCatalogDisabledError2 || /catalog\.url/i.test(storeNote);
1124
1137
  return { entry: null, storeNote, ...disabled ? { storeDisabled: true } : {} };
@@ -1777,6 +1790,10 @@ function makeCacheCommand() {
1777
1790
  return;
1778
1791
  }
1779
1792
  if (!opts.yes) {
1793
+ if (!process.stdin.isTTY) {
1794
+ logErr("cache clean needs --yes when there is no terminal to ask: nothing was removed");
1795
+ process.exit(1);
1796
+ }
1780
1797
  const ok = await p4.confirm({
1781
1798
  message: opts.global ? "Clear project AND global cache?" : "Clear project cache?"
1782
1799
  });
@@ -1842,7 +1859,7 @@ function makeCatalogCommand() {
1842
1859
  return catalog;
1843
1860
  }
1844
1861
  async function runLocalCatalogTest(projectDir) {
1845
- const { resolveCatalogSource } = await import('../open-library-XGUCUJYE.js');
1862
+ const { resolveCatalogSource } = await import('../open-library-BVQCB37E.js');
1846
1863
  let resolved;
1847
1864
  try {
1848
1865
  resolved = await resolveCatalogSource({ projectDir });
@@ -2018,7 +2035,7 @@ async function scanLibraryFlowEntries() {
2018
2035
  const { LocalIndex, resolveIndexPath, scanAuthoringLibraries } = await import('../library/index.js');
2019
2036
  const indexPath = resolveIndexPath();
2020
2037
  if (!existsSync(indexPath)) return entries;
2021
- const { getKindRegistry: getKindRegistry2 } = await import('../open-registry-DIFEPDF6.js');
2038
+ const { getKindRegistry: getKindRegistry2 } = await import('../open-registry-JCSIAKEC.js');
2022
2039
  const index = new LocalIndex({ indexPath });
2023
2040
  try {
2024
2041
  for (const { library, assets } of await scanAuthoringLibraries(index, getKindRegistry2())) {
@@ -2336,6 +2353,7 @@ async function showConfig(opts) {
2336
2353
  process.exit(1);
2337
2354
  }
2338
2355
  if (await reportUnknownHarnesses(projectDir) > 0) process.exit(1);
2356
+ await reportProjectConfig(projectDir, { harness: false });
2339
2357
  printEffectiveSection(config, sources);
2340
2358
  printWorkspaceDefaultsSection(wsDefaults);
2341
2359
  printModelSelectionSection(config, projectDir);
@@ -2692,6 +2710,7 @@ async function scanFactoryConnectors(scanDirectory2, roots) {
2692
2710
  return [...byName.values()];
2693
2711
  }
2694
2712
  async function connectConnectors(projectDir) {
2713
+ await loadDeclaredPlugins(projectDir);
2695
2714
  const res = await import('../connectors/index.js');
2696
2715
  res.registerBuiltinConnectors();
2697
2716
  const declarations = res.loadConnectorDeclarations(projectDir);
@@ -2792,10 +2811,14 @@ async function promptField(field) {
2792
2811
  }
2793
2812
  function makeConnectorCommand() {
2794
2813
  const cmd = new Command("connector").description("Operate on connectors in a workspace");
2795
- cmd.command("catalog").description("List all available connector drivers and their dependencies").action(async () => {
2814
+ cmd.command("catalog").description("List all available connector drivers and their dependencies").option("--project-dir <path>", "Workspace directory", process.cwd()).action(async (opts) => {
2796
2815
  const { scanDirectory: scanDirectory2, factoryAssetRoots: factoryAssetRoots2 } = await import('../core/index.js');
2797
2816
  const entries = await scanFactoryConnectors(scanDirectory2, factoryAssetRoots2());
2798
- if (entries.length === 0) {
2817
+ await loadDeclaredPlugins(path19__default.resolve(opts.projectDir));
2818
+ const { listConnectors } = await import('../connectors/index.js');
2819
+ const known = new Set(entries.map((e) => e.name));
2820
+ const pluginDrivers = listConnectors().filter((id) => !known.has(id));
2821
+ if (entries.length === 0 && pluginDrivers.length === 0) {
2799
2822
  console.log("No connector descriptors found.");
2800
2823
  return;
2801
2824
  }
@@ -2812,6 +2835,11 @@ function makeConnectorCommand() {
2812
2835
  if (depsStr) console.log(` ${"".padEnd(18)} ${depsStr}`);
2813
2836
  console.log();
2814
2837
  }
2838
+ for (const id of pluginDrivers) {
2839
+ console.log(` ${id.padEnd(18)} ${id}`);
2840
+ console.log(` ${"".padEnd(18)} Registered by a plugin of this project.`);
2841
+ console.log();
2842
+ }
2815
2843
  console.log(`Run: skaile connector add <driver> to add one to your project.
2816
2844
  `);
2817
2845
  });
@@ -2855,14 +2883,16 @@ Adding connector: ${entry.name} (${driver})
2855
2883
  Installing npm deps: ${allDeps.join(", ")}...`);
2856
2884
  const installResult = await installNpmPackages(allDeps, projectDir);
2857
2885
  if (!installResult.success) {
2858
- logErr(`Failed to install dependencies:
2859
- ${installResult.output}`);
2886
+ logErr(
2887
+ `Failed to install dependencies:
2888
+ ${installResult.output.trim() || "the package manager gave no output"}`
2889
+ );
2860
2890
  process.exit(1);
2861
2891
  }
2862
2892
  console.log(" \u2713 Dependencies installed");
2863
2893
  } else if (!opts.install && allDeps.length > 0) {
2864
2894
  console.log(
2865
- ` \u26A0 Skipping install. Add manually: bun add --optional ${allDeps.join(" ")}`
2895
+ ` \u26A0 Skipping install. Add manually, in ${projectDir}: npm install --save-optional ${allDeps.join(" ")} (bun: bun add --optional ${allDeps.join(" ")})`
2866
2896
  );
2867
2897
  }
2868
2898
  const editor = WorkspaceYamlEditor2.load(yamlPath);
@@ -2896,9 +2926,10 @@ ${installResult.output}`);
2896
2926
  console.log(`\u2713 Connector '${id}' removed from skaile.yaml`);
2897
2927
  });
2898
2928
  cmd.command("status [id]").option("--project-dir <path>", "Workspace directory", process.cwd()).description("Connect and report health status for one or all connectors").action(async (id, opts) => {
2929
+ const projectDir = path19__default.resolve(opts.projectDir);
2930
+ await loadDeclaredPlugins(projectDir);
2899
2931
  const res = await import('../connectors/index.js');
2900
2932
  res.registerBuiltinConnectors();
2901
- const projectDir = path19__default.resolve(opts.projectDir);
2902
2933
  const declarations = res.loadConnectorDeclarations(projectDir);
2903
2934
  if (declarations.length === 0) {
2904
2935
  console.log("No connectors configured in skaile.yaml.");
@@ -3157,6 +3188,11 @@ async function buildDeployContext(projectDir) {
3157
3188
  };
3158
3189
  return { ctx, controller };
3159
3190
  }
3191
+ var CLOUD_TARGET_PLUGINS = {
3192
+ fly: "@skaile/provider-fly",
3193
+ k8s: "@skaile/provider-k8s",
3194
+ "vercel-sandbox": "@skaile/provider-vercel-sandbox"
3195
+ };
3160
3196
  async function ensureTargetsRegistered(projectDir) {
3161
3197
  const { registerBuiltinDeployTargets } = await import('../deploy/index.js');
3162
3198
  const { pluginRegistry } = await import('../plugin-registry/index.js');
@@ -3164,7 +3200,7 @@ async function ensureTargetsRegistered(projectDir) {
3164
3200
  const { resolveSkWorkspaceConfig: resolveSkWorkspaceConfig2 } = await import('../core/index.js');
3165
3201
  const config = resolveSkWorkspaceConfig2(projectDir);
3166
3202
  if (config.plugins && config.plugins.length > 0) {
3167
- const { ensurePluginsLoaded } = await import('../plugin-store-BBLDFD3L.js');
3203
+ const { ensurePluginsLoaded } = await import('../plugin-store-NGRUTCJI.js');
3168
3204
  const result = await ensurePluginsLoaded(projectDir, config.plugins, pluginRegistry);
3169
3205
  for (const f of result.failed) logWarn(f.error);
3170
3206
  }
@@ -3180,7 +3216,12 @@ async function runUp(opts) {
3180
3216
  { deploy: config.deploy },
3181
3217
  opts.target ? { target: opts.target, config: overrideConfig, reason: "cli --target" } : void 0,
3182
3218
  pluginRegistry
3183
- );
3219
+ ).catch((err) => {
3220
+ const id = err instanceof Error ? /^No deploy target registered with id "(.+)"\.$/.exec(err.message)?.[1] : void 0;
3221
+ const pkg2 = id !== void 0 && Object.hasOwn(CLOUD_TARGET_PLUGINS, id) ? CLOUD_TARGET_PLUGINS[id] : void 0;
3222
+ if (pkg2) throw new Error(`${err.message} Run: skaile plugin install ${pkg2}`);
3223
+ throw err;
3224
+ });
3184
3225
  const { ctx, controller } = await buildDeployContext(projectDir);
3185
3226
  ctx.log.debug(`deploy target resolved`, {
3186
3227
  target: resolution.target.id,
@@ -3438,13 +3479,16 @@ function makeHarnessCommand() {
3438
3479
  const cmd = new Command("harness").description("Choose the coding-agent harness of a project");
3439
3480
  cmd.command("set <name>").description(
3440
3481
  `Switch the project to a harness (${SUPPORTED_HARNESSES.join(" | ")}): rewrite skaile.yaml and install for it`
3441
- ).option("--project-dir <path>", "Project directory", process.cwd()).action(async (name, opts) => {
3442
- await runHarnessSet(name, path19__default.resolve(opts.projectDir));
3482
+ ).option("--project-dir <path>", "Project directory", process.cwd()).option(
3483
+ "--clean",
3484
+ "Delete the copies of the old harness (.claude/, .omp/, .codex/) instead of only naming them"
3485
+ ).action(async (name, opts) => {
3486
+ await runHarnessSet(name, path19__default.resolve(opts.projectDir), opts);
3443
3487
  });
3444
3488
  cmd.action(() => cmd.help());
3445
3489
  return cmd;
3446
3490
  }
3447
- async function runHarnessSet(name, projectDir) {
3491
+ async function runHarnessSet(name, projectDir, opts) {
3448
3492
  const target = parseHarnessTarget(name);
3449
3493
  if (!target) {
3450
3494
  logErr(unknownHarnessTargetMessage(name));
@@ -3461,16 +3505,14 @@ async function runHarnessSet(name, projectDir) {
3461
3505
  process.exit(1);
3462
3506
  }
3463
3507
  const profile = editor.getAgentConfig("default");
3464
- editor.setAgentConfig("default", {
3465
- agent: target,
3466
- harness: HARNESS_ID_OF_TARGET[target]
3467
- });
3508
+ editor.setAgentConfig("default", { harness: HARNESS_ID_OF_TARGET[target] });
3509
+ editor.deleteAgentConfigField("default", "agent");
3468
3510
  editor.save();
3469
3511
  if (before === target) {
3470
3512
  logInfo(`Project is already on ${S.cmd(target)}; installing for it.`);
3471
3513
  } else {
3472
3514
  logOk(
3473
- `Set ${S.cmd("agent-config.default")} to ${S.cmd(`agent: ${target}`)}, ${S.cmd(`harness: ${HARNESS_ID_OF_TARGET[target]}`)} in skaile.yaml`
3515
+ `Set ${S.cmd("agent-config.default")} to ${S.cmd(`harness: ${HARNESS_ID_OF_TARGET[target]}`)} in skaile.yaml`
3474
3516
  );
3475
3517
  }
3476
3518
  if (profile?.model) {
@@ -3480,6 +3522,29 @@ async function runHarnessSet(name, projectDir) {
3480
3522
  }
3481
3523
  logInfo(`Installing for ${target} (${HARNESS_TARGETS[target].local.skill})`);
3482
3524
  await runYamlInstall({ projectDir });
3525
+ if (opts.clean) removeOldHarnessCopies(projectDir);
3526
+ }
3527
+ function removeOldHarnessCopies(projectDir) {
3528
+ const am2 = new AssetManager({ registry: getKindRegistry(), projectDir });
3529
+ const stale = am2.listStaleHarnessCopies();
3530
+ if (stale.length === 0) {
3531
+ logInfo("No old harness copies to remove.");
3532
+ return;
3533
+ }
3534
+ const rel = (copies) => copies.map((c) => path19__default.relative(projectDir, c.path)).join(", ");
3535
+ const owned = stale.filter((c) => c.skaileWrote);
3536
+ const foreign = stale.filter((c) => !c.skaileWrote);
3537
+ for (const copy of owned) rmSync(copy.path, { recursive: true, force: true });
3538
+ if (owned.length > 0) {
3539
+ logOk(
3540
+ `Removed ${owned.length} old harness cop${owned.length === 1 ? "y" : "ies"}: ${rel(owned)}`
3541
+ );
3542
+ }
3543
+ if (foreign.length > 0) {
3544
+ logWarn(
3545
+ `Kept ${foreign.length} cop${foreign.length === 1 ? "y" : "ies"} skaile did not write (the bytes differ from the new harness's copy, or it is not in the lock): ${rel(foreign)}. Delete ${foreign.length === 1 ? "it" : "them"} by hand if you do not need ${foreign.length === 1 ? "it" : "them"}.`
3546
+ );
3547
+ }
3483
3548
  }
3484
3549
  function makeHistoryCommand() {
3485
3550
  const cmd = new Command("history").description("Show recent add/remove/update actions");
@@ -3825,7 +3890,9 @@ async function installClaudeCode(projectDir, opts) {
3825
3890
  } else {
3826
3891
  logInfo(`claude-code: already installed (mcp)`);
3827
3892
  }
3828
- console.log(` ${S.dim("\u2192")} Restart Claude Code to pick up the change.`);
3893
+ console.log(
3894
+ r.method === "plugin" ? ` ${S.dim("\u2192")} Restart Claude Code to pick up the change.` : ` ${S.dim("\u2192")} Restart Claude Code and approve the skaile-workspace server: it stays "Pending approval" until you start \`claude\` in the project and approve it.`
3895
+ );
3829
3896
  }
3830
3897
  async function installOmp(projectDir) {
3831
3898
  const r = await install3(projectDir);
@@ -4409,7 +4476,7 @@ function warnManifestNeedsCommit(libPath, name) {
4409
4476
  });
4410
4477
  if (status4.status !== 0 || status4.stdout.trim() === "") return;
4411
4478
  logInfo(
4412
- `${SKAILE_MANIFEST_FILENAME} was changed in the clone. Commit it with \`skaile library commit ${name}\`; \`pull\` and \`sync\` stop until you do.`
4479
+ `${SKAILE_MANIFEST_FILENAME} was changed in the clone. Commit it with \`skaile library commit ${name}\`; a \`pull\` or \`sync\` stops only when a tracked file has uncommitted changes.`
4413
4480
  );
4414
4481
  }
4415
4482
  function assertManifestEditableOrExit(libraryPath) {
@@ -4665,7 +4732,7 @@ function remoteBranches(url) {
4665
4732
  return r.stdout.split("\n").map((line) => line.split(" ")[1]?.replace(/^refs\/heads\//, "")).filter((b) => !!b);
4666
4733
  }
4667
4734
  async function warnIfNotGithubRemote(name, url) {
4668
- const { isGithubRemote, notGithubRemoteMessage } = await import('../library-publish-GQMNTAKK.js');
4735
+ const { isGithubRemote, notGithubRemoteMessage } = await import('../library-publish-MUGUST43.js');
4669
4736
  if (!isGithubRemote(url)) logWarn(notGithubRemoteMessage(name, url));
4670
4737
  }
4671
4738
  function scaffoldLibraryFiles(dir, name) {
@@ -5067,7 +5134,7 @@ function makeLibraryCommand() {
5067
5134
  logErr("No default library set. Run `skaile library default <name>` or pass --library.");
5068
5135
  process.exit(1);
5069
5136
  }
5070
- cmd.command("default <name>").description("Set <name> as the default library").action(async (name) => {
5137
+ cmd.command("default <name>").description("Set <name> as the default library").option("--project-dir <path>", "Project directory", process.cwd()).action(async (name, opts) => {
5071
5138
  const { manager, close } = await openLibraryManager();
5072
5139
  try {
5073
5140
  const lib = await manager.requireLibrary(name);
@@ -5076,6 +5143,17 @@ function makeLibraryCommand() {
5076
5143
  process.exitCode = 1;
5077
5144
  return;
5078
5145
  }
5146
+ const am2 = new AssetManager({
5147
+ registry: getKindRegistry(),
5148
+ projectDir: path19.resolve(opts.projectDir)
5149
+ });
5150
+ if (am2.undeclaredSourceClones([lib]).has(lib.id)) {
5151
+ logErr(
5152
+ `"${lib.name}" is a source clone that this project does not declare in skaile.yaml sources:. Run \`skaile source add <url>\` here to use it.`
5153
+ );
5154
+ process.exitCode = 1;
5155
+ return;
5156
+ }
5079
5157
  const updated = await manager.setDefault(name);
5080
5158
  logOk(`Default \u2192 ${updated.name}`);
5081
5159
  } finally {
@@ -5405,16 +5483,16 @@ function makeLibraryCommand() {
5405
5483
  "With --create-repo: create the repo private (the store only accepts public repos)"
5406
5484
  ).option("--ref <gitref>", "Git ref to ingest (default: the library branch or main)").option("--dry-run", "Print the plan; push nothing and call no store endpoint").action(
5407
5485
  async (lib, opts) => {
5408
- const { runLibraryPublish } = await import('../library-publish-GQMNTAKK.js');
5486
+ const { runLibraryPublish } = await import('../library-publish-MUGUST43.js');
5409
5487
  await withStoreErrorHandling(() => runLibraryPublish(lib, opts));
5410
5488
  }
5411
5489
  );
5412
5490
  cmd.command("register <lib>").description("Register the library's manifest without pushing (bytes already on github)").option("--asset <ref>", "Publish only the single asset matching this ref/name").option("--ref <gitref>", "Git ref to ingest (default: the library branch or main)").option("--dry-run", "Print the plan; call no store endpoint").action(async (lib, opts) => {
5413
- const { runLibraryRegister } = await import('../library-publish-GQMNTAKK.js');
5491
+ const { runLibraryRegister } = await import('../library-publish-MUGUST43.js');
5414
5492
  await withStoreErrorHandling(() => runLibraryRegister(lib, opts));
5415
5493
  });
5416
5494
  cmd.command("yank <lib>").description("Retract the library's published assets from the store").option("--asset <ref>", "Yank only the single asset matching this ref/name").action(async (lib, opts) => {
5417
- const { runLibraryYank } = await import('../library-publish-GQMNTAKK.js');
5495
+ const { runLibraryYank } = await import('../library-publish-MUGUST43.js');
5418
5496
  await withStoreErrorHandling(() => runLibraryYank(lib, opts));
5419
5497
  });
5420
5498
  return cmd;
@@ -6074,7 +6152,7 @@ function scheduleSoftDepPreview() {
6074
6152
  }
6075
6153
  async function loadAssets() {
6076
6154
  softDepPreviewCache.clear();
6077
- const { gatherAssetFeeds } = await import('../asset-feeds-UJSYGKCX.js');
6155
+ const { gatherAssetFeeds } = await import('../asset-feeds-4I6Z4OI3.js');
6078
6156
  const { entries, notes } = await gatherAssetFeeds(am, am.projectDir);
6079
6157
  if (notes.length > 0) {
6080
6158
  state.message = notes.map((n) => `[${n.feed}] ${n.message}`).join(" \u2022 ");
@@ -6278,7 +6356,7 @@ function reconcileCollapsedSets(rows) {
6278
6356
  async function loadSourcesAndLibraries() {
6279
6357
  try {
6280
6358
  const [{ openLibraryManager: openLibraryManager2 }, { getGlobalCacheDir: getGlobalCacheDir2, globalSkaileDir: globalSkaileDir2 }] = await Promise.all([
6281
- import('../open-library-XGUCUJYE.js'),
6359
+ import('../open-library-BVQCB37E.js'),
6282
6360
  import('../core/index.js')
6283
6361
  ]);
6284
6362
  const { manager, library, close } = await openLibraryManager2();
@@ -7463,9 +7541,9 @@ function changeLabel(change, base) {
7463
7541
  return `move ${rel(change.from)} \u2192 ${rel(change.to)}`;
7464
7542
  }
7465
7543
  }
7466
- function resolveMode(opts, writeFlag = "--write") {
7544
+ function resolveMode(opts) {
7467
7545
  if (opts.write && opts.dryRun) {
7468
- logErr(`${writeFlag} and --dry-run are mutually exclusive.`);
7546
+ logErr("--write and --dry-run are mutually exclusive.");
7469
7547
  process.exit(1);
7470
7548
  }
7471
7549
  return opts.write === true;
@@ -7476,7 +7554,7 @@ function printChanges(changes, base) {
7476
7554
  console.log(colorizeDiff(renderChange(change, base)).trimEnd());
7477
7555
  }
7478
7556
  }
7479
- function finish(changes, write, base, writeFlag = "--write") {
7557
+ function finish(changes, write, base) {
7480
7558
  console.log();
7481
7559
  if (changes.length === 0) {
7482
7560
  logOk("Nothing to migrate.");
@@ -7484,7 +7562,7 @@ function finish(changes, write, base, writeFlag = "--write") {
7484
7562
  }
7485
7563
  if (!write) {
7486
7564
  logInfo(
7487
- `Dry run: ${changes.length} file change(s) planned, nothing written. Re-run with ${writeFlag} to apply.`
7565
+ `Dry run: ${changes.length} file change(s) planned, nothing written. Re-run with --write to apply.`
7488
7566
  );
7489
7567
  return;
7490
7568
  }
@@ -8511,10 +8589,22 @@ function planAssetMigration(options) {
8511
8589
  };
8512
8590
  }
8513
8591
  var SKAILE_YAML_SUFFIX = ".skaile.yaml";
8592
+ var RETIRED_AGENT_KEY = "agent";
8514
8593
  var OLD_KEY = "driver";
8515
8594
  var NEW_KEY = "harness";
8516
8595
  var AGENT_CONFIG_KEYS = ["agent-config", "agent_config", "agentConfig"];
8517
- function renameInMap(map, where, notes) {
8596
+ function dropAgentKey(map, where, notes) {
8597
+ const idx = map.items.findIndex((p6) => isScalar(p6.key) && p6.key.value === RETIRED_AGENT_KEY);
8598
+ if (idx < 0) return false;
8599
+ map.items.splice(idx, 1);
8600
+ notes.push(`${where}: removed \`agent\` (nothing reads it)`);
8601
+ return true;
8602
+ }
8603
+ function rewriteProfile(map, where, notes) {
8604
+ const renamed = renameDriver(map, where, notes);
8605
+ return dropAgentKey(map, where, notes) || renamed;
8606
+ }
8607
+ function renameDriver(map, where, notes) {
8518
8608
  const oldIdx = map.items.findIndex((p6) => isScalar(p6.key) && p6.key.value === OLD_KEY);
8519
8609
  if (oldIdx < 0) return false;
8520
8610
  const hasNew = map.items.some((p6) => isScalar(p6.key) && p6.key.value === NEW_KEY);
@@ -8541,17 +8631,17 @@ function migrateHarnessYaml(text, label = SKAILE_YAML_DEFAULT) {
8541
8631
  for (const key of AGENT_CONFIG_KEYS) {
8542
8632
  const block = root.get(key, true);
8543
8633
  if (!isMap(block)) continue;
8544
- const flat = AGENT_PROFILE_FIELDS.some((f) => {
8634
+ const flat = [...AGENT_PROFILE_FIELDS, RETIRED_AGENT_KEY].some((f) => {
8545
8635
  const v = block.get(f, true);
8546
8636
  return isScalar(v) && typeof v.value === "string";
8547
8637
  });
8548
8638
  if (flat) {
8549
- changed = renameInMap(block, `${label}: ${key}`, notes) || changed;
8639
+ changed = rewriteProfile(block, `${label}: ${key}`, notes) || changed;
8550
8640
  continue;
8551
8641
  }
8552
8642
  for (const pair of block.items) {
8553
8643
  if (!isMap(pair.value) || !isScalar(pair.key)) continue;
8554
- changed = renameInMap(pair.value, `${label}: ${key}.${String(pair.key.value)}`, notes) || changed;
8644
+ changed = rewriteProfile(pair.value, `${label}: ${key}.${String(pair.key.value)}`, notes) || changed;
8555
8645
  }
8556
8646
  }
8557
8647
  return { output: changed ? String(doc) : text, notes };
@@ -8620,29 +8710,33 @@ function planHarnessMigration(opts) {
8620
8710
  return { changes, notes };
8621
8711
  }
8622
8712
  function runMigrateHarness(opts) {
8623
- const apply = resolveMode(
8624
- { write: opts.apply === true || opts.write === true, dryRun: opts.dryRun },
8625
- "--apply"
8626
- );
8627
8713
  const cwd = process.cwd();
8628
8714
  const projectDir = path19__default.resolve(opts.projectDir ?? findWorkspaceRoot(cwd) ?? cwd);
8629
8715
  const plan = planHarnessMigration({ projectDir });
8630
8716
  for (const note of plan.notes) console.log(` ${note}`);
8631
8717
  printChanges(plan.changes, projectDir);
8632
- finish(plan.changes, apply, projectDir, "--apply");
8718
+ if (opts.dryRun === true && plan.changes.length > 0) {
8719
+ console.log();
8720
+ logInfo(
8721
+ `Dry run: ${plan.changes.length} file change(s) planned, nothing written. Run \`skaile migrate harness\` to write them.`
8722
+ );
8723
+ return;
8724
+ }
8725
+ finish(plan.changes, true, projectDir);
8633
8726
  }
8634
8727
  function addMigrateHarnessCommand(migrate) {
8635
8728
  migrate.command("harness").description(
8636
- "Rename the `driver` key to `harness` in skaile.yaml agent-config and settings.json"
8637
- ).option("--project-dir <path>", "Project directory (default: the workspace root of the cwd)").option("--apply", "Write the changes (default: print a diff and write nothing)").option("--write", "Same as --apply").option("--dry-run", "Print the diff and write nothing (the default)").addHelpText(
8729
+ "Rename the `driver` key to `harness` and remove the retired `agent` key in skaile.yaml and settings.json"
8730
+ ).option("--project-dir <path>", "Project directory (default: the workspace root of the cwd)").option("--dry-run", "Print the diff and write nothing").addHelpText(
8638
8731
  "after",
8639
8732
  `
8640
8733
  Rewrites (the connector/mount \`driver\` of connectors: and mounts: is never touched):
8641
8734
  skaile.yaml agent-config.<profile>.driver -> harness (also the flat agent-config: { driver: \u2026 } shape)
8735
+ skaile.yaml agent-config.<profile>.agent removed (nothing reads it)
8642
8736
  .skaile/settings.json, ~/.skaile/settings.json driver -> harness
8643
- A profile or file that sets both keeps \`harness\` and drops \`driver\`.
8737
+ A profile or file that sets both keys keeps \`harness\` and drops \`driver\`.
8644
8738
 
8645
- Dry run by default: prints a unified diff per file. Pass --apply to write.
8739
+ Prints a unified diff per file and writes the files. Pass --dry-run to print the diff only.
8646
8740
  `
8647
8741
  ).action((opts) => runMigrateHarness(opts));
8648
8742
  }
@@ -9261,13 +9355,20 @@ function makeOutdatedCommand() {
9261
9355
  harness: opts.target
9262
9356
  });
9263
9357
  const entries = await am2.outdated();
9358
+ const unreachable = am2.takeUnreachableSources();
9359
+ for (const u of unreachable) {
9360
+ logWarn(
9361
+ `Source ${u.name}: could not reach its origin (${u.reason}); commits behind not checked.`
9362
+ );
9363
+ }
9364
+ if (unreachable.length > 0) process.exitCode = 1;
9264
9365
  if (entries.length === 0) {
9265
- logInfo("All assets are up to date.");
9366
+ if (unreachable.length === 0) logInfo("All assets are up to date.");
9266
9367
  return;
9267
9368
  }
9268
9369
  const filtered = filter ? entries.filter((e) => matchesOutdatedFilter(e, filter)) : entries;
9269
9370
  if (filtered.length === 0) {
9270
- logInfo(`${filter} is up to date.`);
9371
+ if (unreachable.length === 0) logInfo(`${filter} is up to date.`);
9271
9372
  return;
9272
9373
  }
9273
9374
  const refW = Math.max(4, ...filtered.map((e) => outdatedRef(e).length));
@@ -9281,16 +9382,8 @@ function makeOutdatedCommand() {
9281
9382
  );
9282
9383
  }
9283
9384
  console.log();
9284
- const needsUpdate = filtered.some(
9285
- (e) => e.problem === void 0 && !e.pinned && !e.contentChanged
9286
- );
9287
- const needsRelock = filtered.some(
9288
- (e) => e.problem === void 0 && !e.pinned && e.contentChanged
9289
- );
9385
+ const needsUpdate = filtered.some((e) => e.problem === void 0 && !e.pinned);
9290
9386
  if (needsUpdate) logWarn(`Run ${S.cmd("skaile update")} to re-lock and re-deploy.`);
9291
- if (needsRelock) {
9292
- logWarn(`Run ${S.cmd("skaile install")} to re-lock the changed library assets.`);
9293
- }
9294
9387
  if (filtered.some((e) => e.problem !== void 0 && !e.manualFix)) {
9295
9388
  logWarn(`Run ${S.cmd("skaile install")} to restore or re-lock the broken assets.`);
9296
9389
  }
@@ -9364,13 +9457,14 @@ function action2(fn) {
9364
9457
  try {
9365
9458
  await fn(...args);
9366
9459
  } catch (err) {
9367
- logErr(err instanceof Error ? err.message : String(err));
9460
+ const { condensePluginFailure } = await import('../plugin-store-NGRUTCJI.js');
9461
+ logErr(condensePluginFailure(err instanceof Error ? err.message : String(err)));
9368
9462
  process.exitCode = 1;
9369
9463
  }
9370
9464
  };
9371
9465
  }
9372
9466
  async function reconcileAndReport(projectDir, plugins, opts = {}) {
9373
- const { reconcilePlugins } = await import('../plugin-store-BBLDFD3L.js');
9467
+ const { reconcilePlugins } = await import('../plugin-store-NGRUTCJI.js');
9374
9468
  if (plugins.length === 0) {
9375
9469
  logInfo("No plugins declared \u2014 nothing to reconcile.");
9376
9470
  return;
@@ -9381,11 +9475,14 @@ async function reconcileAndReport(projectDir, plugins, opts = {}) {
9381
9475
  else logInfo(`Plugin store ${result.reason}.`);
9382
9476
  } catch (err) {
9383
9477
  if (opts.strict) throw err;
9384
- logWarn(`reconcile skipped: ${err instanceof Error ? err.message : String(err)}`);
9478
+ const { condensePluginFailure } = await import('../plugin-store-NGRUTCJI.js');
9479
+ logWarn(
9480
+ `reconcile skipped: ${condensePluginFailure(err instanceof Error ? err.message : String(err))}`
9481
+ );
9385
9482
  }
9386
9483
  }
9387
9484
  async function verifyPluginLoads(projectDir, spec) {
9388
- const { loadPlugins } = await import('../plugin-store-BBLDFD3L.js');
9485
+ const { loadPlugins } = await import('../plugin-store-NGRUTCJI.js');
9389
9486
  const { createPluginRegistry } = await import('../plugin-registry/index.js');
9390
9487
  const registry = createPluginRegistry();
9391
9488
  const result = await loadPlugins(projectDir, [spec], registry);
@@ -9396,10 +9493,11 @@ async function verifyPluginLoads(projectDir, spec) {
9396
9493
  );
9397
9494
  logOk(`Loaded ${S.cmd(spec)}${contributed.length > 0 ? ` (${contributed.join(", ")})` : ""}`);
9398
9495
  }
9399
- async function runInstall2(rawSpec, opts) {
9496
+ async function runInstall2(typedSpec, opts) {
9497
+ const rawSpec = typedSpec.trim();
9400
9498
  const projectDir = path19__default.resolve(opts.projectDir);
9401
9499
  const { WorkspaceYamlEditor: WorkspaceYamlEditor2 } = await import('../core/index.js');
9402
- const { specName, rollbackPluginStore, npmSpecError, projectRelativeFileSpec } = await import('../plugin-store-BBLDFD3L.js');
9500
+ const { specName, rollbackPluginStore, npmSpecError, projectRelativeFileSpec } = await import('../plugin-store-NGRUTCJI.js');
9403
9501
  const specError = npmSpecError(rawSpec);
9404
9502
  if (specError) throw new Error(specError);
9405
9503
  const spec = projectRelativeFileSpec(rawSpec, process.cwd(), projectDir);
@@ -9431,7 +9529,7 @@ async function runInstall2(rawSpec, opts) {
9431
9529
  async function runRemove(name, opts) {
9432
9530
  const projectDir = path19__default.resolve(opts.projectDir);
9433
9531
  const { WorkspaceYamlEditor: WorkspaceYamlEditor2 } = await import('../core/index.js');
9434
- const { specName } = await import('../plugin-store-BBLDFD3L.js');
9532
+ const { specName } = await import('../plugin-store-NGRUTCJI.js');
9435
9533
  const yamlPath = path19__default.join(projectDir, "skaile.yaml");
9436
9534
  if (!existsSync(yamlPath)) {
9437
9535
  logInfo(`No plugin matching ${S.cmd(name)}: there is no skaile.yaml in ${projectDir}.`);
@@ -9445,7 +9543,14 @@ async function runRemove(name, opts) {
9445
9543
  }
9446
9544
  editor.save();
9447
9545
  logOk(`Removed ${S.cmd(name)} from skaile.yaml plugins`);
9448
- await reconcileAndReport(projectDir, editor.getPlugins());
9546
+ const remaining = editor.getPlugins();
9547
+ if (remaining.length === 0) {
9548
+ const { rollbackPluginStore } = await import('../plugin-store-NGRUTCJI.js');
9549
+ await rollbackPluginStore(projectDir, []);
9550
+ logInfo("No plugins declared; removed .skaile/plugins/.");
9551
+ return;
9552
+ }
9553
+ await reconcileAndReport(projectDir, remaining);
9449
9554
  }
9450
9555
  async function runList(opts) {
9451
9556
  const projectDir = path19__default.resolve(opts.projectDir);
@@ -9463,7 +9568,7 @@ async function runList(opts) {
9463
9568
  const registry = createPluginRegistry();
9464
9569
  if (declared.length > 0) {
9465
9570
  try {
9466
- const { loadPlugins } = await import('../plugin-store-BBLDFD3L.js');
9571
+ const { loadPlugins } = await import('../plugin-store-NGRUTCJI.js');
9467
9572
  const result = await loadPlugins(projectDir, declared, registry);
9468
9573
  for (const f of result.failed) logWarn(f.error);
9469
9574
  } catch (err) {
@@ -10602,6 +10707,13 @@ function makeRunCommand() {
10602
10707
  logErr(providerRefusal);
10603
10708
  process.exit(1);
10604
10709
  }
10710
+ if (dryRun) {
10711
+ const sdkProblem = await checkHarnessSdk(projectDir, harness);
10712
+ if (sdkProblem) {
10713
+ logErr(sdkProblem);
10714
+ process.exit(1);
10715
+ }
10716
+ }
10605
10717
  const flowPath = findProjectFlowFile(flowId, projectDir);
10606
10718
  if (flowPath && agentDefinition) {
10607
10719
  logErr(
@@ -10951,7 +11063,11 @@ function makeServeCommand() {
10951
11063
  "--managed-codex-config <path>",
10952
11064
  "Explicit private host configuration for managed Codex",
10953
11065
  valueNotFlag("--managed-codex-config")
10954
- ).option("--harness <name>", "Override harness", valueNotFlag("--harness")).addOption(driverAliasOption().argParser(valueNotFlag("--driver"))).option("--model <name>", "Override model", valueNotFlag("--model")).option("--provider <name>", "Override provider", valueNotFlag("--provider")).option(
11066
+ ).option("--harness <name>", "Override harness", valueNotFlag("--harness")).addOption(driverAliasOption().argParser(valueNotFlag("--driver"))).option("--model <name>", "Override model", valueNotFlag("--model")).option(
11067
+ "--provider <name>",
11068
+ 'Use only this AI provider registry entry (same as --providers <name>); managed Codex takes "openai"',
11069
+ valueNotFlag("--provider")
11070
+ ).option(
10955
11071
  "--session-id <id>",
10956
11072
  "Label for the session; does not restore the conversation (use --resume-session-id)",
10957
11073
  valueNotFlag("--session-id")
@@ -10996,7 +11112,7 @@ function makeServeCommand() {
10996
11112
  process.exitCode = 1;
10997
11113
  return;
10998
11114
  }
10999
- const dirProblem = (await import('../serve-preflight-NPWI4MV6.js')).checkServeProjectDir(
11115
+ const dirProblem = (await import('../serve-preflight-GQY5DZX6.js')).checkServeProjectDir(
11000
11116
  opts.projectDir
11001
11117
  );
11002
11118
  if (dirProblem) {
@@ -11023,17 +11139,27 @@ function makeServeCommand() {
11023
11139
  } else {
11024
11140
  await ensurePluginsLoadedForServe(opts.projectDir);
11025
11141
  }
11026
- const providers = parseProviderIds(opts.providers);
11142
+ let providers = parseProviderIds(opts.providers);
11143
+ if (!managedCodex) {
11144
+ const { resolveServeProvider } = await import('../serve-preflight-GQY5DZX6.js');
11145
+ const picked = resolveServeProvider(opts.projectDir, opts.provider, providers);
11146
+ if ("problem" in picked) {
11147
+ logErr(picked.problem);
11148
+ process.exitCode = 1;
11149
+ return;
11150
+ }
11151
+ providers = [...picked.providers];
11152
+ }
11027
11153
  const modelEndpoint = parseModelEndpointFlag(opts.modelEndpoint);
11028
- const { checkHarnessSdk, checkModelEndpointPeer, checkServeModel } = await import('../serve-preflight-NPWI4MV6.js');
11029
- const { checkServeHarness, checkServeAgentDefinition } = await import('../serve-preflight-NPWI4MV6.js');
11154
+ const { checkHarnessSdk: checkHarnessSdk2, checkModelEndpointPeer, checkServeModel } = await import('../serve-preflight-GQY5DZX6.js');
11155
+ const { checkServeHarness, checkServeAgentDefinition } = await import('../serve-preflight-GQY5DZX6.js');
11030
11156
  const startProblem = managedCodex ? null : await checkServeHarness(opts.projectDir, opts.harness) ?? checkServeAgentDefinition(opts.projectDir);
11031
11157
  if (startProblem) {
11032
11158
  logErr(startProblem);
11033
11159
  process.exitCode = 1;
11034
11160
  return;
11035
11161
  }
11036
- const harnessProblem = managedCodex ? null : await checkHarnessSdk(opts.projectDir, opts.harness);
11162
+ const harnessProblem = managedCodex ? null : await checkHarnessSdk2(opts.projectDir, opts.harness);
11037
11163
  if (harnessProblem) {
11038
11164
  logErr(harnessProblem);
11039
11165
  process.exitCode = 1;
@@ -11093,12 +11219,12 @@ function makeServeCommand() {
11093
11219
  );
11094
11220
  }
11095
11221
  async function ensurePluginsLoadedForServe(projectDir) {
11096
- const { logInfo: logInfo2, logWarn: logWarn2 } = await import('../helpers-SSSKT5XK.js');
11222
+ const { logInfo: logInfo2, logWarn: logWarn2 } = await import('../helpers-YHDQHQEQ.js');
11097
11223
  try {
11098
11224
  const { resolveSkWorkspaceConfig: resolveSkWorkspaceConfig2 } = await import('../core/index.js');
11099
11225
  const config = resolveSkWorkspaceConfig2(projectDir);
11100
11226
  if (!config.plugins || config.plugins.length === 0) return;
11101
- const { ensurePluginsLoaded } = await import('../plugin-store-BBLDFD3L.js');
11227
+ const { ensurePluginsLoaded } = await import('../plugin-store-NGRUTCJI.js');
11102
11228
  const { pluginRegistry } = await import('../plugin-registry/index.js');
11103
11229
  const result = await ensurePluginsLoaded(projectDir, config.plugins, pluginRegistry);
11104
11230
  if (result.loaded.length > 0) {
@@ -11112,14 +11238,14 @@ async function ensurePluginsLoadedForServe(projectDir) {
11112
11238
  }
11113
11239
  }
11114
11240
  async function runCompileTest(opts) {
11115
- const { logOk: logOk2, logErr: logErr2, logInfo: logInfo2, S: S2 } = await import('../helpers-SSSKT5XK.js');
11241
+ const { logOk: logOk2, logErr: logErr2, logInfo: logInfo2, S: S2 } = await import('../helpers-YHDQHQEQ.js');
11116
11242
  const { tmpdir } = await import('os');
11117
11243
  const { dirname: dirname3, join: join6, resolve: resolve4 } = await import('path');
11118
11244
  const { fileURLToPath: fileURLToPath2 } = await import('url');
11119
11245
  const { unlinkSync, existsSync: existsSync22 } = await import('fs');
11120
11246
  const { spawn } = await import('child_process');
11121
11247
  const { portableSpawnSync: portableSpawnSync2 } = await import('../core/index.js');
11122
- const { MONOREPO_ROOT } = await import('../paths-G4GFJLE2.js');
11248
+ const { MONOREPO_ROOT } = await import('../paths-XLKCAFRZ.js');
11123
11249
  if (MONOREPO_ROOT === null) {
11124
11250
  logErr2("--compile-test is only available inside the skaile-dev workspace.");
11125
11251
  logInfo2("Run it from a checkout of skaile-ai/skaile-dev (the monorepo shell).");
@@ -12077,8 +12203,8 @@ function makeStoreCommand() {
12077
12203
  "--all",
12078
12204
  `List every match (default: ${STORE_ROW_LIMIT} rows, only what \`skaile add\` can install)`
12079
12205
  ).option("-C, --project-dir <dir>", "Project directory (catalog config overlay)", process.cwd()).action(async (query, opts) => {
12080
- const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-XGUCUJYE.js');
12081
- const { getKnownKinds: getKnownKinds2 } = await import('../open-registry-DIFEPDF6.js');
12206
+ const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-BVQCB37E.js');
12207
+ const { getKnownKinds: getKnownKinds2 } = await import('../open-registry-JCSIAKEC.js');
12082
12208
  const projectDir = path19__default.resolve(opts.projectDir);
12083
12209
  if (opts.kind && !getKnownKinds2().has(opts.kind)) {
12084
12210
  logErr(
@@ -12136,8 +12262,8 @@ function makeStoreCommand() {
12136
12262
  }
12137
12263
  });
12138
12264
  store.command("show <ref>").description("Show a store asset's details + provenance (source, files, integrity)").option("-C, --project-dir <dir>", "Project directory (catalog config overlay)", process.cwd()).action(async (ref, opts) => {
12139
- const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-XGUCUJYE.js');
12140
- const { supportsInstallManifest: supportsInstallManifest2 } = await import('../project-LB745WVZ.js');
12265
+ const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-BVQCB37E.js');
12266
+ const { supportsInstallManifest: supportsInstallManifest2 } = await import('../project-BGYMLAS6.js');
12141
12267
  try {
12142
12268
  parseAssetRef(ref);
12143
12269
  } catch (e) {
@@ -12364,6 +12490,7 @@ function makeUpdateCommand() {
12364
12490
  }
12365
12491
  }
12366
12492
  if (opts.catalogOnly) return;
12493
+ let sourceFailed = false;
12367
12494
  if (await shouldSyncSources(opts)) {
12368
12495
  const syncSpinner = createSpinner();
12369
12496
  syncSpinner.start("Syncing sources");
@@ -12371,13 +12498,25 @@ function makeUpdateCommand() {
12371
12498
  syncSpinner.stop(
12372
12499
  total === 0 ? "No sources to sync." : `Synced ${S.heading(`${synced}/${total}`)} source(s)` + (failed2 ? ` (${failed2} failed)` : "")
12373
12500
  );
12374
- if (failed2 > 0) process.exitCode = 1;
12501
+ if (failed2 > 0) {
12502
+ process.exitCode = 1;
12503
+ sourceFailed = true;
12504
+ }
12375
12505
  } else {
12376
12506
  for (const slug of divergedSourceClones(projectDir)) {
12377
12507
  logErr(`${slug}: git pull failed: Not possible to fast-forward, aborting.`);
12378
12508
  process.exitCode = 1;
12379
12509
  }
12380
12510
  }
12511
+ if (sourceFailed) {
12512
+ const skipped = createSpinner();
12513
+ skipped.start("Re-deploying assets");
12514
+ skipped.stop("Failed");
12515
+ logErr(
12516
+ "Nothing was updated: a source could not be synced, so skaile.lock.yaml is unchanged. Fix the source, then run `skaile update` again."
12517
+ );
12518
+ return;
12519
+ }
12381
12520
  if (target) {
12382
12521
  await updateOne(am2, projectDir, target, opts.force);
12383
12522
  return;
@@ -12568,6 +12707,14 @@ function makeVerifyCommand() {
12568
12707
  logInfo("No skaile.lock.yaml found \u2014 nothing to verify");
12569
12708
  return;
12570
12709
  }
12710
+ try {
12711
+ readLock(lockPath);
12712
+ } catch (err) {
12713
+ if (err instanceof LockParseError) {
12714
+ logErr(err.message);
12715
+ process.exit(1);
12716
+ }
12717
+ }
12571
12718
  const yaml = await import('yaml');
12572
12719
  const lockContent = readFileSync(lockPath, "utf-8");
12573
12720
  const lock = yaml.parse(lockContent);
@@ -12901,9 +13048,8 @@ Libraries (your authoring workspaces):
12901
13048
 
12902
13049
  Store (manifest catalog + auth):
12903
13050
  store login / logout / whoami / yank Auth + admin
12904
- store mode <auto|local|remote> Resolution mode (stub)
12905
- store search / show / favourite / unfavourite Catalog browsing (stub)
12906
- store sync / push Local-store sync (stub)
13051
+ store search / show Search the catalog, show one asset
13052
+ store mode/favourite/unfavourite/sync/push Not yet wired
12907
13053
 
12908
13054
  Catalog (debug):
12909
13055
  catalog test / show Probe a catalog endpoint, print resolved config
@@ -12996,7 +13142,6 @@ function buildInitWorkspaceConfig(projectName, harness) {
12996
13142
  description: `${projectName} AI skill dependencies`,
12997
13143
  "agent-config": {
12998
13144
  default: {
12999
- agent: harness,
13000
13145
  // model is omitted unless a harness fixes it (none do today).
13001
13146
  ...harnessDefaults.model ? { model: harnessDefaults.model } : {},
13002
13147
  harness: harnessDefaults.harness,
@@ -13082,7 +13227,7 @@ async function bootstrapUserConfig() {
13082
13227
  }
13083
13228
  async function hydrateInitSources(resolved, created) {
13084
13229
  try {
13085
- const { ensureSourcesCloned } = await import('../ensure-sources-UC2RBYMP.js');
13230
+ const { ensureSourcesCloned } = await import('../ensure-sources-6O54DUQB.js');
13086
13231
  const hydrate = ensureSourcesCloned(resolved, { quiet: true });
13087
13232
  for (const n of hydrate.cloned) created.push(`~/.skaile/cache/sources/${n}/`);
13088
13233
  if (hydrate.failed.length > 0) {
@@ -13123,7 +13268,7 @@ function printInitSummary(resolved, projectDir, created) {
13123
13268
  }
13124
13269
  program.hook("preAction", (_program, actionCommand) => setActiveCommand(actionCommand));
13125
13270
  program.command("setup").description("Interactive provider setup wizard").action(async () => {
13126
- const { cmdSetup } = await import('../setup-X6ZYH2MW.js');
13271
+ const { cmdSetup } = await import('../setup-2NWSKSCO.js');
13127
13272
  await cmdSetup([], { projectDir: process.cwd() });
13128
13273
  });
13129
13274
  program.addCommand(makeInstallCommand());
@@ -13204,7 +13349,7 @@ program.hook("postAction", async (_thisCommand, actionCommand) => {
13204
13349
  const opts = actionCommand.opts();
13205
13350
  if (opts.global || opts.dryRun) return;
13206
13351
  const projectDir = path19__default.resolve(opts.projectDir ?? process.cwd());
13207
- const { refreshPluginSkills } = await import('../claude-code-UBT4ZME7.js');
13352
+ const { refreshPluginSkills } = await import('../claude-code-JY6CYEG7.js');
13208
13353
  try {
13209
13354
  if (await refreshPluginSkills(projectDir)) {
13210
13355
  logInfo(`Updated ${S.cmd(".claude/plugins/skaile/skills")} (the --full plugin copy)`);
@@ -13222,9 +13367,10 @@ process.once("beforeExit", () => {
13222
13367
  logErr("The command ended before it finished (nothing left to wait for).");
13223
13368
  process.exit(1);
13224
13369
  });
13225
- setLibraryAssetCheck(
13226
- (asset, libraryPath) => libraryAssetRefusals(asset, libraryPath, getKindRegistry())
13227
- );
13370
+ setLibraryAssetCheck((asset, libraryPath) => [
13371
+ ...manifestEntryFilesRefusals(libraryPath, asset.kind, asset.name),
13372
+ ...libraryAssetRefusals(asset, libraryPath, getKindRegistry())
13373
+ ]);
13228
13374
  setRenamedEntryLookup(manifestEntryRenames);
13229
13375
  setWalkTruncationSink((info, root) => {
13230
13376
  const where = path19__default.basename(root);
@@ -13245,7 +13391,7 @@ try {
13245
13391
  process.exit(1);
13246
13392
  }
13247
13393
  const { LibrarySyncError } = await import('../library/index.js');
13248
- if (!(err instanceof LibrarySyncError || err instanceof LibraryEntryError || err instanceof SourceEntryError || err instanceof LegacyKeyError || err instanceof ConfigParseError))
13394
+ if (!(err instanceof LibrarySyncError || err instanceof LibraryEntryError || err instanceof SourceEntryError || err instanceof LegacyKeyError || err instanceof ConfigParseError || err instanceof LockParseError))
13249
13395
  throw err;
13250
13396
  logErr(err.message);
13251
13397
  process.exit(1);