@skaile/workspaces 5.19.0 → 6.0.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 (663) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +8 -8
  3. package/dist/app-sdk/index.js +1 -1
  4. package/dist/{asset-feeds-QGLI3AXI.js → asset-feeds-PXUWCXVI.js} +18 -18
  5. package/dist/{asset-feeds-QGLI3AXI.js.map → asset-feeds-PXUWCXVI.js.map} +1 -1
  6. package/dist/asset-manager/catalog-deployer.js +8 -8
  7. package/dist/asset-manager/index.js +14 -14
  8. package/dist/asset-manager/installer.js +11 -11
  9. package/dist/asset-manager/renderers.js +10 -10
  10. package/dist/asset-manager/src/index.d.ts +22 -22
  11. package/dist/asset-manager/src/index.d.ts.map +1 -1
  12. package/dist/asset-manager/src/install-agent.d.ts +2 -2
  13. package/dist/asset-manager/src/install-agent.d.ts.map +1 -1
  14. package/dist/asset-manager/src/install-instances.d.ts +8 -8
  15. package/dist/asset-manager/src/install-instances.d.ts.map +1 -1
  16. package/dist/asset-manager/src/installer.d.ts +3 -3
  17. package/dist/asset-manager/src/installer.d.ts.map +1 -1
  18. package/dist/asset-manager/src/mcp-config.d.ts +14 -14
  19. package/dist/asset-manager/src/mcp-config.d.ts.map +1 -1
  20. package/dist/asset-manager/src/renderers.d.ts +12 -12
  21. package/dist/asset-manager/src/renderers.d.ts.map +1 -1
  22. package/dist/bridge/codex-app-server.js +2 -2
  23. package/dist/bridge/harnesses/claude-sdk.d.ts +2 -0
  24. package/dist/bridge/{drivers → harnesses}/claude-sdk.js +63 -63
  25. package/dist/bridge/harnesses/claude-sdk.js.map +1 -0
  26. package/dist/bridge/{drivers/gemini.d.ts → harnesses/codex.d.ts} +1 -1
  27. package/dist/bridge/{drivers → harnesses}/codex.js +50 -50
  28. package/dist/bridge/harnesses/codex.js.map +1 -0
  29. package/dist/bridge/{drivers/claude-sdk.d.ts → harnesses/continue.d.ts} +1 -1
  30. package/dist/bridge/{drivers → harnesses}/continue.js +27 -27
  31. package/dist/bridge/harnesses/continue.js.map +1 -0
  32. package/dist/bridge/{drivers → harnesses}/echo.d.ts +1 -1
  33. package/dist/bridge/{drivers → harnesses}/echo.js +27 -27
  34. package/dist/bridge/harnesses/echo.js.map +1 -0
  35. package/dist/bridge/{drivers/continue.d.ts → harnesses/gemini.d.ts} +1 -1
  36. package/dist/bridge/harnesses/gemini.js +18 -0
  37. package/dist/bridge/{drivers → harnesses}/goose.d.ts +1 -1
  38. package/dist/bridge/{drivers → harnesses}/goose.js +27 -27
  39. package/dist/bridge/harnesses/goose.js.map +1 -0
  40. package/dist/bridge/{drivers → harnesses}/omp.d.ts +1 -1
  41. package/dist/bridge/{drivers → harnesses}/omp.js +31 -31
  42. package/dist/bridge/harnesses/omp.js.map +1 -0
  43. package/dist/bridge/{drivers → harnesses}/opencode.d.ts +1 -1
  44. package/dist/bridge/{drivers → harnesses}/opencode.js +28 -28
  45. package/dist/bridge/harnesses/opencode.js.map +1 -0
  46. package/dist/bridge/{drivers → harnesses}/qwen.d.ts +1 -1
  47. package/dist/bridge/{drivers → harnesses}/qwen.js +20 -20
  48. package/dist/bridge/harnesses/qwen.js.map +1 -0
  49. package/dist/bridge/index.js +22 -22
  50. package/dist/bridge/src/agent-exec.d.ts +2 -2
  51. package/dist/bridge/src/agent-transcript.d.ts +1 -1
  52. package/dist/bridge/src/agent-transcript.d.ts.map +1 -1
  53. package/dist/bridge/src/approval-card.d.ts +3 -3
  54. package/dist/bridge/src/capability-dispatch.d.ts +5 -5
  55. package/dist/bridge/src/cloud.d.ts +4 -4
  56. package/dist/bridge/src/codex/config-toml.d.ts +3 -3
  57. package/dist/bridge/src/codex/friendly-error.d.ts +1 -1
  58. package/dist/bridge/src/codex/friendly-error.d.ts.map +1 -1
  59. package/dist/bridge/src/codex/{managed-driver.d.ts → managed-harness.d.ts} +5 -5
  60. package/dist/bridge/src/codex/managed-harness.d.ts.map +1 -0
  61. package/dist/bridge/src/codex/native-approvals.d.ts +1 -1
  62. package/dist/bridge/src/codex/native-approvals.d.ts.map +1 -1
  63. package/dist/bridge/src/error-classifier.d.ts +7 -7
  64. package/dist/bridge/src/{driver-capabilities.d.ts → harness-capabilities.d.ts} +18 -18
  65. package/dist/bridge/src/harness-capabilities.d.ts.map +1 -0
  66. package/dist/bridge/src/{driver-model-check.d.ts → harness-model-check.d.ts} +9 -9
  67. package/dist/bridge/src/harness-model-check.d.ts.map +1 -0
  68. package/dist/bridge/src/{drivers → harnesses}/_subprocess-cli.d.ts +8 -8
  69. package/dist/bridge/src/harnesses/_subprocess-cli.d.ts.map +1 -0
  70. package/dist/bridge/src/{drivers → harnesses}/claude-context-usage.d.ts +5 -5
  71. package/dist/bridge/src/harnesses/claude-context-usage.d.ts.map +1 -0
  72. package/dist/bridge/src/{drivers → harnesses}/claude-sdk.d.ts +27 -27
  73. package/dist/bridge/src/harnesses/claude-sdk.d.ts.map +1 -0
  74. package/dist/bridge/src/{drivers → harnesses}/claude-self-turns.d.ts +5 -5
  75. package/dist/bridge/src/harnesses/claude-self-turns.d.ts.map +1 -0
  76. package/dist/bridge/src/{drivers → harnesses}/claude-tool-allowlist.d.ts +4 -4
  77. package/dist/bridge/src/harnesses/claude-tool-allowlist.d.ts.map +1 -0
  78. package/dist/bridge/src/{drivers → harnesses}/codex.d.ts +14 -14
  79. package/dist/bridge/src/harnesses/codex.d.ts.map +1 -0
  80. package/dist/bridge/src/{drivers → harnesses}/continue.d.ts +12 -12
  81. package/dist/bridge/src/harnesses/continue.d.ts.map +1 -0
  82. package/dist/bridge/src/{drivers → harnesses}/echo.d.ts +16 -16
  83. package/dist/bridge/src/harnesses/echo.d.ts.map +1 -0
  84. package/dist/bridge/src/{drivers → harnesses}/flow-script.d.ts +9 -9
  85. package/dist/bridge/src/harnesses/flow-script.d.ts.map +1 -0
  86. package/dist/bridge/src/{drivers → harnesses}/gemini.d.ts +15 -15
  87. package/dist/bridge/src/harnesses/gemini.d.ts.map +1 -0
  88. package/dist/bridge/src/{drivers → harnesses}/goose.d.ts +10 -10
  89. package/dist/bridge/src/harnesses/goose.d.ts.map +1 -0
  90. package/dist/bridge/src/{drivers → harnesses}/omp-models-yml.d.ts +12 -12
  91. package/dist/bridge/src/harnesses/omp-models-yml.d.ts.map +1 -0
  92. package/dist/bridge/src/{drivers → harnesses}/omp.d.ts +23 -23
  93. package/dist/bridge/src/harnesses/omp.d.ts.map +1 -0
  94. package/dist/bridge/src/{drivers → harnesses}/opencode.d.ts +11 -11
  95. package/dist/bridge/src/harnesses/opencode.d.ts.map +1 -0
  96. package/dist/bridge/src/{drivers → harnesses}/qwen.d.ts +12 -12
  97. package/dist/bridge/src/harnesses/qwen.d.ts.map +1 -0
  98. package/dist/bridge/src/{drivers → harnesses}/recovery-policy.d.ts +4 -4
  99. package/dist/bridge/src/harnesses/recovery-policy.d.ts.map +1 -0
  100. package/dist/bridge/src/{drivers → harnesses}/resume-probe.d.ts +3 -3
  101. package/dist/bridge/src/harnesses/resume-probe.d.ts.map +1 -0
  102. package/dist/bridge/src/{drivers → harnesses}/sanitize-assistant-text.d.ts +1 -1
  103. package/dist/bridge/src/harnesses/sanitize-assistant-text.d.ts.map +1 -0
  104. package/dist/bridge/src/{drivers → harnesses}/scrub-transcript.d.ts +1 -1
  105. package/dist/bridge/src/harnesses/scrub-transcript.d.ts.map +1 -0
  106. package/dist/bridge/src/index.d.ts +4 -4
  107. package/dist/bridge/src/index.d.ts.map +1 -1
  108. package/dist/bridge/src/logger.d.ts +4 -4
  109. package/dist/bridge/src/models.d.ts +1 -1
  110. package/dist/bridge/src/normalizer.d.ts +2 -2
  111. package/dist/bridge/src/provider-materialize/continue-config-yaml.d.ts +5 -5
  112. package/dist/bridge/src/provider-materialize/continue-config-yaml.d.ts.map +1 -1
  113. package/dist/bridge/src/provider-materialize/credential-env.d.ts +3 -3
  114. package/dist/bridge/src/provider-materialize/{env-drivers.d.ts → env-harnesses.d.ts} +19 -19
  115. package/dist/bridge/src/provider-materialize/env-harnesses.d.ts.map +1 -0
  116. package/dist/bridge/src/provider-materialize/goose-custom-providers.d.ts +5 -5
  117. package/dist/bridge/src/provider-materialize/goose-custom-providers.d.ts.map +1 -1
  118. package/dist/bridge/src/provider-materialize/opencode-config.d.ts +7 -7
  119. package/dist/bridge/src/provider-materialize/opencode-config.d.ts.map +1 -1
  120. package/dist/bridge/src/provider-materialize/session-config-home.d.ts +5 -5
  121. package/dist/bridge/src/provider-materialize/session-config-home.d.ts.map +1 -1
  122. package/dist/bridge/src/provider-registry-derive.d.ts +4 -4
  123. package/dist/bridge/src/provider-registry-derive.d.ts.map +1 -1
  124. package/dist/bridge/src/reconfigure-ledger.d.ts +8 -8
  125. package/dist/bridge/src/reconfigure-ledger.d.ts.map +1 -1
  126. package/dist/bridge/src/registry.d.ts +34 -41
  127. package/dist/bridge/src/registry.d.ts.map +1 -1
  128. package/dist/bridge/src/runner-private-env.d.ts +2 -2
  129. package/dist/bridge/src/runtime.d.ts +11 -11
  130. package/dist/bridge/src/runtime.d.ts.map +1 -1
  131. package/dist/bridge/src/types.d.ts +158 -158
  132. package/dist/bridge/src/types.d.ts.map +1 -1
  133. package/dist/{chunk-2PBSAH3Z.js → chunk-2UUKCROR.js} +4 -4
  134. package/dist/{chunk-2PBSAH3Z.js.map → chunk-2UUKCROR.js.map} +1 -1
  135. package/dist/{chunk-WG6V4ISA.js → chunk-3IXIEHUB.js} +7 -7
  136. package/dist/{chunk-WG6V4ISA.js.map → chunk-3IXIEHUB.js.map} +1 -1
  137. package/dist/{chunk-JTOWA6RS.js → chunk-3JKGY2YC.js} +37 -42
  138. package/dist/chunk-3JKGY2YC.js.map +1 -0
  139. package/dist/{chunk-X5YPJV4N.js → chunk-3MWQKQUB.js} +2 -2
  140. package/dist/{chunk-X5YPJV4N.js.map → chunk-3MWQKQUB.js.map} +1 -1
  141. package/dist/{chunk-EPBKISS5.js → chunk-3TG2NV2F.js} +2 -2
  142. package/dist/chunk-3TG2NV2F.js.map +1 -0
  143. package/dist/{chunk-L2AMXONH.js → chunk-3X7VTCPG.js} +2 -2
  144. package/dist/chunk-3X7VTCPG.js.map +1 -0
  145. package/dist/{chunk-VJ7NU7GD.js → chunk-4DWBSTYA.js} +4 -4
  146. package/dist/chunk-4DWBSTYA.js.map +1 -0
  147. package/dist/{chunk-7SCS64BG.js → chunk-4XWLB7JB.js} +48 -48
  148. package/dist/chunk-4XWLB7JB.js.map +1 -0
  149. package/dist/{chunk-5TBFN46Z.js → chunk-5KRMNUL4.js} +4 -4
  150. package/dist/chunk-5KRMNUL4.js.map +1 -0
  151. package/dist/{chunk-YIF2IJUA.js → chunk-6GWSDPBP.js} +3 -3
  152. package/dist/{chunk-YIF2IJUA.js.map → chunk-6GWSDPBP.js.map} +1 -1
  153. package/dist/{chunk-MKRWN7XP.js → chunk-7CV3HFWJ.js} +5 -5
  154. package/dist/chunk-7CV3HFWJ.js.map +1 -0
  155. package/dist/{chunk-YROR332M.js → chunk-7DN6JKP2.js} +2 -2
  156. package/dist/chunk-7DN6JKP2.js.map +1 -0
  157. package/dist/{chunk-IZCR27MU.js → chunk-7EKQDY2T.js} +3 -3
  158. package/dist/chunk-7EKQDY2T.js.map +1 -0
  159. package/dist/{chunk-2LSDMJI2.js → chunk-7TPYPVAH.js} +4 -4
  160. package/dist/{chunk-2LSDMJI2.js.map → chunk-7TPYPVAH.js.map} +1 -1
  161. package/dist/{chunk-ICSCSM5D.js → chunk-ADPM6AYF.js} +3 -3
  162. package/dist/{chunk-ICSCSM5D.js.map → chunk-ADPM6AYF.js.map} +1 -1
  163. package/dist/{chunk-Y5MBW5EU.js → chunk-AF432MS3.js} +3 -3
  164. package/dist/{chunk-Y5MBW5EU.js.map → chunk-AF432MS3.js.map} +1 -1
  165. package/dist/{chunk-F6AA42GW.js → chunk-ARWKK325.js} +5 -5
  166. package/dist/{chunk-F6AA42GW.js.map → chunk-ARWKK325.js.map} +1 -1
  167. package/dist/{chunk-AJ7EGIFR.js → chunk-BIRW3HOG.js} +3 -3
  168. package/dist/chunk-BIRW3HOG.js.map +1 -0
  169. package/dist/{chunk-X4ZZTHU3.js → chunk-DHYSUJ3H.js} +4 -4
  170. package/dist/{chunk-X4ZZTHU3.js.map → chunk-DHYSUJ3H.js.map} +1 -1
  171. package/dist/{chunk-C7WBGSBV.js → chunk-DUMTLYSO.js} +10 -10
  172. package/dist/chunk-DUMTLYSO.js.map +1 -0
  173. package/dist/{chunk-XJVBUDDJ.js → chunk-E3GPGTW3.js} +8 -8
  174. package/dist/chunk-E3GPGTW3.js.map +1 -0
  175. package/dist/{chunk-335ENCCS.js → chunk-E572OHGY.js} +2 -2
  176. package/dist/{chunk-335ENCCS.js.map → chunk-E572OHGY.js.map} +1 -1
  177. package/dist/{chunk-CQJH4G2K.js → chunk-F2GOZMRA.js} +63 -64
  178. package/dist/chunk-F2GOZMRA.js.map +1 -0
  179. package/dist/{chunk-6E6PKKAD.js → chunk-G5SUWZEU.js} +18 -8
  180. package/dist/chunk-G5SUWZEU.js.map +1 -0
  181. package/dist/{chunk-2GXSSZAM.js → chunk-GEQSUC6U.js} +12 -12
  182. package/dist/chunk-GEQSUC6U.js.map +1 -0
  183. package/dist/{chunk-IP2IPMEH.js → chunk-GN4VVSAA.js} +18 -18
  184. package/dist/chunk-GN4VVSAA.js.map +1 -0
  185. package/dist/{chunk-W4Q6CKJ5.js → chunk-HK7HMEPT.js} +11 -11
  186. package/dist/chunk-HK7HMEPT.js.map +1 -0
  187. package/dist/{chunk-Y56YIT6J.js → chunk-JCPD4QRM.js} +4 -4
  188. package/dist/chunk-JCPD4QRM.js.map +1 -0
  189. package/dist/{chunk-VSZWNUZC.js → chunk-JDR6ILCW.js} +4 -4
  190. package/dist/chunk-JDR6ILCW.js.map +1 -0
  191. package/dist/{chunk-K4O6L3WH.js → chunk-KNY356I3.js} +3 -3
  192. package/dist/{chunk-K4O6L3WH.js.map → chunk-KNY356I3.js.map} +1 -1
  193. package/dist/{chunk-4ZTPYIBE.js → chunk-KW37WNXY.js} +12 -12
  194. package/dist/chunk-KW37WNXY.js.map +1 -0
  195. package/dist/{chunk-QG6GHTRM.js → chunk-KX2PT5Q4.js} +8 -8
  196. package/dist/chunk-KX2PT5Q4.js.map +1 -0
  197. package/dist/{chunk-N46LQR46.js → chunk-L4YKW5AY.js} +37 -26
  198. package/dist/chunk-L4YKW5AY.js.map +1 -0
  199. package/dist/{chunk-I7TWVK6N.js → chunk-LN6QB7XI.js} +3 -3
  200. package/dist/{chunk-I7TWVK6N.js.map → chunk-LN6QB7XI.js.map} +1 -1
  201. package/dist/{chunk-MJHSLODD.js → chunk-LSI2IVFT.js} +2 -2
  202. package/dist/chunk-LSI2IVFT.js.map +1 -0
  203. package/dist/{chunk-VIM3PWZM.js → chunk-MCUJTNY5.js} +3 -3
  204. package/dist/{chunk-VIM3PWZM.js.map → chunk-MCUJTNY5.js.map} +1 -1
  205. package/dist/{chunk-EAZECHPM.js → chunk-NBAGV6L2.js} +5 -5
  206. package/dist/chunk-NBAGV6L2.js.map +1 -0
  207. package/dist/{chunk-ZQSOJH6I.js → chunk-NMI2TWMH.js} +21 -11
  208. package/dist/chunk-NMI2TWMH.js.map +1 -0
  209. package/dist/{chunk-MRHVPQNO.js → chunk-OAHVKSQJ.js} +112 -119
  210. package/dist/chunk-OAHVKSQJ.js.map +1 -0
  211. package/dist/{chunk-V257LUBM.js → chunk-OHNKYHRR.js} +40 -13
  212. package/dist/chunk-OHNKYHRR.js.map +1 -0
  213. package/dist/{chunk-TIIXG3PN.js → chunk-OTIB4D2K.js} +3 -3
  214. package/dist/{chunk-TIIXG3PN.js.map → chunk-OTIB4D2K.js.map} +1 -1
  215. package/dist/{chunk-WST6UITC.js → chunk-OULSJRXV.js} +17 -17
  216. package/dist/chunk-OULSJRXV.js.map +1 -0
  217. package/dist/{chunk-I37INEWE.js → chunk-QOM5Z62G.js} +3 -3
  218. package/dist/{chunk-I37INEWE.js.map → chunk-QOM5Z62G.js.map} +1 -1
  219. package/dist/{chunk-HT35SQZD.js → chunk-SNEE6UGY.js} +28 -28
  220. package/dist/chunk-SNEE6UGY.js.map +1 -0
  221. package/dist/{chunk-R4I3VBSS.js → chunk-SRODW6M2.js} +4 -4
  222. package/dist/{chunk-R4I3VBSS.js.map → chunk-SRODW6M2.js.map} +1 -1
  223. package/dist/{chunk-IF6IA3PZ.js → chunk-SZXGRHQQ.js} +3 -3
  224. package/dist/{chunk-IF6IA3PZ.js.map → chunk-SZXGRHQQ.js.map} +1 -1
  225. package/dist/{chunk-J24CY3PF.js → chunk-T2BDID2J.js} +37 -37
  226. package/dist/chunk-T2BDID2J.js.map +1 -0
  227. package/dist/{chunk-WOIRYY5L.js → chunk-TKHJXPSB.js} +11 -11
  228. package/dist/{chunk-WOIRYY5L.js.map → chunk-TKHJXPSB.js.map} +1 -1
  229. package/dist/{chunk-PYJS5K7V.js → chunk-U56GGCC2.js} +3 -3
  230. package/dist/{chunk-PYJS5K7V.js.map → chunk-U56GGCC2.js.map} +1 -1
  231. package/dist/{chunk-XM6T2AZ2.js → chunk-UL22SDGR.js} +6 -6
  232. package/dist/{chunk-XM6T2AZ2.js.map → chunk-UL22SDGR.js.map} +1 -1
  233. package/dist/{chunk-XWOPZW26.js → chunk-UVVVR4XO.js} +38 -38
  234. package/dist/chunk-UVVVR4XO.js.map +1 -0
  235. package/dist/{chunk-A6SMCEEE.js → chunk-VBI7HGHB.js} +11 -11
  236. package/dist/{chunk-A6SMCEEE.js.map → chunk-VBI7HGHB.js.map} +1 -1
  237. package/dist/{chunk-7NT4F6SR.js → chunk-VJRTDKXS.js} +462 -446
  238. package/dist/chunk-VJRTDKXS.js.map +1 -0
  239. package/dist/{chunk-IG5LZ3WU.js → chunk-VTETQCR6.js} +10 -10
  240. package/dist/chunk-VTETQCR6.js.map +1 -0
  241. package/dist/{chunk-EFLKSMCO.js → chunk-VUJXZDCY.js} +5 -5
  242. package/dist/{chunk-EFLKSMCO.js.map → chunk-VUJXZDCY.js.map} +1 -1
  243. package/dist/{chunk-25ZVWL2R.js → chunk-VXEYX73S.js} +4 -4
  244. package/dist/{chunk-25ZVWL2R.js.map → chunk-VXEYX73S.js.map} +1 -1
  245. package/dist/{chunk-M3WPBTGJ.js → chunk-WD3L5QSU.js} +2 -2
  246. package/dist/{chunk-M3WPBTGJ.js.map → chunk-WD3L5QSU.js.map} +1 -1
  247. package/dist/{chunk-COJIL7G4.js → chunk-WDAIWDLK.js} +7 -7
  248. package/dist/chunk-WDAIWDLK.js.map +1 -0
  249. package/dist/{chunk-FPHNJE4M.js → chunk-WEH33JSG.js} +14 -14
  250. package/dist/chunk-WEH33JSG.js.map +1 -0
  251. package/dist/{chunk-RO6VOM6Z.js → chunk-WYHQUCHR.js} +13 -13
  252. package/dist/{chunk-RO6VOM6Z.js.map → chunk-WYHQUCHR.js.map} +1 -1
  253. package/dist/{chunk-R6O6YWU7.js → chunk-WYZXSJBK.js} +3 -3
  254. package/dist/{chunk-R6O6YWU7.js.map → chunk-WYZXSJBK.js.map} +1 -1
  255. package/dist/{chunk-RPZVHXQ3.js → chunk-XFIEVEU7.js} +4 -4
  256. package/dist/chunk-XFIEVEU7.js.map +1 -0
  257. package/dist/{chunk-Q6E6FM7P.js → chunk-XKNXPLKR.js} +6 -6
  258. package/dist/{chunk-Q6E6FM7P.js.map → chunk-XKNXPLKR.js.map} +1 -1
  259. package/dist/{chunk-HU5HVKY7.js → chunk-Y2TO2U7W.js} +4 -4
  260. package/dist/{chunk-HU5HVKY7.js.map → chunk-Y2TO2U7W.js.map} +1 -1
  261. package/dist/{chunk-ZX4KRWRB.js → chunk-YGRZNFRO.js} +4 -4
  262. package/dist/{chunk-ZX4KRWRB.js.map → chunk-YGRZNFRO.js.map} +1 -1
  263. package/dist/{chunk-5BEFNLOR.js → chunk-Z7ZEZZB6.js} +8 -8
  264. package/dist/chunk-Z7ZEZZB6.js.map +1 -0
  265. package/dist/{chunk-PHRNUTSG.js → chunk-ZFUZ5AKM.js} +4 -4
  266. package/dist/{chunk-PHRNUTSG.js.map → chunk-ZFUZ5AKM.js.map} +1 -1
  267. package/dist/claude-code-VJGYBXQR.js +10 -0
  268. package/dist/{claude-code-2PU7TITZ.js.map → claude-code-VJGYBXQR.js.map} +1 -1
  269. package/dist/cli/index.js +471 -308
  270. package/dist/cli/index.js.map +1 -1
  271. package/dist/cli/src/commands/catalog.d.ts +3 -3
  272. package/dist/cli/src/commands/complete-resolvers.d.ts.map +1 -1
  273. package/dist/cli/src/commands/config.d.ts +2 -2
  274. package/dist/cli/src/commands/config.d.ts.map +1 -1
  275. package/dist/cli/src/commands/integration.d.ts +1 -1
  276. package/dist/cli/src/commands/integration.d.ts.map +1 -1
  277. package/dist/cli/src/commands/migrate-files.d.ts +14 -0
  278. package/dist/cli/src/commands/migrate-files.d.ts.map +1 -1
  279. package/dist/cli/src/commands/migrate-harness.d.ts +49 -0
  280. package/dist/cli/src/commands/migrate-harness.d.ts.map +1 -0
  281. package/dist/cli/src/commands/migrate.d.ts +4 -2
  282. package/dist/cli/src/commands/migrate.d.ts.map +1 -1
  283. package/dist/cli/src/commands/plugin/types.d.ts +1 -6
  284. package/dist/cli/src/commands/plugin/types.d.ts.map +1 -1
  285. package/dist/cli/src/commands/plugin-registry-cmd.d.ts +1 -1
  286. package/dist/cli/src/commands/preset-export.d.ts +1 -1
  287. package/dist/cli/src/commands/project.d.ts +1 -1
  288. package/dist/cli/src/commands/run.d.ts +2 -2
  289. package/dist/cli/src/commands/run.d.ts.map +1 -1
  290. package/dist/cli/src/commands/serve-preflight.d.ts +11 -11
  291. package/dist/cli/src/commands/serve-preflight.d.ts.map +1 -1
  292. package/dist/cli/src/commands/serve.d.ts +1 -1
  293. package/dist/cli/src/commands/serve.d.ts.map +1 -1
  294. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  295. package/dist/cli/src/harness-error.d.ts +47 -0
  296. package/dist/cli/src/harness-error.d.ts.map +1 -0
  297. package/dist/cli/src/helpers.d.ts +5 -5
  298. package/dist/cli/src/helpers.d.ts.map +1 -1
  299. package/dist/cli/src/plugin-store/index.d.ts +2 -2
  300. package/dist/cli/src/setup.d.ts +3 -3
  301. package/dist/cli/src/setup.d.ts.map +1 -1
  302. package/dist/connectors/config.js +3 -3
  303. package/dist/connectors/index.js +27 -27
  304. package/dist/connectors/src/connector-prompt.d.ts +5 -5
  305. package/dist/connectors/src/connector-registry.d.ts +1 -1
  306. package/dist/connectors-CXZLXAFZ.js +48 -0
  307. package/dist/{connectors-RBGZ3M7G.js.map → connectors-CXZLXAFZ.js.map} +1 -1
  308. package/dist/connectors-shared/index.js +2 -2
  309. package/dist/core/framework.js +1 -1
  310. package/dist/{bridge/drivers/codex.d.ts → core/harness-targets.d.ts} +1 -1
  311. package/dist/core/harness-targets.js +4 -0
  312. package/dist/core/harness-targets.js.map +1 -0
  313. package/dist/core/index.js +8 -8
  314. package/dist/core/provider-registry-credentials.js +2 -2
  315. package/dist/core/provider-registry.js +1 -1
  316. package/dist/core/runtime-assets.js +3 -3
  317. package/dist/core/src/asset-roots.d.ts +2 -2
  318. package/dist/core/src/framework.d.ts +21 -21
  319. package/dist/core/src/framework.d.ts.map +1 -1
  320. package/dist/core/src/{driver-sdk.d.ts → harness-sdk.d.ts} +9 -9
  321. package/dist/core/src/harness-sdk.d.ts.map +1 -0
  322. package/dist/core/src/harness-targets.d.ts +71 -0
  323. package/dist/core/src/harness-targets.d.ts.map +1 -0
  324. package/dist/core/src/index.d.ts +8 -8
  325. package/dist/core/src/index.d.ts.map +1 -1
  326. package/dist/core/src/provider-registry.d.ts +2 -2
  327. package/dist/core/src/settings.d.ts +17 -16
  328. package/dist/core/src/settings.d.ts.map +1 -1
  329. package/dist/core/src/store.d.ts +12 -12
  330. package/dist/core/src/store.d.ts.map +1 -1
  331. package/dist/core/src/workspace-config.d.ts +31 -21
  332. package/dist/core/src/workspace-config.d.ts.map +1 -1
  333. package/dist/core/src/workspace-yaml-editor.d.ts +1 -1
  334. package/dist/core/src/workspace-yaml-editor.d.ts.map +1 -1
  335. package/dist/core/store.js +2 -2
  336. package/dist/core/workspace-config.js +2 -2
  337. package/dist/deploy/index.js +9 -9
  338. package/dist/discovery/index.js +2 -2
  339. package/dist/{ensure-sources-GKVLE6L5.js → ensure-sources-UPTHZKGF.js} +17 -17
  340. package/dist/{ensure-sources-GKVLE6L5.js.map → ensure-sources-UPTHZKGF.js.map} +1 -1
  341. package/dist/factory-assets/connectors/box.js +27 -27
  342. package/dist/factory-assets/connectors/deploy.js +27 -27
  343. package/dist/factory-assets/connectors/devserver.js +27 -27
  344. package/dist/factory-assets/connectors/flow/CONNECTOR.md +5 -5
  345. package/dist/factory-assets/connectors/flow/adapter.d.ts +3 -3
  346. package/dist/factory-assets/connectors/flow/adapter.d.ts.map +1 -1
  347. package/dist/factory-assets/connectors/flow/adapter.js +27 -27
  348. package/dist/factory-assets/connectors/flow/engine/types.d.ts +1 -1
  349. package/dist/factory-assets/connectors/flow/engine.js +9 -9
  350. package/dist/factory-assets/connectors/flow/inline-sub-flow-host.d.ts +2 -2
  351. package/dist/factory-assets/connectors/flow/inline-sub-flow-host.d.ts.map +1 -1
  352. package/dist/factory-assets/connectors/flow/orchestrator-turn.d.ts +4 -4
  353. package/dist/factory-assets/connectors/flow/orchestrator-turn.d.ts.map +1 -1
  354. package/dist/factory-assets/connectors/flow/prompt-fragments.d.ts +1 -1
  355. package/dist/factory-assets/connectors/flow/prompt-fragments.js +1 -1
  356. package/dist/factory-assets/connectors/flow/run-flow.d.ts +12 -12
  357. package/dist/factory-assets/connectors/flow/run-flow.d.ts.map +1 -1
  358. package/dist/factory-assets/connectors/flow/run-flow.js +28 -28
  359. package/dist/factory-assets/connectors/flow/sub-flow-runner.d.ts +1 -1
  360. package/dist/factory-assets/connectors/flow/sub-flow-runner.d.ts.map +1 -1
  361. package/dist/factory-assets/connectors/flow/subprompt-runner.d.ts +22 -22
  362. package/dist/factory-assets/connectors/flow/subprompt-runner.d.ts.map +1 -1
  363. package/dist/factory-assets/connectors/flow.js +27 -27
  364. package/dist/factory-assets/connectors/git.js +27 -27
  365. package/dist/factory-assets/connectors/gmail.js +27 -27
  366. package/dist/factory-assets/connectors/googledrive.js +27 -27
  367. package/dist/factory-assets/connectors/local.js +27 -27
  368. package/dist/factory-assets/connectors/mattermost.js +27 -27
  369. package/dist/factory-assets/connectors/memory.js +27 -27
  370. package/dist/factory-assets/connectors/minio.js +27 -27
  371. package/dist/factory-assets/connectors/postgres.js +27 -27
  372. package/dist/factory-assets/connectors/s3.js +27 -27
  373. package/dist/factory-assets/connectors/sharepoint.js +27 -27
  374. package/dist/factory-assets/connectors/sqlite.js +27 -27
  375. package/dist/factory-assets/connectors/static-server.js +27 -27
  376. package/dist/factory-assets/connectors/tunnel.js +27 -27
  377. package/dist/factory-assets/connectors/webdav.js +27 -27
  378. package/dist/factory-assets/connectors/xstate-store.js +27 -27
  379. package/dist/factory-assets/connectors/xstate.js +27 -27
  380. package/dist/factory-assets/skills/skaile-manage-workspace/SKILL.md +1 -1
  381. package/dist/{flows-W2FB7WIM.js → flows-TJQIMGUX.js} +13 -13
  382. package/dist/{flows-W2FB7WIM.js.map → flows-TJQIMGUX.js.map} +1 -1
  383. package/dist/{helpers-34QNVIGB.js → helpers-DE53KG3E.js} +17 -17
  384. package/dist/{helpers-34QNVIGB.js.map → helpers-DE53KG3E.js.map} +1 -1
  385. package/dist/library/index.js +11 -11
  386. package/dist/{library-publish-RUQTKTJU.js → library-publish-KKQ2ULLX.js} +55 -55
  387. package/dist/{library-publish-RUQTKTJU.js.map → library-publish-KKQ2ULLX.js.map} +1 -1
  388. package/dist/model-endpoint/index.js +12 -12
  389. package/dist/model-endpoint/src/resolve.d.ts +1 -1
  390. package/dist/{open-library-PVTIUQUF.js → open-library-RJGJIW5H.js} +20 -20
  391. package/dist/{open-library-PVTIUQUF.js.map → open-library-RJGJIW5H.js.map} +1 -1
  392. package/dist/open-registry-3QS3J7KO.js +32 -0
  393. package/dist/{open-registry-SOIS3TA2.js.map → open-registry-3QS3J7KO.js.map} +1 -1
  394. package/dist/paths-QAV4C3KX.js +22 -0
  395. package/dist/{paths-JLNX7Y4X.js.map → paths-QAV4C3KX.js.map} +1 -1
  396. package/dist/plugin-registry/index.js +1 -1
  397. package/dist/plugin-registry/src/context.d.ts +3 -3
  398. package/dist/plugin-registry/src/context.d.ts.map +1 -1
  399. package/dist/plugin-registry/src/deploy-handle.d.ts +1 -1
  400. package/dist/plugin-registry/src/index.d.ts +2 -2
  401. package/dist/plugin-registry/src/index.d.ts.map +1 -1
  402. package/dist/plugin-registry/src/internal.d.ts.map +1 -1
  403. package/dist/plugin-registry/src/registry.d.ts +3 -3
  404. package/dist/plugin-registry/src/registry.d.ts.map +1 -1
  405. package/dist/plugin-registry/src/targets.d.ts +9 -9
  406. package/dist/plugin-registry/src/targets.d.ts.map +1 -1
  407. package/dist/{plugin-store-G2GWAHSD.js → plugin-store-MSH6GK6T.js} +12 -12
  408. package/dist/{plugin-store-G2GWAHSD.js.map → plugin-store-MSH6GK6T.js.map} +1 -1
  409. package/dist/plugins/src/asset-kind-provider.d.ts +1 -1
  410. package/dist/project-HZW2MZPA.js +84 -0
  411. package/dist/{project-EX47PUBN.js.map → project-HZW2MZPA.js.map} +1 -1
  412. package/dist/resolver/index.js +8 -8
  413. package/dist/runner/index.js +42 -42
  414. package/dist/runner/src/agent.d.ts +3 -3
  415. package/dist/runner/src/agent.d.ts.map +1 -1
  416. package/dist/runner/src/agents/in-process-host.d.ts +1 -1
  417. package/dist/runner/src/agents/instances.d.ts +1 -1
  418. package/dist/runner/src/agents/instances.d.ts.map +1 -1
  419. package/dist/runner/src/agents/run-controller.d.ts +7 -7
  420. package/dist/runner/src/agents/run-controller.d.ts.map +1 -1
  421. package/dist/runner/src/agents/standalone-surface.d.ts +2 -2
  422. package/dist/runner/src/agents/standalone-surface.d.ts.map +1 -1
  423. package/dist/runner/src/ai-provider-switch.d.ts +7 -7
  424. package/dist/runner/src/assistant-home.d.ts +1 -1
  425. package/dist/runner/src/capability-registry.d.ts +2 -2
  426. package/dist/runner/src/coalesced-restart.d.ts +2 -2
  427. package/dist/runner/src/compaction/context-window.d.ts +8 -8
  428. package/dist/runner/src/compaction/context-window.d.ts.map +1 -1
  429. package/dist/runner/src/compaction/orchestrator.d.ts +24 -24
  430. package/dist/runner/src/compaction/orchestrator.d.ts.map +1 -1
  431. package/dist/runner/src/compaction-gate.d.ts +30 -30
  432. package/dist/runner/src/compaction-gate.d.ts.map +1 -1
  433. package/dist/runner/src/composition/dry-run.d.ts +2 -2
  434. package/dist/runner/src/composition/dry-run.d.ts.map +1 -1
  435. package/dist/runner/src/composition/resolve-instance.d.ts +2 -2
  436. package/dist/runner/src/composition/resolve.d.ts +1 -1
  437. package/dist/runner/src/config.d.ts +3 -3
  438. package/dist/runner/src/config.d.ts.map +1 -1
  439. package/dist/runner/src/context-usage/collector.d.ts +15 -15
  440. package/dist/runner/src/context-usage/collector.d.ts.map +1 -1
  441. package/dist/runner/src/context-usage/compose.d.ts +6 -6
  442. package/dist/runner/src/context-usage/compose.d.ts.map +1 -1
  443. package/dist/runner/src/context-usage/estimator.d.ts +1 -1
  444. package/dist/runner/src/context-usage/index.d.ts +1 -1
  445. package/dist/runner/src/context-usage/index.d.ts.map +1 -1
  446. package/dist/runner/src/context-usage/transcript-tracker.d.ts +2 -2
  447. package/dist/runner/src/context-usage/transcript-tracker.d.ts.map +1 -1
  448. package/dist/runner/src/credential-notice.d.ts +3 -3
  449. package/dist/runner/src/credential-notice.d.ts.map +1 -1
  450. package/dist/runner/src/credential-rotated.d.ts +1 -1
  451. package/dist/runner/src/final-text.d.ts +1 -1
  452. package/dist/runner/src/{driver-swap-gate.d.ts → harness-swap-gate.d.ts} +21 -21
  453. package/dist/runner/src/harness-swap-gate.d.ts.map +1 -0
  454. package/dist/runner/src/late-mcp-rebuild.d.ts +6 -6
  455. package/dist/runner/src/late-mcp-rebuild.d.ts.map +1 -1
  456. package/dist/runner/src/lifecycle-handler.d.ts +1 -1
  457. package/dist/runner/src/lifecycle-handler.d.ts.map +1 -1
  458. package/dist/runner/src/manifest.d.ts +1 -1
  459. package/dist/runner/src/mcp-runtime-handlers.d.ts +6 -6
  460. package/dist/runner/src/mcp-runtime-handlers.d.ts.map +1 -1
  461. package/dist/runner/src/model-endpoint-discovery.d.ts +1 -1
  462. package/dist/runner/src/pending-turns.d.ts +3 -3
  463. package/dist/runner/src/platform-blocks.d.ts +5 -5
  464. package/dist/runner/src/platform-blocks.d.ts.map +1 -1
  465. package/dist/runner/src/prompt-turn-queue.d.ts +1 -1
  466. package/dist/runner/src/provider-quota-forwarder.d.ts +1 -1
  467. package/dist/runner/src/provider-quota-forwarder.d.ts.map +1 -1
  468. package/dist/runner/src/reconfigure-handler.d.ts +14 -14
  469. package/dist/runner/src/reconfigure-handler.d.ts.map +1 -1
  470. package/dist/runner/src/resource-handler.d.ts +1 -1
  471. package/dist/runner/src/resources.d.ts +5 -5
  472. package/dist/runner/src/resources.d.ts.map +1 -1
  473. package/dist/runner/src/runner-capabilities.d.ts +7 -7
  474. package/dist/runner/src/runtime-session-emit.d.ts +5 -5
  475. package/dist/runner/src/runtime-session-emit.d.ts.map +1 -1
  476. package/dist/runner/src/s3-presign-client.d.ts +1 -1
  477. package/dist/runner/src/serve-credentials.d.ts +7 -7
  478. package/dist/runner/src/serve-credentials.d.ts.map +1 -1
  479. package/dist/runner/src/serve.d.ts +32 -32
  480. package/dist/runner/src/serve.d.ts.map +1 -1
  481. package/dist/runner/src/session-builder.d.ts +41 -41
  482. package/dist/runner/src/session-builder.d.ts.map +1 -1
  483. package/dist/runner/src/session-capability-wiring.d.ts +9 -9
  484. package/dist/runner/src/session-capability-wiring.d.ts.map +1 -1
  485. package/dist/runner/src/session-stimulus.d.ts +1 -1
  486. package/dist/runner/src/session.d.ts +5 -5
  487. package/dist/runner/src/session.d.ts.map +1 -1
  488. package/dist/runner/src/skill-staging.d.ts +16 -16
  489. package/dist/runner/src/skill-staging.d.ts.map +1 -1
  490. package/dist/runner/src/turn-end-contract.d.ts +5 -5
  491. package/dist/runner/src/turn-end-contract.d.ts.map +1 -1
  492. package/dist/runner/src/turn-scheduler.d.ts +22 -22
  493. package/dist/runner/src/turn-scheduler.d.ts.map +1 -1
  494. package/dist/runner/src/turn-status-replay.d.ts +1 -1
  495. package/dist/runner/src/usage-limit-turn-hold.d.ts +1 -1
  496. package/dist/sdk/asset-manager.js +14 -14
  497. package/dist/sdk/bridge.js +22 -22
  498. package/dist/sdk/core.js +8 -8
  499. package/dist/sdk/flow.js +9 -9
  500. package/dist/sdk/index.js +46 -46
  501. package/dist/sdk/index.js.map +1 -1
  502. package/dist/sdk/resolver.js +8 -8
  503. package/dist/sdk/runner.js +42 -42
  504. package/dist/sdk/session.js +2 -2
  505. package/dist/sdk/src/agent-session.d.ts +1 -1
  506. package/dist/sdk/src/local-runtime.d.ts +1 -1
  507. package/dist/sdk/src/local-runtime.d.ts.map +1 -1
  508. package/dist/sdk/src/types.d.ts +1 -1
  509. package/dist/sdk/src/types.d.ts.map +1 -1
  510. package/dist/sdk/store.js +2 -2
  511. package/dist/sdk/transport/ws/server.js +9 -9
  512. package/dist/sdk/transport/ws.js +9 -9
  513. package/dist/sdk/transport.js +9 -9
  514. package/dist/sdk/types.js +1 -1
  515. package/dist/{serve-preflight-QXRKGOI5.js → serve-preflight-L4POEHNQ.js} +42 -42
  516. package/dist/serve-preflight-L4POEHNQ.js.map +1 -0
  517. package/dist/session/index.js +2 -2
  518. package/dist/session/src/dispatcher.d.ts +2 -2
  519. package/dist/sessions-2Q7SSYPT.js +5 -0
  520. package/dist/{sessions-DICDEONJ.js.map → sessions-2Q7SSYPT.js.map} +1 -1
  521. package/dist/{setup-AFZQNGKA.js → setup-AGYB4PKR.js} +47 -47
  522. package/dist/setup-AGYB4PKR.js.map +1 -0
  523. package/dist/{skills-YYYC6D5X.js → skills-2LMQ2IAD.js} +12 -12
  524. package/dist/{skills-YYYC6D5X.js.map → skills-2LMQ2IAD.js.map} +1 -1
  525. package/dist/source-GBMYD3RO.js +85 -0
  526. package/dist/{source-DGPCT5IC.js.map → source-GBMYD3RO.js.map} +1 -1
  527. package/dist/{source-manifest-publish-AGJ63JF2.js → source-manifest-publish-FK22TVQT.js} +54 -54
  528. package/dist/{source-manifest-publish-AGJ63JF2.js.map → source-manifest-publish-FK22TVQT.js.map} +1 -1
  529. package/dist/store/index.js +2 -2
  530. package/dist/store/src/store.d.ts +3 -3
  531. package/dist/store/src/store.d.ts.map +1 -1
  532. package/dist/transport/index.js +9 -9
  533. package/dist/transport/ws/server.js +9 -9
  534. package/dist/transport/ws.js +9 -9
  535. package/dist/tui/index.js +62 -62
  536. package/dist/tui/index.js.map +1 -1
  537. package/dist/tui/src/repl-session.d.ts +5 -5
  538. package/dist/tui/src/repl.d.ts +5 -5
  539. package/dist/tui/src/repl.d.ts.map +1 -1
  540. package/dist/types/index.js +1 -1
  541. package/dist/types/manifests.js +1 -1
  542. package/dist/types/src/agent-lifecycle.d.ts +1 -1
  543. package/dist/types/src/agent-lifecycle.d.ts.map +1 -1
  544. package/dist/types/src/ask-slots.d.ts +1 -1
  545. package/dist/types/src/capabilities.d.ts +1 -1
  546. package/dist/types/src/context-usage.d.ts +22 -22
  547. package/dist/types/src/context-usage.d.ts.map +1 -1
  548. package/dist/types/src/events.d.ts +49 -49
  549. package/dist/types/src/events.d.ts.map +1 -1
  550. package/dist/types/src/index.d.ts +2 -2
  551. package/dist/types/src/index.d.ts.map +1 -1
  552. package/dist/types/src/lifecycle.d.ts +6 -6
  553. package/dist/types/src/lifecycle.d.ts.map +1 -1
  554. package/dist/types/src/logging.d.ts +1 -1
  555. package/dist/types/src/manifests/agent.d.ts +3 -3
  556. package/dist/types/src/protocol.d.ts +4 -4
  557. package/dist/types/src/runtime.d.ts +38 -38
  558. package/dist/types/src/runtime.d.ts.map +1 -1
  559. package/dist/types/src/version.d.ts +22 -11
  560. package/dist/types/src/version.d.ts.map +1 -1
  561. package/dist/validator-DRHMJ457.js +5 -0
  562. package/dist/{validator-FA2PFW6N.js.map → validator-DRHMJ457.js.map} +1 -1
  563. package/dist/workspace-plugin/adapters/mcp.js +34 -34
  564. package/dist/workspace-plugin/adapters/omp.js +26 -26
  565. package/dist/workspace-plugin/adapters/omp.js.map +1 -1
  566. package/dist/workspace-plugin/index.js +3 -3
  567. package/dist/workspace-plugin/src/plugin.d.ts +5 -5
  568. package/dist/workspace-plugin/src/plugin.d.ts.map +1 -1
  569. package/dist/workspace-plugin/src/tools/flows.d.ts +1 -1
  570. package/dist/workspace-plugin/src/tools/validator.d.ts +6 -6
  571. package/dist/workspace-plugin/src/tools/validator.d.ts.map +1 -1
  572. package/dist/workspace-plugin/src/types.d.ts +2 -2
  573. package/dist/workspace-plugin/src/types.d.ts.map +1 -1
  574. package/package.json +59 -59
  575. package/dist/bridge/drivers/claude-sdk.js.map +0 -1
  576. package/dist/bridge/drivers/codex.js.map +0 -1
  577. package/dist/bridge/drivers/continue.js.map +0 -1
  578. package/dist/bridge/drivers/echo.js.map +0 -1
  579. package/dist/bridge/drivers/gemini.js +0 -18
  580. package/dist/bridge/drivers/goose.js.map +0 -1
  581. package/dist/bridge/drivers/omp.js.map +0 -1
  582. package/dist/bridge/drivers/opencode.js.map +0 -1
  583. package/dist/bridge/drivers/qwen.js.map +0 -1
  584. package/dist/bridge/src/codex/managed-driver.d.ts.map +0 -1
  585. package/dist/bridge/src/driver-capabilities.d.ts.map +0 -1
  586. package/dist/bridge/src/driver-model-check.d.ts.map +0 -1
  587. package/dist/bridge/src/drivers/_subprocess-cli.d.ts.map +0 -1
  588. package/dist/bridge/src/drivers/claude-context-usage.d.ts.map +0 -1
  589. package/dist/bridge/src/drivers/claude-sdk.d.ts.map +0 -1
  590. package/dist/bridge/src/drivers/claude-self-turns.d.ts.map +0 -1
  591. package/dist/bridge/src/drivers/claude-tool-allowlist.d.ts.map +0 -1
  592. package/dist/bridge/src/drivers/codex.d.ts.map +0 -1
  593. package/dist/bridge/src/drivers/continue.d.ts.map +0 -1
  594. package/dist/bridge/src/drivers/echo.d.ts.map +0 -1
  595. package/dist/bridge/src/drivers/flow-script.d.ts.map +0 -1
  596. package/dist/bridge/src/drivers/gemini.d.ts.map +0 -1
  597. package/dist/bridge/src/drivers/goose.d.ts.map +0 -1
  598. package/dist/bridge/src/drivers/omp-models-yml.d.ts.map +0 -1
  599. package/dist/bridge/src/drivers/omp.d.ts.map +0 -1
  600. package/dist/bridge/src/drivers/opencode.d.ts.map +0 -1
  601. package/dist/bridge/src/drivers/qwen.d.ts.map +0 -1
  602. package/dist/bridge/src/drivers/recovery-policy.d.ts.map +0 -1
  603. package/dist/bridge/src/drivers/resume-probe.d.ts.map +0 -1
  604. package/dist/bridge/src/drivers/sanitize-assistant-text.d.ts.map +0 -1
  605. package/dist/bridge/src/drivers/scrub-transcript.d.ts.map +0 -1
  606. package/dist/bridge/src/provider-materialize/env-drivers.d.ts.map +0 -1
  607. package/dist/chunk-2GXSSZAM.js.map +0 -1
  608. package/dist/chunk-4ZTPYIBE.js.map +0 -1
  609. package/dist/chunk-5BEFNLOR.js.map +0 -1
  610. package/dist/chunk-5TBFN46Z.js.map +0 -1
  611. package/dist/chunk-6E6PKKAD.js.map +0 -1
  612. package/dist/chunk-7NT4F6SR.js.map +0 -1
  613. package/dist/chunk-7SCS64BG.js.map +0 -1
  614. package/dist/chunk-AJ7EGIFR.js.map +0 -1
  615. package/dist/chunk-C7WBGSBV.js.map +0 -1
  616. package/dist/chunk-COJIL7G4.js.map +0 -1
  617. package/dist/chunk-CQJH4G2K.js.map +0 -1
  618. package/dist/chunk-EAZECHPM.js.map +0 -1
  619. package/dist/chunk-EPBKISS5.js.map +0 -1
  620. package/dist/chunk-FPHNJE4M.js.map +0 -1
  621. package/dist/chunk-HT35SQZD.js.map +0 -1
  622. package/dist/chunk-IG5LZ3WU.js.map +0 -1
  623. package/dist/chunk-IP2IPMEH.js.map +0 -1
  624. package/dist/chunk-IZCR27MU.js.map +0 -1
  625. package/dist/chunk-J24CY3PF.js.map +0 -1
  626. package/dist/chunk-JTOWA6RS.js.map +0 -1
  627. package/dist/chunk-L2AMXONH.js.map +0 -1
  628. package/dist/chunk-MJHSLODD.js.map +0 -1
  629. package/dist/chunk-MKRWN7XP.js.map +0 -1
  630. package/dist/chunk-MRHVPQNO.js.map +0 -1
  631. package/dist/chunk-N46LQR46.js.map +0 -1
  632. package/dist/chunk-QG6GHTRM.js.map +0 -1
  633. package/dist/chunk-RPZVHXQ3.js.map +0 -1
  634. package/dist/chunk-V257LUBM.js.map +0 -1
  635. package/dist/chunk-VJ7NU7GD.js.map +0 -1
  636. package/dist/chunk-VSZWNUZC.js.map +0 -1
  637. package/dist/chunk-W4Q6CKJ5.js.map +0 -1
  638. package/dist/chunk-WST6UITC.js.map +0 -1
  639. package/dist/chunk-XJVBUDDJ.js.map +0 -1
  640. package/dist/chunk-XWOPZW26.js.map +0 -1
  641. package/dist/chunk-Y56YIT6J.js.map +0 -1
  642. package/dist/chunk-YROR332M.js.map +0 -1
  643. package/dist/chunk-ZQSOJH6I.js.map +0 -1
  644. package/dist/claude-code-2PU7TITZ.js +0 -10
  645. package/dist/cli/src/driver-error.d.ts +0 -28
  646. package/dist/cli/src/driver-error.d.ts.map +0 -1
  647. package/dist/connectors-RBGZ3M7G.js +0 -48
  648. package/dist/core/driver-targets.d.ts +0 -2
  649. package/dist/core/driver-targets.js +0 -4
  650. package/dist/core/driver-targets.js.map +0 -1
  651. package/dist/core/src/driver-sdk.d.ts.map +0 -1
  652. package/dist/core/src/driver-targets.d.ts +0 -71
  653. package/dist/core/src/driver-targets.d.ts.map +0 -1
  654. package/dist/open-registry-SOIS3TA2.js +0 -32
  655. package/dist/paths-JLNX7Y4X.js +0 -22
  656. package/dist/project-EX47PUBN.js +0 -84
  657. package/dist/runner/src/driver-swap-gate.d.ts.map +0 -1
  658. package/dist/serve-preflight-QXRKGOI5.js.map +0 -1
  659. package/dist/sessions-DICDEONJ.js +0 -5
  660. package/dist/setup-AFZQNGKA.js.map +0 -1
  661. package/dist/source-DGPCT5IC.js +0 -85
  662. package/dist/validator-FA2PFW6N.js +0 -5
  663. /package/dist/bridge/{drivers → harnesses}/gemini.js.map +0 -0
@@ -1,11 +1,11 @@
1
1
  import { resolveFragments, loadPromptExtensions } from './chunk-NOA6EJXE.js';
2
- import { renderAgentToFramework, CODEX_IDENTITY_DIR } from './chunk-C7WBGSBV.js';
3
- import { SKILL_DESCRIPTION_PLACEHOLDER_PREFIX, SKILL_DESCRIPTION_PLACEHOLDER, PRESET_ITEM_PLACEHOLDER_REF, AGENT_BODY_PLACEHOLDER, PROMPT_BODY_PLACEHOLDER, CONTRACT_BODY_PLACEHOLDER, SKILL_BODY_PLACEHOLDER } from './chunk-335ENCCS.js';
4
- import { computeHash, applyPatch } from './chunk-N46LQR46.js';
5
- import { deployedDir, deployedBase, deployedPaths, isDeployed } from './chunk-5TBFN46Z.js';
6
- import { resolveSkWorkspaceConfig, agentSourceCacheDir, resolveAgentDefinitionDir, AGENT_INSTANCE_ID_PATTERN } from './chunk-V257LUBM.js';
2
+ import { renderAgentToFramework, CODEX_IDENTITY_DIR } from './chunk-DUMTLYSO.js';
3
+ import { SKILL_DESCRIPTION_PLACEHOLDER_PREFIX, SKILL_DESCRIPTION_PLACEHOLDER, PRESET_ITEM_PLACEHOLDER_REF, AGENT_BODY_PLACEHOLDER, PROMPT_BODY_PLACEHOLDER, CONTRACT_BODY_PLACEHOLDER, SKILL_BODY_PLACEHOLDER } from './chunk-E572OHGY.js';
4
+ import { computeHash, applyPatch } from './chunk-L4YKW5AY.js';
5
+ import { deployedDir, deployedBase, deployedPaths, isDeployed } from './chunk-5KRMNUL4.js';
6
+ import { resolveSkWorkspaceConfig, agentSourceCacheDir, resolveAgentDefinitionDir, AGENT_INSTANCE_ID_PATTERN } from './chunk-OHNKYHRR.js';
7
7
  import { globalSkaileDir } from './chunk-L5VSIPQD.js';
8
- import { DRIVER_TARGETS } from './chunk-IG5LZ3WU.js';
8
+ import { HARNESS_TARGETS } from './chunk-VTETQCR6.js';
9
9
  import { listAssetFiles, listSecretFiles, listSkippedSymlinks, librarySymlinkMessage, isSecretFileName, isEnvFileName, isNonAssetDir, isNonAssetFile } from './chunk-UQ33Y4DM.js';
10
10
  import { parseFrontmatter } from './chunk-GOCWM7FN.js';
11
11
  import { assetRefToStr, parseAssetRefLoose } from './chunk-WDXZA7QW.js';
@@ -208,15 +208,15 @@ function resolveDelegates(manifest, agentName, srcDir, workspaceRoot, warnings)
208
208
  }
209
209
  return delegates;
210
210
  }
211
- function buildFragmentContext(subAgentNames, driverTarget, skillsRelDir, wsConfig, abilityRefs, contractRefs, callee) {
211
+ function buildFragmentContext(subAgentNames, harness, skillsRelDir, wsConfig, abilityRefs, contractRefs, callee) {
212
212
  const connectors = (wsConfig?.connectors ?? []).filter((c) => !callee || callee.connectorIds.includes(c.id)).map((c) => ({
213
213
  id: c.id,
214
214
  driver: c.driver,
215
215
  access: c.access ?? "read-write"
216
216
  }));
217
- const agentsRelDir = DRIVER_TARGETS[driverTarget]?.local.agent ?? "";
217
+ const agentsRelDir = HARNESS_TARGETS[harness]?.local.agent ?? "";
218
218
  return {
219
- framework: driverTarget,
219
+ framework: harness,
220
220
  skillsDir: skillsRelDir,
221
221
  agentsDir: agentsRelDir,
222
222
  subAgents: subAgentNames,
@@ -226,7 +226,7 @@ function buildFragmentContext(subAgentNames, driverTarget, skillsRelDir, wsConfi
226
226
  contractRefs
227
227
  };
228
228
  }
229
- function installAgent(srcDir, agentDeployDir, workspaceRoot, driverTarget, skillsRelDir, nameOverride, includeSubAgents, visited, wsConfig, log, instance, delegated = false) {
229
+ function installAgent(srcDir, agentDeployDir, workspaceRoot, harness, skillsRelDir, nameOverride, includeSubAgents, visited, wsConfig, log, instance, delegated = false) {
230
230
  const created = [];
231
231
  const changed = [];
232
232
  const warnings = [];
@@ -249,14 +249,14 @@ function installAgent(srcDir, agentDeployDir, workspaceRoot, driverTarget, skill
249
249
  );
250
250
  return { created, changed, warnings };
251
251
  }
252
- log?.(`Installing git-agent: ${agentName} (${driverTarget})`);
252
+ log?.(`Installing git-agent: ${agentName} (${harness})`);
253
253
  const abilityRefs = resolveAbilityRefs(manifest, workspaceRoot, skillsRelDir);
254
254
  const contractRefs = resolveContractRefs(manifest, workspaceRoot, skillsRelDir);
255
255
  const delegates = resolveDelegates(manifest, agentName, srcDir, workspaceRoot, warnings);
256
256
  const subAgent = lifecycle === "role" || delegated;
257
257
  const fragmentCtx = buildFragmentContext(
258
258
  delegates.map((d) => d.name),
259
- driverTarget,
259
+ harness,
260
260
  skillsRelDir,
261
261
  wsConfig,
262
262
  abilityRefs,
@@ -289,7 +289,7 @@ function installAgent(srcDir, agentDeployDir, workspaceRoot, driverTarget, skill
289
289
  mcpServers: boundMcpServers(manifest, instance),
290
290
  srcDir
291
291
  };
292
- const result = renderAgentToFramework(input, driverTarget, log);
292
+ const result = renderAgentToFramework(input, harness, log);
293
293
  created.push(...result.created);
294
294
  changed.push(...result.changed);
295
295
  warnings.push(...result.warnings);
@@ -299,7 +299,7 @@ function installAgent(srcDir, agentDeployDir, workspaceRoot, driverTarget, skill
299
299
  delegate.srcDir,
300
300
  agentDeployDir,
301
301
  workspaceRoot,
302
- driverTarget,
302
+ harness,
303
303
  skillsRelDir,
304
304
  delegate.alias,
305
305
  // undefined → the sub-agent's own name from its agent.yaml
@@ -479,7 +479,7 @@ function deployedAssetDrift(entry, opts) {
479
479
  const dest = deployedDir(
480
480
  component,
481
481
  entry.name,
482
- opts.driverTarget ?? "claude-code",
482
+ opts.harness ?? "claude-code",
483
483
  opts.global ?? false,
484
484
  opts.cwd
485
485
  );
@@ -571,7 +571,7 @@ function deployAsset(entry, repositories, opts, log = noop) {
571
571
  return deployEntry(entry, repositories, opts, log).deployed;
572
572
  }
573
573
  function deployEntry(entry, repositories, opts, log, sourceKept = false, delegated = false) {
574
- const driverTarget = opts.driverTarget ?? "claude-code";
574
+ const harness = opts.harness ?? "claude-code";
575
575
  const globalInstall = opts.global ?? false;
576
576
  const cwd = opts.cwd;
577
577
  const provider = opts.registry.getProvider(entry.kind);
@@ -579,17 +579,12 @@ function deployEntry(entry, repositories, opts, log, sourceKept = false, delegat
579
579
  if (!provider || !component) return { deployed: true, changed: false };
580
580
  if (component === "agent") {
581
581
  const workspaceRoot = cwd ?? process.cwd();
582
- const agentDeployDir = deployedBase(
583
- component,
584
- driverTarget,
585
- globalInstall,
586
- cwd
587
- );
588
- const targetMap = DRIVER_TARGETS[driverTarget];
582
+ const agentDeployDir = deployedBase(component, harness, globalInstall, cwd);
583
+ const targetMap = HARNESS_TARGETS[harness];
589
584
  const skillsRelDir = targetMap?.local.skill ?? "";
590
585
  const wsConfig = resolveSkWorkspaceConfig(workspaceRoot);
591
586
  const srcDir = statSync(entry.source).isDirectory() ? entry.source : dirname(entry.source);
592
- for (const held of deployedPaths(component, entry.name, driverTarget, globalInstall, cwd)) {
587
+ for (const held of deployedPaths(component, entry.name, harness, globalInstall, cwd)) {
593
588
  try {
594
589
  if (lstatSync(held).isSymbolicLink()) unlinkSync(held);
595
590
  } catch {
@@ -599,7 +594,7 @@ function deployEntry(entry, repositories, opts, log, sourceKept = false, delegat
599
594
  srcDir,
600
595
  agentDeployDir,
601
596
  workspaceRoot,
602
- driverTarget,
597
+ harness,
603
598
  skillsRelDir,
604
599
  entry.name,
605
600
  /* includeSubAgents */
@@ -614,7 +609,7 @@ function deployEntry(entry, repositories, opts, log, sourceKept = false, delegat
614
609
  if (result.created.length > 0) {
615
610
  let changed = result.changed.length > 0;
616
611
  const staleRawCopy = join(agentDeployDir, entry.name);
617
- if (driverTarget !== "omp" && existsSync(staleRawCopy)) {
612
+ if (harness !== "omp" && existsSync(staleRawCopy)) {
618
613
  clearDest(staleRawCopy);
619
614
  changed = true;
620
615
  }
@@ -624,7 +619,7 @@ function deployEntry(entry, repositories, opts, log, sourceKept = false, delegat
624
619
  return { deployed: true, changed };
625
620
  }
626
621
  }
627
- const dest = deployedDir(component, entry.name, driverTarget, globalInstall, cwd);
622
+ const dest = deployedDir(component, entry.name, harness, globalInstall, cwd);
628
623
  mkdirSync(dirname(dest), { recursive: true });
629
624
  const repoDecl = entry.publisher ? repositories[entry.publisher] : void 0;
630
625
  const hasLocalPath = repoDecl?.path != null && repoDecl.factory !== true;
@@ -641,7 +636,7 @@ function deployAll(resolved, repositories, patches, opts, log = noop) {
641
636
  assertNoLibrarySymlinks(resolved, opts.registry, repositories, opts.link === true);
642
637
  const deployed = [];
643
638
  const deployedAt = [];
644
- const driverTarget = opts.driverTarget ?? "claude-code";
639
+ const harness = opts.harness ?? "claude-code";
645
640
  const globalInstall = opts.global ?? false;
646
641
  const cwd = opts.cwd;
647
642
  const isAgent = (entry) => installTargetOf(opts.registry, entry.kind) === "agent";
@@ -665,8 +660,8 @@ function deployAll(resolved, repositories, patches, opts, log = noop) {
665
660
  const component = installTargetOf(opts.registry, entry.kind);
666
661
  if (!component) continue;
667
662
  const ref = `${entry.kind}:${entry.name}`;
668
- if (component !== "agent" && isDeployed(component, entry.name, driverTarget, globalInstall, cwd)) {
669
- const dest = deployedDir(component, entry.name, driverTarget, globalInstall, cwd);
663
+ if (component !== "agent" && isDeployed(component, entry.name, harness, globalInstall, cwd)) {
664
+ const dest = deployedDir(component, entry.name, harness, globalInstall, cwd);
670
665
  let destIsSymlink = false;
671
666
  try {
672
667
  destIsSymlink = lstatSync(dest).isSymbolicLink();
@@ -694,7 +689,7 @@ function deployAll(resolved, repositories, patches, opts, log = noop) {
694
689
  return false;
695
690
  }
696
691
  });
697
- const strayFiles = deployedAssetDrift(entry, { ...opts, driverTarget, global: globalInstall, cwd })?.extra.length ?? 0;
692
+ const strayFiles = deployedAssetDrift(entry, { ...opts, harness, global: globalInstall, cwd })?.extra.length ?? 0;
698
693
  if (manifestUnchanged && companionsUnchanged && strayFiles === 0) {
699
694
  log(` already deployed: ${ref}`);
700
695
  continue;
@@ -714,7 +709,7 @@ function deployAll(resolved, repositories, patches, opts, log = noop) {
714
709
  if (changed) deployedAt.push([resolved.indexOf(entry), canonicalEntryRef(entry)]);
715
710
  const patchFile = patches[ref];
716
711
  if (patchFile && existsSync(patchFile)) {
717
- const dest = deployedDir(component, entry.name, driverTarget, globalInstall, cwd);
712
+ const dest = deployedDir(component, entry.name, harness, globalInstall, cwd);
718
713
  if (applyPatch(dest, patchFile)) {
719
714
  log(` patched ${ref}`);
720
715
  } else {
@@ -726,9 +721,9 @@ function deployAll(resolved, repositories, patches, opts, log = noop) {
726
721
  return deployed;
727
722
  }
728
723
  function diffDeployedAgent(entry, opts, instance) {
729
- const driverTarget = opts.driverTarget ?? "claude-code";
724
+ const harness = opts.harness ?? "claude-code";
730
725
  const workspaceRoot = opts.cwd ?? process.cwd();
731
- const deployedAgents = deployedBase("agent", driverTarget, opts.global ?? false, opts.cwd);
726
+ const deployedAgents = deployedBase("agent", harness, opts.global ?? false, opts.cwd);
732
727
  const scratch = mkdtempSync(join(tmpdir(), "skaile-diff-agent-"));
733
728
  try {
734
729
  const renderedAgents = join(scratch, "agents");
@@ -737,8 +732,8 @@ function diffDeployedAgent(entry, opts, instance) {
737
732
  srcDir,
738
733
  renderedAgents,
739
734
  workspaceRoot,
740
- driverTarget,
741
- DRIVER_TARGETS[driverTarget]?.local.skill ?? "",
735
+ harness,
736
+ HARNESS_TARGETS[harness]?.local.skill ?? "",
742
737
  instance?.id ?? entry.name,
743
738
  /* includeSubAgents */
744
739
  instance !== void 0,
@@ -791,16 +786,16 @@ function writeKeptLegacyCopies(paths) {
791
786
  `);
792
787
  }
793
788
  function removeAsset(kind, name, opts) {
794
- const driverTarget = opts.driverTarget ?? "claude-code";
789
+ const harness = opts.harness ?? "claude-code";
795
790
  const globalInstall = opts.global ?? false;
796
791
  const cwd = opts.cwd;
797
792
  const component = installTargetOf(opts.registry, kind);
798
793
  if (!component) return false;
799
794
  let removed = false;
800
795
  const kept = globalInstall ? readKeptLegacyCopies() : /* @__PURE__ */ new Set();
801
- const legacyOmp = globalInstall && driverTarget === "omp" && component !== "flow" ? deployedPaths(component, name, "omp", false, homedir()).filter((p) => !kept.has(p)) : [];
796
+ const legacyOmp = globalInstall && harness === "omp" && component !== "flow" ? deployedPaths(component, name, "omp", false, homedir()).filter((p) => !kept.has(p)) : [];
802
797
  for (const dest of [
803
- ...deployedPaths(component, name, driverTarget, globalInstall, cwd),
798
+ ...deployedPaths(component, name, harness, globalInstall, cwd),
804
799
  ...legacyOmp
805
800
  ]) {
806
801
  try {
@@ -812,7 +807,7 @@ function removeAsset(kind, name, opts) {
812
807
  }
813
808
  }
814
809
  if (component === "agent") {
815
- const agentDir = deployedBase(component, driverTarget, globalInstall, cwd);
810
+ const agentDir = deployedBase(component, harness, globalInstall, cwd);
816
811
  const extras = [join(dirname(agentDir), CODEX_IDENTITY_DIR, `${name}.md`)];
817
812
  if (!globalInstall) extras.push(join(agentSourceCacheDir(cwd ?? process.cwd()), name));
818
813
  for (const extra of extras) {
@@ -915,5 +910,5 @@ function createScaffold(name, kind, destDir, opts = {}) {
915
910
  }
916
911
 
917
912
  export { SCAFFOLD_KINDS, assertNoLibrarySymlinks, canonicalEntryRef, createScaffold, deployAll, deployAsset, deployedAssetDrift, diffDeployedAgent, installAgent, installTargetOf, readKeptLegacyCopies, removeAsset, writeKeptLegacyCopies };
918
- //# sourceMappingURL=chunk-JTOWA6RS.js.map
919
- //# sourceMappingURL=chunk-JTOWA6RS.js.map
913
+ //# sourceMappingURL=chunk-3JKGY2YC.js.map
914
+ //# sourceMappingURL=chunk-3JKGY2YC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../asset-manager/src/install-agent.ts","../asset-manager/src/installer.ts"],"names":["parseYaml","parseFrontmatter","join","basename","relative","resolve","existsSync","readFileSync","stringifyYaml","deployed"],"mappings":"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","file":"chunk-3JKGY2YC.js","sourcesContent":["/**\n * Agent installation — renders a GitAgent package (agent.yaml + SOUL.md + RULES.md)\n * into the framework-native format (`.claude/agents/<name>.md`, `.omp/agents/<name>/`,\n * `.codex/agents/<name>.toml`) and resolves abilities, contracts, fragments, and\n * prompt extensions from the workspace config along the way.\n *\n * System prompt phases (per agent):\n * 1. extends merge — inherit from parent agent.yaml if manifest.extends is set\n * 2. instance overrides — model / budget / lifecycle of the `skaile.yaml` instance\n * 3. ability refs — read SKILL.md frontmatter of the composed skills\n * 4. contract refs — locate CONTRACT.md files of the composed contracts\n * 5. fragments — resolve framework fragments (agent-mode, handoff, etc.)\n * 6. prompt-extensions — load per-project markdown extensions from skaile.yaml\n *\n * Used by `installer.ts` (the asset-install path, one agent asset under its own\n * name) and `install-instances.ts` (`skaile install`, one rendering per\n * `skaile.yaml` agent instance, named by the instance id). Sub-agents composed as\n * `composes: [{ kind: agent }]` (binding `delegate`, the default) are installed\n * flat (no nesting) in the same deploy directory; `binding: run` sub-agents are\n * host-executed and get no native file.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { basename, join, relative, resolve } from \"node:path\";\nimport type { AgentInstanceConfig, HarnessName, SkWorkspaceConfig } from \"@skaile/workspaces/core\";\nimport {\n AGENT_INSTANCE_ID_PATTERN,\n HARNESS_TARGETS,\n parseFrontmatter as parseMarkdownFrontmatter,\n parseAssetRefLoose,\n resolveAgentDefinitionDir,\n} from \"@skaile/workspaces/core\";\nimport type { AgentComposeItem, AgentLifecycle } from \"@skaile/workspaces/types/manifests\";\nimport { parse as parseYaml } from \"yaml\";\nimport {\n type AbilityRef,\n type ConnectorRef,\n type ContractRef,\n type FragmentContext,\n loadPromptExtensions,\n resolveFragments,\n} from \"./fragments.js\";\nimport { type AgentManifest, type AgentRenderInput, renderAgentToFramework } from \"./renderers.js\";\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\n/** Source file of the legacy markdown agent form: frontmatter + the system prompt as body. */\nconst AGENT_MD_FILE = \"AGENT.md\";\n\n/** A Claude-style `tools:` value (`\"Read, Grep\"` or a list) as the manifest's `tools.allowed`. */\nfunction toolsFromMarkdown(value: unknown): AgentManifest[\"tools\"] | undefined {\n if (Array.isArray(value)) return { allowed: value.map(String) };\n if (typeof value === \"string\") {\n const allowed = value.split(/[,\\s]+/).filter(Boolean);\n return allowed.length > 0 ? { allowed } : undefined;\n }\n return value && typeof value === \"object\" ? (value as AgentManifest[\"tools\"]) : undefined;\n}\n\n/**\n * The `AGENT.md` form of an agent as a manifest: the frontmatter, with the\n * Claude-style scalar `model:` / `tools:` shapes mapped to the manifest's\n * `model.preferred` / `tools.allowed`, and `metadata.version` read as `version`.\n */\nfunction readAgentMdManifest(agentDir: string): { manifest: AgentManifest; body: string } | null {\n const mdPath = join(agentDir, AGENT_MD_FILE);\n if (!existsSync(mdPath)) return null;\n try {\n const { data, body } = parseMarkdownFrontmatter(readFileSync(mdPath, \"utf-8\"));\n const meta = data.metadata as { version?: unknown } | undefined;\n const manifest: Record<string, unknown> = { ...data };\n if (manifest.version === undefined && meta?.version !== undefined) {\n manifest.version = String(meta.version);\n }\n if (typeof data.model === \"string\") manifest.model = { preferred: data.model };\n if (data.tools !== undefined) manifest.tools = toolsFromMarkdown(data.tools);\n return { manifest: manifest as AgentManifest, body };\n } catch {\n return null;\n }\n}\n\n/**\n * The agent's manifest: `agent.yaml`, else the frontmatter of the legacy\n * `AGENT.md`. `null` when the directory holds neither (or it cannot be parsed).\n */\nexport function readManifest(agentDir: string): AgentManifest | null {\n const yamlPath = join(agentDir, \"agent.yaml\");\n if (!existsSync(yamlPath)) return readAgentMdManifest(agentDir)?.manifest ?? null;\n try {\n return parseYaml(readFileSync(yamlPath, \"utf-8\")) as AgentManifest;\n } catch {\n return null;\n }\n}\n\nfunction readFile(agentDir: string, name: string): string | null {\n const p = join(agentDir, name);\n if (!existsSync(p)) return null;\n try {\n return readFileSync(p, \"utf-8\");\n } catch {\n return null;\n }\n}\n\n/**\n * The agent's identity text: `SOUL.md`; for an `AGENT.md` agent the markdown body\n * comes first, so a `SOUL.md` next to it extends the prompt rather than replacing it.\n */\nexport function readSoul(agentDir: string): string | null {\n const soul = readFile(agentDir, \"SOUL.md\");\n if (existsSync(join(agentDir, \"agent.yaml\"))) return soul;\n const body = readAgentMdManifest(agentDir)?.body;\n if (!body) return soul;\n return soul ? `${body}\\n\\n${soul}` : body;\n}\n\n/**\n * A name becomes a file or directory name under the deploy dir; one with a path\n * segment (`../x`, `a/b`) would write outside it. Refused, never sanitized.\n */\nfunction isSafeFileName(name: string): boolean {\n return name.length > 0 && name !== \".\" && name !== \"..\" && !/[\\\\/\\0]/.test(name);\n}\n\n/** Extract YAML frontmatter from a markdown file (content between first two --- delimiters). */\nfunction parseFrontmatter(content: string): Record<string, unknown> {\n const match = content.match(/^---\\n([\\s\\S]*?)\\n---/);\n if (!match) return {};\n try {\n return (parseYaml(match[1]!) as Record<string, unknown>) ?? {};\n } catch {\n return {};\n }\n}\n\n/**\n * Merge parent and child agent manifests.\n * Scalars: child wins. Arrays: parent + child, deduplicated (`composes` by\n * kind + ref + slot id, other arrays by value).\n */\nfunction mergeManifests(parent: AgentManifest, child: AgentManifest): AgentManifest {\n const result: AgentManifest = { ...parent };\n for (const [k, val] of Object.entries(child) as [keyof AgentManifest, unknown][]) {\n if (val === undefined) continue;\n const parentVal = result[k as keyof AgentManifest];\n if (k === \"composes\" && Array.isArray(val) && Array.isArray(parentVal)) {\n const merged = new Map<string, AgentComposeItem>();\n for (const item of [...parentVal, ...val] as AgentComposeItem[]) {\n merged.set(`${item.kind}\\u0000${item.ref}\\u0000${item.id ?? \"\"}`, item);\n }\n result.composes = [...merged.values()];\n } else if (Array.isArray(val) && Array.isArray(parentVal)) {\n (result as Record<string, unknown>)[k] = [...new Set([...parentVal, ...val])];\n } else {\n (result as Record<string, unknown>)[k] = val;\n }\n }\n return result;\n}\n\n/**\n * Phase 1: inherit scalars/arrays from a parent agent when `manifest.extends` is set.\n * Returns the (possibly merged) manifest; pushes a warning when the parent is missing.\n */\nfunction applyExtendsMerge(\n manifest: AgentManifest,\n srcDir: string,\n warnings: string[],\n): AgentManifest {\n if (!manifest.extends) return manifest;\n const parentDir = resolve(srcDir, manifest.extends);\n const parentManifest = readManifest(parentDir);\n if (parentManifest) {\n return mergeManifests(parentManifest, manifest);\n }\n warnings.push(\n `extends: parent agent not found at \"${manifest.extends}\" (from ${srcDir}) — skipping inheritance`,\n );\n return manifest;\n}\n\n/**\n * Phase 2: apply the instance's overrides to the asset's manifest — the model\n * selector, the turn budget (`budget.max_turns` → `runtime.max_turns`) and the\n * lifecycle. Returns the effective manifest and lifecycle.\n */\nfunction applyInstanceOverrides(\n manifest: AgentManifest,\n instance: AgentInstanceConfig | undefined,\n): { manifest: AgentManifest; lifecycle: AgentLifecycle } {\n const lifecycle = instance?.lifecycle ?? manifest.lifecycle ?? \"standing\";\n if (!instance) return { manifest, lifecycle };\n const effective: AgentManifest = { ...manifest, lifecycle };\n if (instance.model) {\n effective.model = { ...manifest.model, ...instance.model } as AgentManifest[\"model\"];\n }\n if (instance.budget?.max_turns !== undefined) {\n effective.runtime = { ...manifest.runtime, max_turns: instance.budget.max_turns };\n }\n return { manifest: effective, lifecycle };\n}\n\n/**\n * The name a composed asset is installed under: the asset name of a canonical\n * ref (`skill:@pub/name#1.0.0` → `name`), else the last path segment\n * (`./skills/name` → `name`).\n */\nfunction composeRefName(ref: string): string {\n const parsed = parseAssetRefLoose(ref);\n if (parsed) return parsed.name;\n const tail = ref.replace(/\\/+$/, \"\").split(\"/\").pop() ?? ref;\n return tail.replace(/^[a-z-]+:/, \"\").replace(/#.*$/, \"\") || ref;\n}\n\n/** Names of the composed items of `kind`, in declaration order, de-duplicated. */\nfunction composedNames(manifest: AgentManifest, kind: string): string[] {\n const names = (manifest.composes ?? [])\n .filter((item) => item.kind === kind)\n .map((item) => composeRefName(item.ref));\n return [...new Set(names)];\n}\n\n/**\n * Names of the agents the agent at `srcDir` calls as `delegate` sub-agents (its `kind: agent`\n * composes whose binding is not `run`). {@link installAgent} renders them next to it as\n * sub-agents, so a caller that renders the same agent on its own must do so as one too.\n */\nexport function delegateNamesOf(srcDir: string): string[] {\n const manifest = readManifest(srcDir);\n const names = (manifest?.composes ?? [])\n .filter((item) => item.kind === \"agent\" && item.binding !== \"run\")\n .map((item) => composeRefName(item.ref));\n return [...new Set(names)];\n}\n\n/**\n * The MCP servers an agent's `mcp-server` slots are bound to: the server the\n * instance's `connectors` map binds the slot id to, else the composed asset's\n * own name (the id its server is rendered under).\n */\nfunction boundMcpServers(\n manifest: AgentManifest,\n instance: AgentInstanceConfig | undefined,\n): string[] {\n const names = (manifest.composes ?? [])\n .filter((item) => item.kind === \"mcp-server\")\n .map(\n (item) => (item.id ? instance?.connectors?.[item.id] : undefined) ?? composeRefName(item.ref),\n );\n return [...new Set(names)];\n}\n\n/**\n * The workspace connector ids an agent's `connector` slots are bound to: the connector the\n * instance's `connectors` map binds the slot id to, else the slot id (a slot is usually named\n * after the workspace connector it uses), else the composed asset's own name.\n */\nfunction boundConnectorIds(\n manifest: AgentManifest,\n instance: AgentInstanceConfig | undefined,\n): string[] {\n const ids = (manifest.composes ?? [])\n .filter((item) => item.kind === \"connector\")\n .flatMap((item) => {\n const bound = item.id ? instance?.connectors?.[item.id] : undefined;\n return bound ? [bound] : [item.id, composeRefName(item.ref)].filter((s): s is string => !!s);\n });\n return [...new Set(ids)];\n}\n\n/** Phase 3: resolve ability refs — read description from the installed SKILL.md of each composed skill. */\nfunction resolveAbilityRefs(\n manifest: AgentManifest,\n workspaceRoot: string,\n skillsRelDir: string,\n): AbilityRef[] {\n const abilityRefs: AbilityRef[] = [];\n for (const name of composedNames(manifest, \"skill\")) {\n const skillMdPath = join(workspaceRoot, skillsRelDir, name, \"SKILL.md\");\n if (!existsSync(skillMdPath)) continue;\n try {\n const fm = parseFrontmatter(readFileSync(skillMdPath, \"utf-8\"));\n const desc = typeof fm.description === \"string\" ? fm.description : undefined;\n if (desc) abilityRefs.push({ name, description: desc });\n } catch {\n // skip unreadable SKILL.md\n }\n }\n return abilityRefs;\n}\n\n/** Phase 4: resolve contract refs — locate the CONTRACT.md of each composed contract in the skills dir. */\nfunction resolveContractRefs(\n manifest: AgentManifest,\n workspaceRoot: string,\n skillsRelDir: string,\n): ContractRef[] {\n const contractRefs: ContractRef[] = [];\n for (const name of composedNames(manifest, \"contract\")) {\n const contractAbsPath = join(workspaceRoot, skillsRelDir, name, \"CONTRACT.md\");\n if (!existsSync(contractAbsPath)) continue;\n contractRefs.push({ name, relativePath: relative(workspaceRoot, contractAbsPath) });\n }\n return contractRefs;\n}\n\n/** A `kind: agent` composition item rendered as its own native sub-agent file. */\ninterface DelegateSubAgent {\n /** `composes[].ref` as written. */\n ref: string;\n /** Absolute path of the sub-agent's source directory. */\n srcDir: string;\n /** File name: the item's `as`, else the sub-agent's own `name`. */\n name: string;\n /** `composes[].as`, forwarded as the install name override. */\n alias: string | undefined;\n}\n\n/**\n * Phase 5a: the `delegate` sub-agents of an agent — its `kind: agent` items\n * whose binding is not `run` (`delegate` is the default for the harnesses that\n * render native agent files). Catalog refs resolve like `agents.<id>.ref`;\n * anything else is a path relative to the composing agent's directory. An\n * unresolvable item is skipped with a warning.\n */\nfunction resolveDelegates(\n manifest: AgentManifest,\n agentName: string,\n srcDir: string,\n workspaceRoot: string,\n warnings: string[],\n): DelegateSubAgent[] {\n const delegates: DelegateSubAgent[] = [];\n for (const item of manifest.composes ?? []) {\n if (item.kind !== \"agent\" || item.binding === \"run\") continue;\n let subSrc: string | undefined;\n try {\n subSrc =\n item.ref.startsWith(\"agent:\") || item.ref.startsWith(\"ai-assets://\")\n ? resolveAgentDefinitionDir(workspaceRoot, item.ref)\n : resolve(srcDir, item.ref);\n } catch (err) {\n warnings.push(\n `Sub-agent ${item.ref} (from ${agentName}): ${err instanceof Error ? err.message : String(err)}`,\n );\n continue;\n }\n if (!subSrc || !existsSync(subSrc)) {\n warnings.push(`Sub-agent source not found: ${item.ref} (from ${agentName})`);\n continue;\n }\n const sub = readManifest(subSrc);\n const name = item.as ?? sub?.name ?? basename(subSrc);\n // The name is a file name under the deploy dir: refuse anything that is not a plain id.\n if (typeof name !== \"string\" || !AGENT_INSTANCE_ID_PATTERN.test(name)) {\n warnings.push(\n `Sub-agent ${item.ref} (from ${agentName}): name ${JSON.stringify(name)} must match ${AGENT_INSTANCE_ID_PATTERN} — skipped`,\n );\n continue;\n }\n delegates.push({\n ref: item.ref,\n srcDir: subSrc,\n name,\n alias: item.as,\n });\n }\n return delegates;\n}\n\n/** Phase 5b: assemble the fragment context from the manifest, workspace config, and resolved refs. */\nfunction buildFragmentContext(\n subAgentNames: string[],\n harness: string,\n skillsRelDir: string,\n wsConfig: SkWorkspaceConfig | undefined,\n abilityRefs: AbilityRef[],\n contractRefs: ContractRef[],\n /** Set for an agent that another agent calls: the connector ids its own slots are bound to. */\n callee?: { subAgent: boolean; connectorIds: string[] },\n): FragmentContext {\n const connectors: ConnectorRef[] = (wsConfig?.connectors ?? [])\n .filter((c) => !callee || callee.connectorIds.includes(c.id))\n .map((c) => ({\n id: c.id,\n driver: c.driver,\n access: c.access ?? \"read-write\",\n }));\n\n const agentsRelDir = HARNESS_TARGETS[harness as HarnessName]?.local.agent ?? \"\";\n\n return {\n framework: harness,\n skillsDir: skillsRelDir,\n agentsDir: agentsRelDir,\n subAgents: subAgentNames,\n ...(callee ? { subAgent: callee.subAgent } : {}),\n connectors,\n abilityRefs,\n contractRefs,\n };\n}\n\n// ── Core installation ─────────────────────────────────────────────────────────\n\n/**\n * Install a single GitAgent source directory using the appropriate renderer.\n *\n * When `includeSubAgents` is `true`, recursively installs the `delegate`\n * sub-agents (`composes: [{ kind: agent }]`) as separate flat agents in the\n * same deploy directory (no nesting). Tracks visited directories to prevent\n * infinite loops in sub-agent cycles.\n *\n * @param srcDir - Absolute path to the GitAgent source directory (contains `agent.yaml`).\n * @param agentDeployDir - Absolute path to the framework's agent deploy directory.\n * @param workspaceRoot - Absolute path to the workspace root.\n * @param harness - Agent framework ID used to select the renderer.\n * @param skillsRelDir - Relative path to the installed skills dir (e.g. `\".claude/skills\"`).\n * @param nameOverride - Override name for the installed agent. Defaults to `manifest.name`;\n * an instance render passes the instance id.\n * @param includeSubAgents - When `true`, recursively install `delegate` sub-agents.\n * @param visited - Set of resolved source paths already processed (cycle guard).\n * @param wsConfig - Workspace config from `skaile.yaml` (fragments, connectors, extensions).\n * @param log - Optional logger callback for progress messages.\n * @param instance - The `skaile.yaml` instance being rendered; its model / budget / lifecycle\n * override the asset's and its `connectors` map binds the `mcp-server` slots.\n * @returns Object with `created` file paths (every rendered file), `changed` (the subset whose\n * bytes differ from what was deployed before) and `warnings` list.\n * @docLink packages/asset-manager/concepts#install-agent\n */\nexport function installAgent(\n srcDir: string,\n agentDeployDir: string,\n workspaceRoot: string,\n harness: string,\n /** Relative path to the installed skills dir (e.g. \".claude/skills\") */\n skillsRelDir: string,\n nameOverride: string | undefined,\n includeSubAgents: boolean,\n visited: Set<string>,\n wsConfig: SkWorkspaceConfig | undefined,\n log?: (msg: string) => void,\n instance?: AgentInstanceConfig,\n /** `true` for a `delegate` sub-agent rendered for the agent that calls it. */\n delegated = false,\n): { created: string[]; changed: string[]; warnings: string[] } {\n const created: string[] = [];\n const changed: string[] = [];\n const warnings: string[] = [];\n\n const realSrc = resolve(srcDir);\n if (visited.has(realSrc)) return { created, changed, warnings };\n visited.add(realSrc);\n\n const initialManifest = readManifest(srcDir);\n if (!initialManifest) {\n warnings.push(`${srcDir} has no agent.yaml or AGENT.md — skipping (not an agent package)`);\n return { created, changed, warnings };\n }\n\n // Phase 1: extends merge — inherit scalars/arrays from parent agent\n // Phase 2: instance overrides — model / budget / lifecycle\n const { manifest, lifecycle } = applyInstanceOverrides(\n applyExtendsMerge(initialManifest, srcDir, warnings),\n instance,\n );\n\n const agentName = nameOverride ?? manifest.name ?? basename(srcDir);\n if (typeof agentName !== \"string\" || !isSafeFileName(agentName)) {\n warnings.push(\n `${srcDir}: agent name ${JSON.stringify(agentName)} is not a valid file name (no path separators) — skipping`,\n );\n return { created, changed, warnings };\n }\n\n log?.(`Installing git-agent: ${agentName} (${harness})`);\n\n // Phase 3: resolve ability refs — read description from installed SKILL.md files\n const abilityRefs = resolveAbilityRefs(manifest, workspaceRoot, skillsRelDir);\n\n // Phase 4: resolve contract refs — locate CONTRACT.md files in the skills dir\n const contractRefs = resolveContractRefs(manifest, workspaceRoot, skillsRelDir);\n\n // Phase 5: delegate sub-agents, fragment context, framework fragments + prompt extensions\n const delegates = resolveDelegates(manifest, agentName, srcDir, workspaceRoot, warnings);\n // A `role`, and a `delegate` sub-agent, is called by another agent: it is told so, and sees\n // only the connectors it composes.\n const subAgent = lifecycle === \"role\" || delegated;\n const fragmentCtx = buildFragmentContext(\n delegates.map((d) => d.name),\n harness,\n skillsRelDir,\n wsConfig,\n abilityRefs,\n contractRefs,\n subAgent ? { subAgent, connectorIds: boundConnectorIds(manifest, instance) } : undefined,\n );\n\n const frameworkFragments = resolveFragments(\n fragmentCtx,\n wsConfig?.agent?.fragments,\n workspaceRoot,\n );\n const promptExtensions = loadPromptExtensions(\n wsConfig?.agent?.[\"prompt-extensions\"],\n workspaceRoot,\n );\n\n const input: AgentRenderInput = {\n manifest,\n soul: readSoul(srcDir),\n rules: readFile(srcDir, \"RULES.md\"),\n duties: readFile(srcDir, \"DUTIES.md\"),\n agentName,\n agentDeployDir,\n workspaceRoot,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n lifecycle,\n skills: composedNames(manifest, \"skill\"),\n mcpServers: boundMcpServers(manifest, instance),\n srcDir,\n };\n\n const result = renderAgentToFramework(input, harness, log);\n created.push(...result.created);\n changed.push(...result.changed);\n warnings.push(...result.warnings);\n\n // Recursively install delegate sub-agents as flat top-level agents\n if (includeSubAgents) {\n for (const delegate of delegates) {\n const sub = installAgent(\n delegate.srcDir,\n agentDeployDir,\n workspaceRoot,\n harness,\n skillsRelDir,\n delegate.alias, // undefined → the sub-agent's own name from its agent.yaml\n includeSubAgents,\n visited,\n wsConfig,\n log,\n undefined,\n true,\n );\n created.push(...sub.created);\n changed.push(...sub.changed);\n warnings.push(...sub.warnings);\n }\n }\n\n return { created, changed, warnings };\n}\n","/**\n * Asset deployment — copies assets into framework dirs by default (self-contained,\n * cache-safe, portable); `--link` opts into a symlink for the local-path dev loop.\n */\n\nimport { spawnSync } from \"node:child_process\";\nimport {\n cpSync,\n existsSync,\n lstatSync,\n mkdirSync,\n readFileSync,\n mkdtempSync,\n readdirSync,\n readlinkSync,\n rmSync,\n statSync,\n symlinkSync,\n unlinkSync,\n writeFileSync,\n} from \"node:fs\";\nimport { homedir, tmpdir } from \"node:os\";\nimport { basename, dirname, join, normalize, relative, resolve, sep } from \"node:path\";\nimport type {\n AgentInstanceConfig,\n AiComponent,\n CatalogEntry,\n HarnessName,\n SourceDeclaration,\n} from \"@skaile/workspaces/core\";\nimport {\n agentSourceCacheDir,\n applyPatch,\n assetRefToStr,\n computeHash,\n HARNESS_TARGETS,\n deployedBase,\n deployedDir,\n deployedPaths,\n globalSkaileDir,\n isDeployed,\n resolveSkWorkspaceConfig,\n} from \"@skaile/workspaces/core\";\nimport {\n isEnvFileName,\n isNonAssetDir,\n isNonAssetFile,\n isSecretFileName,\n librarySymlinkMessage,\n listAssetFiles,\n listSecretFiles,\n listSkippedSymlinks,\n} from \"@skaile/workspaces/core/publish-manifest\";\nimport {\n AGENT_BODY_PLACEHOLDER,\n CONTRACT_BODY_PLACEHOLDER,\n PRESET_ITEM_PLACEHOLDER_REF,\n PROMPT_BODY_PLACEHOLDER,\n SKILL_BODY_PLACEHOLDER,\n SKILL_DESCRIPTION_PLACEHOLDER,\n SKILL_DESCRIPTION_PLACEHOLDER_PREFIX,\n} from \"@skaile/workspaces/types/manifests\";\nimport type { IAssetKindProvider, IAssetKindRegistry } from \"@skaile/workspaces/plugins\";\nimport { isMap, isSeq, parseDocument, stringify as stringifyYaml } from \"yaml\";\nimport { delegateNamesOf, installAgent, readManifest, readSoul } from \"./install-agent.js\";\nimport { CODEX_IDENTITY_DIR, type Log } from \"./renderers.js\";\n\nexport type { Log } from \"./renderers.js\";\n\nconst noop: Log = () => {};\n\n/**\n * The printable canonical ref of a resolved entry — `kind:@publisher/name#version`,\n * the one ref grammar the CLI shows. An entry whose `publisher` is a clone key\n * carries the real ref in `canonicalRef`; with neither a `canonicalRef` nor a\n * publisher there is nothing to namespace it by, so it falls back to `kind:name`.\n */\nexport function canonicalEntryRef(entry: CatalogEntry): string {\n if (entry.canonicalRef) return entry.canonicalRef;\n const publisher = entry.publisher?.replace(/^@/, \"\");\n if (!publisher) return `${entry.kind}:${entry.name}`;\n return assetRefToStr({\n kind: entry.kind,\n name: entry.name,\n publisher,\n pin: entry.version || undefined,\n });\n}\n\n// ── Filesystem helpers ────────────────────────────────────────────────────────\n\nfunction clearDest(dest: string): void {\n try {\n const s = lstatSync(dest);\n if (s.isSymbolicLink()) unlinkSync(dest);\n else rmSync(dest, { recursive: true, force: true });\n } catch {}\n}\n\n/**\n * A credential file (not an `.env*` file, which stays the owner's local file) inside a deployed\n * copy: releases before 5.17 deployed these (`.npmrc`, `id_rsa`, `token.json`, ...), a deploy now\n * withholds them (p1040). A re-deploy deletes the leftover and `check` reports it as extra, so a\n * leaked credential is not kept for good.\n */\nfunction isLeakedSecret(name: string): boolean {\n return isSecretFileName(name) && !isEnvFileName(name);\n}\n\n/**\n * Empty a deployed asset directory before a copy deploy, but keep what is not part of an\n * asset (`.env`, `.venv/`, `__pycache__/`, `*.pyc`, ...): those are the owner's local files, the\n * lock never covers them, so a re-deploy must not delete them. Anything else — including a\n * symlink — goes. A `dest` that is a symlink or a file is removed whole.\n */\nfunction clearDeployedAsset(dest: string): void {\n let s: ReturnType<typeof lstatSync>;\n try {\n s = lstatSync(dest);\n } catch {\n return;\n }\n if (!s.isDirectory()) {\n clearDest(dest);\n return;\n }\n const empty = (dir: string): boolean => {\n let kept = false;\n for (const e of readdirSync(dir, { withFileTypes: true })) {\n const path = join(dir, e.name);\n if (e.isDirectory()) {\n if (isNonAssetDir(e.name)) kept = true;\n else if (!empty(path)) kept = true;\n else rmSync(path, { recursive: true, force: true });\n } else if (e.isFile() && isNonAssetFile(e.name) && !isLeakedSecret(e.name)) {\n kept = true;\n } else {\n rmSync(path, { force: true });\n }\n }\n return !kept;\n };\n try {\n empty(dest);\n } catch {\n clearDest(dest);\n }\n}\n\n/**\n * The harness component directory a kind installs into — the provider's\n * `installTarget` — or `undefined` for composition-only kinds (connector,\n * mcp-server, knowledge, persona, ruleset, preset) and unregistered kinds.\n * The registry is the only authority: there is no static list of deployable kinds.\n */\nexport function installTargetOf(\n registry: IAssetKindRegistry,\n kind: string,\n): AiComponent | undefined {\n return registry.getProvider(kind)?.installTarget;\n}\n\n/**\n * The manifest file of a resolved entry. `source` is normally the manifest file\n * itself; a directory source is searched for the provider's manifest.\n * `undefined` when `source` is a directory holding none.\n */\nfunction manifestFileOf(provider: IAssetKindProvider, source: string): string | undefined {\n if (!statSync(source).isDirectory()) return source;\n const hit = readdirSync(source).find((f) => provider.matchesPath(f));\n return hit ? join(source, hit) : undefined;\n}\n\n/**\n * A resolved entry ready to deploy: a {@link CatalogEntry} that may carry the\n * asset's authoritative file list.\n */\nexport interface DeployableEntry extends CatalogEntry {\n /**\n * Asset files relative to the manifest's directory. Set for store-staged\n * assets, whose verified pointer (not the provider's default filter) defines\n * what the asset is — a manifest-mode publish may list files the default filter\n * would not pick. Absent → the provider's `defaultFileFilter`.\n */\n files?: readonly string[];\n}\n\n/**\n * Throw when the asset's own folder holds a symlink the library would refuse. A lone manifest\n * file shares its directory with other assets, so only an asset that owns its directory (several\n * files, or a directory named after it) is checked.\n */\nfunction assertNoSymlinks(\n provider: IAssetKindProvider,\n entry: DeployableEntry,\n manifestPath: string | null | undefined,\n): void {\n let root = entry.source;\n if (manifestPath) {\n const filter = provider.defaultFileFilter(manifestPath);\n const files = entry.files ?? filter.files;\n if (files.length <= 1 && basename(filter.assetRoot) !== entry.name) return;\n root = filter.assetRoot;\n }\n const [rel] = listSkippedSymlinks(root);\n if (rel === undefined) return;\n const link = join(root, rel);\n throw new Error(\n `${canonicalEntryRef(entry)}: ${librarySymlinkMessage({ path: join(basename(root), rel), target: readlinkSync(link) })} Nothing was added.`,\n );\n}\n\n/**\n * Refuse, before anything is written, every entry whose own folder holds a symlink (p743).\n * `add`, `install` and `update` call this ahead of the first deploy and ahead of the removal of\n * stale assets, so `Nothing was added` is true: a refusal in the middle of {@link deployAll}\n * would leave the copies of the entries before it behind. Composition-only kinds, entries that a\n * `--link` deploy symlinks (no copy) and entries without a readable source are skipped. An agent\n * counts too: it is rendered, but its source is copied into the agent cache.\n */\nexport function assertNoLibrarySymlinks(\n entries: readonly DeployableEntry[],\n registry: IAssetKindRegistry,\n repositories: Record<string, SourceDeclaration> = {},\n link = false,\n): void {\n for (const entry of entries) {\n const provider = registry.getProvider(entry.kind);\n if (!provider?.installTarget) continue;\n if (link) {\n const decl = entry.publisher ? repositories[entry.publisher] : undefined;\n if (decl?.path != null && decl.factory !== true) continue;\n }\n let manifestPath: string | undefined;\n try {\n manifestPath = manifestFileOf(provider, entry.source);\n } catch {\n continue;\n }\n assertNoSymlinks(provider, entry, manifestPath);\n }\n}\n\n/**\n * Copy an asset into `dest`: the entry's explicit `files` when it has them, else\n * exactly the files the provider's `defaultFileFilter` selects (the same set the\n * store publishes and hashes). A directory source without a recognisable\n * manifest is copied whole.\n */\nfunction copyAsset(\n provider: IAssetKindProvider,\n entry: DeployableEntry,\n dest: string,\n onSecretFile?: (entry: DeployableEntry, path: string) => void,\n): void {\n const source = entry.source;\n const manifestPath = manifestFileOf(provider, source);\n // A library holds plain files: a symlink in the asset's folder refuses the deploy, as `library\n // index`, `validate` and the publish plan refuse the library (p743). Nothing is cleared or copied.\n assertNoSymlinks(provider, entry, manifestPath);\n clearDeployedAsset(dest);\n if (!manifestPath) {\n // Same ignore list as the content hash: leftovers and symlinks are not part of the asset.\n cpSync(source, dest, {\n recursive: true,\n filter: (src) => {\n if (src === source) return true;\n const name = basename(src);\n const stat = lstatSync(src);\n if (stat.isSymbolicLink()) return false;\n // A directory is only left out by name; a file by `isNonAssetFile`: a folder called\n // `credentials` or `build.log` is an ordinary folder.\n if (stat.isDirectory() ? isNonAssetDir(name) : isNonAssetFile(name)) {\n if (stat.isFile() && isSecretFileName(name)) {\n onSecretFile?.(entry, join(basename(source), relative(source, src)));\n }\n return false;\n }\n return true;\n },\n });\n return;\n }\n const filter = provider.defaultFileFilter(manifestPath);\n const assetRoot = filter.assetRoot;\n const files = entry.files ?? filter.files;\n mkdirSync(dest, { recursive: true });\n for (const rel of files) {\n const target = join(dest, rel);\n mkdirSync(dirname(target), { recursive: true });\n cpSync(join(assetRoot, rel), target);\n }\n // A lone manifest file shares its directory with other assets: only an asset that owns its\n // directory (several files, or a directory named after it) can say which secrets it drops.\n if (files.length > 1 || basename(assetRoot) === entry.name) {\n if (onSecretFile) {\n for (const rel of listSecretFiles(assetRoot))\n onSecretFile(entry, join(basename(assetRoot), rel));\n }\n }\n}\n\n/**\n * Symlink an asset (the `--link` dev-loop). A multi-file asset, or one living in\n * a directory named after it, links its whole directory; a lone manifest file\n * links into `dest/`.\n */\nfunction symlinkAsset(\n provider: IAssetKindProvider,\n source: string,\n dest: string,\n name: string,\n): void {\n clearDest(dest);\n mkdirSync(dirname(dest), { recursive: true });\n const manifestPath = manifestFileOf(provider, source);\n if (!manifestPath) {\n symlinkSync(resolve(source), dest);\n return;\n }\n const { assetRoot, files } = provider.defaultFileFilter(manifestPath);\n if (files.length > 1 || basename(assetRoot) === name) {\n symlinkSync(resolve(assetRoot), dest);\n } else {\n mkdirSync(dest, { recursive: true });\n symlinkSync(resolve(manifestPath), join(dest, basename(manifestPath)));\n }\n}\n\n/** What differs between a deployed asset directory and the bytes a deploy of the entry writes. */\nexport interface DeployedDrift {\n /** Deployed files (relative to the deployed asset directory) whose bytes differ from the source. */\n modified: string[];\n /** Files in the deployed asset directory that the asset does not ship. */\n extra: string[];\n}\n\n/**\n * Compare the deployed copy of `entry` with the bytes a copy deploy writes from its source: the\n * same file set {@link copyAsset} copies, so a tool leftover (`__pycache__/`, `.env`) in the\n * deployed directory is not drift. `null` when there is nothing to compare: a kind that is\n * not copied into a harness directory (composition-only, or an agent, which is rendered), no\n * deployed directory, a symlinked deploy (`--link`) or an unreadable source.\n */\nexport function deployedAssetDrift(\n entry: DeployableEntry,\n opts: Pick<DeployOptions, \"registry\" | \"harness\" | \"global\" | \"cwd\">,\n): DeployedDrift | null {\n const provider = opts.registry.getProvider(entry.kind);\n const component = provider?.installTarget;\n if (!provider || !component || component === \"agent\") return null;\n const dest = deployedDir(\n component,\n entry.name,\n opts.harness ?? \"claude-code\",\n opts.global ?? false,\n opts.cwd,\n );\n try {\n const deployed = lstatSync(dest);\n if (deployed.isSymbolicLink() || !deployed.isDirectory()) return null;\n const manifestPath = manifestFileOf(provider, entry.source);\n const filter = manifestPath ? provider.defaultFileFilter(manifestPath) : undefined;\n const assetRoot = filter ? filter.assetRoot : entry.source;\n const files = filter ? (entry.files ?? filter.files) : listAssetFiles(entry.source);\n const modified: string[] = [];\n for (const rel of files) {\n const deployedFile = join(dest, rel);\n if (!existsSync(deployedFile)) continue;\n if (computeHash(join(assetRoot, rel)) !== computeHash(deployedFile)) modified.push(rel);\n }\n const expected = new Set(files);\n const extra = [\n ...listAssetFiles(dest),\n ...listSecretFiles(dest).filter((rel) => isLeakedSecret(basename(rel))),\n ].filter((rel) => !expected.has(rel));\n return { modified, extra };\n } catch {\n return null;\n }\n}\n\n// ── Deploy options ───────────────────────────────────────────────────────────\n\n/**\n * Options controlling where and how assets are deployed.\n *\n * @docLink packages/asset-manager/api-reference#installer\n */\nexport interface DeployOptions {\n /** Asset-kind registry — decides, per kind, the harness install target and file set. */\n registry: IAssetKindRegistry;\n /** Agent framework to target (determines framework-specific directory layout). Defaults to `\"claude-code\"`. */\n harness?: HarnessName;\n /** When `true`, deploy into the global Skaile cache rather than a project workspace. */\n global?: boolean;\n /** Absolute path to the workspace root. Defaults to `process.cwd()`. */\n cwd?: string;\n /**\n * Opt into a symlink (the author dev-loop) instead of a copy — honoured only\n * when the source has a real local path. Machine-local / not for committing;\n * for store/factory sources (no stable local path) it is a no-op (still copy).\n */\n link?: boolean;\n /**\n * Called once per secret file ({@link isSecretFileName}: `.env*`, private keys, credential\n * files) inside an asset's own directory that a copy deploy leaves out (secrets are never part\n * of an asset), with the path relative to the asset directory's parent.\n */\n onSecretFile?: (entry: DeployableEntry, path: string) => void;\n}\n\n/**\n * Keep the agent's source (`agent.yaml`, `SOUL.md`, …) under\n * `<project>/.skaile/cache/agents/<name>/`, the one place `agents.<id>.ref:\n * agent:@pub/name` resolves an added library / source / store agent from: the\n * deployed copy is a rendering (`.claude/agents/<name>.md`) that has lost the\n * composition, triggers and slots an instance needs. An `AGENT.md` agent is stored\n * in the `agent.yaml` + `SOUL.md` form so every instance consumer reads one shape.\n * A failure is logged, never fatal: the rendered agent is deployed either way.\n */\nfunction materializeAgentSource(\n provider: IAssetKindProvider,\n entry: DeployableEntry,\n srcDir: string,\n workspaceRoot: string,\n log: Log,\n): void {\n const dest = join(agentSourceCacheDir(workspaceRoot), entry.name);\n // `skaile rebuild` (or the compile an earlier add/install made) pins the composition in\n // `compile_manifest.json`; the copy below clears the folder, the pin is put back after it.\n // The CLI recompiles a pin whose content the source no longer serves (p413, p1310).\n const pinFile = join(dest, COMPILE_PIN_FILENAME);\n const pin = existsSync(pinFile) ? readFileSync(pinFile) : undefined;\n try {\n copyAsset(provider, entry, dest);\n if (!existsSync(join(dest, \"agent.yaml\"))) {\n const manifest = readManifest(srcDir);\n if (!manifest) return;\n writeFileSync(\n join(dest, \"agent.yaml\"),\n stringifyYaml({ ...manifest, name: manifest.name ?? entry.name }),\n \"utf8\",\n );\n const soul = readSoul(srcDir);\n if (soul) writeFileSync(join(dest, \"SOUL.md\"), `${soul}\\n`, \"utf8\");\n }\n bundleParentComposes(dest, srcDir);\n } catch (err) {\n const reason = err instanceof Error ? err.message : String(err);\n log(` warn: could not keep the source of agent ${entry.name}: ${reason}`);\n } finally {\n if (pin && existsSync(dest) && !existsSync(pinFile)) writeFileSync(pinFile, pin);\n }\n}\n\n/** Name of the compile pin `skaile rebuild` writes (`COMPILE_MANIFEST_FILENAME` of the runner, which this layer cannot import). */\nconst COMPILE_PIN_FILENAME = \"compile_manifest.json\";\n\n/**\n * A `composes:` ref that climbs out of the agent folder (`../shared-rules/x`) names a folder\n * that does not exist beside the cache copy (`.skaile/cache/agents/<name>/`), so `skaile run`\n * could not serve it. Copy each such folder from the source into `composes/<name>/` and point\n * the ref there, as the omp rendering does (p1312).\n */\nfunction bundleParentComposes(dest: string, srcDir: string): void {\n const file = join(dest, \"agent.yaml\");\n const doc = parseDocument(readFileSync(file, \"utf8\"));\n const composes = doc.get(\"composes\");\n if (!isSeq(composes)) return;\n const taken = new Map<string, string>();\n let changed = false;\n for (const item of composes.items) {\n if (!isMap(item)) continue;\n const ref = item.get(\"ref\");\n if (typeof ref !== \"string\" || !normalize(ref).startsWith(\"..\")) continue;\n const from = resolve(srcDir, ref);\n if (!existsSync(from)) continue;\n let name = basename(from);\n for (let n = 2; taken.has(name) && taken.get(name) !== from; n++) {\n name = `${basename(from)}-${n}`;\n }\n taken.set(name, from);\n const target = join(dest, \"composes\", name);\n rmSync(target, { recursive: true, force: true });\n cpSync(from, target, {\n recursive: true,\n filter: (src) => {\n if (src === from) return true;\n const stat = lstatSync(src);\n if (stat.isSymbolicLink()) return false;\n return stat.isDirectory() ? !isNonAssetDir(basename(src)) : !isNonAssetFile(basename(src));\n },\n });\n item.set(\"ref\", `./composes/${name}`);\n changed = true;\n }\n if (changed) writeFileSync(file, doc.toString(), \"utf8\");\n}\n\n// ── Deploy / remove ──────────────────────────────────────────────────────────\n\n/**\n * Deploy a single asset to the framework-specific directory.\n *\n * Copies by default — self-contained, cache-safe, and portable, so a deployed\n * asset survives a `cache clean` of its source and a committed `.claude/` stays\n * machine-independent. `opts.link` opts into a symlink (the live dev-loop), but\n * only when the source has a real local path; store/factory sources (no stable\n * local path) ignore it and still copy. Agents are rendered via the enriched\n * `installAgent` path which resolves abilities, contracts, and framework\n * fragments before writing the native agent file.\n *\n * @param entry - Catalog entry describing the asset to deploy.\n * @param repositories - Repository declarations from `skaile.yaml` (used to\n * determine whether the source is a local path or a remote clone).\n * @param opts - Deployment target options.\n * @param log - Optional logger callback for progress messages.\n * @returns `true` when the asset was deployed successfully.\n * @docLink packages/asset-manager/api-reference#installer\n */\nexport function deployAsset(\n entry: DeployableEntry,\n repositories: Record<string, SourceDeclaration>,\n opts: DeployOptions,\n log: Log = noop,\n): boolean {\n return deployEntry(entry, repositories, opts, log).deployed;\n}\n\n/**\n * {@link deployAsset} plus whether the deploy altered anything on disk. A copied asset always\n * counts as changed; an agent is re-rendered every time but counts as changed only when a\n * rendered file's bytes differ from the deployed one (an unchanged agent is left untouched).\n */\nfunction deployEntry(\n entry: DeployableEntry,\n repositories: Record<string, SourceDeclaration>,\n opts: DeployOptions,\n log: Log,\n /** `true` when {@link deployAll} already kept this agent's source under `.skaile/cache/agents/`. */\n sourceKept = false,\n /** `true` when another agent deployed in this call composes this one as a `delegate` sub-agent. */\n delegated = false,\n): { deployed: boolean; changed: boolean } {\n const harness = opts.harness ?? \"claude-code\";\n const globalInstall = opts.global ?? false;\n const cwd = opts.cwd;\n\n // Composition-only kinds (no `installTarget`) never land in a harness dir:\n // they are fetched + verified into the store cache and composed at session start.\n const provider = opts.registry.getProvider(entry.kind);\n const component = provider?.installTarget;\n if (!provider || !component) return { deployed: true, changed: false };\n\n // Agents need framework-specific rendering via the enriched installAgent path\n if (component === \"agent\") {\n const workspaceRoot = cwd ?? process.cwd();\n const agentDeployDir = deployedBase(component, harness as HarnessName, globalInstall, cwd);\n const targetMap = HARNESS_TARGETS[harness as HarnessName];\n const skillsRelDir = targetMap?.local.skill ?? \"\";\n const wsConfig = resolveSkWorkspaceConfig(workspaceRoot);\n const srcDir = statSync(entry.source).isDirectory() ? entry.source : dirname(entry.source);\n // A symlink at a path the render writes is the user's own wiring: replace the link, never\n // write through it into the file or folder it points at (p1060).\n for (const held of deployedPaths(component, entry.name, harness, globalInstall, cwd)) {\n try {\n if (lstatSync(held).isSymbolicLink()) unlinkSync(held);\n } catch {\n // nothing there\n }\n }\n const result = installAgent(\n srcDir,\n agentDeployDir,\n workspaceRoot,\n harness,\n skillsRelDir,\n entry.name,\n /* includeSubAgents */ true,\n new Set<string>(),\n wsConfig,\n log,\n undefined,\n delegated,\n );\n for (const w of result.warnings) log(` warn: ${w}`);\n if (result.created.length > 0) {\n let changed = result.changed.length > 0;\n // An `AGENT.md` agent used to deploy raw into `<base>/<name>/AGENT.md`, which no\n // harness but omp (whose rendering is that directory) reads: drop the stale copy.\n const staleRawCopy = join(agentDeployDir, entry.name);\n if (harness !== \"omp\" && existsSync(staleRawCopy)) {\n clearDest(staleRawCopy);\n changed = true;\n }\n if (!globalInstall && !sourceKept) {\n materializeAgentSource(provider, entry, srcDir, workspaceRoot, log);\n }\n return { deployed: true, changed };\n }\n // Fall through to raw deploy if renderer produces no files (unsupported framework, etc.)\n }\n\n const dest = deployedDir(component, entry.name, harness, globalInstall, cwd);\n mkdirSync(dirname(dest), { recursive: true });\n\n // Symlink only on explicit opt-in AND when the source has a real local path.\n // Factory sources have a `path` (the bundled dir under node_modules, replaced\n // on every upgrade) but no stable dev-loop, so they always copy. Default copy\n // keeps deploys cache-safe and portable.\n const repoDecl = entry.publisher ? repositories[entry.publisher] : undefined;\n const hasLocalPath = repoDecl?.path != null && repoDecl.factory !== true;\n\n if (opts.link === true && hasLocalPath) {\n symlinkAsset(provider, entry.source, dest, entry.name);\n log(` symlink ${entry.kind}:${entry.name}`);\n } else {\n copyAsset(provider, entry, dest, opts.onSecretFile);\n log(` copy ${entry.kind}:${entry.name}`);\n }\n return { deployed: true, changed: true };\n}\n\n/**\n * Deploy all resolved assets, applying patches where configured.\n *\n * Already-deployed assets are skipped unless their deployed manifest content differs\n * from the source. This handles copies that have gone stale after a source update.\n * In copy mode (the default, `!opts.link`) an existing **symlink** dest is healed:\n * it is removed and re-deployed as a real copy, so an old/legacy symlink deploy is\n * silently upgraded. With `opts.link` an existing symlink is left alone.\n *\n * @param resolved - Catalog entries to deploy (output of `resolveAll`).\n * @param repositories - Repository declarations from `skaile.yaml`.\n * @param patches - Map of `kind:name` → patch file path for patch application.\n * @param opts - Deployment target options.\n * @param log - Optional logger callback for progress messages.\n * @returns Canonical refs (`kind:@publisher/name[#version]`; bare `kind:name`\n * when the entry carries no publisher) of the assets newly deployed in this call.\n * @docLink packages/asset-manager/api-reference#installer\n */\nexport function deployAll(\n resolved: DeployableEntry[],\n repositories: Record<string, SourceDeclaration>,\n patches: Record<string, string>,\n opts: DeployOptions,\n log: Log = noop,\n): string[] {\n // Before any copy: a symlink in a later entry must not leave the earlier ones behind (p743).\n assertNoLibrarySymlinks(resolved, opts.registry, repositories, opts.link === true);\n const deployed: string[] = [];\n const deployedAt: Array<[number, string]> = [];\n const harness = opts.harness ?? \"claude-code\";\n const globalInstall = opts.global ?? false;\n const cwd = opts.cwd;\n\n // An agent is rendered from its composed skills (`## Installed Abilities`), contracts and\n // delegate sub-agents, which `deployAll` deploys in this same call: render the agents last, with\n // every agent's source already kept, so one pass writes the file a later `install` would write.\n const isAgent = (entry: DeployableEntry): boolean =>\n installTargetOf(opts.registry, entry.kind) === \"agent\";\n const keptSources = new Set<DeployableEntry>();\n if (!globalInstall) {\n for (const entry of resolved.filter(isAgent)) {\n const provider = opts.registry.getProvider(entry.kind);\n if (!provider) continue;\n const srcDir = statSync(entry.source).isDirectory() ? entry.source : dirname(entry.source);\n materializeAgentSource(provider, entry, srcDir, cwd ?? process.cwd(), noop);\n keptSources.add(entry);\n }\n }\n\n // `resolved` lists an asset before what it requires, so the agents go in reverse: a delegate\n // sub-agent is rendered by its own entry before its composer renders it again. Both renders\n // must write the same bytes, so an agent that another agent of this call delegates to is\n // rendered as a sub-agent by its own entry too (else the two writes alternate, and the file\n // is reported as changed on every run).\n const agentsLast = resolved.filter(isAgent).reverse();\n const delegatedNames = new Set<string>();\n for (const entry of agentsLast) {\n const srcDir = statSync(entry.source).isDirectory() ? entry.source : dirname(entry.source);\n for (const name of delegateNamesOf(srcDir)) delegatedNames.add(name);\n }\n for (const entry of [...resolved.filter((e) => !isAgent(e)), ...agentsLast]) {\n // Skip composition-only kinds (no `installTarget`) — they live in the store\n // cache and are composed at session start, never copied into a harness dir.\n const component = installTargetOf(opts.registry, entry.kind);\n if (!component) continue;\n\n const ref = `${entry.kind}:${entry.name}`;\n\n // Agents are compiled artifacts: always re-rendered, never skipped on a manifest hash\n // (and a stale raw `<name>/AGENT.md` copy of the old layout must be replaced, not kept).\n if (component !== \"agent\" && isDeployed(component, entry.name, harness, globalInstall, cwd)) {\n // Compare the deployed manifest file against the source to detect stale copies.\n // For symlinks the deployed path resolves through to the source file, so hashes\n // always match — symlinked installs are never needlessly re-linked.\n const dest = deployedDir(component, entry.name, harness, globalInstall, cwd);\n // Heal: in copy mode an existing symlink dest is left to fall through to a\n // real copy below (cache-safe + portable) — bypass the hash skip entirely.\n // With --link a symlink dest is intentional, so it takes the normal skip path.\n let destIsSymlink = false;\n try {\n destIsSymlink = lstatSync(dest).isSymbolicLink();\n } catch {}\n const healSymlink = destIsSymlink && opts.link !== true;\n // Surface the one-time symlink→copy migration so an author who relied on a\n // live symlink dev-loop knows why edits stopped reflecting.\n if (healSymlink) log(` healed symlink → copy: ${ref} (use --link for the dev-loop)`);\n\n if (!healSymlink) {\n const manifestName = basename(entry.source);\n const deployedManifest = join(dest, manifestName);\n // isDeployed() only lstats the dir, so a present-but-empty dir (manifest\n // file deleted) reads as deployed. A missing manifest must never count as\n // \"already deployed\" — fall through to re-deploy instead of skipping.\n // (existsSync follows symlinks, so for symlinked installs the manifest\n // resolves through to the live source and the hash check below still\n // skips them.)\n if (existsSync(deployedManifest)) {\n let manifestUnchanged: boolean;\n try {\n manifestUnchanged = computeHash(entry.source) === computeHash(deployedManifest);\n } catch {\n // Deployed manifest unreadable (e.g. agent rendered to a different path) — skip\n log(` already deployed: ${ref}`);\n continue;\n }\n // Every other file the deploy writes must be present and identical too —\n // the manifest alone misses a deleted or stale companion (`.gitignore`,\n // `resources/`, `scripts/`) the copy below would restore. A companion\n // that cannot be compared counts as changed, so it is healed, not skipped.\n const srcRoot = dirname(entry.source);\n const companionsUnchanged = (entry.files ?? [])\n .filter((rel) => rel !== manifestName)\n .every((rel) => {\n const deployed = join(dest, rel);\n try {\n return (\n existsSync(deployed) && computeHash(join(srcRoot, rel)) === computeHash(deployed)\n );\n } catch {\n return false;\n }\n });\n // A file the asset does not ship (a stray `extra.txt`) is drift too: the copy below\n // clears the directory, so a repeat install restores the asset exactly.\n const strayFiles =\n deployedAssetDrift(entry, { ...opts, harness, global: globalInstall, cwd })?.extra\n .length ?? 0;\n if (manifestUnchanged && companionsUnchanged && strayFiles === 0) {\n log(` already deployed: ${ref}`);\n continue;\n }\n log(` updating: ${ref} (content changed)`);\n // fall through to redeploy\n }\n }\n }\n\n // An agent is re-rendered every time; it is reported as deployed only when a rendered file\n // changed, so a repeat install leaves it (and the report) alone.\n const { changed } = deployEntry(\n entry,\n repositories,\n opts,\n log,\n keptSources.has(entry),\n isAgent(entry) && delegatedNames.has(entry.name),\n );\n if (changed) deployedAt.push([resolved.indexOf(entry), canonicalEntryRef(entry)]);\n\n // Apply patch if configured\n const patchFile = patches[ref];\n if (patchFile && existsSync(patchFile)) {\n const dest = deployedDir(component, entry.name, harness, globalInstall, cwd);\n if (applyPatch(dest, patchFile)) {\n log(` patched ${ref}`);\n } else {\n log(` patch failed for ${ref}`);\n }\n }\n }\n\n // Report in the order the assets were resolved, not the order they were rendered.\n deployed.push(...deployedAt.sort((a, b) => a[0] - b[0]).map(([, ref]) => ref));\n return deployed;\n}\n\n/**\n * Unified diff from a deployed agent to its source, `-` lines in the deployed copy only and `+`\n * lines in the source only. An agent is a rendering, not a copy, so the source is rendered the way\n * {@link deployAsset} renders it (same renderer, same workspace context) into a scratch directory\n * and that is compared with what the harness holds: `<name>.md` for claude-code, `<name>.toml`\n * plus the `skaile-agents/<name>.md` identity for codex, the `<name>/` directory for omp.\n *\n * @param entry - The agent's catalog entry (`source` is its `agent.yaml` / `AGENT.md`).\n * @param opts - Deployment target options (must match the options used at install time).\n * @param instance - Compare the rendering of one agent instance of `skaile.yaml` (named by its id,\n * with its settings) instead of the one named after the asset (p925).\n * @returns `null` when none of the agent's rendered files is deployed, else the diff text\n * (`\"\"` when the deployed agent matches its source).\n * @throws When `diff(1)` itself fails (exit status other than 0/1).\n */\nexport function diffDeployedAgent(\n entry: DeployableEntry,\n opts: DeployOptions,\n instance?: { id: string; srcDir: string; config: AgentInstanceConfig },\n): string | null {\n const harness = opts.harness ?? \"claude-code\";\n const workspaceRoot = opts.cwd ?? process.cwd();\n const deployedAgents = deployedBase(\"agent\", harness, opts.global ?? false, opts.cwd);\n const scratch = mkdtempSync(join(tmpdir(), \"skaile-diff-agent-\"));\n try {\n const renderedAgents = join(scratch, \"agents\");\n const srcDir =\n instance?.srcDir ??\n (statSync(entry.source).isDirectory() ? entry.source : dirname(entry.source));\n // An instance renders the way `install` renders it: named by its id, with its own settings.\n const rendered = installAgent(\n srcDir,\n renderedAgents,\n workspaceRoot,\n harness,\n HARNESS_TARGETS[harness]?.local.skill ?? \"\",\n instance?.id ?? entry.name,\n /* includeSubAgents */ instance !== undefined,\n new Set<string>(),\n resolveSkWorkspaceConfig(workspaceRoot),\n undefined,\n instance?.config,\n );\n if (rendered.created.length === 0) return null;\n\n // Each rendered top-level item pairs with the deployed item of the same name.\n const pairs: Array<[from: string, to: string]> = [];\n for (const [renderedRoot, deployedRoot] of [\n [renderedAgents, deployedAgents],\n [join(scratch, CODEX_IDENTITY_DIR), join(dirname(deployedAgents), CODEX_IDENTITY_DIR)],\n ] as const) {\n if (!existsSync(renderedRoot)) continue;\n for (const item of readdirSync(renderedRoot)) {\n pairs.push([join(deployedRoot, item), join(renderedRoot, item)]);\n }\n }\n if (!pairs.some(([from]) => existsSync(from))) return null;\n\n const diffs: string[] = [];\n for (const [from, to] of pairs) {\n const r = spawnSync(\"diff\", [\"-ruN\", from, to], { encoding: \"utf8\" });\n if (r.status === 1) diffs.push(r.stdout);\n else if (r.status !== 0) {\n throw new Error(\n `diff failed for agent:${entry.name}: ${r.stderr || r.error?.message || \"unknown error\"}`,\n );\n }\n }\n return diffs.join(\"\").split(`${scratch}${sep}`).join(`rendered${sep}`);\n } finally {\n rmSync(scratch, { recursive: true, force: true });\n }\n}\n\n/** The file that remembers the old `~/.omp/<dir>/<name>` folders a sweep decided are not skaile's. */\nfunction keptLegacyFile(): string {\n return join(globalSkaileDir(), \"kept-omp-copies.json\");\n}\n\n/** The old omp folders skaile never deletes (kept by an earlier run: it did not write them). */\nexport function readKeptLegacyCopies(): Set<string> {\n try {\n const parsed: unknown = JSON.parse(readFileSync(keptLegacyFile(), \"utf-8\"));\n return new Set(Array.isArray(parsed) ? parsed.filter((v) => typeof v === \"string\") : []);\n } catch {\n return new Set();\n }\n}\n\nexport function writeKeptLegacyCopies(paths: Set<string>): void {\n mkdirSync(dirname(keptLegacyFile()), { recursive: true });\n writeFileSync(keptLegacyFile(), `${JSON.stringify([...paths].sort(), null, 2)}\\n`);\n}\n\n/**\n * Remove a deployed asset from the framework directory.\n *\n * Removes symlinks with `unlink`; removes copied directories with `rm -rf`.\n *\n * @param kind - Asset kind (`skill`, `agent`, `prompt`, `flow`, `contract`).\n * @param name - Asset name as registered in the catalog.\n * @param opts - Deployment target options (must match the options used at install time).\n * @returns `true` if the asset existed and was removed; `false` if it was not deployed.\n * @docLink packages/asset-manager/api-reference#installer\n */\nexport function removeAsset(kind: string, name: string, opts: DeployOptions): boolean {\n const harness = opts.harness ?? \"claude-code\";\n const globalInstall = opts.global ?? false;\n const cwd = opts.cwd;\n\n // Composition-only kinds have no harness dir — never resolve (and delete) one.\n const component = installTargetOf(opts.registry, kind);\n if (!component) return false;\n let removed = false;\n // Before 5.13.0 an omp global install wrote to `~/.omp/<skills|agents|…>/`, a place omp does\n // not read (it reads `~/.omp/agent/…`). Removing the asset removes that dead copy too.\n // A flow lives under `~/.skaile` in both layouts: nothing to add.\n // A folder an earlier sweep kept (skaile did not write it) is never deleted.\n const kept = globalInstall ? readKeptLegacyCopies() : new Set<string>();\n const legacyOmp =\n globalInstall && harness === \"omp\" && component !== \"flow\"\n ? deployedPaths(component, name, \"omp\", false, homedir()).filter((p) => !kept.has(p))\n : [];\n for (const dest of [\n ...deployedPaths(component, name, harness, globalInstall, cwd),\n ...legacyOmp,\n ]) {\n try {\n const s = lstatSync(dest);\n if (s.isSymbolicLink()) unlinkSync(dest);\n else rmSync(dest, { recursive: true, force: true });\n removed = true;\n } catch {\n // not deployed at this path\n }\n }\n if (component === \"agent\") {\n // The Codex identity file and the kept source live beside the deployed agent.\n const agentDir = deployedBase(component, harness, globalInstall, cwd);\n const extras = [join(dirname(agentDir), CODEX_IDENTITY_DIR, `${name}.md`)];\n if (!globalInstall) extras.push(join(agentSourceCacheDir(cwd ?? process.cwd()), name));\n for (const extra of extras) {\n if (existsSync(extra)) {\n rmSync(extra, { recursive: true, force: true });\n removed = true;\n }\n }\n }\n return removed;\n}\n\n// ── Scaffold ─────────────────────────────────────────────────────────────────\n\n/** Markdown-marker scaffold (SKILL.md / CONTRACT.md / `*.prompt.md`); `body` is the kind's placeholder. */\nfunction markdownTemplate(name: string, description: string, body: string): string {\n // JSON.stringify yields a valid YAML double-quoted scalar, so any\n // user-supplied description (colons, quotes, `#`) survives the round-trip.\n return `---\nname: \"${name}\"\ndescription: ${JSON.stringify(description)}\nmetadata:\n version: \"0.1.0\"\n---\n\n# ${name}\n\n${body}\n`;\n}\n\n/** `agent.yaml` (spec 0.2) scaffold; the system prompt lives in the `SOUL.md` next to it. */\nfunction agentTemplate(name: string, description: string): string {\n return `spec_version: \"0.2\"\nname: \"${name}\"\nversion: 0.1.0\ndescription: ${JSON.stringify(description)}\nlifecycle: standing\n`;\n}\n\nfunction soulTemplate(name: string): string {\n return `# ${name}\n\n${AGENT_BODY_PLACEHOLDER}\n`;\n}\n\nfunction presetTemplate(name: string, description: string): string {\n return `name: ${name}\ndescription: ${JSON.stringify(description)}\nversion: 0.1.0\nitems:\n - ref: ${PRESET_ITEM_PLACEHOLDER_REF}\n`;\n}\n\nfunction flowTemplate(name: string, description: string): string {\n return `id: \"${name}\"\nversion: \"0.1.0\"\nname: \"${name}\"\ndescription: ${JSON.stringify(description)}\n\nglobals:\n approval_mode: checkpoint\n\nnodes: []\n`;\n}\n\n/** Asset kinds {@link createScaffold} has a real template for. */\nexport const SCAFFOLD_KINDS = [\"skill\", \"agent\", \"prompt\", \"flow\", \"preset\", \"contract\"] as const;\n\n/** Options for {@link createScaffold}. */\nexport interface ScaffoldOptions {\n /**\n * Description written into the manifest. Omitted: every kind gets a\n * `TODO:` placeholder that `skaile validate` rejects until it is replaced.\n */\n description?: string;\n}\n\n/**\n * Create a minimal scaffold directory for a new asset.\n *\n * Writes the appropriate manifest file (`SKILL.md`, `agent.yaml` + `SOUL.md`, `CONTRACT.md`,\n * `<name>.preset.yaml`, `<name>.flow.yaml`, or `<name>.prompt.md`) inside a\n * new `<destDir>/<name>/` directory.\n *\n * @param name - Asset name (also used as the directory name).\n * @param kind - Asset kind: `skill` | `agent` | `preset` | `flow` | `prompt` | `contract`.\n * @param destDir - Parent directory to create the asset in.\n * @param opts - Optional scaffold content ({@link ScaffoldOptions}).\n * @returns `{ ok: true, path }` on success, `{ ok: false, path: errorMessage }` if the\n * directory already exists or `kind` is not one of {@link SCAFFOLD_KINDS}\n * (`Cannot scaffold kind \"<kind>\". Expected: ...`); nothing is created then.\n * @docLink packages/asset-manager/api-reference#installer\n */\nexport function createScaffold(\n name: string,\n kind: string,\n destDir: string,\n opts: ScaffoldOptions = {},\n): { ok: boolean; path: string } {\n if (!(SCAFFOLD_KINDS as readonly string[]).includes(kind)) {\n return {\n ok: false,\n path: `Cannot scaffold kind \"${kind}\". Expected: ${SCAFFOLD_KINDS.join(\", \")}.`,\n };\n }\n const dest = join(destDir, name);\n if (existsSync(dest)) {\n return { ok: false, path: `Directory '${name}' already exists in ${destDir}` };\n }\n mkdirSync(dest, { recursive: true });\n\n const mdDescription =\n opts.description ??\n ([\"agent\", \"contract\", \"prompt\", \"flow\", \"preset\"].includes(kind)\n ? `${SKILL_DESCRIPTION_PLACEHOLDER_PREFIX} describe this ${kind}.`\n : SKILL_DESCRIPTION_PLACEHOLDER);\n\n if (kind === \"preset\") {\n writeFileSync(join(dest, `${name}.preset.yaml`), presetTemplate(name, mdDescription), \"utf8\");\n } else if (kind === \"flow\") {\n writeFileSync(join(dest, `${name}.flow.yaml`), flowTemplate(name, mdDescription), \"utf8\");\n } else if (kind === \"prompt\") {\n writeFileSync(\n join(dest, `${name}.prompt.md`),\n markdownTemplate(name, mdDescription, PROMPT_BODY_PLACEHOLDER),\n \"utf8\",\n );\n } else if (kind === \"agent\") {\n writeFileSync(join(dest, \"agent.yaml\"), agentTemplate(name, mdDescription), \"utf8\");\n writeFileSync(join(dest, \"SOUL.md\"), soulTemplate(name), \"utf8\");\n } else if (kind === \"contract\") {\n writeFileSync(\n join(dest, \"CONTRACT.md\"),\n markdownTemplate(name, mdDescription, CONTRACT_BODY_PLACEHOLDER),\n \"utf8\",\n );\n } else {\n writeFileSync(\n join(dest, \"SKILL.md\"),\n markdownTemplate(name, mdDescription, SKILL_BODY_PLACEHOLDER),\n \"utf8\",\n );\n }\n\n return { ok: true, path: dest };\n}\n"]}
@@ -10,5 +10,5 @@ function err(message) {
10
10
  }
11
11
 
12
12
  export { err, ok, okJson };
13
- //# sourceMappingURL=chunk-X5YPJV4N.js.map
14
- //# sourceMappingURL=chunk-X5YPJV4N.js.map
13
+ //# sourceMappingURL=chunk-3MWQKQUB.js.map
14
+ //# sourceMappingURL=chunk-3MWQKQUB.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../workspace-plugin/src/types.ts"],"names":[],"mappings":";AAuBO,SAAS,GAAG,IAAA,EAA0B;AAC3C,EAAA,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,CAAA,EAAE;AAC7C;AAaO,SAAS,OAAO,IAAA,EAA2B;AAChD,EAAA,OAAO,EAAE,OAAA,EAAS,CAAC,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG,CAAA,EAAE;AAC5E;AAaO,SAAS,IAAI,OAAA,EAA6B;AAC/C,EAAA,OAAO,EAAE,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,CAAA,OAAA,EAAU,OAAO,CAAA,CAAA,EAAI,CAAA,EAAG,SAAS,IAAA,EAAK;AACjF","file":"chunk-X5YPJV4N.js","sourcesContent":["/**\n * Standard tool result shape used by all plugin tool functions.\n *\n * Mirrors the MCP `CallToolResult` content structure so results can be\n * forwarded directly to either adapter without transformation.\n *\n * Construct via {@link ok}, {@link okJson}, or {@link err} — never manually.\n *\n * @docLink packages/workspace-plugin/concepts#plugin-types\n */\nexport interface ToolResult {\n content: Array<{ type: \"text\"; text: string }>;\n isError?: boolean;\n}\n\n/**\n * Return a successful plain-text {@link ToolResult}.\n *\n * @param text - Human-readable result string delivered to the agent.\n * @returns A `ToolResult` with `isError` unset.\n *\n * @docLink packages/workspace-plugin/concepts#plugin-types\n */\nexport function ok(text: string): ToolResult {\n return { content: [{ type: \"text\", text }] };\n}\n\n/**\n * Return a successful JSON {@link ToolResult}.\n *\n * Serializes `data` with two-space indentation. The agent receives the\n * pretty-printed JSON string as a text block.\n *\n * @param data - Any JSON-serialisable value.\n * @returns A `ToolResult` with `isError` unset.\n *\n * @docLink packages/workspace-plugin/concepts#plugin-types\n */\nexport function okJson(data: unknown): ToolResult {\n return { content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }] };\n}\n\n/**\n * Return an error {@link ToolResult}.\n *\n * The message is prefixed with `\"Error: \"` so agents can identify failures\n * without inspecting `isError`.\n *\n * @param message - Short description of what went wrong.\n * @returns A `ToolResult` with `isError: true`.\n *\n * @docLink packages/workspace-plugin/concepts#plugin-types\n */\nexport function err(message: string): ToolResult {\n return { content: [{ type: \"text\", text: `Error: ${message}` }], isError: true };\n}\n\n/**\n * Minimal session state shape persisted to `.skaile/sessions/<runId>.json`.\n *\n * Intentionally a subset of `runner/src/session.ts` — this package must not\n * depend on `@skaile/workspaces/runner` to avoid a circular dependency.\n *\n * @docLink packages/workspace-plugin/concepts#plugin-types\n */\nexport interface SessionState {\n runId: string;\n flowId: string;\n projectDir: string;\n agentDir?: string;\n driver: string;\n provider?: string;\n model?: string;\n driverSessionId?: string;\n startedAt: string;\n updatedAt: string;\n label?: string;\n status?: \"running\" | \"complete\" | \"failed\" | \"paused\";\n}\n"]}
1
+ {"version":3,"sources":["../workspace-plugin/src/types.ts"],"names":[],"mappings":";AAuBO,SAAS,GAAG,IAAA,EAA0B;AAC3C,EAAA,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,CAAA,EAAE;AAC7C;AAaO,SAAS,OAAO,IAAA,EAA2B;AAChD,EAAA,OAAO,EAAE,OAAA,EAAS,CAAC,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,EAAG,CAAA,EAAE;AAC5E;AAaO,SAAS,IAAI,OAAA,EAA6B;AAC/C,EAAA,OAAO,EAAE,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,CAAA,OAAA,EAAU,OAAO,CAAA,CAAA,EAAI,CAAA,EAAG,SAAS,IAAA,EAAK;AACjF","file":"chunk-3MWQKQUB.js","sourcesContent":["/**\n * Standard tool result shape used by all plugin tool functions.\n *\n * Mirrors the MCP `CallToolResult` content structure so results can be\n * forwarded directly to either adapter without transformation.\n *\n * Construct via {@link ok}, {@link okJson}, or {@link err} — never manually.\n *\n * @docLink packages/workspace-plugin/concepts#plugin-types\n */\nexport interface ToolResult {\n content: Array<{ type: \"text\"; text: string }>;\n isError?: boolean;\n}\n\n/**\n * Return a successful plain-text {@link ToolResult}.\n *\n * @param text - Human-readable result string delivered to the agent.\n * @returns A `ToolResult` with `isError` unset.\n *\n * @docLink packages/workspace-plugin/concepts#plugin-types\n */\nexport function ok(text: string): ToolResult {\n return { content: [{ type: \"text\", text }] };\n}\n\n/**\n * Return a successful JSON {@link ToolResult}.\n *\n * Serializes `data` with two-space indentation. The agent receives the\n * pretty-printed JSON string as a text block.\n *\n * @param data - Any JSON-serialisable value.\n * @returns A `ToolResult` with `isError` unset.\n *\n * @docLink packages/workspace-plugin/concepts#plugin-types\n */\nexport function okJson(data: unknown): ToolResult {\n return { content: [{ type: \"text\", text: JSON.stringify(data, null, 2) }] };\n}\n\n/**\n * Return an error {@link ToolResult}.\n *\n * The message is prefixed with `\"Error: \"` so agents can identify failures\n * without inspecting `isError`.\n *\n * @param message - Short description of what went wrong.\n * @returns A `ToolResult` with `isError: true`.\n *\n * @docLink packages/workspace-plugin/concepts#plugin-types\n */\nexport function err(message: string): ToolResult {\n return { content: [{ type: \"text\", text: `Error: ${message}` }], isError: true };\n}\n\n/**\n * Minimal session state shape persisted to `.skaile/sessions/<runId>.json`.\n *\n * Intentionally a subset of `runner/src/session.ts` — this package must not\n * depend on `@skaile/workspaces/runner` to avoid a circular dependency.\n *\n * @docLink packages/workspace-plugin/concepts#plugin-types\n */\nexport interface SessionState {\n runId: string;\n flowId: string;\n projectDir: string;\n agentDir?: string;\n harness: string;\n provider?: string;\n model?: string;\n harnessSessionId?: string;\n startedAt: string;\n updatedAt: string;\n label?: string;\n status?: \"running\" | \"complete\" | \"failed\" | \"paused\";\n}\n"]}
@@ -80,5 +80,5 @@ var AskSlots = class {
80
80
  };
81
81
 
82
82
  export { AskSlots };
83
- //# sourceMappingURL=chunk-EPBKISS5.js.map
84
- //# sourceMappingURL=chunk-EPBKISS5.js.map
83
+ //# sourceMappingURL=chunk-3TG2NV2F.js.map
84
+ //# sourceMappingURL=chunk-3TG2NV2F.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../types/src/ask-slots.ts"],"names":[],"mappings":"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","file":"chunk-3TG2NV2F.js","sourcesContent":["/**\n * The slot rule of a parked multi-question ask.\n *\n * One ask carries several sub-questions, each keyed by its question text. The\n * harness resumes the paused turn only once every one has an answer, and an\n * answer is filed under a sub-question by this rule: a name that belongs to\n * this ask binds to its own sub-question, anything else (no name, or a name\n * from elsewhere) fills the oldest open one. The claude-sdk harness, the\n * AgentStore and the SDK AgentSession all follow it through this one class.\n *\n * Pure: no I/O, no events. Internal to the package, deliberately not exported\n * from the `types` index; sibling folders import it by relative path, like\n * other internal modules.\n */\n\n/** What one {@link AskSlots.answer} call did. */\nexport interface AskSlotsAnswer {\n /**\n * The sub-question the answer binds to, or `undefined` when none is left to\n * bind to (every sub-question was closed already and the name was not one of\n * them).\n */\n slot: string | undefined;\n /** The bound sub-question was closed before this call; no other one closed. */\n reanswered: boolean;\n /** Every sub-question of the ask is closed after this call. */\n complete: boolean;\n}\n\nexport class AskSlots {\n /** Every sub-question text of this ask, answered or not. A Set: no prototype keys. */\n private known = new Set<string>();\n /** Sub-questions still waiting for an answer, oldest first. */\n private openList: string[] = [];\n private currentRequestId: string | undefined;\n\n /**\n * @param questions - Sub-question texts of one ask. Duplicate texts are one sub-question.\n * @param requestId - Identity shared by every sub-question of the ask, when the harness gives one.\n */\n constructor(questions: readonly string[] = [], requestId?: string) {\n this.currentRequestId = requestId;\n for (const question of questions) this.extend(question);\n }\n\n /** Identity of the current ask; `undefined` when sub-questions carry none. */\n get requestId(): string | undefined {\n return this.currentRequestId;\n }\n\n /** Sub-questions still open, oldest first. */\n get open(): readonly string[] {\n return this.openList;\n }\n\n /** The ask holds no sub-question at all. */\n get isEmpty(): boolean {\n return this.known.size === 0;\n }\n\n /** The ask holds sub-questions and every one is closed. */\n get complete(): boolean {\n return this.known.size > 0 && this.openList.length === 0;\n }\n\n /** `question` is a sub-question of this ask, open or closed. */\n has(question: string): boolean {\n return this.known.has(question);\n }\n\n /** `question` is a sub-question of this ask that still waits for an answer. */\n isOpen(question: string): boolean {\n return this.openList.includes(question);\n }\n\n /**\n * Add one sub-question as its event arrives. The same `requestId` (or none on\n * both sides) extends the ask; a different one, or a finished ask, starts a\n * new one. Adding a text the ask already holds opens it again, as the newest.\n *\n * @returns `true` when a previous ask was dropped to start a new one.\n */\n add(question: string, requestId?: string): boolean {\n const startsNew = !this.isEmpty && (requestId !== this.currentRequestId || this.complete);\n if (startsNew) this.clear();\n this.currentRequestId = requestId;\n this.extend(question);\n return startsNew;\n }\n\n /**\n * File an answer. A name from this ask binds to its own sub-question (answering\n * a closed one closes nothing else); anything else fills the oldest open one.\n */\n answer(name?: string): AskSlotsAnswer {\n if (name !== undefined && this.known.has(name)) {\n const index = this.openList.indexOf(name);\n if (index === -1) return { slot: name, reanswered: true, complete: this.complete };\n this.openList.splice(index, 1);\n return { slot: name, reanswered: false, complete: this.complete };\n }\n const slot = this.openList.shift();\n return { slot, reanswered: false, complete: this.complete };\n }\n\n /** Drop the ask. */\n clear(): void {\n this.known = new Set();\n this.openList = [];\n this.currentRequestId = undefined;\n }\n\n private extend(question: string): void {\n const index = this.openList.indexOf(question);\n if (index !== -1) this.openList.splice(index, 1);\n this.known.add(question);\n this.openList.push(question);\n }\n}\n"]}
@@ -147,5 +147,5 @@ function formatDroppedToolsNotice(dropped) {
147
147
  }
148
148
 
149
149
  export { TOOL_PROPERTY_KEY_PATTERN, checkToolInputSchema, checkToolPropertyKeys, filterInProcessMcpServerTools, formatDroppedToolsNotice };
150
- //# sourceMappingURL=chunk-L2AMXONH.js.map
151
- //# sourceMappingURL=chunk-L2AMXONH.js.map
150
+ //# sourceMappingURL=chunk-3X7VTCPG.js.map
151
+ //# sourceMappingURL=chunk-3X7VTCPG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../bridge/src/mcp-tool-schema-filter.ts"],"names":[],"mappings":"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","file":"chunk-3X7VTCPG.js","sourcesContent":["/**\n * Drop MCP tools whose input schema the Claude API would reject.\n *\n * The API refuses a whole request when any one tool fails either check below,\n * so a single bad tool turns every turn of the session into a 400. The Claude\n * CLI drops such tools itself, but only after it has fetched its remote\n * feature flags; with flag fetching off (`DISABLE_TELEMETRY=1` and friends)\n * it sends them as they are. The harness therefore runs both checks itself\n * before any tool reaches the CLI:\n *\n * 1. every top-level property key matches {@link TOOL_PROPERTY_KEY_PATTERN};\n * 2. the schema is valid JSON Schema draft 2020-12 (ajv's meta-schema).\n *\n * In-process servers are inspected through their own `tools/list`, over an\n * in-memory transport, so the checked schema is byte-for-byte what the CLI\n * would receive (zod shape → JSON Schema exactly as the server converts it).\n */\nimport { InMemoryTransport } from \"@modelcontextprotocol/sdk/inMemory.js\";\nimport { createLogger } from \"@skaile/workspaces/core/logging\";\nimport type { Logger } from \"@skaile/workspaces/types\";\nimport { Ajv2020, type ValidateFunction } from \"ajv/dist/2020.js\";\n\n/** The Claude API's rule for top-level `input_schema.properties` keys. */\nexport const TOOL_PROPERTY_KEY_PATTERN = /^[a-zA-Z0-9_.-]{1,64}$/;\n\nconst DRAFT_2020_12_META = \"https://json-schema.org/draft/2020-12/schema\";\nconst PROBE_TIMEOUT_MS = 5_000;\n\n/** One tool removed before it reached the CLI. */\nexport interface DroppedMcpTool {\n /** MCP server name as passed to the SDK (`skaile-capabilities`, `skaile-connectors`, ...). */\n server: string;\n /** Tool name on that server. */\n tool: string;\n /** Human-readable reason; safe to show to the agent. */\n reason: string;\n}\n\nlet metaValidator: ValidateFunction | null = null;\n\nfunction draft202012MetaValidator(): ValidateFunction {\n if (metaValidator) return metaValidator;\n // Only the bundled meta-schema is compiled; tool schemas are validated as\n // data. validateFormats:false — the API checks structure, not `format` strings.\n const ajv = new Ajv2020({ strict: false, validateFormats: false, logger: false });\n const validate = ajv.getSchema(DRAFT_2020_12_META);\n if (!validate) throw new Error(\"ajv draft 2020-12 meta-schema is unavailable\");\n metaValidator = validate;\n return validate;\n}\n\n/**\n * Check only the property-key rule (rule 1).\n *\n * @returns `null` when every top-level property key is acceptable, otherwise the reason.\n */\nexport function checkToolPropertyKeys(schema: unknown): string | null {\n if (!schema || typeof schema !== \"object\" || Array.isArray(schema)) return null;\n const props = (schema as { properties?: unknown }).properties;\n if (!props || typeof props !== \"object\" || Array.isArray(props)) return null;\n for (const key of Object.keys(props)) {\n if (!TOOL_PROPERTY_KEY_PATTERN.test(key)) {\n return `property key ${JSON.stringify(key)} does not match ${TOOL_PROPERTY_KEY_PATTERN.source}`;\n }\n }\n return null;\n}\n\n/**\n * Check one tool input schema, as it goes on the wire, against both API rules.\n *\n * @returns `null` when the schema is acceptable, otherwise the reason it is not.\n */\nexport function checkToolInputSchema(schema: unknown): string | null {\n if (!schema || typeof schema !== \"object\" || Array.isArray(schema)) {\n return \"input schema is not a JSON object\";\n }\n const keyReason = checkToolPropertyKeys(schema);\n if (keyReason) return keyReason;\n // Validated against the 2020-12 meta-schema regardless of the schema's own\n // `$schema` (the MCP SDK stamps draft-07 on every in-process tool), because\n // the API names 2020-12 in its 400. Deliberate consequence: a draft-07-only\n // construct such as a tuple's `items: [...]` (`z.tuple()`) is dropped too.\n const validate = draft202012MetaValidator();\n if (!validate(schema)) {\n const first = validate.errors?.[0];\n const where = first?.instancePath || \"/\";\n return `not valid JSON Schema draft 2020-12: ${where} ${first?.message ?? \"is invalid\"}`;\n }\n return null;\n}\n\n// ── In-process (type: \"sdk\") servers ─────────────────────────────────────────\n\ninterface RegisteredToolLike {\n enabled?: boolean;\n disable?: () => void;\n}\n\ninterface McpServerInstanceLike {\n connect(transport: unknown): Promise<void>;\n close(): Promise<void>;\n isConnected?: () => boolean;\n _registeredTools?: Record<string, RegisteredToolLike>;\n}\n\ninterface WireTool {\n name: string;\n inputSchema?: unknown;\n}\n\n/** Instances already filtered; their bad tools stay disabled for good. */\nconst filteredInstances = new WeakMap<object, DroppedMcpTool[]>();\n\nfunction sdkInstanceOf(config: unknown): McpServerInstanceLike | null {\n if (!config || typeof config !== \"object\") return null;\n const c = config as { type?: unknown; instance?: unknown };\n if (c.type !== \"sdk\" || !c.instance || typeof c.instance !== \"object\") return null;\n const inst = c.instance as McpServerInstanceLike;\n return typeof inst.connect === \"function\" && typeof inst.close === \"function\" ? inst : null;\n}\n\nfunction withTimeout<T>(p: Promise<T>, what: string): Promise<T> {\n let timer: ReturnType<typeof setTimeout> | undefined;\n const timeout = new Promise<never>((_, reject) => {\n timer = setTimeout(() => reject(new Error(`${what} timed out`)), PROBE_TIMEOUT_MS);\n });\n return Promise.race([p, timeout]).finally(() => clearTimeout(timer));\n}\n\n/**\n * Speak just enough JSON-RPC to read the server's `tools/list`. A hand-rolled\n * exchange rather than the SDK `Client`, whose result validation would reject\n * the whole list over the one malformed tool this exists to find.\n */\nasync function listInProcessTools(instance: McpServerInstanceLike): Promise<WireTool[]> {\n const [clientSide, serverSide] = InMemoryTransport.createLinkedPair();\n const pending = new Map<number, (msg: Record<string, unknown>) => void>();\n clientSide.onmessage = (msg) => {\n const m = msg as Record<string, unknown>;\n const id = typeof m.id === \"number\" ? m.id : undefined;\n if (id === undefined) return;\n pending.get(id)?.(m);\n pending.delete(id);\n };\n let nextId = 1;\n const call = (method: string, params: Record<string, unknown>) =>\n withTimeout(\n new Promise<Record<string, unknown>>((resolve, reject) => {\n const id = nextId++;\n pending.set(id, resolve);\n clientSide.send({ jsonrpc: \"2.0\", id, method, params }).catch(reject);\n }),\n method,\n ).then((res) => {\n if (res.error) throw new Error(`${method} failed: ${JSON.stringify(res.error)}`);\n return (res.result ?? {}) as Record<string, unknown>;\n });\n\n await clientSide.start();\n await instance.connect(serverSide);\n try {\n await call(\"initialize\", {\n protocolVersion: \"2025-06-18\",\n capabilities: {},\n clientInfo: { name: \"skaile-tool-schema-filter\", version: \"1.0.0\" },\n });\n await clientSide.send({ jsonrpc: \"2.0\", method: \"notifications/initialized\" });\n const tools: WireTool[] = [];\n let cursor: string | undefined;\n do {\n const page = await call(\"tools/list\", cursor ? { cursor } : {});\n tools.push(...((page.tools as WireTool[] | undefined) ?? []));\n cursor = typeof page.nextCursor === \"string\" ? page.nextCursor : undefined;\n } while (cursor);\n return tools;\n } finally {\n // Leaves the instance unconnected so the SDK can attach its own transport.\n await instance.close().catch(() => {});\n }\n}\n\nconst defaultLog = createLogger({ kind: \"mcp\", subkind: \"tool-schema-filter\" });\n\n/**\n * Disable every tool on an in-process MCP server whose wire input schema\n * fails {@link checkToolInputSchema}. Valid tools on the same server stay.\n *\n * Mutates the server in place (`RegisteredTool.disable()` hides a tool from\n * `tools/list` and refuses calls to it). Non-`sdk` configs (stdio/sse/http)\n * are returned untouched: the CLI spawns those, so the bridge cannot see\n * their tools. Fails open — a server that cannot be inspected is passed\n * through and a warning is logged, because blocking it would cost the\n * session every one of its valid tools.\n *\n * @returns the tools dropped from this server (empty when none or not inspectable).\n */\nexport async function filterInProcessMcpServerTools(\n server: string,\n config: unknown,\n log: Logger = defaultLog,\n): Promise<DroppedMcpTool[]> {\n const instance = sdkInstanceOf(config);\n if (!instance) return [];\n const cached = filteredInstances.get(instance);\n if (cached) return cached;\n const registered = instance._registeredTools;\n if (!registered || Object.keys(registered).length === 0) return [];\n if (instance.isConnected?.()) {\n // Already attached to a live query; it was either filtered when first\n // passed or belongs to someone else's transport. Do not steal it.\n log.debug(\"in-process MCP server already connected; schema check skipped\", { server });\n return [];\n }\n\n let wireTools: WireTool[];\n try {\n wireTools = await listInProcessTools(instance);\n } catch (err) {\n log.warn(\"could not inspect in-process MCP server tools; passing it unchanged\", {\n server,\n error: err instanceof Error ? err.message : String(err),\n });\n return [];\n }\n\n const dropped: DroppedMcpTool[] = [];\n for (const tool of wireTools) {\n const reason = checkToolInputSchema(tool.inputSchema);\n if (!reason) continue;\n const handle = registered[tool.name];\n if (typeof handle?.disable !== \"function\") {\n log.warn(\"MCP tool has an invalid input schema but cannot be disabled\", {\n server,\n tool: tool.name,\n reason,\n });\n continue;\n }\n handle.disable();\n dropped.push({ server, tool: tool.name, reason });\n log.warn(\"MCP tool dropped: invalid input schema\", { server, tool: tool.name, reason });\n }\n filteredInstances.set(instance, dropped);\n return dropped;\n}\n\n/**\n * The line the agent reads about dropped tools, mirroring what the CLI\n * reports when it drops them itself. `null` when nothing was dropped.\n */\nexport function formatDroppedToolsNotice(dropped: readonly DroppedMcpTool[]): string | null {\n if (dropped.length === 0) return null;\n const items = dropped.map((d) => `${d.tool} (server ${d.server}: ${d.reason})`).join(\"; \");\n return `Some MCP tools were not loaded because the Claude API would reject their input schema: ${items}. Do not try to call them.`;\n}\n"]}
@@ -1,6 +1,6 @@
1
- import { resolveAgentExec } from './chunk-YROR332M.js';
1
+ import { resolveAgentExec } from './chunk-7DN6JKP2.js';
2
2
  import { tryWithFsDeadline, fsDeadlineMs, withFsDeadline } from './chunk-GOCWM7FN.js';
3
- import { entryTransport, normalizeAnthropicBaseUrl, resolveEntryBaseUrl } from './chunk-MJHSLODD.js';
3
+ import { entryTransport, normalizeAnthropicBaseUrl, resolveEntryBaseUrl } from './chunk-LSI2IVFT.js';
4
4
  import { createWriteStream, createReadStream } from 'fs';
5
5
  import { unlink, rename, readdir, stat } from 'fs/promises';
6
6
  import { join } from 'path';
@@ -552,5 +552,5 @@ async function collect(child, timeoutMs) {
552
552
  }
553
553
 
554
554
  export { ANTHROPIC_DEFAULT_BASE_URL, APPROVE_ONCE, DENY, agentTranscriptStore, approvalCardOf, buildClaudeEndpointEnv, claudeEndpointMode, localTranscriptStore, probeResumeTranscript, resolveClaudeConfigDir, scrubPoisonedTranscript, transcriptStoreForRuntime };
555
- //# sourceMappingURL=chunk-VJ7NU7GD.js.map
556
- //# sourceMappingURL=chunk-VJ7NU7GD.js.map
555
+ //# sourceMappingURL=chunk-4DWBSTYA.js.map
556
+ //# sourceMappingURL=chunk-4DWBSTYA.js.map