@skaile/workspaces 6.9.1 → 6.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (397) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/dist/ai-sdk.js +8 -8
  3. package/dist/app-sdk/index.js +1 -1
  4. package/dist/{asset-feeds-PANNQPEE.js → asset-feeds-PO2WC75V.js} +23 -23
  5. package/dist/{asset-feeds-PANNQPEE.js.map → asset-feeds-PO2WC75V.js.map} +1 -1
  6. package/dist/asset-manager/catalog-deployer.js +8 -8
  7. package/dist/asset-manager/history.js +8 -8
  8. package/dist/asset-manager/index.js +15 -15
  9. package/dist/asset-manager/installer.js +10 -10
  10. package/dist/asset-manager/renderers.js +9 -9
  11. package/dist/asset-manager/src/harness-switch-state.d.ts +30 -0
  12. package/dist/asset-manager/src/harness-switch-state.d.ts.map +1 -0
  13. package/dist/asset-manager/src/index.d.ts +49 -12
  14. package/dist/asset-manager/src/index.d.ts.map +1 -1
  15. package/dist/asset-manager/src/mcp-config.d.ts +6 -0
  16. package/dist/asset-manager/src/mcp-config.d.ts.map +1 -1
  17. package/dist/bridge/codex-app-server.js +1 -2
  18. package/dist/bridge/harnesses/claude-sdk.js +15 -15
  19. package/dist/bridge/harnesses/codex.js +16 -1927
  20. package/dist/bridge/harnesses/codex.js.map +1 -1
  21. package/dist/bridge/harnesses/continue.js +11 -11
  22. package/dist/bridge/harnesses/echo.js +5 -5
  23. package/dist/bridge/harnesses/gemini.js +8 -8
  24. package/dist/bridge/harnesses/goose.js +11 -11
  25. package/dist/bridge/harnesses/omp.js +62 -14
  26. package/dist/bridge/harnesses/omp.js.map +1 -1
  27. package/dist/bridge/harnesses/opencode.js +11 -11
  28. package/dist/bridge/harnesses/qwen.js +8 -8
  29. package/dist/bridge/index.js +21 -20
  30. package/dist/bridge/src/harness-model-check.d.ts +5 -4
  31. package/dist/bridge/src/harness-model-check.d.ts.map +1 -1
  32. package/dist/bridge/src/harnesses/codex.d.ts +13 -0
  33. package/dist/bridge/src/harnesses/codex.d.ts.map +1 -1
  34. package/dist/bridge/src/harnesses/omp.d.ts +24 -1
  35. package/dist/bridge/src/harnesses/omp.d.ts.map +1 -1
  36. package/dist/bridge/src/index.d.ts +1 -0
  37. package/dist/bridge/src/index.d.ts.map +1 -1
  38. package/dist/bridge/src/types.d.ts +7 -0
  39. package/dist/bridge/src/types.d.ts.map +1 -1
  40. package/dist/{chunk-TMQFOJ6F.js → chunk-2PVYDAFN.js} +3 -3
  41. package/dist/{chunk-TMQFOJ6F.js.map → chunk-2PVYDAFN.js.map} +1 -1
  42. package/dist/{chunk-7NN3P6VF.js → chunk-342UX2MG.js} +10 -5
  43. package/dist/chunk-342UX2MG.js.map +1 -0
  44. package/dist/{chunk-7UCPGQCW.js → chunk-45XL75RO.js} +11 -11
  45. package/dist/chunk-45XL75RO.js.map +1 -0
  46. package/dist/{chunk-CPMLMNI5.js → chunk-4NJVF3DV.js} +4 -4
  47. package/dist/{chunk-CPMLMNI5.js.map → chunk-4NJVF3DV.js.map} +1 -1
  48. package/dist/{chunk-KNY356I3.js → chunk-5KSGZP3E.js} +11 -4
  49. package/dist/chunk-5KSGZP3E.js.map +1 -0
  50. package/dist/{chunk-J45JCYS4.js → chunk-5M3S6DLV.js} +4 -4
  51. package/dist/{chunk-J45JCYS4.js.map → chunk-5M3S6DLV.js.map} +1 -1
  52. package/dist/{chunk-RZRJTCP2.js → chunk-5XYZNMMC.js} +4 -4
  53. package/dist/{chunk-RZRJTCP2.js.map → chunk-5XYZNMMC.js.map} +1 -1
  54. package/dist/{chunk-S47KU4YB.js → chunk-6NNXBXYI.js} +3 -3
  55. package/dist/{chunk-S47KU4YB.js.map → chunk-6NNXBXYI.js.map} +1 -1
  56. package/dist/{chunk-GZL6RN4Z.js → chunk-7FXOOUOC.js} +170 -50
  57. package/dist/chunk-7FXOOUOC.js.map +1 -0
  58. package/dist/{chunk-V5KG6CCV.js → chunk-7HRZACI4.js} +7 -2
  59. package/dist/chunk-7HRZACI4.js.map +1 -0
  60. package/dist/{chunk-U3FI4DVT.js → chunk-7K73MCI6.js} +7 -5
  61. package/dist/chunk-7K73MCI6.js.map +1 -0
  62. package/dist/{chunk-NDBHEOIA.js → chunk-7LJUK5JK.js} +9 -9
  63. package/dist/{chunk-NDBHEOIA.js.map → chunk-7LJUK5JK.js.map} +1 -1
  64. package/dist/{chunk-Q5SSRVD5.js → chunk-7O6SCI7B.js} +16 -14
  65. package/dist/chunk-7O6SCI7B.js.map +1 -0
  66. package/dist/{chunk-QBUJTVMY.js → chunk-7VBD5XUM.js} +4 -4
  67. package/dist/{chunk-QBUJTVMY.js.map → chunk-7VBD5XUM.js.map} +1 -1
  68. package/dist/{chunk-YEOG7CWQ.js → chunk-7ZL23M3X.js} +3 -3
  69. package/dist/{chunk-YEOG7CWQ.js.map → chunk-7ZL23M3X.js.map} +1 -1
  70. package/dist/{chunk-FZO64PLQ.js → chunk-BNLXZXZN.js} +81 -8
  71. package/dist/chunk-BNLXZXZN.js.map +1 -0
  72. package/dist/{chunk-LYVLDGML.js → chunk-CG63XGVV.js} +3 -3
  73. package/dist/{chunk-LYVLDGML.js.map → chunk-CG63XGVV.js.map} +1 -1
  74. package/dist/{chunk-PLVM6OIV.js → chunk-CH6UVEM5.js} +19 -15
  75. package/dist/chunk-CH6UVEM5.js.map +1 -0
  76. package/dist/{chunk-WEPTGUR4.js → chunk-CI4I34F4.js} +27 -56
  77. package/dist/chunk-CI4I34F4.js.map +1 -0
  78. package/dist/{chunk-4ROXSQEG.js → chunk-CJO3XKO7.js} +4 -4
  79. package/dist/{chunk-4ROXSQEG.js.map → chunk-CJO3XKO7.js.map} +1 -1
  80. package/dist/{chunk-RP3ML3QD.js → chunk-CLMIZ4N6.js} +3 -3
  81. package/dist/{chunk-RP3ML3QD.js.map → chunk-CLMIZ4N6.js.map} +1 -1
  82. package/dist/{chunk-OSABUEWA.js → chunk-CVUMZTNO.js} +4 -4
  83. package/dist/{chunk-OSABUEWA.js.map → chunk-CVUMZTNO.js.map} +1 -1
  84. package/dist/{chunk-X5SGUBUV.js → chunk-DKRD6CZL.js} +3 -3
  85. package/dist/{chunk-X5SGUBUV.js.map → chunk-DKRD6CZL.js.map} +1 -1
  86. package/dist/{chunk-5KWQMCH7.js → chunk-DRUAQ7IY.js} +6 -6
  87. package/dist/{chunk-5KWQMCH7.js.map → chunk-DRUAQ7IY.js.map} +1 -1
  88. package/dist/{chunk-GTAHU4N4.js → chunk-EB2LKPI6.js} +4 -4
  89. package/dist/{chunk-GTAHU4N4.js.map → chunk-EB2LKPI6.js.map} +1 -1
  90. package/dist/{chunk-3AIEJSQR.js → chunk-ESUF2ZYT.js} +3 -3
  91. package/dist/{chunk-3AIEJSQR.js.map → chunk-ESUF2ZYT.js.map} +1 -1
  92. package/dist/{chunk-ZUROGXJM.js → chunk-FECB7RI7.js} +14 -24
  93. package/dist/chunk-FECB7RI7.js.map +1 -0
  94. package/dist/{chunk-PBEDRYHP.js → chunk-FO2GU5L7.js} +230 -49
  95. package/dist/chunk-FO2GU5L7.js.map +1 -0
  96. package/dist/{chunk-SME3PK4L.js → chunk-FVOQPTK2.js} +8 -8
  97. package/dist/{chunk-SME3PK4L.js.map → chunk-FVOQPTK2.js.map} +1 -1
  98. package/dist/{chunk-MPO5CQUZ.js → chunk-GODUKPGD.js} +3 -3
  99. package/dist/{chunk-MPO5CQUZ.js.map → chunk-GODUKPGD.js.map} +1 -1
  100. package/dist/{chunk-FZTHL6SK.js → chunk-GQQIMKEP.js} +27 -33
  101. package/dist/chunk-GQQIMKEP.js.map +1 -0
  102. package/dist/{chunk-BRPEW3UL.js → chunk-GYRIO6RA.js} +3 -3
  103. package/dist/{chunk-BRPEW3UL.js.map → chunk-GYRIO6RA.js.map} +1 -1
  104. package/dist/{chunk-E675QKFG.js → chunk-HPQ2WDYC.js} +5 -5
  105. package/dist/{chunk-E675QKFG.js.map → chunk-HPQ2WDYC.js.map} +1 -1
  106. package/dist/{chunk-VEIWFS7Z.js → chunk-IIELRGIZ.js} +346 -89
  107. package/dist/chunk-IIELRGIZ.js.map +1 -0
  108. package/dist/{chunk-TUOHA6BM.js → chunk-IOXFT5D7.js} +3 -3
  109. package/dist/{chunk-TUOHA6BM.js.map → chunk-IOXFT5D7.js.map} +1 -1
  110. package/dist/{chunk-6PVRP3LW.js → chunk-IPCRQWNC.js} +17 -6
  111. package/dist/chunk-IPCRQWNC.js.map +1 -0
  112. package/dist/{chunk-PTJTOPE5.js → chunk-KOI7QFDH.js} +3 -3
  113. package/dist/{chunk-PTJTOPE5.js.map → chunk-KOI7QFDH.js.map} +1 -1
  114. package/dist/{chunk-EMSU6L7K.js → chunk-L74W5TVC.js} +7 -7
  115. package/dist/{chunk-EMSU6L7K.js.map → chunk-L74W5TVC.js.map} +1 -1
  116. package/dist/{chunk-WS3BOCAT.js → chunk-LCXQ4LVP.js} +16 -3
  117. package/dist/chunk-LCXQ4LVP.js.map +1 -0
  118. package/dist/{chunk-7QYBKUAS.js → chunk-LKBRBVVS.js} +3 -3
  119. package/dist/{chunk-7QYBKUAS.js.map → chunk-LKBRBVVS.js.map} +1 -1
  120. package/dist/{chunk-USSP43U3.js → chunk-LQWOU7S2.js} +3 -3
  121. package/dist/{chunk-USSP43U3.js.map → chunk-LQWOU7S2.js.map} +1 -1
  122. package/dist/chunk-LXD37LHF.js +688 -0
  123. package/dist/chunk-LXD37LHF.js.map +1 -0
  124. package/dist/{chunk-4KPQ6ILH.js → chunk-MEU2HHGV.js} +18 -9
  125. package/dist/chunk-MEU2HHGV.js.map +1 -0
  126. package/dist/{chunk-KVTV4LT2.js → chunk-MRTOKIEJ.js} +4 -4
  127. package/dist/{chunk-KVTV4LT2.js.map → chunk-MRTOKIEJ.js.map} +1 -1
  128. package/dist/{chunk-QC5BYUED.js → chunk-MS2IXLTC.js} +4 -4
  129. package/dist/{chunk-QC5BYUED.js.map → chunk-MS2IXLTC.js.map} +1 -1
  130. package/dist/{chunk-5J6N6LHL.js → chunk-PZS55HOX.js} +3 -3
  131. package/dist/{chunk-5J6N6LHL.js.map → chunk-PZS55HOX.js.map} +1 -1
  132. package/dist/{chunk-XDVR7QIT.js → chunk-QC4Q7PMQ.js} +6 -3
  133. package/dist/chunk-QC4Q7PMQ.js.map +1 -0
  134. package/dist/{chunk-IISEBVMA.js → chunk-RRKJHADP.js} +5 -5
  135. package/dist/{chunk-IISEBVMA.js.map → chunk-RRKJHADP.js.map} +1 -1
  136. package/dist/{chunk-MDCI4RSG.js → chunk-RZL4TOK3.js} +20 -6
  137. package/dist/chunk-RZL4TOK3.js.map +1 -0
  138. package/dist/{chunk-2UKNI2HJ.js → chunk-RZQCBFIU.js} +2 -2
  139. package/dist/{chunk-2UKNI2HJ.js.map → chunk-RZQCBFIU.js.map} +1 -1
  140. package/dist/{chunk-7TF5MNFK.js → chunk-S6NS3I3P.js} +2 -2
  141. package/dist/{chunk-7TF5MNFK.js.map → chunk-S6NS3I3P.js.map} +1 -1
  142. package/dist/{chunk-LMADWO4Q.js → chunk-SBAUZ7XH.js} +4 -4
  143. package/dist/{chunk-LMADWO4Q.js.map → chunk-SBAUZ7XH.js.map} +1 -1
  144. package/dist/{chunk-XB4XHGIE.js → chunk-SZ3XCZHC.js} +4 -4
  145. package/dist/{chunk-XB4XHGIE.js.map → chunk-SZ3XCZHC.js.map} +1 -1
  146. package/dist/{chunk-AQTAULXT.js → chunk-UHTCOYFJ.js} +111 -47
  147. package/dist/chunk-UHTCOYFJ.js.map +1 -0
  148. package/dist/{chunk-HQAPUPBE.js → chunk-V2VDTQ7A.js} +3 -3
  149. package/dist/{chunk-HQAPUPBE.js.map → chunk-V2VDTQ7A.js.map} +1 -1
  150. package/dist/{chunk-GNUA7XT2.js → chunk-VS6XC5JE.js} +3 -3
  151. package/dist/{chunk-GNUA7XT2.js.map → chunk-VS6XC5JE.js.map} +1 -1
  152. package/dist/chunk-WCHGUS7X.js +2443 -0
  153. package/dist/chunk-WCHGUS7X.js.map +1 -0
  154. package/dist/{chunk-5J6JWGY4.js → chunk-WDG5IVEA.js} +3 -3
  155. package/dist/{chunk-5J6JWGY4.js.map → chunk-WDG5IVEA.js.map} +1 -1
  156. package/dist/{chunk-QIV7H3GJ.js → chunk-WPTNYDDS.js} +5 -5
  157. package/dist/{chunk-QIV7H3GJ.js.map → chunk-WPTNYDDS.js.map} +1 -1
  158. package/dist/{chunk-BDAXHJC5.js → chunk-YPX7LQSW.js} +7 -7
  159. package/dist/{chunk-BDAXHJC5.js.map → chunk-YPX7LQSW.js.map} +1 -1
  160. package/dist/{chunk-UWD7YBDR.js → chunk-ZLDAPZIX.js} +4 -4
  161. package/dist/{chunk-UWD7YBDR.js.map → chunk-ZLDAPZIX.js.map} +1 -1
  162. package/dist/{chunk-YPTDPN2B.js → chunk-ZRKU7BRI.js} +3 -3
  163. package/dist/{chunk-YPTDPN2B.js.map → chunk-ZRKU7BRI.js.map} +1 -1
  164. package/dist/{claude-code-ILZ46SLO.js → claude-code-TDMSETH6.js} +5 -5
  165. package/dist/{claude-code-ILZ46SLO.js.map → claude-code-TDMSETH6.js.map} +1 -1
  166. package/dist/cli/index.js +327 -201
  167. package/dist/cli/index.js.map +1 -1
  168. package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
  169. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  170. package/dist/cli/src/commands/config.d.ts.map +1 -1
  171. package/dist/cli/src/commands/connector.d.ts.map +1 -1
  172. package/dist/cli/src/commands/harness-preflight.d.ts +3 -1
  173. package/dist/cli/src/commands/harness-preflight.d.ts.map +1 -1
  174. package/dist/cli/src/commands/harness.d.ts.map +1 -1
  175. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  176. package/dist/cli/src/commands/library-index.d.ts +3 -3
  177. package/dist/cli/src/commands/library-index.d.ts.map +1 -1
  178. package/dist/cli/src/commands/migrate-files.d.ts +8 -0
  179. package/dist/cli/src/commands/migrate-files.d.ts.map +1 -1
  180. package/dist/cli/src/commands/migrate-harness.d.ts.map +1 -1
  181. package/dist/cli/src/commands/migrate-providers.d.ts.map +1 -1
  182. package/dist/cli/src/commands/migrate.d.ts.map +1 -1
  183. package/dist/cli/src/commands/outdated.d.ts.map +1 -1
  184. package/dist/cli/src/commands/project.d.ts.map +1 -1
  185. package/dist/cli/src/commands/run.d.ts.map +1 -1
  186. package/dist/cli/src/commands/serve-preflight.d.ts +7 -5
  187. package/dist/cli/src/commands/serve-preflight.d.ts.map +1 -1
  188. package/dist/cli/src/commands/serve.d.ts.map +1 -1
  189. package/dist/cli/src/commands/source.d.ts.map +1 -1
  190. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  191. package/dist/cli/src/config-checks.d.ts +50 -12
  192. package/dist/cli/src/config-checks.d.ts.map +1 -1
  193. package/dist/cli/src/ensure-sources.d.ts.map +1 -1
  194. package/dist/cli/src/harness-error.d.ts +7 -0
  195. package/dist/cli/src/harness-error.d.ts.map +1 -1
  196. package/dist/cli/src/helpers.d.ts.map +1 -1
  197. package/dist/client/index.js +1 -1
  198. package/dist/client/src/client.d.ts +3 -0
  199. package/dist/client/src/client.d.ts.map +1 -1
  200. package/dist/connectors/config.js +5 -5
  201. package/dist/connectors/index.js +25 -24
  202. package/dist/connectors/src/index.d.ts +1 -1
  203. package/dist/connectors/src/index.d.ts.map +1 -1
  204. package/dist/connectors/src/managed-gitconfig.d.ts +12 -0
  205. package/dist/connectors/src/managed-gitconfig.d.ts.map +1 -1
  206. package/dist/connectors-IUJRBTCW.js +52 -0
  207. package/dist/{connectors-KTRUUKWG.js.map → connectors-IUJRBTCW.js.map} +1 -1
  208. package/dist/connectors-shared/index.js +2 -2
  209. package/dist/core/index.js +7 -7
  210. package/dist/core/logging.js +1 -1
  211. package/dist/core/manifest.js +2 -2
  212. package/dist/core/models.js +1 -1
  213. package/dist/core/publish-manifest.js +3 -3
  214. package/dist/core/ref.js +1 -1
  215. package/dist/core/runtime-assets.js +5 -5
  216. package/dist/core/src/index.d.ts +2 -2
  217. package/dist/core/src/index.d.ts.map +1 -1
  218. package/dist/core/src/lock.d.ts +7 -1
  219. package/dist/core/src/lock.d.ts.map +1 -1
  220. package/dist/core/src/models.d.ts.map +1 -1
  221. package/dist/core/src/repo-manager.d.ts +28 -0
  222. package/dist/core/src/repo-manager.d.ts.map +1 -1
  223. package/dist/core/src/run-state-ignore.d.ts +5 -3
  224. package/dist/core/src/run-state-ignore.d.ts.map +1 -1
  225. package/dist/core/src/workspace-config.d.ts.map +1 -1
  226. package/dist/core/workspace-config.js +4 -4
  227. package/dist/deploy/index.js +7 -7
  228. package/dist/discovery/index.js +5 -5
  229. package/dist/{ensure-sources-5QWKUIUD.js → ensure-sources-Q2TTZVLX.js} +35 -33
  230. package/dist/ensure-sources-Q2TTZVLX.js.map +1 -0
  231. package/dist/factory-assets/connectors/box.js +25 -24
  232. package/dist/factory-assets/connectors/deploy.js +25 -24
  233. package/dist/factory-assets/connectors/devserver.js +25 -24
  234. package/dist/factory-assets/connectors/flow/adapter.js +25 -24
  235. package/dist/factory-assets/connectors/flow/engine.js +8 -8
  236. package/dist/factory-assets/connectors/flow/run-flow.js +27 -26
  237. package/dist/factory-assets/connectors/flow.js +25 -24
  238. package/dist/factory-assets/connectors/git/exec.d.ts +7 -0
  239. package/dist/factory-assets/connectors/git/exec.d.ts.map +1 -1
  240. package/dist/factory-assets/connectors/git/repo.d.ts.map +1 -1
  241. package/dist/factory-assets/connectors/git.js +25 -24
  242. package/dist/factory-assets/connectors/gmail/adapter.d.ts.map +1 -1
  243. package/dist/factory-assets/connectors/gmail.js +25 -24
  244. package/dist/factory-assets/connectors/googledrive.js +25 -24
  245. package/dist/factory-assets/connectors/local.js +25 -24
  246. package/dist/factory-assets/connectors/mattermost.js +25 -24
  247. package/dist/factory-assets/connectors/memory.js +25 -24
  248. package/dist/factory-assets/connectors/minio/adapter.d.ts.map +1 -1
  249. package/dist/factory-assets/connectors/minio.js +25 -24
  250. package/dist/factory-assets/connectors/postgres/adapter.d.ts.map +1 -1
  251. package/dist/factory-assets/connectors/postgres.js +25 -24
  252. package/dist/factory-assets/connectors/s3/driver.d.ts.map +1 -1
  253. package/dist/factory-assets/connectors/s3.js +25 -24
  254. package/dist/factory-assets/connectors/sharepoint.js +25 -24
  255. package/dist/factory-assets/connectors/sqlite/adapter.d.ts.map +1 -1
  256. package/dist/factory-assets/connectors/sqlite.js +25 -24
  257. package/dist/factory-assets/connectors/static-server.js +25 -24
  258. package/dist/factory-assets/connectors/tunnel.js +25 -24
  259. package/dist/factory-assets/connectors/webdav.js +25 -24
  260. package/dist/factory-assets/connectors/xstate-store.js +25 -24
  261. package/dist/factory-assets/connectors/xstate.js +25 -24
  262. package/dist/{flows-UCP6ZUYS.js → flows-J64L5MGJ.js} +12 -12
  263. package/dist/{flows-UCP6ZUYS.js.map → flows-J64L5MGJ.js.map} +1 -1
  264. package/dist/{helpers-INS4B7OQ.js → helpers-S6AQGXRH.js} +32 -30
  265. package/dist/{helpers-INS4B7OQ.js.map → helpers-S6AQGXRH.js.map} +1 -1
  266. package/dist/library/index.js +11 -11
  267. package/dist/library/install.js +4 -4
  268. package/dist/library/src/index.d.ts +2 -2
  269. package/dist/library/src/index.d.ts.map +1 -1
  270. package/dist/library/src/library.d.ts +6 -2
  271. package/dist/library/src/library.d.ts.map +1 -1
  272. package/dist/library/src/local/db.d.ts.map +1 -1
  273. package/dist/library/src/local/library.d.ts +10 -3
  274. package/dist/library/src/local/library.d.ts.map +1 -1
  275. package/dist/library/src/local/local-catalog-source.d.ts +0 -9
  276. package/dist/library/src/local/local-catalog-source.d.ts.map +1 -1
  277. package/dist/library/src/local/schema.d.ts +27 -20
  278. package/dist/library/src/local/schema.d.ts.map +1 -1
  279. package/dist/library/src/manifest-writer.d.ts +13 -0
  280. package/dist/library/src/manifest-writer.d.ts.map +1 -1
  281. package/dist/library/src/remote/index.d.ts +1 -1
  282. package/dist/library/src/remote/index.d.ts.map +1 -1
  283. package/dist/library/src/remote/remote-catalog-source.d.ts +6 -0
  284. package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
  285. package/dist/library/src/sync/git-driver.d.ts.map +1 -1
  286. package/dist/{library-publish-AZTYRASL.js → library-publish-7U4TJNQX.js} +54 -55
  287. package/dist/library-publish-7U4TJNQX.js.map +1 -0
  288. package/dist/model-endpoint/index.js +10 -10
  289. package/dist/open-library-K6O6OVW5.js +61 -0
  290. package/dist/{open-library-3HMXYGUF.js.map → open-library-K6O6OVW5.js.map} +1 -1
  291. package/dist/open-registry-4HNCWOCN.js +32 -0
  292. package/dist/{open-registry-BHBHQMBA.js.map → open-registry-4HNCWOCN.js.map} +1 -1
  293. package/dist/paths-PXBWY532.js +22 -0
  294. package/dist/{paths-77PXOXZY.js.map → paths-PXBWY532.js.map} +1 -1
  295. package/dist/{plugin-store-XQP2CRYH.js → plugin-store-ZC3EGZ3D.js} +10 -10
  296. package/dist/{plugin-store-XQP2CRYH.js.map → plugin-store-ZC3EGZ3D.js.map} +1 -1
  297. package/dist/project-ZWIZZIUT.js +88 -0
  298. package/dist/{project-HVNPK2ZF.js.map → project-ZWIZZIUT.js.map} +1 -1
  299. package/dist/resolver/index.js +8 -8
  300. package/dist/runner/index.js +40 -40
  301. package/dist/runner/src/serve.d.ts.map +1 -1
  302. package/dist/runner/src/turn-ids.d.ts +70 -0
  303. package/dist/runner/src/turn-ids.d.ts.map +1 -0
  304. package/dist/runner/src/turn-scheduler.d.ts +7 -0
  305. package/dist/runner/src/turn-scheduler.d.ts.map +1 -1
  306. package/dist/sdk/asset-manager.js +15 -15
  307. package/dist/sdk/bridge.js +21 -20
  308. package/dist/sdk/client.js +1 -1
  309. package/dist/sdk/core.js +7 -7
  310. package/dist/sdk/flow.js +8 -8
  311. package/dist/sdk/index.js +41 -41
  312. package/dist/sdk/resolver.js +8 -8
  313. package/dist/sdk/runner.js +40 -40
  314. package/dist/sdk/session.js +2 -2
  315. package/dist/sdk/transport/ws/server.js +8 -8
  316. package/dist/sdk/transport/ws.js +8 -8
  317. package/dist/sdk/transport.js +8 -8
  318. package/dist/sdk/types.js +1 -1
  319. package/dist/serve-preflight-E3IEZTTF.js +59 -0
  320. package/dist/{serve-preflight-NHZOKHIC.js.map → serve-preflight-E3IEZTTF.js.map} +1 -1
  321. package/dist/session/index.js +2 -2
  322. package/dist/session/src/dispatcher.d.ts +4 -1
  323. package/dist/session/src/dispatcher.d.ts.map +1 -1
  324. package/dist/{setup-EX7Z7XRN.js → setup-V4EXOMVQ.js} +33 -31
  325. package/dist/setup-V4EXOMVQ.js.map +1 -0
  326. package/dist/{skills-DE2BDQ6G.js → skills-5D4KDVPJ.js} +13 -13
  327. package/dist/{skills-DE2BDQ6G.js.map → skills-5D4KDVPJ.js.map} +1 -1
  328. package/dist/source-O7XXDX55.js +89 -0
  329. package/dist/{source-URRPRGMZ.js.map → source-O7XXDX55.js.map} +1 -1
  330. package/dist/{source-manifest-publish-ZWRYRJ2U.js → source-manifest-publish-GUU4LX2S.js} +54 -53
  331. package/dist/source-manifest-publish-GUU4LX2S.js.map +1 -0
  332. package/dist/transport/index.js +8 -8
  333. package/dist/transport/src/ws/server.d.ts.map +1 -1
  334. package/dist/transport/ws/server.js +8 -8
  335. package/dist/transport/ws.js +8 -8
  336. package/dist/tui/index.js +40 -40
  337. package/dist/types/index.js +1 -1
  338. package/dist/types/manifests.js +1 -1
  339. package/dist/types/src/capabilities.d.ts +2 -1
  340. package/dist/types/src/capabilities.d.ts.map +1 -1
  341. package/dist/types/src/events.d.ts +2 -1
  342. package/dist/types/src/events.d.ts.map +1 -1
  343. package/dist/types/src/index.d.ts +2 -0
  344. package/dist/types/src/index.d.ts.map +1 -1
  345. package/dist/types/src/manifests/agent.d.ts +2 -0
  346. package/dist/types/src/manifests/agent.d.ts.map +1 -1
  347. package/dist/types/src/protocol.d.ts +2 -0
  348. package/dist/types/src/protocol.d.ts.map +1 -1
  349. package/dist/types/src/turn-ids.d.ts +62 -0
  350. package/dist/types/src/turn-ids.d.ts.map +1 -0
  351. package/dist/types/src/version.d.ts +12 -1
  352. package/dist/types/src/version.d.ts.map +1 -1
  353. package/dist/workspace-plugin/adapters/mcp.js +32 -31
  354. package/dist/workspace-plugin/adapters/omp.js +14 -14
  355. package/dist/workspace-plugin/index.js +2 -2
  356. package/package.json +1 -1
  357. package/dist/chunk-4KPQ6ILH.js.map +0 -1
  358. package/dist/chunk-6PVRP3LW.js.map +0 -1
  359. package/dist/chunk-7NN3P6VF.js.map +0 -1
  360. package/dist/chunk-7UCPGQCW.js.map +0 -1
  361. package/dist/chunk-AQTAULXT.js.map +0 -1
  362. package/dist/chunk-BLBXOG5Q.js +0 -299
  363. package/dist/chunk-BLBXOG5Q.js.map +0 -1
  364. package/dist/chunk-C324IAXI.js +0 -160
  365. package/dist/chunk-C324IAXI.js.map +0 -1
  366. package/dist/chunk-DJSGQW2Q.js +0 -334
  367. package/dist/chunk-DJSGQW2Q.js.map +0 -1
  368. package/dist/chunk-FZO64PLQ.js.map +0 -1
  369. package/dist/chunk-FZTHL6SK.js.map +0 -1
  370. package/dist/chunk-GYPPVANR.js +0 -357
  371. package/dist/chunk-GYPPVANR.js.map +0 -1
  372. package/dist/chunk-GZL6RN4Z.js.map +0 -1
  373. package/dist/chunk-KNY356I3.js.map +0 -1
  374. package/dist/chunk-LOO5CB5M.js +0 -12
  375. package/dist/chunk-LOO5CB5M.js.map +0 -1
  376. package/dist/chunk-MDCI4RSG.js.map +0 -1
  377. package/dist/chunk-PBEDRYHP.js.map +0 -1
  378. package/dist/chunk-PLVM6OIV.js.map +0 -1
  379. package/dist/chunk-Q5SSRVD5.js.map +0 -1
  380. package/dist/chunk-U3FI4DVT.js.map +0 -1
  381. package/dist/chunk-V5KG6CCV.js.map +0 -1
  382. package/dist/chunk-VEIWFS7Z.js.map +0 -1
  383. package/dist/chunk-WEPTGUR4.js.map +0 -1
  384. package/dist/chunk-WS3BOCAT.js.map +0 -1
  385. package/dist/chunk-XDVR7QIT.js.map +0 -1
  386. package/dist/chunk-ZUROGXJM.js.map +0 -1
  387. package/dist/connectors-KTRUUKWG.js +0 -51
  388. package/dist/ensure-sources-5QWKUIUD.js.map +0 -1
  389. package/dist/library-publish-AZTYRASL.js.map +0 -1
  390. package/dist/open-library-3HMXYGUF.js +0 -59
  391. package/dist/open-registry-BHBHQMBA.js +0 -32
  392. package/dist/paths-77PXOXZY.js +0 -22
  393. package/dist/project-HVNPK2ZF.js +0 -89
  394. package/dist/serve-preflight-NHZOKHIC.js +0 -59
  395. package/dist/setup-EX7Z7XRN.js.map +0 -1
  396. package/dist/source-URRPRGMZ.js +0 -88
  397. package/dist/source-manifest-publish-ZWRYRJ2U.js.map +0 -1
package/dist/cli/index.js CHANGED
@@ -1,104 +1,103 @@
1
1
  #!/usr/bin/env node
2
- import { status, enable, disable, install, uninstall } from '../chunk-X5SGUBUV.js';
3
- import { makeValidateCommand, scanIdentities } from '../chunk-WEPTGUR4.js';
4
- import { storeNotInstallableReason, mcpNotRunnableHere } from '../chunk-XB4XHGIE.js';
5
- import { checkHarnessSdk } from '../chunk-Q5SSRVD5.js';
6
- import { makeProvidersCommand, loadRegistryView, addProviderEntry, ProviderRegistryWriteError, removeProviderEntry } from '../chunk-IISEBVMA.js';
7
- import { makeInstallCommand, makeCheckCommand, makeCleanCommand, pinComposedAgents, reportRewritten, reportReplaced, reportRelocked, reportMoved, reportStoreNotChecked, reportStoreNotCheckedForUpdates, globalProblems, editedConventionFiles, supportsInstallManifest, runYamlInstall, REF_HINT, reportInstalledSoftDeps } from '../chunk-PLVM6OIV.js';
8
- import { reportUnknownHarnesses, reportProjectConfig, agentInstanceErrorLines, isRecord } from '../chunk-DJSGQW2Q.js';
2
+ import { status, enable, disable, install, uninstall } from '../chunk-DKRD6CZL.js';
3
+ import { makeValidateCommand, scanIdentities } from '../chunk-CI4I34F4.js';
4
+ import { storeNotInstallableReason, mcpNotRunnableHere } from '../chunk-SZ3XCZHC.js';
5
+ import { checkHarnessSdk } from '../chunk-7O6SCI7B.js';
6
+ import { makeProvidersCommand, loadRegistryView, addProviderEntry, ProviderRegistryWriteError, removeProviderEntry } from '../chunk-RRKJHADP.js';
7
+ import { makeInstallCommand, makeCheckCommand, makeCleanCommand, pinComposedAgents, reportRewritten, reportReplaced, reportRelocked, reportMoved, reportStoreNotChecked, reportStoreNotCheckedForUpdates, globalProblems, editedConventionFiles, supportsInstallManifest, runYamlInstall, REF_HINT, reportInstalledSoftDeps } from '../chunk-CH6UVEM5.js';
9
8
  import { createSpinner } from '../chunk-NESV47MF.js';
10
- import { loadDeclaredPlugins } from '../chunk-TMQFOJ6F.js';
11
- import { getStoreConfig, storeFetch, isStoreAuthenticated, getStoreToken } from '../chunk-J45JCYS4.js';
12
- import { makeSourceCommand, dropVanishedSourceRows, syncProjectSources, divergedSourceClones, uncachedSources } from '../chunk-FZTHL6SK.js';
13
- import { manifestEntryRootRefusals, manifestEntryFilesRefusals, libraryAssetRefusals, manifestEntryRenames, deviceLogin, loadStoreAuthConfig, logout, hasStoredAuth, exitOnLibrarySymlinks, resolveLibraryPublisherDetailed, getStoreIdentity, warnLibraryNameFallback, indexLibrary, warnIgnoredDomainFiles, removedDomainOption, rejectRemovedDomainOption, requireValidPublisherOrExit, exitOnManifestPublisherProblems, exitOnRootSkillLibrary, findAssetManifestFile, checkAssetFile, registerLibraryAsset, DOMAIN_REMOVED_HINT, reportLibrarySymlinks, checkAsset, rootLevelAssetFileProblem, assetEntryRef, manifestPublisherProblems, exitOnManifestPathProblems, exitOnRootSkillExtraAssets, manifestRequiresProblems, composeRefContext, registeredAssetKeys, duplicateAssetMessage, manifestParseFailureLine, manifestParseErrorText, unresolvedManifestDependencies, findEntryManifestFile, unheldRequiresOfFile, warnLegacyBundleFiles, warnUntrackedAssetFiles, checkComposeKinds } from '../chunk-ZUROGXJM.js';
14
- import { openCatalogSource, LocalCatalogDisabledError, openLibraryManager, openLibrary } from '../chunk-RZRJTCP2.js';
15
- import { getKindRegistry, getKnownKinds } from '../chunk-E675QKFG.js';
16
- import { AI_RESOURCES } from '../chunk-UWD7YBDR.js';
17
- 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-BLBXOG5Q.js';
9
+ import { getStoreConfig, storeFetch, isStoreAuthenticated, getStoreToken } from '../chunk-5M3S6DLV.js';
10
+ import { makeSourceCommand, dropVanishedSourceRows, syncProjectSources, divergedSourceClones, uncachedSources } from '../chunk-GQQIMKEP.js';
11
+ import { manifestEntryRootRefusals, manifestEntryFilesRefusals, libraryAssetRefusals, manifestEntryRenames, deviceLogin, loadStoreAuthConfig, logout, hasStoredAuth, exitOnLibrarySymlinks, resolveLibraryPublisherDetailed, getStoreIdentity, warnLibraryNameFallback, indexLibrary, warnIgnoredDomainFiles, removedDomainOption, rejectRemovedDomainOption, requireValidPublisherOrExit, exitOnManifestPublisherProblems, exitOnRootSkillLibrary, findAssetManifestFile, checkAssetFile, registerLibraryAsset, DOMAIN_REMOVED_HINT, reportLibrarySymlinks, checkAsset, rootLevelAssetFileProblem, manifestPublisherProblems, assetEntryRef, exitOnManifestPathProblems, exitOnRootSkillExtraAssets, manifestRequiresProblems, composeRefContext, registeredAssetKeys, duplicateAssetMessage, manifestParseFailureLine, manifestParseErrorText, unresolvedManifestDependencies, findEntryManifestFile, unheldRequiresOfFile, warnLegacyBundleFiles, warnUntrackedAssetFiles, checkComposeKinds } from '../chunk-FECB7RI7.js';
12
+ import { openCatalogSource, LocalCatalogDisabledError, openLibraryManager, openLibrary } from '../chunk-5XYZNMMC.js';
13
+ import { getKindRegistry, getKnownKinds } from '../chunk-HPQ2WDYC.js';
14
+ import { logErr, unknownHarnessTargetMessage, S, logOk, setActiveCommand, logInfo, logWarnErr, canonicalHarnessId, unknownHarnessMessage, logWarn, TARGET_DEFAULT_HINT, parseHarnessFilter, requireProjectConfig, deferredWarnings, warnPlaceholderBodies, warnFilesOnlyDelegates, reportLegacyOmpCopies, reportUnknownHarnesses, warnProjectConfig, logNoProject, warnStaleHarnessCopies, kindColorPad, kindColor, colorRef, formatSoftDepSection, bareSoftDepName, reportProjectConfig, driverAliasOption, foldDriverFlag, friendlyHarnessError, harnessErrorNotes, agentInstanceErrorLines, formatSoftDepHint, formatRelativeTime, isRecord, formatSoftDepRemovePreview, formatSoftDepAddPreview, fitWidth, KIND_COL_WIDTH } from '../chunk-LXD37LHF.js';
15
+ import { AI_RESOURCES } from '../chunk-ZLDAPZIX.js';
16
+ import { loadDeclaredPlugins } from '../chunk-2PVYDAFN.js';
18
17
  import { LocalSecretsProvider } from '../chunk-ILFGVSTJ.js';
19
- import { resolveInstanceAgentDir, instanceSessionOverrides, modelForHarness, loadAgentManifest, manifestModelForHarness, runAgentChat, isCompositionError, resolveSessionId, loadSessionById, loadSession, listSessions, setCurrentSession, deleteSession, clearSession, hashAgentFiles, createCompositionContentSource, compileComposition, MarkdownStreamer, createFinalTextFallback, instanceForSession, resolveAgentInstance, describeComposition } from '../chunk-PBEDRYHP.js';
20
- import '../chunk-2UKNI2HJ.js';
21
- import '../chunk-EMSU6L7K.js';
22
- import '../chunk-S47KU4YB.js';
23
- import '../chunk-TUOHA6BM.js';
18
+ import { resolveInstanceAgentDir, instanceSessionOverrides, modelForHarness, loadAgentManifest, manifestModelForHarness, runAgentChat, isCompositionError, resolveSessionId, loadSessionById, loadSession, listSessions, setCurrentSession, deleteSession, clearSession, hashAgentFiles, createCompositionContentSource, compileComposition, MarkdownStreamer, createFinalTextFallback, instanceForSession, resolveAgentInstance, describeComposition } from '../chunk-FO2GU5L7.js';
19
+ import '../chunk-RZQCBFIU.js';
20
+ import '../chunk-L74W5TVC.js';
21
+ import '../chunk-6NNXBXYI.js';
22
+ import '../chunk-IOXFT5D7.js';
24
23
  import '../chunk-WYZXSJBK.js';
25
- import '../chunk-GTAHU4N4.js';
26
- import '../chunk-HQAPUPBE.js';
24
+ import '../chunk-EB2LKPI6.js';
25
+ import '../chunk-V2VDTQ7A.js';
27
26
  import '../chunk-KW37WNXY.js';
28
27
  import '../chunk-3MWQKQUB.js';
29
- import '../chunk-QIV7H3GJ.js';
28
+ import '../chunk-WPTNYDDS.js';
30
29
  import '../chunk-O7SG5PC2.js';
31
30
  import '../chunk-7QBNJTTQ.js';
32
31
  import '../chunk-O2SYFJWP.js';
33
- import '../chunk-U3FI4DVT.js';
32
+ import '../chunk-7K73MCI6.js';
34
33
  import '../chunk-32NA4TVC.js';
35
34
  import '../chunk-W3UDISS2.js';
36
- import '../chunk-GYPPVANR.js';
37
- import { runFlow, resumeFlow } from '../chunk-SME3PK4L.js';
35
+ import { runFlow, resumeFlow } from '../chunk-FVOQPTK2.js';
38
36
  import '../chunk-4R6DROGN.js';
39
- import { parseSkillRequirements, validateRequirements } from '../chunk-PTJTOPE5.js';
40
- import '../chunk-USSP43U3.js';
41
- import '../chunk-AQTAULXT.js';
42
- import '../chunk-BRPEW3UL.js';
43
- import '../chunk-LMADWO4Q.js';
44
- import { checkHarnessModel, checkOmpListedModel, isUnlistedModel, checkModelSurface } from '../chunk-7UCPGQCW.js';
45
- import '../chunk-CPMLMNI5.js';
46
- import '../chunk-KVTV4LT2.js';
47
- import '../chunk-C324IAXI.js';
48
- import '../chunk-LOO5CB5M.js';
49
- import '../chunk-YEOG7CWQ.js';
50
- import '../chunk-3AIEJSQR.js';
37
+ import { parseSkillRequirements, validateRequirements } from '../chunk-KOI7QFDH.js';
38
+ import '../chunk-LQWOU7S2.js';
39
+ import '../chunk-UHTCOYFJ.js';
40
+ import '../chunk-GYRIO6RA.js';
41
+ import '../chunk-SBAUZ7XH.js';
42
+ import { checkHarnessModel, checkOmpListedModel, isUnlistedModel, checkModelSurface } from '../chunk-45XL75RO.js';
43
+ import '../chunk-4NJVF3DV.js';
44
+ import '../chunk-MRTOKIEJ.js';
45
+ import { checkCodexCredential } from '../chunk-WCHGUS7X.js';
46
+ import '../chunk-5KSGZP3E.js';
47
+ import '../chunk-7EKQDY2T.js';
48
+ import '../chunk-7ZL23M3X.js';
49
+ import '../chunk-ESUF2ZYT.js';
51
50
  import { findHarnessBinary, HARNESS_BINARIES } from '../chunk-WWSRIT3J.js';
52
- import '../chunk-RP3ML3QD.js';
51
+ import '../chunk-CLMIZ4N6.js';
53
52
  import '../chunk-5DE3DGVR.js';
54
53
  import '../chunk-7DN6JKP2.js';
55
- import '../chunk-5J6N6LHL.js';
56
- import { listHarnesses } from '../chunk-7TF5MNFK.js';
54
+ import '../chunk-PZS55HOX.js';
55
+ import { listHarnesses } from '../chunk-S6NS3I3P.js';
57
56
  import '../chunk-G5SUWZEU.js';
58
- import '../chunk-LYVLDGML.js';
57
+ import '../chunk-CG63XGVV.js';
59
58
  import { getProviderPreset, AI_PROVIDER_PRESETS } from '../chunk-6UP2EDFN.js';
60
59
  import '../chunk-IFGTRL2I.js';
61
- import { loadFlow, flowLookupRoots, findFlowFileInRoots, loadAllFlowEntries } from '../chunk-5J6JWGY4.js';
60
+ import { loadFlow, flowLookupRoots, findFlowFileInRoots, loadAllFlowEntries } from '../chunk-WDG5IVEA.js';
62
61
  import '../chunk-WD3L5QSU.js';
63
62
  import { nodeLabel, nodeSkillAsset, nodeIsInert, nodeIsOptional, nodeRunKind, nodeAssets } from '../chunk-7RGTAEG6.js';
64
- import '../chunk-7NN3P6VF.js';
65
- import { setLibraryAssetCheck, setRenamedEntryLookup, LibraryEntryError, AssetManager, parseRefTolerant, MissingManifestError, parseCanonicalLockKey, normalizeRepoUrl } from '../chunk-VEIWFS7Z.js';
66
- import { CatalogHttpError, OfflineError, libraryDirMissing, missingLibraryDirMessage, cloneOrInitGitRepo, trackOriginBranch, stampManifestPublisher, isGitRepo, ensureGitRepo, conflictingAssetRoot, scanUnlistedAssets, setManifestPublisher, LIBRARY_OWNERSHIPS, assertManifestEditable, installLibraryAsset, getStoreManifestsDir, assertValidLibraryName, unparsableAssetFiles, missingRootAssets, syncManifestWithDisk, renamedLibraryName, storeManifestFile, getDefaultValue, isSecretPlaceholder } from '../chunk-GZL6RN4Z.js';
67
- import { flowFileNameError, SEMVER_RE } from '../chunk-5KWQMCH7.js';
68
- import '../chunk-OSABUEWA.js';
63
+ import '../chunk-342UX2MG.js';
64
+ import { setLibraryAssetCheck, setRenamedEntryLookup, LibraryEntryError, AssetManager, parseRefTolerant, MissingManifestError, writeHarnessSwitchState, harnessSwitchKeptKey, parseCanonicalLockKey, normalizeRepoUrl, readHarnessSwitchState } from '../chunk-IIELRGIZ.js';
65
+ import { CatalogHttpError, OfflineError, libraryDirMissing, missingLibraryDirMessage, cloneOrInitGitRepo, trackOriginBranch, stampManifestPublisher, addMissingEntryVersions, isGitRepo, ensureGitRepo, conflictingAssetRoot, scanUnlistedAssets, setManifestPublisher, LIBRARY_OWNERSHIPS, assertManifestEditable, installLibraryAsset, getStoreManifestsDir, assertValidLibraryName, unparsableAssetFiles, missingRootAssets, syncManifestWithDisk, renamedLibraryName, storeManifestFile, getDefaultValue, isSecretPlaceholder } from '../chunk-7FXOOUOC.js';
66
+ import { flowFileNameError, SEMVER_RE } from '../chunk-DRUAQ7IY.js';
67
+ import '../chunk-CVUMZTNO.js';
69
68
  import '../chunk-F3D25RGM.js';
70
69
  import '../chunk-3TXEJN4W.js';
71
70
  import '../chunk-ISHJITXJ.js';
72
71
  import '../chunk-LNFKL23K.js';
73
72
  import '../chunk-JRN5QF4C.js';
74
73
  import '../chunk-NUELZWCF.js';
75
- import { installTargetOf, SCAFFOLD_KINDS } from '../chunk-NDBHEOIA.js';
74
+ import { installTargetOf, SCAFFOLD_KINDS } from '../chunk-7LJUK5JK.js';
76
75
  import '../chunk-PKE3PXOK.js';
77
- import '../chunk-7QYBKUAS.js';
76
+ import '../chunk-LKBRBVVS.js';
78
77
  import '../chunk-UQ6LFBPZ.js';
79
- import { CODEX_IDENTITY_DIR } from '../chunk-QBUJTVMY.js';
80
- import { effectiveComposes, validatePreset, validateAgent, composeSlotDiagnostics, agentDeprecationDiagnostics, SLOT_ID_PATTERN } from '../chunk-WS3BOCAT.js';
81
- 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-4KPQ6ILH.js';
78
+ import { CODEX_IDENTITY_DIR } from '../chunk-7VBD5XUM.js';
79
+ import { effectiveComposes, validatePreset, validateAgent, composeSlotDiagnostics, agentDeprecationDiagnostics, SLOT_ID_PATTERN } from '../chunk-LCXQ4LVP.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-MEU2HHGV.js';
82
81
  import '../chunk-4GY63JU6.js';
83
- import { factoryAssetRoots } from '../chunk-4ROXSQEG.js';
82
+ import { factoryAssetRoots } from '../chunk-CJO3XKO7.js';
84
83
  import { deployedPaths, deployedBase, deployedDir } from '../chunk-5KRMNUL4.js';
85
84
  import { DEFAULT_HARNESS_ID, HARNESS_DEFAULTS } from '../chunk-C5HFK34M.js';
86
85
  import { findKindDirs } from '../chunk-MWXYN6NY.js';
87
- import { SourceEntryError, LegacyKeyError, ConfigParseError, resolveSkWorkspaceConfig, unselectedInstanceIds, instanceChoiceText, sourceCacheKey, getGlobalCacheDir, resolveAgentDir, AgentRefResolutionError, resolveAgentDefinitionDir, effectiveAgentInstances, isSameRemote, matchPin, coerceVersion, loadSkWorkspaceConfig, configParseErrorOf, findWorkspaceRoot, isWorkspaceConfigFilename, SKAILE_YAML_DEFAULT, AGENT_PROFILE_FIELDS } from '../chunk-FZO64PLQ.js';
86
+ import { SourceEntryError, LegacyKeyError, ConfigParseError, resolveSkWorkspaceConfig, unselectedInstanceIds, instanceChoiceText, sourceCacheKey, getGlobalCacheDir, resolveAgentDir, AgentRefResolutionError, resolveAgentDefinitionDir, effectiveAgentInstances, isSameRemote, matchPin, coerceVersion, loadSkWorkspaceConfig, configParseErrorOf, findWorkspaceRoot, isWorkspaceConfigFilename, SKAILE_YAML_DEFAULT, AGENT_PROFILE_FIELDS } from '../chunk-BNLXZXZN.js';
88
87
  import { globalCacheRoot, globalSkaileDir, userConfigPath } from '../chunk-L5VSIPQD.js';
89
88
  import { HARNESS_TARGETS, SUPPORTED_HARNESSES, harnessNameForHarnessId } from '../chunk-VTETQCR6.js';
90
- import { SKAILE_MANIFEST_FILENAME, loadSkPublishManifest, decodeSkaileManifest, LIBRARY_GITIGNORE, librarySymlinkMessage, isNonAssetPath, isNonAssetDir, encodeSkaileManifest } from '../chunk-QC5BYUED.js';
91
- import { setWalkTruncationSink, dedupeRequirements, parseFrontmatter, scanDirectory, parseRequires } from '../chunk-GNUA7XT2.js';
89
+ import { loadSkPublishManifest, SKAILE_MANIFEST_FILENAME, decodeSkaileManifest, LIBRARY_GITIGNORE, librarySymlinkMessage, isNonAssetPath, isNonAssetDir, encodeSkaileManifest } from '../chunk-MS2IXLTC.js';
90
+ import { setWalkTruncationSink, dedupeRequirements, parseFrontmatter, scanDirectory, parseRequires } from '../chunk-VS6XC5JE.js';
92
91
  import { pluginTitle } from '../chunk-RVRB27AN.js';
93
- import { parseAssetRef, isValidPublisher, PUBLISHER_HINT, isValidAssetName, ASSET_NAME_HINT, depToStr, assetRefToStr, slugifyAssetName, parseAssetRefLoose } from '../chunk-V5KG6CCV.js';
92
+ import { parseAssetRef, isValidAssetName, ASSET_NAME_HINT, depToStr, assetRefToStr, slugifyAssetName, parseAssetRefLoose } from '../chunk-7HRZACI4.js';
94
93
  import { portableSpawn, portableSpawnSync } from '../chunk-VSX2G7LA.js';
95
94
  import { parseModelRef, resolveEntryBaseUrl } from '../chunk-RXGPFAMN.js';
96
- import { RUN_STATE_GITIGNORE_ENTRIES, openSqlite } from '../chunk-MDCI4RSG.js';
95
+ import { RUN_STATE_GITIGNORE_ENTRIES, openSqlite } from '../chunk-RZL4TOK3.js';
97
96
  import '../chunk-C3CAXQMA.js';
98
97
  import { registerLogStore, LogStore, StdoutSink } from '../chunk-BOFL7GIF.js';
99
98
  import '../chunk-NSBPE2FW.js';
100
99
  import * as fs8 from 'fs';
101
- import fs8__default, { readFileSync, existsSync, mkdirSync, writeFileSync, lstatSync, rmSync, readdirSync, statSync } from 'fs';
100
+ import fs8__default, { readFileSync, existsSync, mkdirSync, writeFileSync, lstatSync, rmSync, readdirSync, statSync, rmdirSync } from 'fs';
102
101
  import * as path19 from 'path';
103
102
  import path19__default, { resolve, join } from 'path';
104
103
  import { fileURLToPath } from 'url';
@@ -240,7 +239,7 @@ async function runSearch(kind, query, opts) {
240
239
  }
241
240
  }
242
241
  async function searchIndex(query, kind, projectDir) {
243
- const { openLibrary: openLibrary2 } = await import('../open-library-3HMXYGUF.js');
242
+ const { openLibrary: openLibrary2 } = await import('../open-library-K6O6OVW5.js');
244
243
  const library = await openLibrary2();
245
244
  try {
246
245
  const { libraryDirMissing: libraryDirMissing2 } = await import('../library/index.js');
@@ -416,14 +415,14 @@ async function withAddVersions(entries, projectDir) {
416
415
  }
417
416
  async function searchLocal(query, kind, opts, showStore, airGapped) {
418
417
  const projectDir = path19__default.resolve(opts.projectDir);
419
- const { restoreSourceReaders } = await import('../source-URRPRGMZ.js');
418
+ const { restoreSourceReaders } = await import('../source-O7XXDX55.js');
420
419
  for (const name of await restoreSourceReaders(projectDir)) {
421
420
  logInfo(`Re-registered source "${name}" (its library entry was removed elsewhere).`);
422
421
  }
423
422
  const factory = await searchFactory(projectDir, query, kind);
424
423
  let entries = unionEntries(await searchIndex(query, kind, projectDir), factory);
425
424
  if (entries.length === 0 && !query && !kind && !airGapped) {
426
- const { autoSyncForSearch } = await import('../source-URRPRGMZ.js');
425
+ const { autoSyncForSearch } = await import('../source-O7XXDX55.js');
427
426
  if (await autoSyncForSearch(projectDir)) {
428
427
  entries = unionEntries(await searchIndex(query, kind, projectDir), factory);
429
428
  }
@@ -543,7 +542,7 @@ async function searchStore(query, kind, opts, airGapped) {
543
542
  logInfo("air-gapped (cache_ttl: 0) \u2014 local sources only");
544
543
  return "skipped";
545
544
  }
546
- const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-3HMXYGUF.js');
545
+ const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-K6O6OVW5.js');
547
546
  try {
548
547
  const remote = await openCatalogSource2({ projectDir: path19__default.resolve(opts.projectDir) });
549
548
  const assets = await remote.listAssets(kind ? { kind } : {});
@@ -962,6 +961,7 @@ function makeListCommand() {
962
961
  return;
963
962
  }
964
963
  if (await reportUnknownHarnesses(path19__default.resolve(opts.projectDir)) > 0) process.exit(1);
964
+ warnProjectConfig(path19__default.resolve(opts.projectDir), { stderr: opts.json });
965
965
  const am2 = new AssetManager({
966
966
  registry: getKindRegistry(),
967
967
  projectDir: path19__default.resolve(opts.projectDir),
@@ -1152,7 +1152,7 @@ async function resolveInfoEntry(am2, ref, opts) {
1152
1152
  return { entry: match ?? deployed, deployed: true };
1153
1153
  }
1154
1154
  const lookup = opts.storeLookup ?? (async (filter) => {
1155
- const { resolveCatalogSource } = await import('../open-library-3HMXYGUF.js');
1155
+ const { resolveCatalogSource } = await import('../open-library-K6O6OVW5.js');
1156
1156
  const { source, close } = await resolveCatalogSource({ projectDir: opts.projectDir });
1157
1157
  try {
1158
1158
  return await source.listAssets(filter);
@@ -1168,7 +1168,7 @@ async function resolveInfoEntry(am2, ref, opts) {
1168
1168
  );
1169
1169
  return { entry: hit ? catalogAssetToEntry(hit) : null };
1170
1170
  } catch (err) {
1171
- const { LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-3HMXYGUF.js');
1171
+ const { LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-K6O6OVW5.js');
1172
1172
  const storeNote = err instanceof Error ? err.message : String(err);
1173
1173
  const disabled = err instanceof LocalCatalogDisabledError2 || /catalog\.url/i.test(storeNote);
1174
1174
  return { entry: null, storeNote, ...disabled ? { storeDisabled: true } : {} };
@@ -1307,7 +1307,9 @@ function makeDoctorCommand() {
1307
1307
  const notices = [
1308
1308
  ...(await am2.mcpNotices()).map((n) => n.text),
1309
1309
  // A library that went back past the lock is no drift either (p1257).
1310
- ...await am2.libraryOlderNotices()
1310
+ ...await am2.libraryOlderNotices(),
1311
+ // An asset-named agent file an instance's file replaced: the next install removes it.
1312
+ ...am2.leftoverAgentFileNotices()
1311
1313
  ];
1312
1314
  await am2.probeStoreOrigins();
1313
1315
  const notChecked = am2.takeStoreNotChecked();
@@ -1434,13 +1436,25 @@ async function resolveDefByRef(library, ref, opts) {
1434
1436
  }
1435
1437
  const inScope = (d) => !opts?.fromLibraryId || d.libraryId === opts.fromLibraryId;
1436
1438
  const wantPublisher = parsed.publisher?.replace(/^@/, "");
1437
- const defs = await library.listAssetDefs({ kind: parsed.kind });
1439
+ const sources = await library.listSources();
1440
+ const { libraries, defs } = new AssetManager({
1441
+ registry: getKindRegistry(),
1442
+ projectDir: opts?.projectDir ?? process.cwd()
1443
+ }).scopeLibraryIndex(
1444
+ sources,
1445
+ await library.listAssetDefs({ kind: parsed.kind })
1446
+ );
1447
+ const rank = new Map(
1448
+ [...libraries].sort((a, b) => Number(b.isDefault) - Number(a.isDefault) || a.name.localeCompare(b.name)).map((l, i) => [l.id, i])
1449
+ );
1438
1450
  const matches = defs.filter(
1439
1451
  (d) => d.name === parsed.name && inScope(d) && (wantPublisher === void 0 || d.publisher.replace(/^@/, "") === wantPublisher) && matchPin(parsed.pin, d.version)
1440
1452
  );
1441
1453
  if (matches.length === 0) return null;
1442
- matches.sort((a, b) => rcompare(coerceVersion(a.version), coerceVersion(b.version)));
1443
- return matches[0];
1454
+ matches.sort(
1455
+ (a, b) => rcompare(coerceVersion(a.version), coerceVersion(b.version)) || (rank.get(a.libraryId ?? "") ?? Number.MAX_SAFE_INTEGER) - (rank.get(b.libraryId ?? "") ?? Number.MAX_SAFE_INTEGER)
1456
+ );
1457
+ return { def: matches[0], libraries };
1444
1458
  }
1445
1459
  function withCanonicalRef(def) {
1446
1460
  const { id: _storageId, ...rest } = def;
@@ -1645,10 +1659,15 @@ function makeAssetCommand() {
1645
1659
  }
1646
1660
  }
1647
1661
  logOk(`Migrated ${basename3} \u2192 ${target.name} (${opts.mode})`);
1648
- const publisher = loadSkPublishManifest(target.path)?.publisher ?? "<publisher>";
1649
- const migratedKind = fs8.existsSync(path19.join(destPath, "SKILL.md")) ? "skill" : "<kind>";
1662
+ const publisher = (loadSkPublishManifest(target.path)?.publisher ?? "<publisher>").replace(/^@/, "");
1663
+ const migrated = await scanDirectory(destPath, publisher, {
1664
+ knownKinds: new Set(getKindRegistry().getAllKinds()),
1665
+ onDiagnostic: () => {
1666
+ }
1667
+ });
1668
+ const refs = migrated.length ? migrated.map((e) => `${e.kind}:@${publisher}/${e.name}`) : [`<kind>:@${publisher}/${basename3}`];
1650
1669
  logInfo(
1651
- `Not addable yet: run ${S.cmd(`skaile library index ${target.name}`)}, then ${S.cmd(`skaile add ${migratedKind}:@${publisher.replace(/^@/, "")}/${basename3}`)}`
1670
+ `Not addable yet: run ${S.cmd(`skaile library index ${target.name}`)}, then ${refs.map((r) => S.cmd(`skaile add ${r}`)).join(" or ")}`
1652
1671
  );
1653
1672
  if (opts.mode === "move") {
1654
1673
  logInfo("Source moved into the library \u2014 future edits modify the library copy.");
@@ -1677,12 +1696,17 @@ function makeAssetCommand() {
1677
1696
  }
1678
1697
  fromLibraryId = match.id;
1679
1698
  }
1680
- const def = await resolveDefByRef(library, ref, { fromLibraryId });
1681
- if (!def) {
1699
+ const targetDir = opts.target ?? process.cwd();
1700
+ const found = await resolveDefByRef(library, ref, {
1701
+ fromLibraryId,
1702
+ projectDir: targetDir
1703
+ });
1704
+ if (!found) {
1682
1705
  logErr(`No asset found for ref "${ref}". Try \`skaile search\`.`);
1683
1706
  process.exit(1);
1684
1707
  }
1685
- const lib = def.libraryId ? (await manager.listLibraries()).find((l) => l.id === def.libraryId) : void 0;
1708
+ const { def } = found;
1709
+ const lib = def.libraryId ? found.libraries.find((l) => l.id === def.libraryId) : void 0;
1686
1710
  if (!lib) {
1687
1711
  logErr(`Asset has no associated library; install path unknown.`);
1688
1712
  process.exit(1);
@@ -1692,7 +1716,7 @@ function makeAssetCommand() {
1692
1716
  installed = installLibraryAsset({
1693
1717
  def,
1694
1718
  library: lib,
1695
- targetDir: opts.target ?? process.cwd(),
1719
+ targetDir,
1696
1720
  mode: opts.mode,
1697
1721
  registry: getKindRegistry()
1698
1722
  });
@@ -1710,7 +1734,7 @@ function makeAssetCommand() {
1710
1734
  cmd.command("show <ref>").description("Show details for an asset by canonical ref (prints JSON)").option("--json", "Print JSON (the default and only output format)").action(async (ref, _opts) => {
1711
1735
  const { library, close } = await openLibraryManager();
1712
1736
  try {
1713
- const def = await resolveDefByRef(library, ref);
1737
+ const def = (await resolveDefByRef(library, ref))?.def;
1714
1738
  if (!def) {
1715
1739
  try {
1716
1740
  await new AssetManager({
@@ -1906,7 +1930,7 @@ function makeCatalogCommand() {
1906
1930
  return catalog;
1907
1931
  }
1908
1932
  async function runLocalCatalogTest(projectDir) {
1909
- const { resolveCatalogSource } = await import('../open-library-3HMXYGUF.js');
1933
+ const { resolveCatalogSource } = await import('../open-library-K6O6OVW5.js');
1910
1934
  let resolved;
1911
1935
  try {
1912
1936
  resolved = await resolveCatalogSource({ projectDir });
@@ -2082,7 +2106,7 @@ async function scanLibraryFlowEntries() {
2082
2106
  const { LocalIndex, resolveIndexPath, scanAuthoringLibraries } = await import('../library/index.js');
2083
2107
  const indexPath = resolveIndexPath();
2084
2108
  if (!existsSync(indexPath)) return entries;
2085
- const { getKindRegistry: getKindRegistry2 } = await import('../open-registry-BHBHQMBA.js');
2109
+ const { getKindRegistry: getKindRegistry2 } = await import('../open-registry-4HNCWOCN.js');
2086
2110
  const index = new LocalIndex({ indexPath });
2087
2111
  try {
2088
2112
  for (const { library, assets } of await scanAuthoringLibraries(index, getKindRegistry2())) {
@@ -2508,6 +2532,7 @@ function makeConfigCommand() {
2508
2532
  return;
2509
2533
  }
2510
2534
  if (key === "harness") {
2535
+ value = canonicalHarnessId(value);
2511
2536
  await loadDeclaredPlugins(projectDir);
2512
2537
  const unknown = unknownHarnessMessage(value);
2513
2538
  if (unknown) {
@@ -2953,7 +2978,8 @@ Installing npm deps: ${allDeps.join(", ")}...`);
2953
2978
  if (!installResult.success) {
2954
2979
  logErr(
2955
2980
  `Failed to install dependencies:
2956
- ${installResult.output.trim() || "the package manager gave no output"}`
2981
+ ${installResult.output.trim() || "the package manager gave no output"}
2982
+ Fix that and run again, or use --no-install and install ${allDeps.join(" ")} in ${projectDir} yourself.`
2957
2983
  );
2958
2984
  process.exit(1);
2959
2985
  }
@@ -3019,6 +3045,7 @@ ${installResult.output.trim() || "the package manager gave no output"}`
3019
3045
  console.log(` ${symbol} ${r.id.padEnd(20)} driver: ${decl?.driver ?? "?"}${detail}`);
3020
3046
  }
3021
3047
  await manager.disconnectAll();
3048
+ if (report.results.some((r) => !r.connected)) process.exit(1);
3022
3049
  });
3023
3050
  cmd.command("list").description("List all configured connectors").option("--project-dir <path>", "Workspace directory", process.cwd()).action(async (opts) => {
3024
3051
  const projectDir = path19__default.resolve(opts.projectDir);
@@ -3268,7 +3295,7 @@ async function ensureTargetsRegistered(projectDir) {
3268
3295
  const { resolveSkWorkspaceConfig: resolveSkWorkspaceConfig2 } = await import('../core/index.js');
3269
3296
  const config = resolveSkWorkspaceConfig2(projectDir);
3270
3297
  if (config.plugins && config.plugins.length > 0) {
3271
- const { ensurePluginsLoaded } = await import('../plugin-store-XQP2CRYH.js');
3298
+ const { ensurePluginsLoaded } = await import('../plugin-store-ZC3EGZ3D.js');
3272
3299
  const result = await ensurePluginsLoaded(projectDir, config.plugins, pluginRegistry);
3273
3300
  for (const f of result.failed) logWarn(f.error);
3274
3301
  }
@@ -3588,45 +3615,40 @@ async function runHarnessSet(name, projectDir, opts) {
3588
3615
  `model ${profile.model} is kept. Check it fits ${target}: skaile run "hi there" --dry-run`
3589
3616
  );
3590
3617
  }
3591
- const renderedBefore = rememberRenderedHashes(
3618
+ const switchState = rememberRenderedHashes(
3592
3619
  projectDir,
3593
- new AssetManager({ registry: getKindRegistry(), projectDir }).lockedRenderedHashes()
3620
+ new AssetManager({ registry: getKindRegistry(), projectDir }).lockedRenderedHashes(),
3621
+ target
3594
3622
  );
3595
3623
  logInfo(`Installing for ${target} (${HARNESS_TARGETS[target].local.skill})`);
3596
3624
  await runYamlInstall({ projectDir });
3597
3625
  if (opts.clean) {
3598
- removeOldHarnessCopies(projectDir, renderedBefore);
3599
- rmSync(switchHashesFile(projectDir), { force: true });
3626
+ const kept = removeOldHarnessCopies(projectDir, switchState.hashes);
3627
+ removeEmptyHarnessFolders(projectDir, target);
3628
+ writeHarnessSwitchState(projectDir, {
3629
+ hashes: /* @__PURE__ */ new Map(),
3630
+ kept: /* @__PURE__ */ new Set([...switchState.kept, ...kept.map((c) => harnessSwitchKeptKey(projectDir, c))])
3631
+ });
3600
3632
  }
3601
3633
  }
3602
- function switchHashesFile(projectDir) {
3603
- return path19__default.join(projectDir, ".skaile", "harness-switch-hashes.json");
3604
- }
3605
- function rememberRenderedHashes(projectDir, current) {
3606
- const file = switchHashesFile(projectDir);
3607
- const merged = /* @__PURE__ */ new Map();
3608
- try {
3609
- const kept = JSON.parse(readFileSync(file, "utf-8"));
3610
- for (const [p6, sha] of Object.entries(kept)) if (typeof sha === "string") merged.set(p6, sha);
3611
- } catch {
3612
- }
3613
- for (const [p6, sha] of current) merged.set(p6, sha);
3614
- if (merged.size > 0) {
3615
- try {
3616
- mkdirSync(path19__default.dirname(file), { recursive: true });
3617
- writeFileSync(file, `${JSON.stringify(Object.fromEntries(merged), null, 2)}
3618
- `);
3619
- } catch {
3634
+ function rememberRenderedHashes(projectDir, current, active) {
3635
+ const state2 = readHarnessSwitchState(projectDir);
3636
+ for (const [p6, sha] of current) state2.hashes.set(p6, sha);
3637
+ const activeRoot = `${HARNESS_TARGETS[active].local.skill.split("/")[0]}/`;
3638
+ for (const key of state2.kept) {
3639
+ if (key.startsWith(activeRoot) || !existsSync(path19__default.join(projectDir, key))) {
3640
+ state2.kept.delete(key);
3620
3641
  }
3621
3642
  }
3622
- return merged;
3643
+ writeHarnessSwitchState(projectDir, state2);
3644
+ return state2;
3623
3645
  }
3624
3646
  function removeOldHarnessCopies(projectDir, renderedBefore) {
3625
3647
  const am2 = new AssetManager({ registry: getKindRegistry(), projectDir });
3626
3648
  const stale = am2.listStaleHarnessCopies({ renderedBefore });
3627
3649
  if (stale.length === 0) {
3628
3650
  logInfo("No old harness copies to remove.");
3629
- return;
3651
+ return [];
3630
3652
  }
3631
3653
  const rel = (copies) => copies.map((c) => path19__default.relative(projectDir, c.path)).join(", ");
3632
3654
  const owned = stale.filter((c) => c.skaileWrote);
@@ -3642,6 +3664,50 @@ function removeOldHarnessCopies(projectDir, renderedBefore) {
3642
3664
  `Kept ${foreign.length} cop${foreign.length === 1 ? "y" : "ies"} skaile did not write (the bytes differ from the new harness's copy or, for an agent file, from what the lock recorded, 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"}.`
3643
3665
  );
3644
3666
  }
3667
+ return foreign.map((c) => c.path);
3668
+ }
3669
+ function managedFolderNames(harness) {
3670
+ const local = HARNESS_TARGETS[harness].local;
3671
+ const names = [local.skill, local.agent, local.prompt, local.contract].filter((dir) => !dir.startsWith(".skaile/")).map((dir) => dir.split("/").slice(1).join("/"));
3672
+ return [...names, CODEX_IDENTITY_DIR, "extensions"];
3673
+ }
3674
+ function removeEmptyTree(dir) {
3675
+ let entries;
3676
+ try {
3677
+ entries = readdirSync(dir, { withFileTypes: true });
3678
+ } catch {
3679
+ return false;
3680
+ }
3681
+ let empty = true;
3682
+ for (const entry of entries) {
3683
+ if (entry.isDirectory() && removeEmptyTree(path19__default.join(dir, entry.name))) continue;
3684
+ empty = false;
3685
+ }
3686
+ if (!empty) return false;
3687
+ try {
3688
+ rmdirSync(dir);
3689
+ return true;
3690
+ } catch {
3691
+ return false;
3692
+ }
3693
+ }
3694
+ function removeEmptyHarnessFolders(projectDir, active) {
3695
+ const removed = [];
3696
+ for (const harness of SUPPORTED_HARNESSES) {
3697
+ if (harness === active) continue;
3698
+ const root = path19__default.join(projectDir, HARNESS_TARGETS[harness].local.skill.split("/")[0] ?? "");
3699
+ if (!existsSync(root) || root === projectDir) continue;
3700
+ for (const name of new Set(managedFolderNames(harness))) {
3701
+ const dir = path19__default.join(root, name);
3702
+ if (existsSync(dir) && removeEmptyTree(dir)) removed.push(path19__default.relative(projectDir, dir));
3703
+ }
3704
+ if (removeEmptyTree(root)) removed.push(path19__default.relative(projectDir, root));
3705
+ }
3706
+ if (removed.length > 0) {
3707
+ logOk(
3708
+ `Removed ${removed.length} empty old harness folder${removed.length === 1 ? "" : "s"}: ${removed.join(", ")}`
3709
+ );
3710
+ }
3645
3711
  }
3646
3712
  function makeHistoryCommand() {
3647
3713
  const cmd = new Command("history").description("Show recent add/remove/update actions");
@@ -4438,16 +4504,11 @@ async function reindexLibrary(lib, library, name) {
4438
4504
  await registeredAssetKeys(lib.path),
4439
4505
  resolved.publisher
4440
4506
  );
4441
- const { removed, unknownKind, skipped, failed, renamed, superseded } = await syncManifestWithDisk(
4442
- lib.path,
4443
- resolved.publisher,
4444
- registry,
4445
- {
4446
- check: (e) => checkAssetFile(e.source, e.kind, registry, lib.path, composeRefs),
4447
- // A flow the engine would never load under its id (p871): keep it out of the manifest and the index.
4448
- refuse: (e) => e.kind === "flow" && flowFileNameError({ id: e.name }, path19.basename(e.source)) !== void 0
4449
- }
4450
- );
4507
+ const { removed, unknownKind, skipped, failed, renamed, superseded, versionAdded } = await syncManifestWithDisk(lib.path, resolved.publisher, registry, {
4508
+ check: (e) => checkAssetFile(e.source, e.kind, registry, lib.path, composeRefs),
4509
+ // A flow the engine would never load under its id (p871): keep it out of the manifest and the index.
4510
+ refuse: (e) => e.kind === "flow" && flowFileNameError({ id: e.name }, path19.basename(e.source)) !== void 0
4511
+ });
4451
4512
  const manifest = loadSkPublishManifest(lib.path);
4452
4513
  for (const a of unknownKind) {
4453
4514
  logWarn(
@@ -4464,6 +4525,7 @@ async function reindexLibrary(lib, library, name) {
4464
4525
  for (const a of superseded) {
4465
4526
  logInfo(`Removed manifest entry ${a.kind}:${a.name} (root ${a.root} now holds another asset)`);
4466
4527
  }
4528
+ reportVersionsAdded(versionAdded, manifest);
4467
4529
  const invalidVersion = skipped.filter((x) => x.reason === "invalid-version");
4468
4530
  for (const s of invalidVersion) {
4469
4531
  const found = checkAssetFile(path19.join(lib.path, s.file), s.kind, registry).find(
@@ -4558,15 +4620,13 @@ async function indexPulledLibrary(lib, library, name) {
4558
4620
  const res = await indexLibrary(lib, library);
4559
4621
  for (const e of res.errors) logWarn(e);
4560
4622
  logOk(`Indexed ${res.assetsUpdated} asset(s) from ${name}.`);
4561
- warnUnlistedAssets(await countUnlistedAssets(lib.path), name);
4623
+ warnUnlistedAssets(await countUnlistedAssets(lib.path), name, lib.ownership);
4562
4624
  warnIgnoredDomainFiles(lib.path);
4563
4625
  }
4564
- function warnUnlistedAssets(unlisted, name) {
4565
- if (unlisted > 0) {
4566
- logWarn(
4567
- `${unlisted} asset(s) on disk are not in the manifest; run \`skaile library index ${name}\`.`
4568
- );
4569
- }
4626
+ function warnUnlistedAssets(unlisted, name, ownership) {
4627
+ if (unlisted === 0) return;
4628
+ const fix = ownership !== "reader" ? `run \`skaile library index ${name}\`.` : `add them to ${SKAILE_MANIFEST_FILENAME} in the source repo and pull, or, for your own repo, run \`skaile library set ${name} ownership=owner\` and then \`skaile library index ${name}\`.`;
4629
+ logWarn(`${unlisted} asset(s) on disk are not in the manifest; ${fix}`);
4570
4630
  }
4571
4631
  function warnManifestNeedsCommit(libPath, name) {
4572
4632
  const status4 = spawnSync("git", ["status", "--porcelain", "--", SKAILE_MANIFEST_FILENAME], {
@@ -4578,6 +4638,12 @@ function warnManifestNeedsCommit(libPath, name) {
4578
4638
  `${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.`
4579
4639
  );
4580
4640
  }
4641
+ function reportVersionsAdded(added, manifest) {
4642
+ for (const a of added) {
4643
+ const ref = manifest ? assetEntryRef(a, manifest) : `${a.kind}:${a.name}`;
4644
+ logInfo(`${SKAILE_MANIFEST_FILENAME} changed: version ${a.version} added to ${ref}`);
4645
+ }
4646
+ }
4581
4647
  function assertManifestEditableOrExit(libraryPath) {
4582
4648
  try {
4583
4649
  assertManifestEditable(libraryPath);
@@ -4654,6 +4720,14 @@ async function refuseUnusableLibraryDir(dir, force = false, ownership = "owner")
4654
4720
  logErr(rootFile);
4655
4721
  process.exit(1);
4656
4722
  }
4723
+ const publisherProblems = manifestPublisherProblems(dir);
4724
+ if (publisherProblems.length > 0) {
4725
+ for (const message of publisherProblems) logErr(message);
4726
+ logErr(
4727
+ `Fix the publisher in ${SKAILE_MANIFEST_FILENAME}, then run \`skaile library init\` again; nothing was registered.`
4728
+ );
4729
+ process.exit(1);
4730
+ }
4657
4731
  const manifest = loadSkPublishManifest(dir);
4658
4732
  const missing = manifest ? missingRootAssets(dir, manifest) : [];
4659
4733
  if (manifest && missing.length > 0) {
@@ -4797,8 +4871,7 @@ function assertCreateDirInsideLibrary(libRoot, destDir, given) {
4797
4871
  function adoptWritesManifest(libPath) {
4798
4872
  if (!fs8.existsSync(path19.join(libPath, SKAILE_MANIFEST_FILENAME))) return true;
4799
4873
  const manifest = loadSkPublishManifest(libPath);
4800
- if (!manifest || manifest.source || (manifest.assets ?? []).length > 0) return false;
4801
- return manifestPublisherProblems(libPath).length === 0;
4874
+ return !!manifest && !manifest.source && (manifest.assets ?? []).length === 0;
4802
4875
  }
4803
4876
  async function countUnlistedAssets(libPath) {
4804
4877
  const manifest = loadSkPublishManifest(libPath);
@@ -4822,7 +4895,7 @@ function readOriginTracking(dir) {
4822
4895
  });
4823
4896
  return { url, branch: head.status === 0 && head.stdout.trim() || "main" };
4824
4897
  }
4825
- function exitOnCloneWithoutCheckout(dir, name, fresh) {
4898
+ function exitOnCloneWithoutCheckout(dir, name, fresh, ownershipFlag) {
4826
4899
  const head = spawnSync("git", ["rev-parse", "--verify", "-q", "HEAD"], {
4827
4900
  cwd: dir,
4828
4901
  encoding: "utf-8"
@@ -4834,6 +4907,7 @@ function exitOnCloneWithoutCheckout(dir, name, fresh) {
4834
4907
  });
4835
4908
  const branches = (refs.stdout ?? "").split("\n").map((ref) => ref.trim().replace(/^refs\/remotes\/origin\//, "")).filter((branch) => branch !== "" && branch !== "HEAD" && !branch.startsWith("refs/"));
4836
4909
  if (branches.length === 0) return;
4910
+ const ownerArg = ownershipFlag ? ` ${ownershipFlag}` : "";
4837
4911
  if (fresh) {
4838
4912
  if (fresh.existed) fs8.rmSync(path19.join(dir, ".git"), { recursive: true, force: true });
4839
4913
  else {
@@ -4841,12 +4915,12 @@ function exitOnCloneWithoutCheckout(dir, name, fresh) {
4841
4915
  pruneEmptyLibraryParents(dir);
4842
4916
  }
4843
4917
  logErr(
4844
- `${fresh.url}: its remote HEAD names a branch that does not exist (remote branches: ${branches.join(", ")}); nothing was cloned or registered. Clone the branch you want, then adopt it: \`git clone --branch ${branches[0]} ${fresh.url} ${dir}\` and \`skaile library init ${name} --path ${dir}\`.`
4918
+ `${fresh.url}: its remote HEAD names a branch that does not exist (remote branches: ${branches.join(", ")}); nothing was cloned or registered. Clone the branch you want, then adopt it: \`git clone --branch ${branches[0]} ${fresh.url} ${dir}\` and \`skaile library init ${name} --path ${dir}${ownerArg}\`.`
4845
4919
  );
4846
4920
  process.exit(1);
4847
4921
  }
4848
4922
  logErr(
4849
- `${dir} is a git clone with no branch checked out (its remote HEAD names a branch that does not exist): run \`git -C ${dir} checkout ${branches[0]}\` (remote branches: ${branches.join(", ")}), then re-run \`skaile library init ${name} --path ${dir}\`.`
4923
+ `${dir} is a git clone with no branch checked out (its remote HEAD names a branch that does not exist): run \`git -C ${dir} checkout ${branches[0]}\` (remote branches: ${branches.join(", ")}), then re-run \`skaile library init ${name} --path ${dir}${ownerArg}\`.`
4850
4924
  );
4851
4925
  process.exit(1);
4852
4926
  }
@@ -4896,7 +4970,7 @@ function remoteBranches(url) {
4896
4970
  return r.stdout.split("\n").map((line) => line.split(" ")[1]?.replace(/^refs\/heads\//, "")).filter((b) => !!b);
4897
4971
  }
4898
4972
  async function warnIfNotGithubRemote(name, url) {
4899
- const { isGithubRemote, notGithubRemoteMessage } = await import('../library-publish-AZTYRASL.js');
4973
+ const { isGithubRemote, notGithubRemoteMessage } = await import('../library-publish-7U4TJNQX.js');
4900
4974
  if (!isGithubRemote(url)) logWarn(notGithubRemoteMessage(name, url));
4901
4975
  }
4902
4976
  function scaffoldLibraryFiles(dir, name) {
@@ -5045,7 +5119,13 @@ function makeLibraryCommand() {
5045
5119
  cmd.command("init <name>").description("Create (or adopt) a library \u2014 default location ~/.skaile/libraries/<name>").option("--git <url>", "Initialize as a git library tracking <url>").option("--path <dir>", "Register the library at <dir> (created if missing) instead").option(
5046
5120
  "--force",
5047
5121
  "Adopt a folder that holds deployed copies (.claude/, .skaile/, .codex/, .omp/) as a library"
5048
- ).option("--owner", "Mark as owner (the default)").option("--contributor", "Mark as contributor (needs --git or an existing git clone)").option("--reader", "Mark as reader (needs --git or an existing git clone)").action(
5122
+ ).option(
5123
+ "--owner",
5124
+ "Mark as owner (the default; an existing git clone with an origin is a reader unless you pass --owner)"
5125
+ ).option("--contributor", "Mark as contributor (needs --git or an existing git clone)").option(
5126
+ "--reader",
5127
+ "Mark as reader (needs --git or an existing git clone; the default for a clone with an origin)"
5128
+ ).action(
5049
5129
  async (name, opts) => {
5050
5130
  requireValidLibraryName(name);
5051
5131
  const flagged = ["owner", "contributor", "reader"].filter((o) => opts[o]);
@@ -5058,7 +5138,6 @@ function makeLibraryCommand() {
5058
5138
  if (gone.backend === "git") opts.git ??= gone.backendConfig.url;
5059
5139
  opts.path ??= gone.path;
5060
5140
  }
5061
- const ownership = flagged[0] ?? gone?.ownership ?? "owner";
5062
5141
  const libPath = opts.path ? path19.resolve(opts.path) : path19.join(resolveLibraryDir(), name);
5063
5142
  refuseGlobalInstallFolder(name, libPath);
5064
5143
  if (fs8.existsSync(libPath) && !fs8.statSync(libPath).isDirectory()) {
@@ -5066,7 +5145,15 @@ function makeLibraryCommand() {
5066
5145
  process.exit(1);
5067
5146
  }
5068
5147
  const adopted = opts.git ? null : readOriginTracking(libPath);
5069
- if (adopted) exitOnCloneWithoutCheckout(libPath, name);
5148
+ if (adopted) {
5149
+ exitOnCloneWithoutCheckout(
5150
+ libPath,
5151
+ name,
5152
+ void 0,
5153
+ flagged[0] ? `--${flagged[0]}` : void 0
5154
+ );
5155
+ }
5156
+ const ownership = flagged[0] ?? gone?.ownership ?? (adopted ? "reader" : "owner");
5070
5157
  if (ownership !== "owner" && !opts.git && !adopted) {
5071
5158
  logErr(
5072
5159
  `--${ownership} needs --git <url> or an existing git clone: ${LOCAL_OWNERSHIP_REASON}`
@@ -5096,7 +5183,14 @@ function makeLibraryCommand() {
5096
5183
  if (opts.git) {
5097
5184
  const existed = fs8.existsSync(libPath);
5098
5185
  const { branch, reason, cloned } = cloneOrInitGitRepo(libPath, opts.git, "main");
5099
- if (cloned) exitOnCloneWithoutCheckout(libPath, name, { url: opts.git, existed });
5186
+ if (cloned) {
5187
+ exitOnCloneWithoutCheckout(
5188
+ libPath,
5189
+ name,
5190
+ { url: opts.git, existed },
5191
+ `--${flagged[0] ?? "owner"}`
5192
+ );
5193
+ }
5100
5194
  if (reason) {
5101
5195
  logWarn(
5102
5196
  `Could not clone ${opts.git}; initialised an empty repo with that origin instead. git said: ${reason}`
@@ -5146,6 +5240,10 @@ function makeLibraryCommand() {
5146
5240
  logInfo(
5147
5241
  `\`library push\` / \`sync\` push to that origin. Not your library? Run \`skaile library set ${name} ownership=reader\` (or \`contributor\` to propose changes).`
5148
5242
  );
5243
+ } else if (ownership === "reader") {
5244
+ logInfo(
5245
+ `A reader never changes the clone and never pushes. Your own repo? Run \`skaile library set ${name} ownership=owner\`.`
5246
+ );
5149
5247
  }
5150
5248
  }
5151
5249
  if (!blank) {
@@ -5157,16 +5255,18 @@ function makeLibraryCommand() {
5157
5255
  }
5158
5256
  const unlisted = await countUnlistedAssets(libPath);
5159
5257
  const resolved = resolveLibraryPublisherDetailed(lib, {}, getStoreIdentity());
5160
- if (resolved.source === "manifest" && !isValidPublisher(resolved.publisher)) {
5161
- logWarn(
5162
- `${SKAILE_MANIFEST_FILENAME} declares publisher "${resolved.publisher}": ${PUBLISHER_HINT}. Fix it with \`skaile library set ${name} publisher=<name>\`.`
5163
- );
5164
- }
5165
5258
  warnLibraryNameFallback(name, resolved);
5259
+ let manifestChanged = false;
5166
5260
  if (ownership === "owner" && resolved.source !== "manifest") {
5167
5261
  stampManifestPublisher(lib.path, resolved.publisher);
5168
- warnManifestNeedsCommit(lib.path, name);
5262
+ manifestChanged = true;
5169
5263
  }
5264
+ if (ownership === "owner") {
5265
+ const added = await addMissingEntryVersions(lib.path, getKindRegistry());
5266
+ reportVersionsAdded(added, loadSkPublishManifest(lib.path));
5267
+ if (added.length > 0) manifestChanged = true;
5268
+ }
5269
+ if (manifestChanged) warnManifestNeedsCommit(lib.path, name);
5170
5270
  let toIndex = lib;
5171
5271
  if (ownership !== "owner" && resolved.source !== "manifest" && backendConfig) {
5172
5272
  await manager.updateLibrary(name, {
@@ -5177,7 +5277,7 @@ function makeLibraryCommand() {
5177
5277
  const res = await indexLibrary(toIndex, library);
5178
5278
  for (const e of res.errors) logWarn(e);
5179
5279
  logOk(`Indexed ${res.assetsUpdated} asset(s) from ${name}.`);
5180
- warnUnlistedAssets(unlisted, name);
5280
+ warnUnlistedAssets(unlisted, name, ownership);
5181
5281
  warnIgnoredDomainFiles(libPath);
5182
5282
  }
5183
5283
  } catch (err) {
@@ -5714,16 +5814,16 @@ function makeLibraryCommand() {
5714
5814
  "With --create-repo: create the repo private (the store only accepts public repos)"
5715
5815
  ).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(
5716
5816
  async (lib, opts) => {
5717
- const { runLibraryPublish } = await import('../library-publish-AZTYRASL.js');
5817
+ const { runLibraryPublish } = await import('../library-publish-7U4TJNQX.js');
5718
5818
  await withStoreErrorHandling(() => runLibraryPublish(lib, opts));
5719
5819
  }
5720
5820
  );
5721
5821
  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) => {
5722
- const { runLibraryRegister } = await import('../library-publish-AZTYRASL.js');
5822
+ const { runLibraryRegister } = await import('../library-publish-7U4TJNQX.js');
5723
5823
  await withStoreErrorHandling(() => runLibraryRegister(lib, opts));
5724
5824
  });
5725
5825
  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) => {
5726
- const { runLibraryYank } = await import('../library-publish-AZTYRASL.js');
5826
+ const { runLibraryYank } = await import('../library-publish-7U4TJNQX.js');
5727
5827
  await withStoreErrorHandling(() => runLibraryYank(lib, opts));
5728
5828
  });
5729
5829
  return cmd;
@@ -6383,7 +6483,7 @@ function scheduleSoftDepPreview() {
6383
6483
  }
6384
6484
  async function loadAssets() {
6385
6485
  softDepPreviewCache.clear();
6386
- const { gatherAssetFeeds } = await import('../asset-feeds-PANNQPEE.js');
6486
+ const { gatherAssetFeeds } = await import('../asset-feeds-PO2WC75V.js');
6387
6487
  const { entries, notes } = await gatherAssetFeeds(am, am.projectDir);
6388
6488
  if (notes.length > 0) {
6389
6489
  state.message = notes.map((n) => `[${n.feed}] ${n.message}`).join(" \u2022 ");
@@ -6587,7 +6687,7 @@ function reconcileCollapsedSets(rows) {
6587
6687
  async function loadSourcesAndLibraries() {
6588
6688
  try {
6589
6689
  const [{ openLibraryManager: openLibraryManager2 }, { getGlobalCacheDir: getGlobalCacheDir2, globalSkaileDir: globalSkaileDir2 }] = await Promise.all([
6590
- import('../open-library-3HMXYGUF.js'),
6690
+ import('../open-library-K6O6OVW5.js'),
6591
6691
  import('../core/index.js')
6592
6692
  ]);
6593
6693
  const { manager, library, close } = await openLibraryManager2();
@@ -7779,6 +7879,18 @@ function resolveMode(opts) {
7779
7879
  }
7780
7880
  return opts.write === true;
7781
7881
  }
7882
+ function requirePath(target, opts = {}) {
7883
+ const abs = path19__default.resolve(target);
7884
+ if (!existsSync(abs)) {
7885
+ logErr(`Path does not exist: ${abs}`);
7886
+ process.exit(1);
7887
+ }
7888
+ if (opts.dir !== void 0 && !statSync(abs).isDirectory()) {
7889
+ logErr(`${abs} is not a directory: nothing to migrate. Pass ${opts.dir}.`);
7890
+ process.exit(1);
7891
+ }
7892
+ return abs;
7893
+ }
7782
7894
  function printChanges(changes, base) {
7783
7895
  for (const change of changes) {
7784
7896
  console.log();
@@ -8962,7 +9074,7 @@ function planHarnessMigration(opts) {
8962
9074
  }
8963
9075
  function runMigrateHarness(opts) {
8964
9076
  const cwd = process.cwd();
8965
- const projectDir = path19__default.resolve(opts.projectDir ?? findWorkspaceRoot(cwd) ?? cwd);
9077
+ const projectDir = opts.projectDir ? requirePath(opts.projectDir, { dir: "the project directory" }) : path19__default.resolve(findWorkspaceRoot(cwd) ?? cwd);
8966
9078
  const plan = planHarnessMigration({ projectDir, user: opts.user === true });
8967
9079
  for (const note of plan.notes) console.log(` ${note}`);
8968
9080
  printChanges(plan.changes, projectDir);
@@ -9291,7 +9403,7 @@ function printPlan(plan) {
9291
9403
  console.log();
9292
9404
  }
9293
9405
  async function runMigrateProviders(opts) {
9294
- const projectDir = opts.projectDir ? path19__default.resolve(opts.projectDir) : process.cwd();
9406
+ const projectDir = opts.projectDir ? requirePath(opts.projectDir, { dir: "the project directory" }) : process.cwd();
9295
9407
  const plan = planProviderMigration({ projectDir, workspace: opts.workspace });
9296
9408
  for (const warning of plan.warnings) logWarn(warning);
9297
9409
  if (plan.entries.length === 0 && Object.keys(plan.providers).length === 0) {
@@ -9389,7 +9501,7 @@ async function runMigrateAgents(paths, opts) {
9389
9501
  const write = resolveMode(opts);
9390
9502
  const base = process.cwd();
9391
9503
  const plan = planAgentMigration({
9392
- paths: paths.length > 0 ? paths : [base],
9504
+ paths: paths.length > 0 ? paths.map((p6) => requirePath(p6)) : [base],
9393
9505
  registry: getKindRegistry()
9394
9506
  });
9395
9507
  let failures = 0;
@@ -9422,7 +9534,7 @@ async function runMigrateAssets(root, opts) {
9422
9534
  const write = resolveMode(opts);
9423
9535
  const base = process.cwd();
9424
9536
  const plan = planAssetMigration({
9425
- root: path19__default.resolve(root ?? base),
9537
+ root: requirePath(root ?? base, { dir: "the repo root" }),
9426
9538
  registry: getKindRegistry()
9427
9539
  });
9428
9540
  if (plan.conflicts.length > 0) {
@@ -9600,16 +9712,17 @@ function outdatedStatus(e) {
9600
9712
  return `${e.behind} commit(s) behind`;
9601
9713
  }
9602
9714
  function makeOutdatedCommand() {
9603
- return new Command("outdated").description("Check for assets behind their repo or library").argument("[ref]", "Check a specific asset (kind:@publisher/name)").option("--project-dir <path>", "Project directory", process.cwd()).addOption(
9715
+ return new Command("outdated").description("Check for assets behind their repo or library").argument("[ref]", "Check a specific asset (kind:@publisher/name)").option("--project-dir <path>", "Project directory", process.cwd()).option("--global", "Check the global install (~/.skaile) instead of the project").addOption(
9604
9716
  new Option("--target <agent>", `Harness target (${TARGET_DEFAULT_HINT})`).choices(
9605
9717
  SUPPORTED_HARNESSES
9606
9718
  )
9607
9719
  ).action(async (filter, opts) => {
9608
- requireProjectConfig(opts.projectDir);
9720
+ if (!opts.global) requireProjectConfig(opts.projectDir);
9609
9721
  const am2 = new AssetManager({
9610
9722
  registry: getKindRegistry(),
9611
9723
  projectDir: path19__default.resolve(opts.projectDir),
9612
- harness: opts.target
9724
+ harness: opts.target,
9725
+ ...opts.global ? { global: true } : {}
9613
9726
  });
9614
9727
  const entries = await am2.outdated();
9615
9728
  const unreachable = am2.takeUnreachableSources();
@@ -9651,9 +9764,15 @@ function makeOutdatedCommand() {
9651
9764
  }
9652
9765
  console.log();
9653
9766
  const needsUpdate = filtered.some((e) => e.problem === void 0 && !e.pinned);
9654
- if (needsUpdate) logWarn(`Run ${S.cmd("skaile update")} to re-lock and re-deploy.`);
9767
+ if (needsUpdate && opts.global)
9768
+ logWarn(
9769
+ `Run ${S.cmd("skaile add <ref> --global")} to re-lock and re-deploy a listed asset.`
9770
+ );
9771
+ else if (needsUpdate) logWarn(`Run ${S.cmd("skaile update")} to re-lock and re-deploy.`);
9655
9772
  if (filtered.some((e) => e.problem !== void 0 && !e.manualFix)) {
9656
- logWarn(`Run ${S.cmd("skaile install")} to restore or re-lock the broken assets.`);
9773
+ logWarn(
9774
+ `Run ${S.cmd(opts.global ? "skaile install --global" : "skaile install")} to restore or re-lock the broken assets.`
9775
+ );
9657
9776
  }
9658
9777
  for (const e of filtered) {
9659
9778
  if (e.problem !== void 0 || (await am2.gapsOf(outdatedRef(e))).length > 0) {
@@ -9725,14 +9844,14 @@ function action2(fn) {
9725
9844
  try {
9726
9845
  await fn(...args);
9727
9846
  } catch (err) {
9728
- const { condensePluginFailure } = await import('../plugin-store-XQP2CRYH.js');
9847
+ const { condensePluginFailure } = await import('../plugin-store-ZC3EGZ3D.js');
9729
9848
  logErr(condensePluginFailure(err instanceof Error ? err.message : String(err)));
9730
9849
  process.exitCode = 1;
9731
9850
  }
9732
9851
  };
9733
9852
  }
9734
9853
  async function reconcileAndReport(projectDir, plugins, opts = {}) {
9735
- const { reconcilePlugins } = await import('../plugin-store-XQP2CRYH.js');
9854
+ const { reconcilePlugins } = await import('../plugin-store-ZC3EGZ3D.js');
9736
9855
  if (plugins.length === 0) {
9737
9856
  logInfo("No plugins declared \u2014 nothing to reconcile.");
9738
9857
  return;
@@ -9743,14 +9862,14 @@ async function reconcileAndReport(projectDir, plugins, opts = {}) {
9743
9862
  else logInfo(`Plugin store ${result.reason}.`);
9744
9863
  } catch (err) {
9745
9864
  if (opts.strict) throw err;
9746
- const { condensePluginFailure } = await import('../plugin-store-XQP2CRYH.js');
9865
+ const { condensePluginFailure } = await import('../plugin-store-ZC3EGZ3D.js');
9747
9866
  logWarn(
9748
9867
  `reconcile skipped: ${condensePluginFailure(err instanceof Error ? err.message : String(err))}`
9749
9868
  );
9750
9869
  }
9751
9870
  }
9752
9871
  async function verifyPluginLoads(projectDir, spec, declared) {
9753
- const { loadPlugins } = await import('../plugin-store-XQP2CRYH.js');
9872
+ const { loadPlugins } = await import('../plugin-store-ZC3EGZ3D.js');
9754
9873
  const { createPluginRegistry } = await import('../plugin-registry/index.js');
9755
9874
  const registry = createPluginRegistry();
9756
9875
  await loadPlugins(
@@ -9773,7 +9892,7 @@ async function runInstall2(typedSpec, opts) {
9773
9892
  const rawSpec = typedSpec.trim();
9774
9893
  const projectDir = path19__default.resolve(opts.projectDir);
9775
9894
  const { WorkspaceYamlEditor: WorkspaceYamlEditor2 } = await import('../core/index.js');
9776
- const { specName, rollbackPluginStore, npmSpecError, projectRelativeFileSpec } = await import('../plugin-store-XQP2CRYH.js');
9895
+ const { specName, rollbackPluginStore, npmSpecError, projectRelativeFileSpec } = await import('../plugin-store-ZC3EGZ3D.js');
9777
9896
  const specError = npmSpecError(rawSpec);
9778
9897
  if (specError) throw new Error(specError);
9779
9898
  const spec = projectRelativeFileSpec(rawSpec, process.cwd(), projectDir);
@@ -9810,7 +9929,7 @@ async function runInstall2(typedSpec, opts) {
9810
9929
  async function runRemove(name, opts) {
9811
9930
  const projectDir = path19__default.resolve(opts.projectDir);
9812
9931
  const { WorkspaceYamlEditor: WorkspaceYamlEditor2 } = await import('../core/index.js');
9813
- const { specName } = await import('../plugin-store-XQP2CRYH.js');
9932
+ const { specName } = await import('../plugin-store-ZC3EGZ3D.js');
9814
9933
  const yamlPath = path19__default.join(projectDir, "skaile.yaml");
9815
9934
  if (!existsSync(yamlPath)) {
9816
9935
  logInfo(`No plugin matching ${S.cmd(name)}: there is no skaile.yaml in ${projectDir}.`);
@@ -9826,7 +9945,7 @@ async function runRemove(name, opts) {
9826
9945
  logOk(`Removed ${S.cmd(name)} from skaile.yaml plugins`);
9827
9946
  const remaining = editor.getPlugins();
9828
9947
  if (remaining.length === 0) {
9829
- const { rollbackPluginStore } = await import('../plugin-store-XQP2CRYH.js');
9948
+ const { rollbackPluginStore } = await import('../plugin-store-ZC3EGZ3D.js');
9830
9949
  await rollbackPluginStore(projectDir, []);
9831
9950
  logInfo("No plugins declared; removed .skaile/plugins/.");
9832
9951
  return;
@@ -9849,7 +9968,7 @@ async function runList(opts) {
9849
9968
  const registry = createPluginRegistry();
9850
9969
  if (declared.length > 0) {
9851
9970
  try {
9852
- const { loadPlugins } = await import('../plugin-store-XQP2CRYH.js');
9971
+ const { loadPlugins } = await import('../plugin-store-ZC3EGZ3D.js');
9853
9972
  const result = await loadPlugins(projectDir, declared, registry);
9854
9973
  for (const f of result.failed) logWarn(f.error);
9855
9974
  } catch (err) {
@@ -10730,7 +10849,8 @@ var claudeSdk = async (input, deps) => present(
10730
10849
  );
10731
10850
  var codex = async (input, deps) => present(
10732
10851
  await deps.sdkProblem(input.projectDir, input.harness),
10733
- checkHarnessModel("codex", input)
10852
+ checkHarnessModel("codex", input),
10853
+ deps.codexCredential(input)
10734
10854
  );
10735
10855
  var omp = async (input, deps) => {
10736
10856
  if (!deps.hasBinary("omp")) return [missingBinary("omp")];
@@ -10764,7 +10884,8 @@ async function preflightHarness(input, deps = {}) {
10764
10884
  {
10765
10885
  hasBinary: deps.hasBinary ?? ((id) => findHarnessBinary(HARNESS_BINARIES[id])),
10766
10886
  sdkProblem: deps.sdkProblem ?? checkHarnessSdk,
10767
- ompListed: deps.ompListed ?? checkOmpListedModel
10887
+ ompListed: deps.ompListed ?? checkOmpListedModel,
10888
+ codexCredential: deps.codexCredential ?? checkCodexCredential
10768
10889
  }
10769
10890
  );
10770
10891
  }
@@ -11011,7 +11132,9 @@ function makeRunCommand() {
11011
11132
  if (await reportProjectConfig(projectDir, { harness: false, instances: true }) > 0) {
11012
11133
  process.exit(1);
11013
11134
  }
11014
- const cliHarness2 = foldDriverFlag(opts).harness;
11135
+ const cliHarness2 = canonicalHarnessId(
11136
+ foldDriverFlag(opts).harness
11137
+ );
11015
11138
  const dryRun = opts.dryRun ?? false;
11016
11139
  const agentDefinition = opts.agentDefinition?.trim() || void 0;
11017
11140
  const instanceId2 = opts.instance?.trim() || void 0;
@@ -11298,7 +11421,9 @@ function makeReplCommand() {
11298
11421
  const instanceId2 = opts.instance?.trim() || void 0;
11299
11422
  let projectDir;
11300
11423
  let agentCwd;
11301
- let harnessOverride = foldDriverFlag(opts).harness;
11424
+ let harnessOverride = canonicalHarnessId(
11425
+ foldDriverFlag(opts).harness
11426
+ );
11302
11427
  if (workspaceRoot) {
11303
11428
  projectDir = workspaceRoot;
11304
11429
  agentCwd = userCwd;
@@ -11475,7 +11600,8 @@ function makeServeCommand() {
11475
11600
  "Include the Codex harness in the compiled binary (used with --compile-test)"
11476
11601
  ).action(
11477
11602
  async (rawOpts) => {
11478
- const opts = foldDriverFlag(rawOpts);
11603
+ const folded = foldDriverFlag(rawOpts);
11604
+ const opts = { ...folded, harness: canonicalHarnessId(folded.harness) };
11479
11605
  if (opts.compileTest && opts.managedCodexConfig)
11480
11606
  throw new Error("Managed Codex configuration is unsupported with --compile-test");
11481
11607
  if (opts.compileTest) {
@@ -11500,7 +11626,7 @@ function makeServeCommand() {
11500
11626
  process.exitCode = 1;
11501
11627
  return;
11502
11628
  }
11503
- const dirProblem = (await import('../serve-preflight-NHZOKHIC.js')).checkServeProjectDir(
11629
+ const dirProblem = (await import('../serve-preflight-E3IEZTTF.js')).checkServeProjectDir(
11504
11630
  opts.projectDir
11505
11631
  );
11506
11632
  if (dirProblem) {
@@ -11529,7 +11655,7 @@ function makeServeCommand() {
11529
11655
  }
11530
11656
  let providers = parseProviderIds(opts.providers);
11531
11657
  if (!managedCodex) {
11532
- const { resolveServeProvider } = await import('../serve-preflight-NHZOKHIC.js');
11658
+ const { resolveServeProvider } = await import('../serve-preflight-E3IEZTTF.js');
11533
11659
  const picked = resolveServeProvider(opts.projectDir, opts.provider, providers);
11534
11660
  if ("problem" in picked) {
11535
11661
  logErr(picked.problem);
@@ -11539,9 +11665,9 @@ function makeServeCommand() {
11539
11665
  providers = [...picked.providers];
11540
11666
  }
11541
11667
  const modelEndpoint = parseModelEndpointFlag(opts.modelEndpoint, opts.modelEndpointAgent);
11542
- const { checkHarnessSdk: checkHarnessSdk2, checkModelEndpointPeer, checkServeModel } = await import('../serve-preflight-NHZOKHIC.js');
11543
- const { checkServeHarness, checkServeAgents, checkServeConnectors } = await import('../serve-preflight-NHZOKHIC.js');
11544
- const startProblem = managedCodex ? null : await checkServeHarness(opts.projectDir, opts.harness) ?? checkServeAgents(opts.projectDir) ?? checkServeConnectors(opts.projectDir);
11668
+ const { checkHarnessSdk: checkHarnessSdk2, checkModelEndpointPeer, checkServeModel } = await import('../serve-preflight-E3IEZTTF.js');
11669
+ const { checkServeHarness, checkServeAgents, checkServeConnectors } = await import('../serve-preflight-E3IEZTTF.js');
11670
+ const startProblem = managedCodex ? null : await checkServeHarness(opts.projectDir, opts.harness) ?? checkServeAgents(opts.projectDir) ?? await checkServeConnectors(opts.projectDir);
11545
11671
  if (startProblem) {
11546
11672
  logErr(startProblem);
11547
11673
  process.exitCode = 1;
@@ -11607,12 +11733,12 @@ function makeServeCommand() {
11607
11733
  );
11608
11734
  }
11609
11735
  async function ensurePluginsLoadedForServe(projectDir) {
11610
- const { logInfo: logInfo2, logWarn: logWarn2 } = await import('../helpers-INS4B7OQ.js');
11736
+ const { logInfo: logInfo2, logWarn: logWarn2 } = await import('../helpers-S6AQGXRH.js');
11611
11737
  try {
11612
11738
  const { resolveSkWorkspaceConfig: resolveSkWorkspaceConfig2 } = await import('../core/index.js');
11613
11739
  const config = resolveSkWorkspaceConfig2(projectDir);
11614
11740
  if (!config.plugins || config.plugins.length === 0) return;
11615
- const { ensurePluginsLoaded } = await import('../plugin-store-XQP2CRYH.js');
11741
+ const { ensurePluginsLoaded } = await import('../plugin-store-ZC3EGZ3D.js');
11616
11742
  const { pluginRegistry } = await import('../plugin-registry/index.js');
11617
11743
  const result = await ensurePluginsLoaded(projectDir, config.plugins, pluginRegistry);
11618
11744
  if (result.loaded.length > 0) {
@@ -11626,14 +11752,14 @@ async function ensurePluginsLoadedForServe(projectDir) {
11626
11752
  }
11627
11753
  }
11628
11754
  async function runCompileTest(opts) {
11629
- const { logOk: logOk2, logErr: logErr2, logInfo: logInfo2, S: S2 } = await import('../helpers-INS4B7OQ.js');
11755
+ const { logOk: logOk2, logErr: logErr2, logInfo: logInfo2, S: S2 } = await import('../helpers-S6AQGXRH.js');
11630
11756
  const { tmpdir } = await import('os');
11631
11757
  const { dirname: dirname3, join: join6, resolve: resolve4 } = await import('path');
11632
11758
  const { fileURLToPath: fileURLToPath2 } = await import('url');
11633
- const { unlinkSync, existsSync: existsSync22 } = await import('fs');
11759
+ const { unlinkSync, existsSync: existsSync24 } = await import('fs');
11634
11760
  const { spawn } = await import('child_process');
11635
11761
  const { portableSpawnSync: portableSpawnSync2 } = await import('../core/index.js');
11636
- const { MONOREPO_ROOT } = await import('../paths-77PXOXZY.js');
11762
+ const { MONOREPO_ROOT } = await import('../paths-PXBWY532.js');
11637
11763
  if (MONOREPO_ROOT === null) {
11638
11764
  logErr2("--compile-test is only available inside the skaile-dev workspace.");
11639
11765
  logInfo2("Run it from a checkout of skaile-ai/skaile-dev (the monorepo shell).");
@@ -11695,7 +11821,7 @@ async function runCompileTest(opts) {
11695
11821
  } catch {
11696
11822
  }
11697
11823
  try {
11698
- if (existsSync22(outfile)) unlinkSync(outfile);
11824
+ if (existsSync24(outfile)) unlinkSync(outfile);
11699
11825
  } catch {
11700
11826
  }
11701
11827
  }
@@ -12593,8 +12719,8 @@ function makeStoreCommand() {
12593
12719
  "--all",
12594
12720
  `List every match (default: ${STORE_ROW_LIMIT} rows, only what \`skaile add\` can install)`
12595
12721
  ).option("-C, --project-dir <dir>", "Project directory (catalog config overlay)", process.cwd()).action(async (query, opts) => {
12596
- const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-3HMXYGUF.js');
12597
- const { getKnownKinds: getKnownKinds2 } = await import('../open-registry-BHBHQMBA.js');
12722
+ const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-K6O6OVW5.js');
12723
+ const { getKnownKinds: getKnownKinds2 } = await import('../open-registry-4HNCWOCN.js');
12598
12724
  const projectDir = path19__default.resolve(opts.projectDir);
12599
12725
  if (opts.kind && !getKnownKinds2().has(opts.kind)) {
12600
12726
  logErr(
@@ -12652,8 +12778,8 @@ function makeStoreCommand() {
12652
12778
  }
12653
12779
  });
12654
12780
  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) => {
12655
- const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-3HMXYGUF.js');
12656
- const { supportsInstallManifest: supportsInstallManifest2 } = await import('../project-HVNPK2ZF.js');
12781
+ const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-K6O6OVW5.js');
12782
+ const { supportsInstallManifest: supportsInstallManifest2 } = await import('../project-ZWIZZIUT.js');
12657
12783
  try {
12658
12784
  parseAssetRef(ref);
12659
12785
  } catch (e) {
@@ -13487,7 +13613,7 @@ program.command("init [project-dir]").description("Initialize a project director
13487
13613
  (projectDir, opts) => runInit(projectDir, opts)
13488
13614
  );
13489
13615
  async function runInit(projectDir, opts) {
13490
- const { mkdirSync: mkdirSync6, writeFileSync: writeFileSync8 } = await import('fs');
13616
+ const { mkdirSync: mkdirSync5, writeFileSync: writeFileSync7 } = await import('fs');
13491
13617
  const { stringify: stringify2 } = await import('yaml');
13492
13618
  const { HARNESS_TARGETS: HARNESS_TARGETS2, SUPPORTED_HARNESSES: SUPPORTED_HARNESSES2, resolveConfiguredHarnessName: resolveConfiguredHarnessName2 } = await import('../core/index.js');
13493
13619
  const harness = opts.harness ?? "claude-code";
@@ -13509,30 +13635,30 @@ async function runInit(projectDir, opts) {
13509
13635
  }
13510
13636
  const projectName = path19__default.basename(resolved);
13511
13637
  const created = [];
13512
- const { existsSync: existsSync22 } = await import('fs');
13513
- if (!existsSync22(resolved)) {
13514
- mkdirSync6(resolved, { recursive: true });
13638
+ const { existsSync: existsSync24 } = await import('fs');
13639
+ if (!existsSync24(resolved)) {
13640
+ mkdirSync5(resolved, { recursive: true });
13515
13641
  created.push(".");
13516
13642
  }
13517
13643
  const skaileDir = path19__default.join(resolved, ".skaile");
13518
- if (!existsSync22(skaileDir)) {
13519
- mkdirSync6(path19__default.join(skaileDir, "sessions"), { recursive: true });
13644
+ if (!existsSync24(skaileDir)) {
13645
+ mkdirSync5(path19__default.join(skaileDir, "sessions"), { recursive: true });
13520
13646
  created.push(".skaile/");
13521
13647
  }
13522
13648
  const settingsPath = path19__default.join(skaileDir, "settings.json");
13523
- if (!existsSync22(settingsPath)) {
13524
- writeFileSync8(settingsPath, "{}\n");
13649
+ if (!existsSync24(settingsPath)) {
13650
+ writeFileSync7(settingsPath, "{}\n");
13525
13651
  created.push(".skaile/settings.json");
13526
13652
  }
13527
13653
  const wsConfigPath = path19__default.join(resolved, "skaile.yaml");
13528
- if (!existsSync22(wsConfigPath)) {
13529
- writeFileSync8(wsConfigPath, stringify2(buildInitWorkspaceConfig(projectName, harness)));
13654
+ if (!existsSync24(wsConfigPath)) {
13655
+ writeFileSync7(wsConfigPath, stringify2(buildInitWorkspaceConfig(projectName, harness)));
13530
13656
  created.push("skaile.yaml");
13531
13657
  }
13532
13658
  for (const dir of new Set(Object.values(HARNESS_TARGETS2[harness].local))) {
13533
13659
  const full = path19__default.join(resolved, dir);
13534
- if (!existsSync22(full)) {
13535
- mkdirSync6(full, { recursive: true });
13660
+ if (!existsSync24(full)) {
13661
+ mkdirSync5(full, { recursive: true });
13536
13662
  created.push(`${dir}/`);
13537
13663
  }
13538
13664
  }
@@ -13560,7 +13686,7 @@ function buildInitWorkspaceConfig(projectName, harness) {
13560
13686
  }
13561
13687
  async function initGitScaffold(resolved, created) {
13562
13688
  const { execSync: execSync2 } = await import('child_process');
13563
- const { existsSync: existsSync22, readFileSync: readFileSync14, writeFileSync: writeFileSync8 } = await import('fs');
13689
+ const { existsSync: existsSync24, readFileSync: readFileSync13, writeFileSync: writeFileSync7 } = await import('fs');
13564
13690
  const gitignorePath = path19__default.join(resolved, ".gitignore");
13565
13691
  const entries = [
13566
13692
  "node_modules/",
@@ -13597,16 +13723,16 @@ async function initGitScaffold(resolved, created) {
13597
13723
  ".env",
13598
13724
  ".env.local"
13599
13725
  ];
13600
- const existing = existsSync22(gitignorePath) ? readFileSync14(gitignorePath, "utf-8") : "";
13726
+ const existing = existsSync24(gitignorePath) ? readFileSync13(gitignorePath, "utf-8") : "";
13601
13727
  const have = new Set(existing.split("\n").map((l) => l.trim()));
13602
13728
  const append = entries.filter((e) => !have.has(e));
13603
13729
  if (append.length > 0) {
13604
13730
  const prefix = existing && !existing.endsWith("\n") ? "\n" : "";
13605
- writeFileSync8(gitignorePath, `${existing + prefix}${append.join("\n")}
13731
+ writeFileSync7(gitignorePath, `${existing + prefix}${append.join("\n")}
13606
13732
  `);
13607
13733
  if (!existing) created.push(".gitignore");
13608
13734
  }
13609
- if (!existsSync22(path19__default.join(resolved, ".git"))) {
13735
+ if (!existsSync24(path19__default.join(resolved, ".git"))) {
13610
13736
  try {
13611
13737
  execSync2("git init", { cwd: resolved, stdio: "pipe" });
13612
13738
  created.push(".git/");
@@ -13636,7 +13762,7 @@ async function bootstrapUserConfig() {
13636
13762
  }
13637
13763
  async function hydrateInitSources(resolved, created) {
13638
13764
  try {
13639
- const { ensureSourcesCloned } = await import('../ensure-sources-5QWKUIUD.js');
13765
+ const { ensureSourcesCloned } = await import('../ensure-sources-Q2TTZVLX.js');
13640
13766
  const hydrate = ensureSourcesCloned(resolved, { quiet: true });
13641
13767
  for (const n of hydrate.cloned) created.push(`~/.skaile/cache/sources/${n}/`);
13642
13768
  if (hydrate.failed.length > 0) {
@@ -13677,7 +13803,7 @@ function printInitSummary(resolved, projectDir, created) {
13677
13803
  }
13678
13804
  program.hook("preAction", (_program, actionCommand) => setActiveCommand(actionCommand));
13679
13805
  program.command("setup").description("Interactive provider setup wizard").action(async () => {
13680
- const { cmdSetup } = await import('../setup-EX7Z7XRN.js');
13806
+ const { cmdSetup } = await import('../setup-V4EXOMVQ.js');
13681
13807
  await cmdSetup([], { projectDir: process.cwd() });
13682
13808
  });
13683
13809
  program.addCommand(makeInstallCommand());
@@ -13758,7 +13884,7 @@ program.hook("postAction", async (_thisCommand, actionCommand) => {
13758
13884
  const opts = actionCommand.opts();
13759
13885
  if (opts.global || opts.dryRun) return;
13760
13886
  const projectDir = path19__default.resolve(opts.projectDir ?? process.cwd());
13761
- const { refreshPluginSkills } = await import('../claude-code-ILZ46SLO.js');
13887
+ const { refreshPluginSkills } = await import('../claude-code-TDMSETH6.js');
13762
13888
  try {
13763
13889
  if (await refreshPluginSkills(projectDir)) {
13764
13890
  logInfo(`Updated ${S.cmd(".claude/plugins/skaile/skills")} (the --full plugin copy)`);