@skaile/workspaces 5.16.0 → 5.18.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 (369) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/dist/app-sdk/index.js +1 -1
  3. package/dist/{asset-feeds-BELBSJEE.js → asset-feeds-WAKBHGEV.js} +21 -21
  4. package/dist/{asset-feeds-BELBSJEE.js.map → asset-feeds-WAKBHGEV.js.map} +1 -1
  5. package/dist/asset-manager/catalog-deployer.js +8 -8
  6. package/dist/asset-manager/index.js +18 -14
  7. package/dist/asset-manager/installer.js +10 -10
  8. package/dist/asset-manager/renderers.js +9 -9
  9. package/dist/asset-manager/src/index.d.ts +122 -5
  10. package/dist/asset-manager/src/index.d.ts.map +1 -1
  11. package/dist/asset-manager/src/installer.d.ts +13 -10
  12. package/dist/asset-manager/src/installer.d.ts.map +1 -1
  13. package/dist/asset-manager/src/mcp-config.d.ts +61 -1
  14. package/dist/asset-manager/src/mcp-config.d.ts.map +1 -1
  15. package/dist/asset-manager/src/renderers.d.ts.map +1 -1
  16. package/dist/bridge/drivers/claude-sdk.js +287 -104
  17. package/dist/bridge/drivers/claude-sdk.js.map +1 -1
  18. package/dist/bridge/drivers/codex.js +12 -12
  19. package/dist/bridge/drivers/continue.js +11 -11
  20. package/dist/bridge/drivers/echo.js +4 -4
  21. package/dist/bridge/drivers/gemini.js +7 -7
  22. package/dist/bridge/drivers/goose.js +11 -11
  23. package/dist/bridge/drivers/omp.js +34 -8
  24. package/dist/bridge/drivers/omp.js.map +1 -1
  25. package/dist/bridge/drivers/opencode.js +11 -11
  26. package/dist/bridge/drivers/qwen.js +7 -7
  27. package/dist/bridge/index.js +16 -16
  28. package/dist/bridge/src/driver-model-check.d.ts +8 -8
  29. package/dist/bridge/src/driver-model-check.d.ts.map +1 -1
  30. package/dist/bridge/src/drivers/claude-sdk.d.ts +74 -20
  31. package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
  32. package/dist/bridge/src/drivers/claude-self-turns.d.ts +25 -6
  33. package/dist/bridge/src/drivers/claude-self-turns.d.ts.map +1 -1
  34. package/dist/bridge/src/drivers/omp-models-yml.d.ts +5 -0
  35. package/dist/bridge/src/drivers/omp-models-yml.d.ts.map +1 -1
  36. package/dist/bridge/src/drivers/omp.d.ts.map +1 -1
  37. package/dist/bridge/src/drivers/sanitize-assistant-text.d.ts +10 -0
  38. package/dist/bridge/src/drivers/sanitize-assistant-text.d.ts.map +1 -1
  39. package/dist/bridge/src/drivers/scrub-transcript.d.ts +20 -0
  40. package/dist/bridge/src/drivers/scrub-transcript.d.ts.map +1 -1
  41. package/dist/bridge/src/index.d.ts +1 -1
  42. package/dist/bridge/src/index.d.ts.map +1 -1
  43. package/dist/{chunk-FWAJUWXQ.js → chunk-24AXETE3.js} +55 -17
  44. package/dist/chunk-24AXETE3.js.map +1 -0
  45. package/dist/{chunk-ZVZTCDUN.js → chunk-2NOLF7B2.js} +37 -9
  46. package/dist/chunk-2NOLF7B2.js.map +1 -0
  47. package/dist/{chunk-NSNM2ZXF.js → chunk-3KMREAR2.js} +45 -5
  48. package/dist/chunk-3KMREAR2.js.map +1 -0
  49. package/dist/{chunk-D54T2F54.js → chunk-5TBFN46Z.js} +4 -4
  50. package/dist/chunk-5TBFN46Z.js.map +1 -0
  51. package/dist/{chunk-6RTEUWXX.js → chunk-6HK6RUFM.js} +3 -3
  52. package/dist/{chunk-6RTEUWXX.js.map → chunk-6HK6RUFM.js.map} +1 -1
  53. package/dist/{chunk-PGZDSDOB.js → chunk-6Z5KTFJT.js} +3 -3
  54. package/dist/{chunk-PGZDSDOB.js.map → chunk-6Z5KTFJT.js.map} +1 -1
  55. package/dist/{chunk-PW3TYWOI.js → chunk-AJ7EGIFR.js} +3 -3
  56. package/dist/{chunk-PW3TYWOI.js.map → chunk-AJ7EGIFR.js.map} +1 -1
  57. package/dist/{chunk-46IRZJV4.js → chunk-CD7SVH6W.js} +4 -4
  58. package/dist/{chunk-46IRZJV4.js.map → chunk-CD7SVH6W.js.map} +1 -1
  59. package/dist/{chunk-WKEBNB5S.js → chunk-CKBCX3HQ.js} +4 -4
  60. package/dist/{chunk-WKEBNB5S.js.map → chunk-CKBCX3HQ.js.map} +1 -1
  61. package/dist/{chunk-H7R7R5BN.js → chunk-CKICWXMU.js} +18 -15
  62. package/dist/chunk-CKICWXMU.js.map +1 -0
  63. package/dist/{chunk-YK3XLEQJ.js → chunk-CKNIYIV2.js} +83 -77
  64. package/dist/chunk-CKNIYIV2.js.map +1 -0
  65. package/dist/{chunk-SPV2CXJ3.js → chunk-D6UBEYQH.js} +4 -4
  66. package/dist/{chunk-SPV2CXJ3.js.map → chunk-D6UBEYQH.js.map} +1 -1
  67. package/dist/{chunk-5CE6J4DB.js → chunk-DA2MCPFN.js} +53 -16
  68. package/dist/chunk-DA2MCPFN.js.map +1 -0
  69. package/dist/{chunk-A26MUUN7.js → chunk-DJD36HC5.js} +7 -7
  70. package/dist/{chunk-A26MUUN7.js.map → chunk-DJD36HC5.js.map} +1 -1
  71. package/dist/{chunk-Y25V2MW2.js → chunk-E5YNGE3I.js} +4 -4
  72. package/dist/{chunk-Y25V2MW2.js.map → chunk-E5YNGE3I.js.map} +1 -1
  73. package/dist/{chunk-OJHPG6HK.js → chunk-EELKR2WP.js} +45 -28
  74. package/dist/chunk-EELKR2WP.js.map +1 -0
  75. package/dist/{chunk-YIDZJHY6.js → chunk-EFLKSMCO.js} +3 -3
  76. package/dist/{chunk-YIDZJHY6.js.map → chunk-EFLKSMCO.js.map} +1 -1
  77. package/dist/{chunk-SMUIYYCH.js → chunk-EZVZDCHZ.js} +24 -15
  78. package/dist/chunk-EZVZDCHZ.js.map +1 -0
  79. package/dist/{chunk-SAGBVBY2.js → chunk-FHIMIXT3.js} +5 -5
  80. package/dist/{chunk-SAGBVBY2.js.map → chunk-FHIMIXT3.js.map} +1 -1
  81. package/dist/{chunk-D5REDKVU.js → chunk-FKU57Q5Q.js} +3 -3
  82. package/dist/{chunk-D5REDKVU.js.map → chunk-FKU57Q5Q.js.map} +1 -1
  83. package/dist/{chunk-J4RRH2NP.js → chunk-FV2MSBVA.js} +4 -4
  84. package/dist/{chunk-J4RRH2NP.js.map → chunk-FV2MSBVA.js.map} +1 -1
  85. package/dist/{chunk-YW2BNDSE.js → chunk-GOCWM7FN.js} +22 -4
  86. package/dist/chunk-GOCWM7FN.js.map +1 -0
  87. package/dist/{chunk-TXGVG7VH.js → chunk-GRKU3S5V.js} +3 -3
  88. package/dist/{chunk-TXGVG7VH.js.map → chunk-GRKU3S5V.js.map} +1 -1
  89. package/dist/{chunk-AP24HESN.js → chunk-H6UVIKQ2.js} +3 -3
  90. package/dist/{chunk-AP24HESN.js.map → chunk-H6UVIKQ2.js.map} +1 -1
  91. package/dist/{chunk-ES6ARJPQ.js → chunk-HPVMTX6M.js} +15 -10
  92. package/dist/chunk-HPVMTX6M.js.map +1 -0
  93. package/dist/{chunk-A7AZ3RL5.js → chunk-JJ7LDI3S.js} +7 -7
  94. package/dist/{chunk-A7AZ3RL5.js.map → chunk-JJ7LDI3S.js.map} +1 -1
  95. package/dist/{chunk-OHNNCXMB.js → chunk-JY7GVNYU.js} +32 -18
  96. package/dist/chunk-JY7GVNYU.js.map +1 -0
  97. package/dist/{chunk-HUKUYWBJ.js → chunk-JYWW32JI.js} +17 -6
  98. package/dist/chunk-JYWW32JI.js.map +1 -0
  99. package/dist/{chunk-VJ2DZLDM.js → chunk-K5LVU2MN.js} +13 -7
  100. package/dist/chunk-K5LVU2MN.js.map +1 -0
  101. package/dist/{chunk-5RDZ5JHH.js → chunk-KC6HGWXN.js} +4 -4
  102. package/dist/{chunk-5RDZ5JHH.js.map → chunk-KC6HGWXN.js.map} +1 -1
  103. package/dist/{chunk-X5O56UO4.js → chunk-L2AMXONH.js} +3 -3
  104. package/dist/chunk-L2AMXONH.js.map +1 -0
  105. package/dist/{chunk-RTNWU2UD.js → chunk-L5XUEC2W.js} +4 -4
  106. package/dist/{chunk-RTNWU2UD.js.map → chunk-L5XUEC2W.js.map} +1 -1
  107. package/dist/{chunk-TKI7YDWE.js → chunk-L6IFN6ER.js} +54 -9
  108. package/dist/chunk-L6IFN6ER.js.map +1 -0
  109. package/dist/{chunk-L6UMSKDF.js → chunk-LW7ZI6EQ.js} +8 -36
  110. package/dist/chunk-LW7ZI6EQ.js.map +1 -0
  111. package/dist/{chunk-XGR7IDTY.js → chunk-MQIRRN76.js} +3 -3
  112. package/dist/{chunk-XGR7IDTY.js.map → chunk-MQIRRN76.js.map} +1 -1
  113. package/dist/{chunk-ISSYT5AZ.js → chunk-N5P2WBUL.js} +3 -3
  114. package/dist/{chunk-ISSYT5AZ.js.map → chunk-N5P2WBUL.js.map} +1 -1
  115. package/dist/{chunk-E634MBP6.js → chunk-ODDATIII.js} +8 -8
  116. package/dist/{chunk-E634MBP6.js.map → chunk-ODDATIII.js.map} +1 -1
  117. package/dist/{chunk-WXWQNJCT.js → chunk-PUK7TQT4.js} +3 -3
  118. package/dist/{chunk-WXWQNJCT.js.map → chunk-PUK7TQT4.js.map} +1 -1
  119. package/dist/{chunk-72KZJE3G.js → chunk-PZ6NF5DE.js} +16 -23
  120. package/dist/chunk-PZ6NF5DE.js.map +1 -0
  121. package/dist/{chunk-5DCOG5B5.js → chunk-RD6N2D7I.js} +3 -3
  122. package/dist/{chunk-5DCOG5B5.js.map → chunk-RD6N2D7I.js.map} +1 -1
  123. package/dist/{chunk-TADJCATD.js → chunk-RO2BPKXK.js} +3 -3
  124. package/dist/{chunk-TADJCATD.js.map → chunk-RO2BPKXK.js.map} +1 -1
  125. package/dist/{chunk-6GSE63K2.js → chunk-SRNCN4X2.js} +13 -5
  126. package/dist/chunk-SRNCN4X2.js.map +1 -0
  127. package/dist/{chunk-PIC23DDE.js → chunk-T2TQAH2X.js} +42 -11
  128. package/dist/chunk-T2TQAH2X.js.map +1 -0
  129. package/dist/{chunk-DADAZLFW.js → chunk-TDQ2ERCM.js} +695 -96
  130. package/dist/chunk-TDQ2ERCM.js.map +1 -0
  131. package/dist/{chunk-SXWGLW23.js → chunk-U2FI547Z.js} +4 -4
  132. package/dist/{chunk-SXWGLW23.js.map → chunk-U2FI547Z.js.map} +1 -1
  133. package/dist/{chunk-CQFVKN6S.js → chunk-V4RV2NJF.js} +240 -84
  134. package/dist/chunk-V4RV2NJF.js.map +1 -0
  135. package/dist/{chunk-D3PU3C6F.js → chunk-VKPBUPH7.js} +41 -15
  136. package/dist/chunk-VKPBUPH7.js.map +1 -0
  137. package/dist/{chunk-FT4ZHLYR.js → chunk-WDXZA7QW.js} +33 -3
  138. package/dist/chunk-WDXZA7QW.js.map +1 -0
  139. package/dist/{chunk-FSSRBWYL.js → chunk-WJCQFNF6.js} +4 -4
  140. package/dist/chunk-WJCQFNF6.js.map +1 -0
  141. package/dist/{chunk-2SKPPIV7.js → chunk-WJLYL6RY.js} +5 -5
  142. package/dist/{chunk-2SKPPIV7.js.map → chunk-WJLYL6RY.js.map} +1 -1
  143. package/dist/{chunk-6Q7NKTDG.js → chunk-X54YR4AW.js} +2 -2
  144. package/dist/{chunk-6Q7NKTDG.js.map → chunk-X54YR4AW.js.map} +1 -1
  145. package/dist/{chunk-D5WTOVLG.js → chunk-Y56YIT6J.js} +2 -2
  146. package/dist/chunk-Y56YIT6J.js.map +1 -0
  147. package/dist/{chunk-ZIW34FGO.js → chunk-YIF2IJUA.js} +3 -3
  148. package/dist/{chunk-ZIW34FGO.js.map → chunk-YIF2IJUA.js.map} +1 -1
  149. package/dist/{chunk-HG52NGAV.js → chunk-YU6AURJY.js} +3 -3
  150. package/dist/{chunk-HG52NGAV.js.map → chunk-YU6AURJY.js.map} +1 -1
  151. package/dist/{chunk-FSLVMZXR.js → chunk-YZ3N7IUU.js} +72 -31
  152. package/dist/chunk-YZ3N7IUU.js.map +1 -0
  153. package/dist/{chunk-DQOAPR4M.js → chunk-ZNN7ONJX.js} +8 -4
  154. package/dist/chunk-ZNN7ONJX.js.map +1 -0
  155. package/dist/cli/index.js +349 -150
  156. package/dist/cli/index.js.map +1 -1
  157. package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
  158. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  159. package/dist/cli/src/commands/config.d.ts.map +1 -1
  160. package/dist/cli/src/commands/integration.d.ts.map +1 -1
  161. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  162. package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
  163. package/dist/cli/src/commands/plugin/claude-code.d.ts.map +1 -1
  164. package/dist/cli/src/commands/plugin/codex.d.ts +6 -0
  165. package/dist/cli/src/commands/plugin/codex.d.ts.map +1 -1
  166. package/dist/cli/src/commands/project.d.ts.map +1 -1
  167. package/dist/cli/src/commands/run.d.ts.map +1 -1
  168. package/dist/cli/src/commands/serve.d.ts +5 -0
  169. package/dist/cli/src/commands/serve.d.ts.map +1 -1
  170. package/dist/cli/src/commands/source.d.ts.map +1 -1
  171. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  172. package/dist/cli/src/commands/verify.d.ts.map +1 -1
  173. package/dist/cli/src/driver-error.d.ts +3 -1
  174. package/dist/cli/src/driver-error.d.ts.map +1 -1
  175. package/dist/cli/src/helpers.d.ts +6 -4
  176. package/dist/cli/src/helpers.d.ts.map +1 -1
  177. package/dist/cli/src/plugin-store/index.d.ts +6 -0
  178. package/dist/cli/src/plugin-store/index.d.ts.map +1 -1
  179. package/dist/cli/src/skill-checks.d.ts +4 -3
  180. package/dist/cli/src/skill-checks.d.ts.map +1 -1
  181. package/dist/connectors/config.js +5 -5
  182. package/dist/connectors/index.js +22 -22
  183. package/dist/connectors/src/connector-manager.d.ts.map +1 -1
  184. package/dist/connectors/src/connector-types.d.ts +5 -0
  185. package/dist/connectors/src/connector-types.d.ts.map +1 -1
  186. package/dist/connectors/src/watcher.d.ts.map +1 -1
  187. package/dist/{connectors-44RE2QEM.js → connectors-QL4GBMH3.js} +25 -25
  188. package/dist/{connectors-44RE2QEM.js.map → connectors-QL4GBMH3.js.map} +1 -1
  189. package/dist/connectors-shared/index.js +2 -2
  190. package/dist/core/index.js +7 -7
  191. package/dist/core/manifest.js +2 -2
  192. package/dist/core/models.js +1 -1
  193. package/dist/core/publish-manifest.js +3 -3
  194. package/dist/core/ref.js +1 -1
  195. package/dist/core/runtime-assets.js +5 -5
  196. package/dist/core/src/bind.d.ts +30 -0
  197. package/dist/core/src/bind.d.ts.map +1 -0
  198. package/dist/core/src/index.d.ts +4 -3
  199. package/dist/core/src/index.d.ts.map +1 -1
  200. package/dist/core/src/lock.d.ts +11 -2
  201. package/dist/core/src/lock.d.ts.map +1 -1
  202. package/dist/core/src/manifest.d.ts.map +1 -1
  203. package/dist/core/src/models.d.ts +19 -0
  204. package/dist/core/src/models.d.ts.map +1 -1
  205. package/dist/core/src/publish-manifest.d.ts +15 -13
  206. package/dist/core/src/publish-manifest.d.ts.map +1 -1
  207. package/dist/core/src/store.d.ts +2 -1
  208. package/dist/core/src/store.d.ts.map +1 -1
  209. package/dist/core/src/workspace-config.d.ts +26 -1
  210. package/dist/core/src/workspace-config.d.ts.map +1 -1
  211. package/dist/core/store.js +1 -1
  212. package/dist/core/workspace-config.js +4 -4
  213. package/dist/deploy/index.js +7 -7
  214. package/dist/discovery/index.js +5 -5
  215. package/dist/discovery/src/parse-manifest.d.ts +1 -1
  216. package/dist/discovery/src/source-config.d.ts +2 -1
  217. package/dist/discovery/src/source-config.d.ts.map +1 -1
  218. package/dist/{ensure-sources-R6AHZ7RV.js → ensure-sources-CEFODJCE.js} +21 -17
  219. package/dist/ensure-sources-CEFODJCE.js.map +1 -0
  220. package/dist/factory-assets/connectors/box.js +22 -22
  221. package/dist/factory-assets/connectors/deploy.js +22 -22
  222. package/dist/factory-assets/connectors/devserver.js +22 -22
  223. package/dist/factory-assets/connectors/flow/adapter.js +22 -22
  224. package/dist/factory-assets/connectors/flow/engine.js +9 -9
  225. package/dist/factory-assets/connectors/flow/run-flow.js +24 -24
  226. package/dist/factory-assets/connectors/flow.js +22 -22
  227. package/dist/factory-assets/connectors/git.js +22 -22
  228. package/dist/factory-assets/connectors/gmail.js +22 -22
  229. package/dist/factory-assets/connectors/googledrive.js +22 -22
  230. package/dist/factory-assets/connectors/local.js +22 -22
  231. package/dist/factory-assets/connectors/mattermost.js +22 -22
  232. package/dist/factory-assets/connectors/memory.js +22 -22
  233. package/dist/factory-assets/connectors/minio.js +22 -22
  234. package/dist/factory-assets/connectors/postgres.js +22 -22
  235. package/dist/factory-assets/connectors/s3.js +22 -22
  236. package/dist/factory-assets/connectors/sharepoint.js +22 -22
  237. package/dist/factory-assets/connectors/sqlite.js +22 -22
  238. package/dist/factory-assets/connectors/static-server.js +22 -22
  239. package/dist/factory-assets/connectors/tunnel.js +22 -22
  240. package/dist/factory-assets/connectors/webdav.js +22 -22
  241. package/dist/factory-assets/connectors/xstate-store/adapter.d.ts +1 -1
  242. package/dist/factory-assets/connectors/xstate-store/adapter.d.ts.map +1 -1
  243. package/dist/factory-assets/connectors/xstate-store.js +22 -22
  244. package/dist/factory-assets/connectors/xstate.js +22 -22
  245. package/dist/{flows-YKC53LDP.js → flows-BHY73K3O.js} +12 -12
  246. package/dist/{flows-YKC53LDP.js.map → flows-BHY73K3O.js.map} +1 -1
  247. package/dist/{helpers-FNQL5PI7.js → helpers-R22QNPFN.js} +21 -17
  248. package/dist/{helpers-FNQL5PI7.js.map → helpers-R22QNPFN.js.map} +1 -1
  249. package/dist/library/index.js +11 -11
  250. package/dist/library/install.js +4 -4
  251. package/dist/library/src/index.d.ts +1 -1
  252. package/dist/library/src/index.d.ts.map +1 -1
  253. package/dist/library/src/manifest-writer.d.ts +17 -1
  254. package/dist/library/src/manifest-writer.d.ts.map +1 -1
  255. package/dist/{library-publish-GHPVY42Y.js → library-publish-VBE3X2TH.js} +63 -66
  256. package/dist/library-publish-VBE3X2TH.js.map +1 -0
  257. package/dist/model-endpoint/index.js +10 -10
  258. package/dist/model-endpoint/src/server.d.ts.map +1 -1
  259. package/dist/open-library-JP5TC5UX.js +42 -0
  260. package/dist/{open-library-YSUGNP36.js.map → open-library-JP5TC5UX.js.map} +1 -1
  261. package/dist/open-registry-RBELV5YH.js +32 -0
  262. package/dist/{open-registry-YPRQDUMK.js.map → open-registry-RBELV5YH.js.map} +1 -1
  263. package/dist/paths-BFM6K2QO.js +22 -0
  264. package/dist/{paths-P55DTBEK.js.map → paths-BFM6K2QO.js.map} +1 -1
  265. package/dist/plugin-store-QOQDM24E.js +23 -0
  266. package/dist/{plugin-store-IPIBZRBX.js.map → plugin-store-QOQDM24E.js.map} +1 -1
  267. package/dist/{project-NDSLXERO.js → project-6ETXGQWD.js} +48 -48
  268. package/dist/{project-NDSLXERO.js.map → project-6ETXGQWD.js.map} +1 -1
  269. package/dist/resolver/index.js +8 -8
  270. package/dist/runner/index.js +40 -40
  271. package/dist/runner/src/agent.d.ts.map +1 -1
  272. package/dist/runner/src/capability-roundtrip.d.ts.map +1 -1
  273. package/dist/runner/src/coalesced-restart.d.ts +41 -0
  274. package/dist/runner/src/coalesced-restart.d.ts.map +1 -0
  275. package/dist/runner/src/compaction/prompt.d.ts.map +1 -1
  276. package/dist/runner/src/mcp-runtime-handlers.d.ts +27 -0
  277. package/dist/runner/src/mcp-runtime-handlers.d.ts.map +1 -1
  278. package/dist/runner/src/runner-capabilities.d.ts +7 -0
  279. package/dist/runner/src/runner-capabilities.d.ts.map +1 -1
  280. package/dist/runner/src/serve.d.ts.map +1 -1
  281. package/dist/runner/src/session-capability-wiring.d.ts +2 -0
  282. package/dist/runner/src/session-capability-wiring.d.ts.map +1 -1
  283. package/dist/sdk/asset-manager.js +18 -14
  284. package/dist/sdk/bridge.js +16 -16
  285. package/dist/sdk/core.js +7 -7
  286. package/dist/sdk/flow.js +9 -9
  287. package/dist/sdk/index.js +40 -40
  288. package/dist/sdk/resolver.js +8 -8
  289. package/dist/sdk/runner.js +40 -40
  290. package/dist/sdk/session.js +2 -2
  291. package/dist/sdk/transport/ws/server.js +19 -1
  292. package/dist/sdk/transport/ws.js +19 -1
  293. package/dist/sdk/transport.js +19 -1
  294. package/dist/sdk/types.js +1 -1
  295. package/dist/{serve-preflight-ON2LS3SD.js → serve-preflight-BTGTZUDN.js} +9 -9
  296. package/dist/{serve-preflight-ON2LS3SD.js.map → serve-preflight-BTGTZUDN.js.map} +1 -1
  297. package/dist/session/index.js +2 -2
  298. package/dist/{setup-MFPEQS2I.js → setup-JQDTYPSD.js} +30 -26
  299. package/dist/setup-JQDTYPSD.js.map +1 -0
  300. package/dist/{skills-7G6QCDEM.js → skills-RSZVUIYZ.js} +13 -13
  301. package/dist/{skills-7G6QCDEM.js.map → skills-RSZVUIYZ.js.map} +1 -1
  302. package/dist/{source-4QVRD5NV.js → source-FPLHY3DP.js} +50 -50
  303. package/dist/{source-4QVRD5NV.js.map → source-FPLHY3DP.js.map} +1 -1
  304. package/dist/{source-manifest-publish-ZIO24GUM.js → source-manifest-publish-LY4H63VA.js} +52 -52
  305. package/dist/{source-manifest-publish-ZIO24GUM.js.map → source-manifest-publish-LY4H63VA.js.map} +1 -1
  306. package/dist/transport/index.js +19 -1
  307. package/dist/transport/src/ws/server.d.ts +2 -16
  308. package/dist/transport/src/ws/server.d.ts.map +1 -1
  309. package/dist/transport/ws/server.js +19 -1
  310. package/dist/transport/ws.js +19 -1
  311. package/dist/tui/index.js +57 -45
  312. package/dist/tui/index.js.map +1 -1
  313. package/dist/tui/src/repl.d.ts +4 -1
  314. package/dist/tui/src/repl.d.ts.map +1 -1
  315. package/dist/types/index.js +1 -1
  316. package/dist/types/manifests.js +1 -1
  317. package/dist/types/src/events.d.ts +7 -4
  318. package/dist/types/src/events.d.ts.map +1 -1
  319. package/dist/types/src/manifests/index.d.ts +1 -1
  320. package/dist/types/src/manifests/index.d.ts.map +1 -1
  321. package/dist/types/src/manifests/scaffold-body.d.ts +8 -0
  322. package/dist/types/src/manifests/scaffold-body.d.ts.map +1 -1
  323. package/dist/types/src/manifests/skill.d.ts +0 -2
  324. package/dist/types/src/manifests/skill.d.ts.map +1 -1
  325. package/dist/workspace-plugin/adapters/mcp.js +29 -29
  326. package/dist/workspace-plugin/adapters/omp.js +32 -18
  327. package/dist/workspace-plugin/adapters/omp.js.map +1 -1
  328. package/dist/workspace-plugin/index.js +1 -1
  329. package/dist/workspace-plugin/src/adapters/claude-code.d.ts +1 -1
  330. package/dist/workspace-plugin/src/adapters/omp.d.ts +8 -5
  331. package/dist/workspace-plugin/src/adapters/omp.d.ts.map +1 -1
  332. package/dist/workspace-plugin/src/plugin.d.ts +7 -1
  333. package/dist/workspace-plugin/src/plugin.d.ts.map +1 -1
  334. package/package.json +1 -1
  335. package/dist/chunk-5CE6J4DB.js.map +0 -1
  336. package/dist/chunk-6GSE63K2.js.map +0 -1
  337. package/dist/chunk-72KZJE3G.js.map +0 -1
  338. package/dist/chunk-CQFVKN6S.js.map +0 -1
  339. package/dist/chunk-D3PU3C6F.js.map +0 -1
  340. package/dist/chunk-D54T2F54.js.map +0 -1
  341. package/dist/chunk-D5WTOVLG.js.map +0 -1
  342. package/dist/chunk-DADAZLFW.js.map +0 -1
  343. package/dist/chunk-DQOAPR4M.js.map +0 -1
  344. package/dist/chunk-ES6ARJPQ.js.map +0 -1
  345. package/dist/chunk-FSLVMZXR.js.map +0 -1
  346. package/dist/chunk-FSSRBWYL.js.map +0 -1
  347. package/dist/chunk-FT4ZHLYR.js.map +0 -1
  348. package/dist/chunk-FWAJUWXQ.js.map +0 -1
  349. package/dist/chunk-H7R7R5BN.js.map +0 -1
  350. package/dist/chunk-HUKUYWBJ.js.map +0 -1
  351. package/dist/chunk-L6UMSKDF.js.map +0 -1
  352. package/dist/chunk-NSNM2ZXF.js.map +0 -1
  353. package/dist/chunk-OHNNCXMB.js.map +0 -1
  354. package/dist/chunk-OJHPG6HK.js.map +0 -1
  355. package/dist/chunk-PIC23DDE.js.map +0 -1
  356. package/dist/chunk-SMUIYYCH.js.map +0 -1
  357. package/dist/chunk-TKI7YDWE.js.map +0 -1
  358. package/dist/chunk-VJ2DZLDM.js.map +0 -1
  359. package/dist/chunk-X5O56UO4.js.map +0 -1
  360. package/dist/chunk-YK3XLEQJ.js.map +0 -1
  361. package/dist/chunk-YW2BNDSE.js.map +0 -1
  362. package/dist/chunk-ZVZTCDUN.js.map +0 -1
  363. package/dist/ensure-sources-R6AHZ7RV.js.map +0 -1
  364. package/dist/library-publish-GHPVY42Y.js.map +0 -1
  365. package/dist/open-library-YSUGNP36.js +0 -40
  366. package/dist/open-registry-YPRQDUMK.js +0 -32
  367. package/dist/paths-P55DTBEK.js +0 -22
  368. package/dist/plugin-store-IPIBZRBX.js +0 -23
  369. package/dist/setup-MFPEQS2I.js.map +0 -1
package/dist/cli/index.js CHANGED
@@ -1,89 +1,89 @@
1
1
  #!/usr/bin/env node
2
- import { storeNotInstallableReason } from '../chunk-WXWQNJCT.js';
3
- import { makeProvidersCommand, loadRegistryView, addProviderEntry, ProviderRegistryWriteError } from '../chunk-SAGBVBY2.js';
4
- import { makeInstallCommand, makeCheckCommand, makeCleanCommand, reportRewritten, reportReplaced, reportRelocked, reportMoved, reportStoreNotChecked, globalProblems, editedConventionFiles, supportsInstallManifest, REF_HINT, reportInstalledSoftDeps } from '../chunk-SMUIYYCH.js';
2
+ import { storeNotInstallableReason } from '../chunk-PUK7TQT4.js';
3
+ import { makeProvidersCommand, loadRegistryView, addProviderEntry, ProviderRegistryWriteError } from '../chunk-FHIMIXT3.js';
4
+ import { makeInstallCommand, makeCheckCommand, makeCleanCommand, reportRewritten, reportReplaced, reportRelocked, reportMoved, reportStoreNotChecked, globalProblems, editedConventionFiles, supportsInstallManifest, REF_HINT, reportInstalledSoftDeps } from '../chunk-EZVZDCHZ.js';
5
5
  import { createSpinner } from '../chunk-NESV47MF.js';
6
- import { makeSourceCommand, syncProjectSources, divergedSourceClones } from '../chunk-OHNNCXMB.js';
7
- import { loadDeclaredPlugins } from '../chunk-HUKUYWBJ.js';
8
- import { makeValidateCommand, scanIdentities, isRecord } from '../chunk-FWAJUWXQ.js';
9
- import { getStoreConfig, storeFetch, isStoreAuthenticated, getStoreToken } from '../chunk-Y25V2MW2.js';
10
- import { deviceLogin, loadStoreAuthConfig, logout, hasStoredAuth, exitOnLibrarySymlinks, resolveLibraryPublisherDetailed, getStoreIdentity, warnLibraryNameFallback, indexLibrary, warnIgnoredDomainFiles, removedDomainOption, rejectRemovedDomainOption, requireValidPublisherOrExit, exitOnManifestPublisherProblems, registerLibraryAsset, DOMAIN_REMOVED_HINT, reportLibrarySymlinks, checkAsset, manifestPublisherProblems, exitOnManifestRootProblems, manifestRequiresProblems, composeRefContext, registeredAssetKeys, checkAssetFile, assetEntryRef, duplicateAssetMessage, unresolvedManifestDependencies, warnLegacyBundleFiles, checkComposeKinds } from '../chunk-5CE6J4DB.js';
11
- import { openCatalogSource, LocalCatalogDisabledError, openLibraryManager, openLibrary } from '../chunk-J4RRH2NP.js';
12
- import { AI_RESOURCES } from '../chunk-WKEBNB5S.js';
13
- import { logErr, S, logOk, logInfo, logWarn, TARGET_DEFAULT_HINT, parseHarnessFilter, requireProjectConfig, deferredWarnings, warnPlaceholderBodies, warnFilesOnlyDelegates, reportLegacyOmpCopies, logNoProject, warnLegacyClaudeCopies, kindColorPad, kindColor, colorRef, formatSoftDepSection, bareSoftDepName, formatSoftDepHint, formatRelativeTime, formatSoftDepRemovePreview, formatSoftDepAddPreview, fitWidth, KIND_COL_WIDTH } from '../chunk-VJ2DZLDM.js';
14
- import { getKindRegistry, getKnownKinds } from '../chunk-2SKPPIV7.js';
6
+ import { makeSourceCommand, syncProjectSources, divergedSourceClones } from '../chunk-JY7GVNYU.js';
7
+ import { loadDeclaredPlugins } from '../chunk-JYWW32JI.js';
8
+ import { makeValidateCommand, scanIdentities, isRecord } from '../chunk-24AXETE3.js';
9
+ import { getStoreConfig, storeFetch, isStoreAuthenticated, getStoreToken } from '../chunk-E5YNGE3I.js';
10
+ import { deviceLogin, loadStoreAuthConfig, logout, hasStoredAuth, exitOnLibrarySymlinks, resolveLibraryPublisherDetailed, getStoreIdentity, warnLibraryNameFallback, indexLibrary, warnIgnoredDomainFiles, removedDomainOption, rejectRemovedDomainOption, requireValidPublisherOrExit, exitOnManifestPublisherProblems, registerLibraryAsset, DOMAIN_REMOVED_HINT, reportLibrarySymlinks, checkAsset, manifestPublisherProblems, exitOnManifestRootProblems, manifestRequiresProblems, composeRefContext, registeredAssetKeys, checkAssetFile, assetEntryRef, duplicateAssetMessage, unresolvedManifestDependencies, warnLegacyBundleFiles, checkComposeKinds } from '../chunk-DA2MCPFN.js';
11
+ import { openCatalogSource, LocalCatalogDisabledError, openLibraryManager, openLibrary } from '../chunk-FV2MSBVA.js';
12
+ import { AI_RESOURCES } from '../chunk-CKBCX3HQ.js';
13
+ import { logErr, S, logOk, logInfo, logWarn, TARGET_DEFAULT_HINT, parseHarnessFilter, requireProjectConfig, deferredWarnings, warnPlaceholderBodies, warnFilesOnlyDelegates, reportLegacyOmpCopies, logNoProject, warnLegacyClaudeCopies, kindColorPad, kindColor, colorRef, formatSoftDepSection, bareSoftDepName, formatSoftDepHint, formatRelativeTime, formatSoftDepRemovePreview, formatSoftDepAddPreview, fitWidth, KIND_COL_WIDTH } from '../chunk-K5LVU2MN.js';
14
+ import { getKindRegistry, getKnownKinds } from '../chunk-WJLYL6RY.js';
15
15
  import { LocalSecretsProvider } from '../chunk-ILFGVSTJ.js';
16
- import { resolveInstanceAgentDir, instanceSessionOverrides, runAgentChat, isCompositionError, resolveSessionId, loadSessionById, loadSession, listSessions, setCurrentSession, deleteSession, clearSession, loadAgentManifest, hashAgentFiles, createCompositionContentSource, compileComposition, manifestModelForDriver, instanceForSession, resolveAgentInstance, describeComposition, MarkdownStreamer, createFinalTextFallback } from '../chunk-CQFVKN6S.js';
17
- import { buildClaudePluginFiles } from '../chunk-DQOAPR4M.js';
18
- import '../chunk-A7AZ3RL5.js';
19
- import '../chunk-TADJCATD.js';
20
- import '../chunk-5DCOG5B5.js';
16
+ import { resolveInstanceAgentDir, instanceSessionOverrides, runAgentChat, isCompositionError, resolveSessionId, loadSessionById, loadSession, listSessions, setCurrentSession, deleteSession, clearSession, loadAgentManifest, hashAgentFiles, createCompositionContentSource, compileComposition, manifestModelForDriver, instanceForSession, resolveAgentInstance, describeComposition, MarkdownStreamer, createFinalTextFallback } from '../chunk-V4RV2NJF.js';
17
+ import { buildClaudePluginFiles } from '../chunk-ZNN7ONJX.js';
18
+ import '../chunk-JJ7LDI3S.js';
19
+ import '../chunk-RO2BPKXK.js';
20
+ import '../chunk-RD6N2D7I.js';
21
21
  import '../chunk-R6O6YWU7.js';
22
- import '../chunk-46IRZJV4.js';
23
- import '../chunk-PGZDSDOB.js';
22
+ import '../chunk-CD7SVH6W.js';
23
+ import '../chunk-6Z5KTFJT.js';
24
24
  import '../chunk-4ZTPYIBE.js';
25
25
  import '../chunk-X5YPJV4N.js';
26
- import '../chunk-72KZJE3G.js';
26
+ import '../chunk-PZ6NF5DE.js';
27
27
  import '../chunk-O7SG5PC2.js';
28
28
  import '../chunk-7QBNJTTQ.js';
29
29
  import '../chunk-O2SYFJWP.js';
30
- import '../chunk-L6UMSKDF.js';
30
+ import '../chunk-LW7ZI6EQ.js';
31
31
  import '../chunk-32NA4TVC.js';
32
32
  import '../chunk-W3UDISS2.js';
33
33
  import '../chunk-PHRNUTSG.js';
34
- import '../chunk-TXGVG7VH.js';
35
- import { runFlow, resumeFlow } from '../chunk-E634MBP6.js';
34
+ import '../chunk-GRKU3S5V.js';
35
+ import { runFlow, resumeFlow } from '../chunk-ODDATIII.js';
36
36
  import '../chunk-4R6DROGN.js';
37
- import { parseSkillRequirements, validateRequirements } from '../chunk-D5REDKVU.js';
38
- import '../chunk-AP24HESN.js';
39
- import '../chunk-ISHJITXJ.js';
40
- import '../chunk-OJHPG6HK.js';
41
- import '../chunk-ZIW34FGO.js';
42
- import '../chunk-FSSRBWYL.js';
43
- import { checkDriverModel } from '../chunk-TKI7YDWE.js';
44
- import '../chunk-NSNM2ZXF.js';
45
- import '../chunk-6RTEUWXX.js';
37
+ import { parseSkillRequirements, validateRequirements } from '../chunk-FKU57Q5Q.js';
38
+ import '../chunk-H6UVIKQ2.js';
39
+ import '../chunk-EELKR2WP.js';
40
+ import '../chunk-YIF2IJUA.js';
41
+ import '../chunk-WJCQFNF6.js';
42
+ import { checkModelProvider, checkDriverModel } from '../chunk-L6IFN6ER.js';
43
+ import '../chunk-3KMREAR2.js';
44
+ import '../chunk-6HK6RUFM.js';
46
45
  import '../chunk-LOO5CB5M.js';
47
- import '../chunk-PW3TYWOI.js';
48
- import '../chunk-RTNWU2UD.js';
46
+ import '../chunk-AJ7EGIFR.js';
47
+ import '../chunk-L5XUEC2W.js';
49
48
  import '../chunk-B4X2N7JQ.js';
50
49
  import '../chunk-YROR332M.js';
51
- import '../chunk-HG52NGAV.js';
52
- import { listDrivers, getProviderPreset, AI_PROVIDER_PRESETS } from '../chunk-6Q7NKTDG.js';
50
+ import '../chunk-YU6AURJY.js';
51
+ import { listDrivers, getProviderPreset, AI_PROVIDER_PRESETS } from '../chunk-X54YR4AW.js';
53
52
  import '../chunk-6E6PKKAD.js';
54
53
  import '../chunk-IFGTRL2I.js';
55
- import { projectAiAssetsRoots, loadFlow, loadAllFlowEntries, findFlowFileInRoots } from '../chunk-SPV2CXJ3.js';
56
- import '../chunk-LNFKL23K.js';
57
- import '../chunk-X3RMRJNR.js';
54
+ import { projectAiAssetsRoots, loadFlow, loadAllFlowEntries, findFlowFileInRoots } from '../chunk-D6UBEYQH.js';
58
55
  import '../chunk-M3WPBTGJ.js';
59
56
  import { nodeLabel, nodeSkillAsset, nodeIsInert, nodeIsOptional, nodeRunKind } from '../chunk-7RGTAEG6.js';
60
- import '../chunk-NUELZWCF.js';
61
- import '../chunk-D5WTOVLG.js';
62
- import { AssetManager, parseRefTolerant, MissingManifestError, normalizeRepoUrl, FACTORY_SOURCE_URL, parseCanonicalLockKey } from '../chunk-DADAZLFW.js';
63
- import { CatalogHttpError, libraryDirMissing, missingLibraryDirMessage, cloneOrInitGitRepo, trackOriginBranch, stampManifestPublisher, isGitRepo, ensureGitRepo, conflictingAssetRoot, setManifestPublisher, LIBRARY_OWNERSHIPS, assertManifestEditable, installLibraryAsset, getStoreManifestsDir, assertValidLibraryName, syncManifestWithDisk, storeManifestFile, getDefaultValue, isSecretPlaceholder } from '../chunk-D3PU3C6F.js';
64
- import { flowFileNameError, SEMVER_RE } from '../chunk-ES6ARJPQ.js';
65
- import '../chunk-SXWGLW23.js';
57
+ import '../chunk-Y56YIT6J.js';
58
+ import { LibraryEntryError, AssetManager, parseRefTolerant, MissingManifestError, normalizeRepoUrl, FACTORY_SOURCE_URL, parseCanonicalLockKey } from '../chunk-TDQ2ERCM.js';
59
+ import { CatalogHttpError, libraryDirMissing, missingLibraryDirMessage, cloneOrInitGitRepo, trackOriginBranch, stampManifestPublisher, isGitRepo, ensureGitRepo, conflictingAssetRoot, setManifestPublisher, LIBRARY_OWNERSHIPS, assertManifestEditable, installLibraryAsset, getStoreManifestsDir, assertValidLibraryName, unparsableAssetFiles, syncManifestWithDisk, storeManifestFile, getDefaultValue, isSecretPlaceholder } from '../chunk-VKPBUPH7.js';
60
+ import { flowFileNameError, SEMVER_RE } from '../chunk-HPVMTX6M.js';
61
+ import '../chunk-U2FI547Z.js';
66
62
  import '../chunk-BFMYYNDT.js';
67
63
  import '../chunk-3TXEJN4W.js';
68
- import { installTargetOf, SCAFFOLD_KINDS } from '../chunk-FSLVMZXR.js';
64
+ import '../chunk-ISHJITXJ.js';
65
+ import '../chunk-LNFKL23K.js';
66
+ import '../chunk-X3RMRJNR.js';
67
+ import '../chunk-NUELZWCF.js';
68
+ import { installTargetOf, SCAFFOLD_KINDS } from '../chunk-YZ3N7IUU.js';
69
69
  import '../chunk-NOA6EJXE.js';
70
70
  import '../chunk-KTBKW2FI.js';
71
71
  import '../chunk-UQ6LFBPZ.js';
72
- import '../chunk-6GSE63K2.js';
73
- import { effectiveComposes, validatePreset, validateAgent, composeSlotDiagnostics, agentDeprecationDiagnostics, SLOT_ID_PATTERN } from '../chunk-YK3XLEQJ.js';
74
- import { loadSettings, globalSettingsPath, resolveSettings, projectSettingsPath, saveSettings, WorkspaceYamlEditor, resolveLibraryDir, checkAgentSkillConformance, resolveSettingsWithSources, readLock, globalInstallDir, GLOBAL_INSTALL_DIR_NAME, aiResourceRoots, workspaceProviderRegistryPath, userProviderRegistryPath, loadProviderRegistryFile } from '../chunk-PIC23DDE.js';
72
+ import '../chunk-SRNCN4X2.js';
73
+ import { effectiveComposes, validatePreset, validateAgent, composeSlotDiagnostics, agentDeprecationDiagnostics, SLOT_ID_PATTERN } from '../chunk-CKNIYIV2.js';
74
+ import { loadSettings, globalSettingsPath, resolveSettings, projectSettingsPath, saveSettings, WorkspaceYamlEditor, resolveLibraryDir, checkAgentSkillConformance, resolveSettingsWithSources, readLock, globalInstallDir, GLOBAL_INSTALL_DIR_NAME, aiResourceRoots, workspaceProviderRegistryPath, userProviderRegistryPath, loadProviderRegistryFile } from '../chunk-T2TQAH2X.js';
75
75
  import '../chunk-4GY63JU6.js';
76
- import { factoryAssetRoots } from '../chunk-5RDZ5JHH.js';
77
- import { deployedDir } from '../chunk-D54T2F54.js';
76
+ import { factoryAssetRoots } from '../chunk-KC6HGWXN.js';
77
+ import { deployedDir } from '../chunk-5TBFN46Z.js';
78
78
  import { DEFAULT_DRIVER_ID, DRIVER_DEFAULTS } from '../chunk-5BEFNLOR.js';
79
79
  import { findKindDirs } from '../chunk-A2ULN3KX.js';
80
- import { SourceEntryError, resolveSkWorkspaceConfig, sourceCacheKey, getGlobalCacheDir, resolveAgentDir, AgentRefResolutionError, resolveAgentDefinitionDir, effectiveAgentInstances, matchPin, coerceVersion, loadSkWorkspaceConfig, isWorkspaceConfigFilename } from '../chunk-ZVZTCDUN.js';
80
+ import { SourceEntryError, resolveSkWorkspaceConfig, sourceCacheKey, getGlobalCacheDir, resolveAgentDir, AgentRefResolutionError, resolveAgentDefinitionDir, effectiveAgentInstances, matchPin, coerceVersion, loadSkWorkspaceConfig, isWorkspaceConfigFilename } from '../chunk-2NOLF7B2.js';
81
81
  import { globalCacheRoot, globalSkaileDir, userConfigPath } from '../chunk-L5VSIPQD.js';
82
- import { SUPPORTED_DRIVER_TARGETS, driverTargetForDriver } from '../chunk-IG5LZ3WU.js';
83
- import { SKAILE_MANIFEST_FILENAME, loadSkPublishManifest, decodeSkaileManifest, LIBRARY_GITIGNORE, librarySymlinkMessage, isNonAssetPath, isNonAssetDir, encodeSkaileManifest } from '../chunk-H7R7R5BN.js';
82
+ import { DRIVER_TARGETS, SUPPORTED_DRIVER_TARGETS, driverTargetForDriver } from '../chunk-IG5LZ3WU.js';
83
+ import { SKAILE_MANIFEST_FILENAME, loadSkPublishManifest, decodeSkaileManifest, LIBRARY_GITIGNORE, librarySymlinkMessage, isNonAssetPath, isNonAssetDir, encodeSkaileManifest } from '../chunk-CKICWXMU.js';
84
84
  import { pluginTitle } from '../chunk-RVRB27AN.js';
85
- import { dedupeRequirements, parseFrontmatter, scanDirectory, parseRequires } from '../chunk-YW2BNDSE.js';
86
- import { parseAssetRef, isValidPublisher, PUBLISHER_HINT, isValidAssetName, ASSET_NAME_HINT, depToStr, assetRefToStr, slugifyAssetName, parseAssetRefLoose } from '../chunk-FT4ZHLYR.js';
85
+ import { dedupeRequirements, parseFrontmatter, scanDirectory, parseRequires } from '../chunk-GOCWM7FN.js';
86
+ import { parseAssetRef, isValidPublisher, PUBLISHER_HINT, isValidAssetName, ASSET_NAME_HINT, depToStr, assetRefToStr, slugifyAssetName, parseAssetRefLoose } from '../chunk-WDXZA7QW.js';
87
87
  import { portableSpawn, portableSpawnSync } from '../chunk-ICSCSM5D.js';
88
88
  import { openSqlite } from '../chunk-DKXNKFKP.js';
89
89
  import { parseModelRef, resolveEntryBaseUrl } from '../chunk-MJHSLODD.js';
@@ -104,9 +104,9 @@ import pc5 from 'picocolors';
104
104
  import { stringify, parse, parseDocument, isMap, isScalar, isSeq } from 'yaml';
105
105
  import * as readline from 'readline';
106
106
  import { createInterface } from 'readline';
107
+ import { execSync, spawnSync } from 'child_process';
107
108
  import fs5 from 'fs/promises';
108
109
  import { parse as parse$1, stringify as stringify$1 } from 'smol-toml';
109
- import { execSync, spawnSync } from 'child_process';
110
110
  import * as readline2 from 'readline/promises';
111
111
  import { createTRPCUntypedClient, httpLink, httpSubscriptionLink } from '@trpc/client';
112
112
 
@@ -231,7 +231,7 @@ async function runSearch(kind, query, opts) {
231
231
  }
232
232
  }
233
233
  async function searchIndex(query, kind) {
234
- const { openLibrary: openLibrary2 } = await import('../open-library-YSUGNP36.js');
234
+ const { openLibrary: openLibrary2 } = await import('../open-library-JP5TC5UX.js');
235
235
  const library = await openLibrary2();
236
236
  try {
237
237
  const { libraryDirMissing: libraryDirMissing2 } = await import('../library/index.js');
@@ -383,14 +383,14 @@ async function expandCompetingOrigins(entries, projectDir) {
383
383
  }
384
384
  async function searchLocal(query, kind, opts, showStore, airGapped) {
385
385
  const projectDir = path18__default.resolve(opts.projectDir);
386
- const { restoreSourceReaders } = await import('../source-4QVRD5NV.js');
386
+ const { restoreSourceReaders } = await import('../source-FPLHY3DP.js');
387
387
  for (const name of await restoreSourceReaders(projectDir)) {
388
388
  logInfo(`Re-registered source "${name}" (its library entry was removed elsewhere).`);
389
389
  }
390
390
  const factory = await searchFactory(projectDir, query, kind);
391
391
  let entries = unionEntries(await searchIndex(query, kind), factory);
392
392
  if (entries.length === 0 && !query && !kind && !airGapped) {
393
- const { autoSyncForSearch } = await import('../source-4QVRD5NV.js');
393
+ const { autoSyncForSearch } = await import('../source-FPLHY3DP.js');
394
394
  if (await autoSyncForSearch(projectDir)) {
395
395
  entries = unionEntries(await searchIndex(query, kind), factory);
396
396
  }
@@ -504,7 +504,7 @@ async function searchStore(query, kind, opts, airGapped) {
504
504
  logInfo("air-gapped (cache_ttl: 0) \u2014 local sources only");
505
505
  return;
506
506
  }
507
- const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-YSUGNP36.js');
507
+ const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-JP5TC5UX.js');
508
508
  try {
509
509
  const remote = await openCatalogSource2({ projectDir: path18__default.resolve(opts.projectDir) });
510
510
  const assets = await remote.listAssets(kind ? { kind } : {});
@@ -622,7 +622,7 @@ function makeAddCommand() {
622
622
  ).option("--no-soft-deps", "skip the soft-dep prompt entirely (don't add, don't report)").option(
623
623
  "--force",
624
624
  "overwrite a deployed folder that no lock entry owns (a hand-made skill of the same name)"
625
- ).action(async (ref, opts) => {
625
+ ).option("--verbose", "print the full `exists in N libraries` warning for every asset").action(async (ref, opts) => {
626
626
  if (opts.withSoftDeps && opts.softDeps === false) {
627
627
  logErr("--with-soft-deps and --no-soft-deps are mutually exclusive.");
628
628
  process.exit(1);
@@ -637,8 +637,9 @@ function makeAddCommand() {
637
637
  global: opts.global || harnesses !== void 0,
638
638
  harnesses,
639
639
  driverTarget: opts.target,
640
- onLibraryCollision: (msg) => {
641
- collisionKeys.push(msg.split(" exists in ")[0]);
640
+ verboseCollisions: opts.verbose === true,
641
+ onLibraryCollision: (msg, keys) => {
642
+ collisionKeys.push(...keys ?? [msg.split(" exists in ")[0]]);
642
643
  warnings.push(msg);
643
644
  }
644
645
  });
@@ -647,30 +648,26 @@ function makeAddCommand() {
647
648
  try {
648
649
  const libraryOf = /* @__PURE__ */ new Map();
649
650
  const placeholderBodies = [];
651
+ const placeholderDescriptions = [];
650
652
  let presets = [];
651
- const skippedLinks = /* @__PURE__ */ new Set();
652
- const skippedEnv = /* @__PURE__ */ new Set();
653
+ const skippedSecrets = /* @__PURE__ */ new Set();
653
654
  const added = await am2.add(ref, {
654
655
  link: opts.link,
655
656
  force: opts.force,
656
657
  onLibraryOrigin: (deployedRef, library) => libraryOf.set(deployedRef, library),
657
658
  onPlaceholderBody: (deployedRef) => placeholderBodies.push(deployedRef),
659
+ onPlaceholderDescription: (deployedRef) => placeholderDescriptions.push(deployedRef),
658
660
  onLibraryMoved: (m) => warnings.push(`${m.ref} moved from ${m.from} to ${m.to}`),
659
661
  onPresets: (expanded) => {
660
662
  presets = expanded;
661
663
  },
662
- // One line per dropped link, however many harnesses the asset is deployed into.
663
- onSkippedSymlink: (_assetRef, linkPath) => {
664
- if (skippedLinks.has(linkPath)) return;
665
- skippedLinks.add(linkPath);
666
- warnings.push(`skipped symlink ${linkPath}`);
667
- },
668
- // A `.env` in an asset root is never deployed or hashed: say so once per file.
669
- onEnvFile: (_assetRef, envPath) => {
670
- if (skippedEnv.has(envPath)) return;
671
- skippedEnv.add(envPath);
664
+ // A secret in an asset root (`.env`, a private key, a credential file) is never
665
+ // deployed or hashed: say so once per file.
666
+ onSecretFile: (_assetRef, secretPath) => {
667
+ if (skippedSecrets.has(secretPath)) return;
668
+ skippedSecrets.add(secretPath);
672
669
  warnings.push(
673
- `${envPath} is a .env file: it is not deployed or hashed with the asset. Keep secrets out of an asset root`
670
+ `${secretPath} looks like a secret: it is not deployed or hashed with the asset. Keep secrets out of an asset root`
674
671
  );
675
672
  }
676
673
  });
@@ -701,7 +698,7 @@ function makeAddCommand() {
701
698
  const library = libraryOf.get(a);
702
699
  logOk(library ? `${a} (library ${library})` : a);
703
700
  }
704
- warnPlaceholderBodies(placeholderBodies);
701
+ warnPlaceholderBodies(placeholderBodies, placeholderDescriptions);
705
702
  if (!am2.global) warnFilesOnlyDelegates(am2.projectDir, am2.driverTarget);
706
703
  if (am2.global) {
707
704
  for (const a of added) {
@@ -812,7 +809,7 @@ function makeRemoveCommand() {
812
809
  }
813
810
  function stateLabel(s) {
814
811
  if (s === "installed") return S.ok(s);
815
- if (s === "drift") return S.warn(s);
812
+ if (s === "drift" || s === "skipped") return S.warn(s);
816
813
  if (s === "invalid") return S.err(s);
817
814
  return S.dim(s);
818
815
  }
@@ -869,6 +866,9 @@ function makeListCommand() {
869
866
  const drift = declared.filter((e) => e.state === "drift").length;
870
867
  if (drift > 0)
871
868
  logInfo(`${drift} with drift \u2014 run ${S.cmd("skaile install")} to materialize.`);
869
+ for (const e of declared.filter((d) => d.state === "skipped")) {
870
+ logWarn(`${e.kind}:${e.name} is skipped: ${e.reason ?? "not written to the MCP config"}`);
871
+ }
872
872
  const invalid = declared.filter((e) => e.state === "invalid").length;
873
873
  if (invalid > 0)
874
874
  logInfo(`${invalid} invalid \u2014 fix the ${S.cmd("skaile.yaml")} dependencies entry.`);
@@ -989,7 +989,7 @@ async function resolveInfoEntry(am2, ref, opts) {
989
989
  return { entry: match ?? deployed };
990
990
  }
991
991
  const lookup = opts.storeLookup ?? (async (filter) => {
992
- const { resolveCatalogSource } = await import('../open-library-YSUGNP36.js');
992
+ const { resolveCatalogSource } = await import('../open-library-JP5TC5UX.js');
993
993
  const { source, close } = await resolveCatalogSource({ projectDir: opts.projectDir });
994
994
  try {
995
995
  return await source.listAssets(filter);
@@ -1005,7 +1005,7 @@ async function resolveInfoEntry(am2, ref, opts) {
1005
1005
  );
1006
1006
  return { entry: hit ? catalogAssetToEntry(hit) : null };
1007
1007
  } catch (err) {
1008
- const { LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-YSUGNP36.js');
1008
+ const { LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-JP5TC5UX.js');
1009
1009
  const storeNote = err instanceof Error ? err.message : String(err);
1010
1010
  const disabled = err instanceof LocalCatalogDisabledError2 || /catalog\.url/i.test(storeNote);
1011
1011
  return { entry: null, storeNote, ...disabled ? { storeDisabled: true } : {} };
@@ -1045,6 +1045,12 @@ function makeInfoCommand() {
1045
1045
  if (entry.description) console.log(` description: ${entry.description}`);
1046
1046
  if (entry.publisher) console.log(` repository: ${S.dim(entry.publisher)}`);
1047
1047
  console.log(` source: ${S.dim(entry.source)}`);
1048
+ if (entry.kind === "mcp-server") {
1049
+ const skipped = (await am2.mcpNotices()).find(
1050
+ (n) => n.kind === "skipped" && (n.id === entry.name || n.id.endsWith(`/${entry.name}`))
1051
+ );
1052
+ if (skipped) console.log(` state: ${S.warn(`skipped: ${skipped.reason}`)}`);
1053
+ }
1048
1054
  const infoOrigins = await competingOriginsOf(am2, entry);
1049
1055
  if (infoOrigins) {
1050
1056
  const [first, ...rest] = infoOrigins;
@@ -1112,10 +1118,13 @@ function makeDoctorCommand() {
1112
1118
  });
1113
1119
  const { gaps } = await am2.projectState();
1114
1120
  const edited = await editedConventionFiles(path18__default.resolve(opts.projectDir));
1121
+ const notices = await am2.mcpNotices();
1115
1122
  if (gaps.length === 0 && edited.length === 0) {
1116
1123
  logOk("No missing dependencies.");
1124
+ for (const n of notices) logWarn(n.text);
1117
1125
  return;
1118
1126
  }
1127
+ for (const n of notices) logWarn(n.text);
1119
1128
  process.exitCode = 1;
1120
1129
  for (const e of edited) logErr(e);
1121
1130
  for (const g of gaps) if (g.type !== "requires") logErr(g.message);
@@ -1353,9 +1362,9 @@ function makeAssetCommand() {
1353
1362
  publisher: opts.publisher
1354
1363
  });
1355
1364
  if (target.backend === "git" && opts.commit) {
1356
- const { spawnSync: spawnSync2 } = await import('child_process');
1357
- spawnSync2("git", ["add", "--", destDir], { cwd: target.path, stdio: "inherit" });
1358
- const r = spawnSync2("git", ["commit", "-m", `skaile: import ${norm.name}`], {
1365
+ const { spawnSync: spawnSync3 } = await import('child_process');
1366
+ spawnSync3("git", ["add", "--", destDir], { cwd: target.path, stdio: "inherit" });
1367
+ const r = spawnSync3("git", ["commit", "-m", `skaile: import ${norm.name}`], {
1359
1368
  cwd: target.path,
1360
1369
  stdio: "inherit"
1361
1370
  });
@@ -1427,9 +1436,9 @@ function makeAssetCommand() {
1427
1436
  break;
1428
1437
  }
1429
1438
  if (target.backend === "git" && opts.commit) {
1430
- const { spawnSync: spawnSync2 } = await import('child_process');
1431
- spawnSync2("git", ["add", "--", destPath], { cwd: target.path, stdio: "inherit" });
1432
- const r = spawnSync2("git", ["commit", "-m", `skaile: migrate ${basename3}`], {
1439
+ const { spawnSync: spawnSync3 } = await import('child_process');
1440
+ spawnSync3("git", ["add", "--", destPath], { cwd: target.path, stdio: "inherit" });
1441
+ const r = spawnSync3("git", ["commit", "-m", `skaile: migrate ${basename3}`], {
1433
1442
  cwd: target.path,
1434
1443
  stdio: "inherit"
1435
1444
  });
@@ -1505,6 +1514,15 @@ function makeAssetCommand() {
1505
1514
  try {
1506
1515
  const def = await resolveDefByRef(library, ref);
1507
1516
  if (!def) {
1517
+ try {
1518
+ await new AssetManager({
1519
+ registry: getKindRegistry(),
1520
+ projectDir: process.cwd()
1521
+ }).info(ref);
1522
+ } catch (err) {
1523
+ logErr(err instanceof Error ? err.message : String(err));
1524
+ process.exit(1);
1525
+ }
1508
1526
  logErr(`Not found: ${ref}`);
1509
1527
  process.exit(1);
1510
1528
  }
@@ -1685,7 +1703,7 @@ function makeCatalogCommand() {
1685
1703
  return catalog;
1686
1704
  }
1687
1705
  async function runLocalCatalogTest(projectDir) {
1688
- const { resolveCatalogSource } = await import('../open-library-YSUGNP36.js');
1706
+ const { resolveCatalogSource } = await import('../open-library-JP5TC5UX.js');
1689
1707
  let resolved;
1690
1708
  try {
1691
1709
  resolved = await resolveCatalogSource({ projectDir });
@@ -1855,7 +1873,7 @@ async function scanLibraryFlowEntries() {
1855
1873
  const { LocalIndex, resolveIndexPath, scanAuthoringLibraries } = await import('../library/index.js');
1856
1874
  const indexPath = resolveIndexPath();
1857
1875
  if (!existsSync(indexPath)) return entries;
1858
- const { getKindRegistry: getKindRegistry2 } = await import('../open-registry-YPRQDUMK.js');
1876
+ const { getKindRegistry: getKindRegistry2 } = await import('../open-registry-RBELV5YH.js');
1859
1877
  const index = new LocalIndex({ indexPath });
1860
1878
  try {
1861
1879
  for (const { assets } of await scanAuthoringLibraries(index, getKindRegistry2())) {
@@ -2196,18 +2214,17 @@ function makeConfigCommand() {
2196
2214
  process.exit(1);
2197
2215
  }
2198
2216
  }
2217
+ const projectDriver = key === "driver" ? resolveSkWorkspaceConfig(projectDir).agent_config?.default?.driver : void 0;
2199
2218
  const filePath = opts.global ? globalSettingsPath() : projectSettingsPath(projectDir);
2200
2219
  const existing = await loadSettings(filePath);
2201
2220
  await saveSettings({ ...existing, [key]: value }, filePath);
2202
2221
  logOk(`Set ${pc5.bold(key)} = ${value}`);
2203
2222
  console.log(S.dim(` \u2192 ${filePath}`));
2204
- if (key === "driver") {
2205
- const projectDriver = resolveSkWorkspaceConfig(projectDir).agent_config?.default?.driver;
2206
- if (projectDriver && projectDriver !== value) {
2207
- logWarn(
2208
- `skaile.yaml sets driver ${projectDriver}; a personal driver does not override the project harness. Change agent-config.default.driver in skaile.yaml to move the project.`
2209
- );
2210
- }
2223
+ if (projectDriver && projectDriver !== value) {
2224
+ logWarn(
2225
+ `skaile.yaml sets driver ${projectDriver}; a personal driver does not override the project harness.
2226
+ Remove this one again: skaile config unset driver${opts.global ? " --global" : ""}`
2227
+ );
2211
2228
  }
2212
2229
  if (key === "model") {
2213
2230
  const view = loadRegistryView({ projectDir });
@@ -2226,6 +2243,26 @@ function makeConfigCommand() {
2226
2243
  }
2227
2244
  }
2228
2245
  });
2246
+ cmd.command("unset <key>").description("Remove a personal config value (driver, model) from the settings file").option("--project-dir <path>", "Project directory").option("--global", "Remove from ~/.skaile/settings.json instead of project-local").action(async (key, opts) => {
2247
+ const projectDir = opts.projectDir ? path18__default.resolve(opts.projectDir) : process.cwd();
2248
+ if (!PERSONAL_KEYS.has(key)) {
2249
+ logErr(
2250
+ `'${key}' is not a personal setting that can be unset.
2251
+ Personal keys: ${[...PERSONAL_KEYS].join(", ")}`
2252
+ );
2253
+ process.exit(1);
2254
+ }
2255
+ const filePath = opts.global ? globalSettingsPath() : projectSettingsPath(projectDir);
2256
+ const existing = await loadSettings(filePath);
2257
+ if (!(key in existing)) {
2258
+ logInfo(`${key} is not set in ${filePath}`);
2259
+ return;
2260
+ }
2261
+ const { [key]: _removed, ...rest } = existing;
2262
+ await saveSettings(rest, filePath);
2263
+ logOk(`Unset ${pc5.bold(key)}`);
2264
+ console.log(S.dim(` \u2192 ${filePath}`));
2265
+ });
2229
2266
  cmd.action(() => showConfig({}));
2230
2267
  return cmd;
2231
2268
  }
@@ -2867,7 +2904,7 @@ async function ensureTargetsRegistered(projectDir) {
2867
2904
  const { resolveSkWorkspaceConfig: resolveSkWorkspaceConfig2 } = await import('../core/index.js');
2868
2905
  const config = resolveSkWorkspaceConfig2(projectDir);
2869
2906
  if (config.plugins && config.plugins.length > 0) {
2870
- const { ensurePluginsLoaded } = await import('../plugin-store-IPIBZRBX.js');
2907
+ const { ensurePluginsLoaded } = await import('../plugin-store-QOQDM24E.js');
2871
2908
  const result = await ensurePluginsLoaded(projectDir, config.plugins, pluginRegistry);
2872
2909
  for (const f of result.failed) logWarn(f.error);
2873
2910
  }
@@ -3176,14 +3213,27 @@ async function writeJson(p6, value) {
3176
3213
  await fs5.writeFile(p6, `${JSON.stringify(value, null, 2)}
3177
3214
  `);
3178
3215
  }
3179
- async function copyDir(src, dest) {
3180
- await fs5.mkdir(dest, { recursive: true });
3181
- const entries = await fs5.readdir(src, { withFileTypes: true });
3182
- for (const entry of entries) {
3183
- const srcPath = path18__default.join(src, entry.name);
3184
- const destPath = path18__default.join(dest, entry.name);
3185
- if (entry.isDirectory()) await copyDir(srcPath, destPath);
3186
- else await fs5.copyFile(srcPath, destPath);
3216
+ var SKIPPED_IN_SKILL = /* @__PURE__ */ new Set(["__pycache__", "node_modules", ".DS_Store"]);
3217
+ async function copyInstalledSkills(projectDir, skillsDir) {
3218
+ for (const entry of await fs5.readdir(skillsDir).catch(() => [])) {
3219
+ if (entry !== ".gitkeep")
3220
+ await fs5.rm(path18__default.join(skillsDir, entry), { recursive: true, force: true });
3221
+ }
3222
+ for (const root of [
3223
+ path18__default.join(projectDir, ".claude", "skills"),
3224
+ path18__default.join(projectDir, ".skaile", "skills")
3225
+ ]) {
3226
+ for (const name of await fs5.readdir(root).catch(() => [])) {
3227
+ const from = path18__default.join(root, name);
3228
+ if (!existsSync(path18__default.join(from, "SKILL.md"))) continue;
3229
+ const to = path18__default.join(skillsDir, name);
3230
+ await fs5.rm(to, { recursive: true, force: true });
3231
+ await fs5.cp(from, to, {
3232
+ recursive: true,
3233
+ dereference: true,
3234
+ filter: (src) => !SKIPPED_IN_SKILL.has(path18__default.basename(src))
3235
+ });
3236
+ }
3187
3237
  }
3188
3238
  }
3189
3239
  async function install(projectDir, opts) {
@@ -3204,17 +3254,20 @@ async function installMcp(projectDir) {
3204
3254
  const migrated = await removeSkaileMcpEntry(legacyMcpFilePath(projectDir));
3205
3255
  return { changed: !matches || migrated, method: "mcp", warning };
3206
3256
  }
3257
+ async function dropSymlink(p6) {
3258
+ const stat = await fs5.lstat(p6).catch(() => void 0);
3259
+ if (stat?.isSymbolicLink()) await fs5.unlink(p6);
3260
+ }
3207
3261
  async function installFullPlugin(projectDir) {
3208
3262
  const dir = pluginDir(projectDir);
3263
+ await dropSymlink(dir);
3264
+ await dropSymlink(path18__default.join(dir, "skills"));
3209
3265
  for (const [rel, content] of Object.entries(buildClaudePluginFiles())) {
3210
3266
  const dest = path18__default.join(dir, rel);
3211
3267
  await fs5.mkdir(path18__default.dirname(dest), { recursive: true });
3212
3268
  await fs5.writeFile(dest, content);
3213
3269
  }
3214
- const projectSkillsDir = path18__default.join(projectDir, ".skaile", "skills");
3215
- if (existsSync(projectSkillsDir)) {
3216
- await copyDir(projectSkillsDir, path18__default.join(dir, "skills"));
3217
- }
3270
+ await copyInstalledSkills(projectDir, path18__default.join(dir, "skills"));
3218
3271
  const settingsPath = path18__default.join(projectDir, ".claude", "settings.json");
3219
3272
  const settings = await readJsonStrict(settingsPath) ?? {};
3220
3273
  const plugins = settings.plugins ?? [];
@@ -3439,8 +3492,61 @@ async function trustProject(projectDir) {
3439
3492
  }
3440
3493
  await fs5.mkdir(path18__default.dirname(p6), { recursive: true });
3441
3494
  await fs5.writeFile(p6, next);
3495
+ await writeTrustMark(projectDir, true);
3442
3496
  return "added";
3443
3497
  }
3498
+ var TRUST_MARK = "codexTrustAdded";
3499
+ function stateFilePath(projectDir) {
3500
+ return path18__default.join(projectDir, ".skaile", "plugin-state.json");
3501
+ }
3502
+ async function readState(projectDir) {
3503
+ try {
3504
+ const parsed = JSON.parse(await fs5.readFile(stateFilePath(projectDir), "utf-8"));
3505
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
3506
+ return parsed;
3507
+ }
3508
+ } catch {
3509
+ }
3510
+ return {};
3511
+ }
3512
+ async function writeTrustMark(projectDir, on) {
3513
+ const state2 = await readState(projectDir);
3514
+ if (on) state2[TRUST_MARK] = true;
3515
+ else delete state2[TRUST_MARK];
3516
+ await fs5.mkdir(path18__default.dirname(stateFilePath(projectDir)), { recursive: true });
3517
+ await fs5.writeFile(stateFilePath(projectDir), JSON.stringify(state2, null, 2));
3518
+ }
3519
+ async function untrustProject(projectDir) {
3520
+ if ((await readState(projectDir))[TRUST_MARK] !== true) return "none";
3521
+ const { path: p6, raw, projects } = await readUserConfig();
3522
+ const kept = async () => {
3523
+ await writeTrustMark(projectDir, false);
3524
+ return "kept";
3525
+ };
3526
+ const { root } = await trustLevel(projects, projectDir);
3527
+ const parsed = projects[root];
3528
+ if (!parsed || Object.keys(parsed).length !== 1 || parsed.trust_level !== "trusted") {
3529
+ return kept();
3530
+ }
3531
+ const entry = `${await trustEntry(projectDir)}
3532
+ `;
3533
+ const at = raw.indexOf(entry);
3534
+ if (at === -1) return kept();
3535
+ const before = raw.slice(0, at).replace(/\n+$/, "");
3536
+ const after = raw.slice(at + entry.length).replace(/^\n+/, "");
3537
+ const next = [before, after].filter((s) => s !== "").join("\n\n");
3538
+ try {
3539
+ const left = parse$1(next).projects ?? {};
3540
+ if (root in left) return kept();
3541
+ } catch {
3542
+ return kept();
3543
+ }
3544
+ if (next === "") await fs5.unlink(p6);
3545
+ else await fs5.writeFile(p6, `${next}
3546
+ `);
3547
+ await writeTrustMark(projectDir, false);
3548
+ return "removed";
3549
+ }
3444
3550
  async function uninstall2(projectDir) {
3445
3551
  const p6 = configPath(projectDir);
3446
3552
  const cfg = await readConfig(p6);
@@ -3567,12 +3673,21 @@ async function installClaudeCode(projectDir, opts) {
3567
3673
  async function installOmp(projectDir) {
3568
3674
  const r = await install3(projectDir);
3569
3675
  if (r.changed) {
3570
- logOk(`Wrote ${S.cmd(".omp/extensions/skaile.ts")} (${r.method})`);
3676
+ logOk(`Wrote ${S.cmd(OMP_EXTENSION)} (${r.method}; no host path, commit it)`);
3571
3677
  } else {
3572
3678
  logInfo(`omp: already installed (${r.method})`);
3573
3679
  }
3680
+ await unignoreOmpExtension(projectDir);
3681
+ if (isGitIgnored(projectDir, OMP_EXTENSION)) {
3682
+ logWarn(
3683
+ `git ignores ${OMP_EXTENSION} (a global ignore file or .git/info/exclude); omp does not load an ignored extension. Remove that rule.`
3684
+ );
3685
+ }
3574
3686
  console.log(` ${S.dim("\u2192")} OMP auto-discovers extensions on next startup.`);
3575
3687
  }
3688
+ function isGitIgnored(projectDir, file) {
3689
+ return spawnSync("git", ["check-ignore", "-q", file], { cwd: projectDir, stdio: "ignore" }).status === 0;
3690
+ }
3576
3691
  async function installCodex(projectDir) {
3577
3692
  const r = await install2(projectDir);
3578
3693
  if (r.warning) logWarn(r.warning);
@@ -3634,6 +3749,14 @@ async function uninstallCodex(projectDir) {
3634
3749
  const r = await uninstall2(projectDir);
3635
3750
  if (r.changed) logOk(`Removed skaile entry from ${S.cmd(".codex/config.toml")}`);
3636
3751
  else logInfo(`codex: not installed`);
3752
+ const trust = await untrustProject(projectDir);
3753
+ const userFile = userConfigPath2().replace(homedir(), "~");
3754
+ if (trust === "removed") logOk(`Removed the trust entry skaile added from ${S.cmd(userFile)}`);
3755
+ else if (trust === "kept") {
3756
+ logInfo(
3757
+ `codex: left the project's entry in ${userFile} (it no longer matches what skaile wrote)`
3758
+ );
3759
+ }
3637
3760
  }
3638
3761
  async function runUninstall(opts) {
3639
3762
  const projectDir = path18__default.resolve(opts.projectDir);
@@ -3670,9 +3793,26 @@ async function removeEmptyPluginState(projectDir) {
3670
3793
  }
3671
3794
  var PER_MACHINE_FILES = {
3672
3795
  "claude-code": [".skaile/plugin-state.json"],
3673
- omp: [".omp/extensions/skaile.ts", ".skaile/plugin-state.json"],
3796
+ omp: [".skaile/plugin-state.json"],
3674
3797
  codex: [".codex/config.toml", ".skaile/plugin-state.json"]
3675
3798
  };
3799
+ var OMP_EXTENSION = ".omp/extensions/skaile.ts";
3800
+ async function unignoreOmpExtension(projectDir) {
3801
+ const gitignore = path18__default.join(projectDir, ".gitignore");
3802
+ let text;
3803
+ try {
3804
+ text = await fs5.readFile(gitignore, "utf-8");
3805
+ } catch {
3806
+ return;
3807
+ }
3808
+ const lines = text.split("\n");
3809
+ const kept = lines.filter((l) => l.trim() !== OMP_EXTENSION && l.trim() !== `/${OMP_EXTENSION}`);
3810
+ if (kept.length === lines.length) return;
3811
+ await fs5.writeFile(gitignore, kept.join("\n"));
3812
+ logInfo(
3813
+ `Removed ${S.cmd(OMP_EXTENSION)} from ${S.cmd(".gitignore")} (omp does not load an ignored extension; commit the file)`
3814
+ );
3815
+ }
3676
3816
  var CLAUDE_FULL_FILES = [".claude/settings.json", ".claude/plugins/skaile/"];
3677
3817
  async function ignorePerMachineFiles(projectDir, targets, full) {
3678
3818
  const gitignore = path18__default.join(projectDir, ".gitignore");
@@ -4068,19 +4208,33 @@ function assertManifestEditableOrExit(libraryPath) {
4068
4208
  exitOnSyncError(err);
4069
4209
  }
4070
4210
  }
4071
- var DEPLOYED_COPY_DIRS = [".claude", ".skaile", ".codex", ".omp"];
4072
- function refuseUnusableLibraryDir(dir) {
4211
+ var DEPLOYED_COPY_DIRS = [
4212
+ ...new Set(
4213
+ Object.values(DRIVER_TARGETS).flatMap(
4214
+ (t) => Object.values(t.local).filter((d) => typeof d === "string")
4215
+ )
4216
+ )
4217
+ ];
4218
+ async function refuseUnusableLibraryDir(dir, force = false) {
4073
4219
  const deployed = DEPLOYED_COPY_DIRS.filter((d) => {
4074
4220
  const full = path18.join(dir, d);
4075
4221
  return fs9.existsSync(full) && fs9.statSync(full).isDirectory() && fs9.readdirSync(full).length > 0;
4076
4222
  });
4077
- if (fs9.existsSync(path18.join(dir, "skaile.yaml")) && deployed.length > 0) {
4223
+ if (deployed.length > 0 && !force) {
4224
+ const where = fs9.existsSync(path18.join(dir, "skaile.yaml")) ? "skaile.yaml with deployed copies" : "deployed copies";
4078
4225
  logErr(
4079
- `${dir} is a project folder (skaile.yaml with deployed copies in ${deployed.map((d) => `${d}/`).join(", ")}): a library holds asset sources, not the copies \`skaile add\` deployed. Pick another --path for the library.`
4226
+ `${dir} is a project folder (${where} in ${deployed.map((d) => `${d}/`).join(", ")}): a library holds asset sources, not the copies \`skaile add\` deployed. Pick another --path for the library, or pass --force when the sources live in those folders.`
4080
4227
  );
4081
4228
  process.exit(1);
4082
4229
  }
4083
4230
  assertManifestEditableOrExit(dir);
4231
+ const unparsable = await unparsableAssetFiles(dir, getKindRegistry());
4232
+ if (unparsable.length > 0) {
4233
+ logErr(
4234
+ `${dir} holds asset file(s) that do not parse: ${unparsable.join(", ")}. Fix them before the directory becomes a library; nothing was registered.`
4235
+ );
4236
+ process.exit(1);
4237
+ }
4084
4238
  }
4085
4239
  async function assertLibraryPathFree(manager, dir, exceptId) {
4086
4240
  const clash = (await manager.listLibraries()).find(
@@ -4263,7 +4417,7 @@ function remoteBranches(url) {
4263
4417
  return r.stdout.split("\n").map((line) => line.split(" ")[1]?.replace(/^refs\/heads\//, "")).filter((b) => !!b);
4264
4418
  }
4265
4419
  async function warnIfNotGithubRemote(name, url) {
4266
- const { isGithubRemote, notGithubRemoteMessage } = await import('../library-publish-GHPVY42Y.js');
4420
+ const { isGithubRemote, notGithubRemoteMessage } = await import('../library-publish-VBE3X2TH.js');
4267
4421
  if (!isGithubRemote(url)) logWarn(notGithubRemoteMessage(name, url));
4268
4422
  }
4269
4423
  function scaffoldLibraryFiles(dir, name) {
@@ -4371,7 +4525,10 @@ function makeLibraryCommand() {
4371
4525
  close();
4372
4526
  }
4373
4527
  });
4374
- 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("--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(
4528
+ 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(
4529
+ "--force",
4530
+ "Adopt a folder that holds deployed copies (.claude/, .skaile/, .codex/, .omp/) as a library"
4531
+ ).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(
4375
4532
  async (name, opts) => {
4376
4533
  requireValidLibraryName(name);
4377
4534
  const flagged = ["owner", "contributor", "reader"].filter((o) => opts[o]);
@@ -4410,7 +4567,7 @@ function makeLibraryCommand() {
4410
4567
  await refuseNestedLibraryPath(manager, libPath);
4411
4568
  if (fs9.existsSync(libPath)) {
4412
4569
  exitOnLibrarySymlinks(libPath, `skaile library init ${name} --path ${libPath}`);
4413
- refuseUnusableLibraryDir(libPath);
4570
+ await refuseUnusableLibraryDir(libPath, opts.force);
4414
4571
  }
4415
4572
  const hasDefault = (await manager.listLibraries()).some((l) => l.isDefault);
4416
4573
  let backend = "local";
@@ -4424,7 +4581,7 @@ function makeLibraryCommand() {
4424
4581
  }
4425
4582
  await warnIfNotGithubRemote(name, opts.git);
4426
4583
  trackOriginBranch(libPath, branch);
4427
- refuseUnusableLibraryDir(libPath);
4584
+ await refuseUnusableLibraryDir(libPath, opts.force);
4428
4585
  backend = "git";
4429
4586
  backendConfig = { url: opts.git, branch, authHint: "ssh" };
4430
4587
  } else if (adopted) {
@@ -4957,16 +5114,16 @@ function makeLibraryCommand() {
4957
5114
  "With --create-repo: create the repo private (the store only accepts public repos)"
4958
5115
  ).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(
4959
5116
  async (lib, opts) => {
4960
- const { runLibraryPublish } = await import('../library-publish-GHPVY42Y.js');
5117
+ const { runLibraryPublish } = await import('../library-publish-VBE3X2TH.js');
4961
5118
  await withStoreErrorHandling(() => runLibraryPublish(lib, opts));
4962
5119
  }
4963
5120
  );
4964
5121
  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) => {
4965
- const { runLibraryRegister } = await import('../library-publish-GHPVY42Y.js');
5122
+ const { runLibraryRegister } = await import('../library-publish-VBE3X2TH.js');
4966
5123
  await withStoreErrorHandling(() => runLibraryRegister(lib, opts));
4967
5124
  });
4968
5125
  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) => {
4969
- const { runLibraryYank } = await import('../library-publish-GHPVY42Y.js');
5126
+ const { runLibraryYank } = await import('../library-publish-VBE3X2TH.js');
4970
5127
  await withStoreErrorHandling(() => runLibraryYank(lib, opts));
4971
5128
  });
4972
5129
  return cmd;
@@ -5626,7 +5783,7 @@ function scheduleSoftDepPreview() {
5626
5783
  }
5627
5784
  async function loadAssets() {
5628
5785
  softDepPreviewCache.clear();
5629
- const { gatherAssetFeeds } = await import('../asset-feeds-BELBSJEE.js');
5786
+ const { gatherAssetFeeds } = await import('../asset-feeds-WAKBHGEV.js');
5630
5787
  const { entries, notes } = await gatherAssetFeeds(am, am.projectDir);
5631
5788
  if (notes.length > 0) {
5632
5789
  state.message = notes.map((n) => `[${n.feed}] ${n.message}`).join(" \u2022 ");
@@ -5830,7 +5987,7 @@ function reconcileCollapsedSets(rows) {
5830
5987
  async function loadSourcesAndLibraries() {
5831
5988
  try {
5832
5989
  const [{ openLibraryManager: openLibraryManager2 }, { getGlobalCacheDir: getGlobalCacheDir2, globalSkaileDir: globalSkaileDir2 }] = await Promise.all([
5833
- import('../open-library-YSUGNP36.js'),
5990
+ import('../open-library-JP5TC5UX.js'),
5834
5991
  import('../core/index.js')
5835
5992
  ]);
5836
5993
  const { manager, library, close } = await openLibraryManager2();
@@ -8668,7 +8825,7 @@ function action2(fn) {
8668
8825
  };
8669
8826
  }
8670
8827
  async function reconcileAndReport(projectDir, plugins, opts = {}) {
8671
- const { reconcilePlugins } = await import('../plugin-store-IPIBZRBX.js');
8828
+ const { reconcilePlugins } = await import('../plugin-store-QOQDM24E.js');
8672
8829
  if (plugins.length === 0) {
8673
8830
  logInfo("No plugins declared \u2014 nothing to reconcile.");
8674
8831
  return;
@@ -8683,7 +8840,7 @@ async function reconcileAndReport(projectDir, plugins, opts = {}) {
8683
8840
  }
8684
8841
  }
8685
8842
  async function verifyPluginLoads(projectDir, spec) {
8686
- const { loadPlugins } = await import('../plugin-store-IPIBZRBX.js');
8843
+ const { loadPlugins } = await import('../plugin-store-QOQDM24E.js');
8687
8844
  const { createPluginRegistry } = await import('../plugin-registry/index.js');
8688
8845
  const registry = createPluginRegistry();
8689
8846
  const result = await loadPlugins(projectDir, [spec], registry);
@@ -8697,7 +8854,7 @@ async function verifyPluginLoads(projectDir, spec) {
8697
8854
  async function runInstall2(spec, opts) {
8698
8855
  const projectDir = path18__default.resolve(opts.projectDir);
8699
8856
  const { WorkspaceYamlEditor: WorkspaceYamlEditor2 } = await import('../core/index.js');
8700
- const { specName, rollbackPluginStore } = await import('../plugin-store-IPIBZRBX.js');
8857
+ const { specName, rollbackPluginStore } = await import('../plugin-store-QOQDM24E.js');
8701
8858
  const yamlPath = path18__default.join(projectDir, "skaile.yaml");
8702
8859
  if (!existsSync(yamlPath)) {
8703
8860
  throw new Error(`no skaile.yaml in ${projectDir}; run \`skaile init\` first`);
@@ -8726,7 +8883,7 @@ async function runInstall2(spec, opts) {
8726
8883
  async function runRemove(name, opts) {
8727
8884
  const projectDir = path18__default.resolve(opts.projectDir);
8728
8885
  const { WorkspaceYamlEditor: WorkspaceYamlEditor2 } = await import('../core/index.js');
8729
- const { specName } = await import('../plugin-store-IPIBZRBX.js');
8886
+ const { specName } = await import('../plugin-store-QOQDM24E.js');
8730
8887
  const yamlPath = path18__default.join(projectDir, "skaile.yaml");
8731
8888
  if (!existsSync(yamlPath)) {
8732
8889
  logInfo(`No plugin matching ${S.cmd(name)}: there is no skaile.yaml in ${projectDir}.`);
@@ -8758,7 +8915,7 @@ async function runList(opts) {
8758
8915
  const registry = createPluginRegistry();
8759
8916
  if (declared.length > 0) {
8760
8917
  try {
8761
- const { loadPlugins } = await import('../plugin-store-IPIBZRBX.js');
8918
+ const { loadPlugins } = await import('../plugin-store-QOQDM24E.js');
8762
8919
  const result = await loadPlugins(projectDir, declared, registry);
8763
8920
  for (const f of result.failed) logWarn(f.error);
8764
8921
  } catch (err) {
@@ -9627,7 +9784,9 @@ function driverErrorNotes(err) {
9627
9784
  const hint = e?.hint ?? e?.detail?.hint;
9628
9785
  if (hint && category !== "config") notes.push(hint);
9629
9786
  else if (category === "auth") notes.push("Check your API key or login.");
9630
- notes.push("Full records: .skaile/logs.db (skaile session logs <session-id>).");
9787
+ if (e?.logSessionId) {
9788
+ notes.push(`Full records: .skaile/logs.db (skaile session logs ${e.logSessionId}).`);
9789
+ }
9631
9790
  return notes;
9632
9791
  }
9633
9792
 
@@ -9857,6 +10016,14 @@ function makeRunCommand() {
9857
10016
  });
9858
10017
  const driver = config.driver ?? DEFAULT_DRIVER_ID;
9859
10018
  const model = config.model;
10019
+ const providerRefusal = checkModelProvider(driver, {
10020
+ registry: loadRegistryView({ projectDir }).merged,
10021
+ model
10022
+ });
10023
+ if (providerRefusal) {
10024
+ logErr(providerRefusal);
10025
+ process.exit(1);
10026
+ }
9860
10027
  const flowPath = await findFlowFileWithLibraries(
9861
10028
  flowId,
9862
10029
  projectAiAssetsRoots(projectDir),
@@ -10097,6 +10264,25 @@ function makeReplCommand() {
10097
10264
  console.log();
10098
10265
  }
10099
10266
  await loadDeclaredPlugins(projectDir);
10267
+ const effective = await resolveSettings(projectDir, {
10268
+ driver: driverOverride,
10269
+ model: opts.model
10270
+ });
10271
+ let effectiveModel = effective.model;
10272
+ if (!opts.model && instanceId2) {
10273
+ try {
10274
+ effectiveModel = instanceSessionOverrides(resolveSkWorkspaceConfig(projectDir), instanceId2).model ?? effectiveModel;
10275
+ } catch {
10276
+ }
10277
+ }
10278
+ const providerRefusal = checkModelProvider(effective.driver ?? DEFAULT_DRIVER_ID, {
10279
+ registry: loadRegistryView({ projectDir }).merged,
10280
+ model: effectiveModel
10281
+ });
10282
+ if (providerRefusal) {
10283
+ logErr(providerRefusal);
10284
+ process.exit(1);
10285
+ }
10100
10286
  try {
10101
10287
  await startRepl({
10102
10288
  projectDir,
@@ -10127,11 +10313,20 @@ function parseModelEndpointFlag(raw) {
10127
10313
  }
10128
10314
  function parsePortOption(raw) {
10129
10315
  const port = Number(raw);
10130
- if (!/^\d+$/.test(raw.trim()) || port > 65535) {
10316
+ if (!/^\d+$/.test(raw) || port > 65535) {
10131
10317
  throw new Error(`--port: invalid port '${raw}' (expected a whole number from 0 to 65535)`);
10132
10318
  }
10133
10319
  return port;
10134
10320
  }
10321
+ function parseHostOption(raw) {
10322
+ if (raw === void 0) return void 0;
10323
+ if (raw === "" || raw !== raw.trim()) {
10324
+ throw new Error(
10325
+ `--host: invalid address '${raw}' (give an address such as 127.0.0.1, or leave the flag out to listen on all interfaces)`
10326
+ );
10327
+ }
10328
+ return raw;
10329
+ }
10135
10330
  function describeBindError(err, host, port) {
10136
10331
  const code = err?.code;
10137
10332
  const where = host ? `${host}:${port}` : `port ${port}`;
@@ -10183,6 +10378,7 @@ function makeServeCommand() {
10183
10378
  let port;
10184
10379
  try {
10185
10380
  port = parsePortOption(opts.port);
10381
+ opts.host = parseHostOption(opts.host);
10186
10382
  } catch (err) {
10187
10383
  logErr(err.message);
10188
10384
  process.exitCode = 1;
@@ -10206,7 +10402,7 @@ function makeServeCommand() {
10206
10402
  }
10207
10403
  const providers = parseProviderIds(opts.providers);
10208
10404
  const modelEndpoint = parseModelEndpointFlag(opts.modelEndpoint);
10209
- const { checkDriverSdk, checkModelEndpointPeer } = await import('../serve-preflight-ON2LS3SD.js');
10405
+ const { checkDriverSdk, checkModelEndpointPeer } = await import('../serve-preflight-BTGTZUDN.js');
10210
10406
  const driverProblem = managedCodex ? null : await checkDriverSdk(opts.projectDir, opts.driver);
10211
10407
  if (driverProblem) {
10212
10408
  logErr(driverProblem);
@@ -10257,12 +10453,12 @@ function makeServeCommand() {
10257
10453
  );
10258
10454
  }
10259
10455
  async function ensurePluginsLoadedForServe(projectDir) {
10260
- const { logInfo: logInfo2, logWarn: logWarn2 } = await import('../helpers-FNQL5PI7.js');
10456
+ const { logInfo: logInfo2, logWarn: logWarn2 } = await import('../helpers-R22QNPFN.js');
10261
10457
  try {
10262
10458
  const { resolveSkWorkspaceConfig: resolveSkWorkspaceConfig2 } = await import('../core/index.js');
10263
10459
  const config = resolveSkWorkspaceConfig2(projectDir);
10264
10460
  if (!config.plugins || config.plugins.length === 0) return;
10265
- const { ensurePluginsLoaded } = await import('../plugin-store-IPIBZRBX.js');
10461
+ const { ensurePluginsLoaded } = await import('../plugin-store-QOQDM24E.js');
10266
10462
  const { pluginRegistry } = await import('../plugin-registry/index.js');
10267
10463
  const result = await ensurePluginsLoaded(projectDir, config.plugins, pluginRegistry);
10268
10464
  if (result.loaded.length > 0) {
@@ -10276,14 +10472,14 @@ async function ensurePluginsLoadedForServe(projectDir) {
10276
10472
  }
10277
10473
  }
10278
10474
  async function runCompileTest(opts) {
10279
- const { logOk: logOk2, logErr: logErr2, logInfo: logInfo2, S: S2 } = await import('../helpers-FNQL5PI7.js');
10475
+ const { logOk: logOk2, logErr: logErr2, logInfo: logInfo2, S: S2 } = await import('../helpers-R22QNPFN.js');
10280
10476
  const { tmpdir } = await import('os');
10281
10477
  const { dirname: dirname3, join: join6, resolve: resolve4 } = await import('path');
10282
10478
  const { fileURLToPath: fileURLToPath2 } = await import('url');
10283
10479
  const { unlinkSync, existsSync: existsSync22 } = await import('fs');
10284
10480
  const { spawn } = await import('child_process');
10285
10481
  const { portableSpawnSync: portableSpawnSync2 } = await import('../core/index.js');
10286
- const { MONOREPO_ROOT } = await import('../paths-P55DTBEK.js');
10482
+ const { MONOREPO_ROOT } = await import('../paths-BFM6K2QO.js');
10287
10483
  if (MONOREPO_ROOT === null) {
10288
10484
  logErr2("--compile-test is only available inside the skaile-dev workspace.");
10289
10485
  logInfo2("Run it from a checkout of skaile-ai/skaile-dev (the monorepo shell).");
@@ -11222,8 +11418,8 @@ function makeStoreCommand() {
11222
11418
  "--all",
11223
11419
  `List every match (default: ${STORE_ROW_LIMIT} rows, only what \`skaile add\` can install)`
11224
11420
  ).option("-C, --project-dir <dir>", "Project directory (catalog config overlay)", process.cwd()).action(async (query, opts) => {
11225
- const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-YSUGNP36.js');
11226
- const { getKnownKinds: getKnownKinds2 } = await import('../open-registry-YPRQDUMK.js');
11421
+ const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-JP5TC5UX.js');
11422
+ const { getKnownKinds: getKnownKinds2 } = await import('../open-registry-RBELV5YH.js');
11227
11423
  const projectDir = path18__default.resolve(opts.projectDir);
11228
11424
  if (opts.kind && !getKnownKinds2().has(opts.kind)) {
11229
11425
  logErr(
@@ -11281,8 +11477,8 @@ function makeStoreCommand() {
11281
11477
  }
11282
11478
  });
11283
11479
  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) => {
11284
- const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-YSUGNP36.js');
11285
- const { supportsInstallManifest: supportsInstallManifest2 } = await import('../project-NDSLXERO.js');
11480
+ const { openCatalogSource: openCatalogSource2, LocalCatalogDisabledError: LocalCatalogDisabledError2 } = await import('../open-library-JP5TC5UX.js');
11481
+ const { supportsInstallManifest: supportsInstallManifest2 } = await import('../project-6ETXGQWD.js');
11286
11482
  try {
11287
11483
  parseAssetRef(ref);
11288
11484
  } catch (e) {
@@ -11534,7 +11730,7 @@ function makeUpdateCommand() {
11534
11730
  if (result.deployed.length > 0) {
11535
11731
  for (const d of result.deployed) logOk(`Updated ${d}`);
11536
11732
  }
11537
- warnPlaceholderBodies(result.placeholderBodies);
11733
+ warnPlaceholderBodies(result.placeholderBodies, result.placeholderDescriptions);
11538
11734
  for (const r of result.restored ?? []) {
11539
11735
  for (const f of r.restored) logInfo(`Restored ${f}`);
11540
11736
  for (const f of r.removed) logInfo(`Removed ${f} (not part of ${r.ref})`);
@@ -11751,9 +11947,10 @@ function makeVerifyCommand() {
11751
11947
  if (catalog && supportsInstallManifest(catalog)) {
11752
11948
  try {
11753
11949
  const m = await catalog.getInstallManifest(ref);
11754
- if (m.sha256 === entry.sha256 && m.source.commitSha === entry.source.commit) {
11950
+ if (m.sha256 === entry.sha256) {
11951
+ const how = m.source.commitSha === entry.source.commit ? "store install manifest" : `store install manifest; same bytes at another commit \u2014 locked ${String(entry.source.commit).slice(0, 8)}, store ${m.source.commitSha.slice(0, 8)}`;
11755
11952
  console.log(
11756
- ` ${S.ok("\u2713")} ${ref.padEnd(40)} ${S.dim(`${entry.sha256.slice(0, 20)}...`)} ${S.ok("verified")} ${S.dim("(store install manifest)")}`
11953
+ ` ${S.ok("\u2713")} ${ref.padEnd(40)} ${S.dim(`${entry.sha256.slice(0, 20)}...`)} ${S.ok("verified")} ${S.dim(`(${how})`)}`
11757
11954
  );
11758
11955
  verified++;
11759
11956
  } else {
@@ -12057,7 +12254,7 @@ program.command("init [project-dir]").description("Initialize a project director
12057
12254
  async function runInit(projectDir, opts) {
12058
12255
  const { mkdirSync: mkdirSync5, writeFileSync: writeFileSync7 } = await import('fs');
12059
12256
  const { stringify: stringify2 } = await import('yaml');
12060
- const { DRIVER_TARGETS, SUPPORTED_DRIVER_TARGETS: SUPPORTED_DRIVER_TARGETS2 } = await import('../core/index.js');
12257
+ const { DRIVER_TARGETS: DRIVER_TARGETS2, SUPPORTED_DRIVER_TARGETS: SUPPORTED_DRIVER_TARGETS2 } = await import('../core/index.js');
12061
12258
  const harness = opts.harness;
12062
12259
  if (!SUPPORTED_DRIVER_TARGETS2.includes(harness)) {
12063
12260
  logErr(`Unknown harness "${opts.harness}". Supported: ${SUPPORTED_DRIVER_TARGETS2.join(", ")}`);
@@ -12087,7 +12284,7 @@ async function runInit(projectDir, opts) {
12087
12284
  writeFileSync7(wsConfigPath, stringify2(buildInitWorkspaceConfig(projectName, harness)));
12088
12285
  created.push("skaile.yaml");
12089
12286
  }
12090
- for (const dir of new Set(Object.values(DRIVER_TARGETS[harness].local))) {
12287
+ for (const dir of new Set(Object.values(DRIVER_TARGETS2[harness].local))) {
12091
12288
  const full = path18__default.join(resolved, dir);
12092
12289
  if (!existsSync22(full)) {
12093
12290
  mkdirSync5(full, { recursive: true });
@@ -12143,9 +12340,10 @@ async function initGitScaffold(resolved, created) {
12143
12340
  ".codex/skaile-session-instructions.md",
12144
12341
  ".omp/system.md",
12145
12342
  ".omp/sessions/",
12146
- // `skaile integration install` writes the absolute project path into these.
12343
+ // `skaile integration install` writes the absolute project path into the codex config.
12344
+ // `.omp/extensions/skaile.ts` holds no host path and omp does not load an ignored
12345
+ // extension: it is committed, so it is not listed here.
12147
12346
  ".codex/config.toml",
12148
- ".omp/extensions/skaile.ts",
12149
12347
  ".skaile/plugin-state.json",
12150
12348
  "*.log",
12151
12349
  ".env",
@@ -12190,7 +12388,7 @@ async function bootstrapUserConfig() {
12190
12388
  }
12191
12389
  async function hydrateInitSources(resolved, created) {
12192
12390
  try {
12193
- const { ensureSourcesCloned } = await import('../ensure-sources-R6AHZ7RV.js');
12391
+ const { ensureSourcesCloned } = await import('../ensure-sources-CEFODJCE.js');
12194
12392
  const hydrate = ensureSourcesCloned(resolved, { quiet: true });
12195
12393
  for (const n of hydrate.cloned) created.push(`~/.skaile/cache/sources/${n}/`);
12196
12394
  if (hydrate.failed.length > 0) {
@@ -12230,7 +12428,7 @@ function printInitSummary(resolved, projectDir, created) {
12230
12428
  console.log();
12231
12429
  }
12232
12430
  program.command("setup").description("Interactive provider setup wizard").action(async () => {
12233
- const { cmdSetup } = await import('../setup-MFPEQS2I.js');
12431
+ const { cmdSetup } = await import('../setup-JQDTYPSD.js');
12234
12432
  await cmdSetup([], { projectDir: process.cwd() });
12235
12433
  });
12236
12434
  program.addCommand(makeInstallCommand());
@@ -12323,7 +12521,8 @@ try {
12323
12521
  process.exit(1);
12324
12522
  }
12325
12523
  const { LibrarySyncError } = await import('../library/index.js');
12326
- if (!(err instanceof LibrarySyncError || err instanceof SourceEntryError)) throw err;
12524
+ if (!(err instanceof LibrarySyncError || err instanceof LibraryEntryError || err instanceof SourceEntryError))
12525
+ throw err;
12327
12526
  logErr(err.message);
12328
12527
  process.exit(1);
12329
12528
  }