@skaile/workspaces 5.19.0 → 6.1.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 (757) hide show
  1. package/CHANGELOG.md +56 -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-HJFV7UPW.js} +32 -24
  5. package/dist/asset-feeds-HJFV7UPW.js.map +1 -0
  6. package/dist/asset-manager/catalog-deployer.js +12 -12
  7. package/dist/asset-manager/index.js +19 -19
  8. package/dist/asset-manager/installer.js +14 -14
  9. package/dist/asset-manager/renderers.js +13 -13
  10. package/dist/asset-manager/src/index.d.ts +214 -27
  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 +34 -3
  17. package/dist/asset-manager/src/installer.d.ts.map +1 -1
  18. package/dist/asset-manager/src/mcp-config.d.ts +35 -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 +69 -73
  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 +53 -53
  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 +30 -30
  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 +30 -30
  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 +31 -31
  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 +25 -25
  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/claude-sdk-surface.d.ts +17 -0
  56. package/dist/bridge/src/claude-sdk-surface.d.ts.map +1 -0
  57. package/dist/bridge/src/cloud.d.ts +4 -4
  58. package/dist/bridge/src/codex/config-toml.d.ts +3 -3
  59. package/dist/bridge/src/codex/friendly-error.d.ts +1 -1
  60. package/dist/bridge/src/codex/friendly-error.d.ts.map +1 -1
  61. package/dist/bridge/src/codex/{managed-driver.d.ts → managed-harness.d.ts} +5 -5
  62. package/dist/bridge/src/codex/managed-harness.d.ts.map +1 -0
  63. package/dist/bridge/src/codex/native-approvals.d.ts +1 -1
  64. package/dist/bridge/src/codex/native-approvals.d.ts.map +1 -1
  65. package/dist/bridge/src/error-classifier.d.ts +7 -7
  66. package/dist/bridge/src/{driver-capabilities.d.ts → harness-capabilities.d.ts} +18 -18
  67. package/dist/bridge/src/harness-capabilities.d.ts.map +1 -0
  68. package/dist/bridge/src/harness-model-check.d.ts +40 -0
  69. package/dist/bridge/src/harness-model-check.d.ts.map +1 -0
  70. package/dist/bridge/src/{drivers → harnesses}/_subprocess-cli.d.ts +8 -8
  71. package/dist/bridge/src/harnesses/_subprocess-cli.d.ts.map +1 -0
  72. package/dist/bridge/src/{drivers → harnesses}/claude-context-usage.d.ts +5 -5
  73. package/dist/bridge/src/harnesses/claude-context-usage.d.ts.map +1 -0
  74. package/dist/bridge/src/{drivers → harnesses}/claude-sdk.d.ts +27 -27
  75. package/dist/bridge/src/harnesses/claude-sdk.d.ts.map +1 -0
  76. package/dist/bridge/src/{drivers → harnesses}/claude-self-turns.d.ts +5 -5
  77. package/dist/bridge/src/harnesses/claude-self-turns.d.ts.map +1 -0
  78. package/dist/bridge/src/{drivers → harnesses}/claude-tool-allowlist.d.ts +4 -4
  79. package/dist/bridge/src/harnesses/claude-tool-allowlist.d.ts.map +1 -0
  80. package/dist/bridge/src/{drivers → harnesses}/codex.d.ts +14 -14
  81. package/dist/bridge/src/harnesses/codex.d.ts.map +1 -0
  82. package/dist/bridge/src/{drivers → harnesses}/continue.d.ts +12 -12
  83. package/dist/bridge/src/harnesses/continue.d.ts.map +1 -0
  84. package/dist/bridge/src/{drivers → harnesses}/echo.d.ts +16 -16
  85. package/dist/bridge/src/harnesses/echo.d.ts.map +1 -0
  86. package/dist/bridge/src/{drivers → harnesses}/flow-script.d.ts +9 -9
  87. package/dist/bridge/src/harnesses/flow-script.d.ts.map +1 -0
  88. package/dist/bridge/src/{drivers → harnesses}/gemini.d.ts +15 -15
  89. package/dist/bridge/src/harnesses/gemini.d.ts.map +1 -0
  90. package/dist/bridge/src/{drivers → harnesses}/goose.d.ts +10 -10
  91. package/dist/bridge/src/harnesses/goose.d.ts.map +1 -0
  92. package/dist/bridge/src/{drivers → harnesses}/omp-models-yml.d.ts +12 -12
  93. package/dist/bridge/src/harnesses/omp-models-yml.d.ts.map +1 -0
  94. package/dist/bridge/src/{drivers → harnesses}/omp.d.ts +23 -23
  95. package/dist/bridge/src/harnesses/omp.d.ts.map +1 -0
  96. package/dist/bridge/src/{drivers → harnesses}/opencode.d.ts +11 -11
  97. package/dist/bridge/src/harnesses/opencode.d.ts.map +1 -0
  98. package/dist/bridge/src/{drivers → harnesses}/qwen.d.ts +12 -12
  99. package/dist/bridge/src/harnesses/qwen.d.ts.map +1 -0
  100. package/dist/bridge/src/{drivers → harnesses}/recovery-policy.d.ts +4 -4
  101. package/dist/bridge/src/harnesses/recovery-policy.d.ts.map +1 -0
  102. package/dist/bridge/src/{drivers → harnesses}/resume-probe.d.ts +3 -3
  103. package/dist/bridge/src/harnesses/resume-probe.d.ts.map +1 -0
  104. package/dist/bridge/src/{drivers → harnesses}/sanitize-assistant-text.d.ts +1 -1
  105. package/dist/bridge/src/harnesses/sanitize-assistant-text.d.ts.map +1 -0
  106. package/dist/bridge/src/{drivers → harnesses}/scrub-transcript.d.ts +1 -1
  107. package/dist/bridge/src/harnesses/scrub-transcript.d.ts.map +1 -0
  108. package/dist/bridge/src/index.d.ts +5 -4
  109. package/dist/bridge/src/index.d.ts.map +1 -1
  110. package/dist/bridge/src/logger.d.ts +4 -4
  111. package/dist/bridge/src/models.d.ts +1 -1
  112. package/dist/bridge/src/normalizer.d.ts +5 -3
  113. package/dist/bridge/src/normalizer.d.ts.map +1 -1
  114. package/dist/bridge/src/provider-materialize/continue-config-yaml.d.ts +5 -5
  115. package/dist/bridge/src/provider-materialize/continue-config-yaml.d.ts.map +1 -1
  116. package/dist/bridge/src/provider-materialize/credential-env.d.ts +3 -3
  117. package/dist/bridge/src/provider-materialize/{env-drivers.d.ts → env-harnesses.d.ts} +19 -19
  118. package/dist/bridge/src/provider-materialize/env-harnesses.d.ts.map +1 -0
  119. package/dist/bridge/src/provider-materialize/goose-custom-providers.d.ts +5 -5
  120. package/dist/bridge/src/provider-materialize/goose-custom-providers.d.ts.map +1 -1
  121. package/dist/bridge/src/provider-materialize/opencode-config.d.ts +7 -7
  122. package/dist/bridge/src/provider-materialize/opencode-config.d.ts.map +1 -1
  123. package/dist/bridge/src/provider-materialize/session-config-home.d.ts +5 -5
  124. package/dist/bridge/src/provider-materialize/session-config-home.d.ts.map +1 -1
  125. package/dist/bridge/src/provider-registry-derive.d.ts +4 -4
  126. package/dist/bridge/src/provider-registry-derive.d.ts.map +1 -1
  127. package/dist/bridge/src/reconfigure-ledger.d.ts +8 -8
  128. package/dist/bridge/src/reconfigure-ledger.d.ts.map +1 -1
  129. package/dist/bridge/src/registry.d.ts +34 -41
  130. package/dist/bridge/src/registry.d.ts.map +1 -1
  131. package/dist/bridge/src/runner-private-env.d.ts +2 -2
  132. package/dist/bridge/src/runtime.d.ts +11 -11
  133. package/dist/bridge/src/runtime.d.ts.map +1 -1
  134. package/dist/bridge/src/types.d.ts +158 -158
  135. package/dist/bridge/src/types.d.ts.map +1 -1
  136. package/dist/{chunk-7NT4F6SR.js → chunk-2LAPHLDH.js} +587 -521
  137. package/dist/chunk-2LAPHLDH.js.map +1 -0
  138. package/dist/{chunk-25ZVWL2R.js → chunk-3GMOPFWH.js} +4 -4
  139. package/dist/{chunk-25ZVWL2R.js.map → chunk-3GMOPFWH.js.map} +1 -1
  140. package/dist/{chunk-X5YPJV4N.js → chunk-3MWQKQUB.js} +2 -2
  141. package/dist/{chunk-X5YPJV4N.js.map → chunk-3MWQKQUB.js.map} +1 -1
  142. package/dist/{chunk-EPBKISS5.js → chunk-3TG2NV2F.js} +2 -2
  143. package/dist/chunk-3TG2NV2F.js.map +1 -0
  144. package/dist/{chunk-L2AMXONH.js → chunk-3X7VTCPG.js} +2 -2
  145. package/dist/chunk-3X7VTCPG.js.map +1 -0
  146. package/dist/{chunk-VIM3PWZM.js → chunk-4FVIT5DI.js} +3 -3
  147. package/dist/{chunk-VIM3PWZM.js.map → chunk-4FVIT5DI.js.map} +1 -1
  148. package/dist/{chunk-IF6IA3PZ.js → chunk-4MUDQCBP.js} +4 -4
  149. package/dist/{chunk-IF6IA3PZ.js.map → chunk-4MUDQCBP.js.map} +1 -1
  150. package/dist/{chunk-MKRWN7XP.js → chunk-5J4NPGFM.js} +5 -5
  151. package/dist/chunk-5J4NPGFM.js.map +1 -0
  152. package/dist/{chunk-5TBFN46Z.js → chunk-5KRMNUL4.js} +4 -4
  153. package/dist/chunk-5KRMNUL4.js.map +1 -0
  154. package/dist/{chunk-7SCS64BG.js → chunk-5Y2KGB4H.js} +109 -74
  155. package/dist/chunk-5Y2KGB4H.js.map +1 -0
  156. package/dist/{chunk-YIF2IJUA.js → chunk-6GWSDPBP.js} +3 -3
  157. package/dist/{chunk-YIF2IJUA.js.map → chunk-6GWSDPBP.js.map} +1 -1
  158. package/dist/{chunk-WST6UITC.js → chunk-6YR4ALVX.js} +17 -17
  159. package/dist/chunk-6YR4ALVX.js.map +1 -0
  160. package/dist/{chunk-YROR332M.js → chunk-7DN6JKP2.js} +2 -2
  161. package/dist/chunk-7DN6JKP2.js.map +1 -0
  162. package/dist/{chunk-IZCR27MU.js → chunk-7EKQDY2T.js} +3 -3
  163. package/dist/chunk-7EKQDY2T.js.map +1 -0
  164. package/dist/chunk-7HX6FNKL.js +317 -0
  165. package/dist/chunk-7HX6FNKL.js.map +1 -0
  166. package/dist/{chunk-COJIL7G4.js → chunk-7LP7RCZI.js} +7 -7
  167. package/dist/chunk-7LP7RCZI.js.map +1 -0
  168. package/dist/{chunk-2PBSAH3Z.js → chunk-AATHJRKL.js} +4 -4
  169. package/dist/{chunk-2PBSAH3Z.js.map → chunk-AATHJRKL.js.map} +1 -1
  170. package/dist/{chunk-C7WBGSBV.js → chunk-ABFPSVIS.js} +10 -10
  171. package/dist/chunk-ABFPSVIS.js.map +1 -0
  172. package/dist/{chunk-ICSCSM5D.js → chunk-ADPM6AYF.js} +3 -3
  173. package/dist/{chunk-ICSCSM5D.js.map → chunk-ADPM6AYF.js.map} +1 -1
  174. package/dist/{chunk-WOIRYY5L.js → chunk-AITJ7ELM.js} +141 -27
  175. package/dist/chunk-AITJ7ELM.js.map +1 -0
  176. package/dist/{chunk-HU5HVKY7.js → chunk-ASWTQQ7E.js} +4 -4
  177. package/dist/{chunk-HU5HVKY7.js.map → chunk-ASWTQQ7E.js.map} +1 -1
  178. package/dist/{chunk-RO6VOM6Z.js → chunk-AZ2H6R5I.js} +51 -25
  179. package/dist/chunk-AZ2H6R5I.js.map +1 -0
  180. package/dist/{chunk-I7TWVK6N.js → chunk-BBBCJSSU.js} +4 -4
  181. package/dist/{chunk-I7TWVK6N.js.map → chunk-BBBCJSSU.js.map} +1 -1
  182. package/dist/{chunk-AJ7EGIFR.js → chunk-BIRW3HOG.js} +3 -3
  183. package/dist/chunk-BIRW3HOG.js.map +1 -0
  184. package/dist/{chunk-FPHNJE4M.js → chunk-CEKW3KXP.js} +91 -30
  185. package/dist/chunk-CEKW3KXP.js.map +1 -0
  186. package/dist/{chunk-F6AA42GW.js → chunk-COYF6IG2.js} +5 -5
  187. package/dist/{chunk-F6AA42GW.js.map → chunk-COYF6IG2.js.map} +1 -1
  188. package/dist/{chunk-HT35SQZD.js → chunk-DGTI65OC.js} +30 -30
  189. package/dist/chunk-DGTI65OC.js.map +1 -0
  190. package/dist/{chunk-W4Q6CKJ5.js → chunk-DIGFA7Z5.js} +11 -11
  191. package/dist/chunk-DIGFA7Z5.js.map +1 -0
  192. package/dist/{chunk-335ENCCS.js → chunk-E572OHGY.js} +2 -2
  193. package/dist/{chunk-335ENCCS.js.map → chunk-E572OHGY.js.map} +1 -1
  194. package/dist/{chunk-Y5MBW5EU.js → chunk-EJPMNDTP.js} +3 -3
  195. package/dist/{chunk-Y5MBW5EU.js.map → chunk-EJPMNDTP.js.map} +1 -1
  196. package/dist/chunk-EX3GLAL6.js +31 -0
  197. package/dist/chunk-EX3GLAL6.js.map +1 -0
  198. package/dist/{chunk-XWOPZW26.js → chunk-FKQNBCDW.js} +38 -38
  199. package/dist/chunk-FKQNBCDW.js.map +1 -0
  200. package/dist/{chunk-6E6PKKAD.js → chunk-G5SUWZEU.js} +18 -8
  201. package/dist/chunk-G5SUWZEU.js.map +1 -0
  202. package/dist/{chunk-2GXSSZAM.js → chunk-GNZBFSRB.js} +12 -12
  203. package/dist/chunk-GNZBFSRB.js.map +1 -0
  204. package/dist/{chunk-PYJS5K7V.js → chunk-HMISULVD.js} +5 -5
  205. package/dist/{chunk-PYJS5K7V.js.map → chunk-HMISULVD.js.map} +1 -1
  206. package/dist/{chunk-IP2IPMEH.js → chunk-HPMQRAIF.js} +18 -18
  207. package/dist/chunk-HPMQRAIF.js.map +1 -0
  208. package/dist/{chunk-MRHVPQNO.js → chunk-HWNK3F3X.js} +1015 -189
  209. package/dist/chunk-HWNK3F3X.js.map +1 -0
  210. package/dist/{chunk-ZQSOJH6I.js → chunk-IHFGPHCT.js} +141 -341
  211. package/dist/chunk-IHFGPHCT.js.map +1 -0
  212. package/dist/{chunk-CQJH4G2K.js → chunk-ILLTBKDJ.js} +101 -102
  213. package/dist/chunk-ILLTBKDJ.js.map +1 -0
  214. package/dist/{chunk-FKU57Q5Q.js → chunk-IRYKRKVQ.js} +3 -3
  215. package/dist/{chunk-FKU57Q5Q.js.map → chunk-IRYKRKVQ.js.map} +1 -1
  216. package/dist/{chunk-J24CY3PF.js → chunk-J72MO2WA.js} +39 -39
  217. package/dist/chunk-J72MO2WA.js.map +1 -0
  218. package/dist/{chunk-Y56YIT6J.js → chunk-JCPD4QRM.js} +4 -4
  219. package/dist/chunk-JCPD4QRM.js.map +1 -0
  220. package/dist/{chunk-X3RMRJNR.js → chunk-JRN5QF4C.js} +8 -3
  221. package/dist/chunk-JRN5QF4C.js.map +1 -0
  222. package/dist/{chunk-K4O6L3WH.js → chunk-KNY356I3.js} +3 -3
  223. package/dist/{chunk-K4O6L3WH.js.map → chunk-KNY356I3.js.map} +1 -1
  224. package/dist/{chunk-XJVBUDDJ.js → chunk-KUQAJVYT.js} +8 -8
  225. package/dist/chunk-KUQAJVYT.js.map +1 -0
  226. package/dist/{chunk-4ZTPYIBE.js → chunk-KW37WNXY.js} +12 -12
  227. package/dist/chunk-KW37WNXY.js.map +1 -0
  228. package/dist/{chunk-MJHSLODD.js → chunk-LSI2IVFT.js} +2 -2
  229. package/dist/chunk-LSI2IVFT.js.map +1 -0
  230. package/dist/{chunk-WDXZA7QW.js → chunk-LSSYC5IC.js} +2 -2
  231. package/dist/{chunk-WDXZA7QW.js.map → chunk-LSSYC5IC.js.map} +1 -1
  232. package/dist/{chunk-WG6V4ISA.js → chunk-NB7SYQYP.js} +7 -7
  233. package/dist/{chunk-WG6V4ISA.js.map → chunk-NB7SYQYP.js.map} +1 -1
  234. package/dist/{chunk-EAZECHPM.js → chunk-NBAGV6L2.js} +5 -5
  235. package/dist/chunk-NBAGV6L2.js.map +1 -0
  236. package/dist/{chunk-JTOWA6RS.js → chunk-NUA33BYO.js} +181 -64
  237. package/dist/chunk-NUA33BYO.js.map +1 -0
  238. package/dist/{chunk-A6SMCEEE.js → chunk-QAKUD6QN.js} +11 -11
  239. package/dist/{chunk-A6SMCEEE.js.map → chunk-QAKUD6QN.js.map} +1 -1
  240. package/dist/{chunk-QG6GHTRM.js → chunk-QEULL4Q3.js} +8 -8
  241. package/dist/chunk-QEULL4Q3.js.map +1 -0
  242. package/dist/{chunk-ZX4KRWRB.js → chunk-QSYQOTWN.js} +4 -4
  243. package/dist/{chunk-ZX4KRWRB.js.map → chunk-QSYQOTWN.js.map} +1 -1
  244. package/dist/{chunk-X4ZZTHU3.js → chunk-RDTLPOPD.js} +4 -4
  245. package/dist/{chunk-X4ZZTHU3.js.map → chunk-RDTLPOPD.js.map} +1 -1
  246. package/dist/{chunk-GOCWM7FN.js → chunk-RHN5MRQO.js} +21 -4
  247. package/dist/chunk-RHN5MRQO.js.map +1 -0
  248. package/dist/{chunk-XM6T2AZ2.js → chunk-S2XHGWQC.js} +162 -124
  249. package/dist/chunk-S2XHGWQC.js.map +1 -0
  250. package/dist/{chunk-VJ7NU7GD.js → chunk-SVTMNSPI.js} +23 -6
  251. package/dist/chunk-SVTMNSPI.js.map +1 -0
  252. package/dist/{chunk-I37INEWE.js → chunk-UI745XC3.js} +10 -23
  253. package/dist/chunk-UI745XC3.js.map +1 -0
  254. package/dist/{chunk-N46LQR46.js → chunk-VMVDAZLA.js} +53 -30
  255. package/dist/chunk-VMVDAZLA.js.map +1 -0
  256. package/dist/{chunk-IG5LZ3WU.js → chunk-VTETQCR6.js} +10 -10
  257. package/dist/chunk-VTETQCR6.js.map +1 -0
  258. package/dist/{chunk-EFLKSMCO.js → chunk-VUJXZDCY.js} +5 -5
  259. package/dist/{chunk-EFLKSMCO.js.map → chunk-VUJXZDCY.js.map} +1 -1
  260. package/dist/{chunk-H6UVIKQ2.js → chunk-VYVTEMAW.js} +3 -3
  261. package/dist/{chunk-H6UVIKQ2.js.map → chunk-VYVTEMAW.js.map} +1 -1
  262. package/dist/{chunk-M3WPBTGJ.js → chunk-WD3L5QSU.js} +2 -2
  263. package/dist/{chunk-M3WPBTGJ.js.map → chunk-WD3L5QSU.js.map} +1 -1
  264. package/dist/{chunk-R6O6YWU7.js → chunk-WYZXSJBK.js} +3 -3
  265. package/dist/{chunk-R6O6YWU7.js.map → chunk-WYZXSJBK.js.map} +1 -1
  266. package/dist/{chunk-R4I3VBSS.js → chunk-X3YGUKCG.js} +5 -5
  267. package/dist/{chunk-R4I3VBSS.js.map → chunk-X3YGUKCG.js.map} +1 -1
  268. package/dist/{chunk-RPZVHXQ3.js → chunk-XFIEVEU7.js} +4 -4
  269. package/dist/chunk-XFIEVEU7.js.map +1 -0
  270. package/dist/{chunk-VSZWNUZC.js → chunk-XGULGQA3.js} +4 -4
  271. package/dist/chunk-XGULGQA3.js.map +1 -0
  272. package/dist/{chunk-Q6E6FM7P.js → chunk-XKNXPLKR.js} +6 -6
  273. package/dist/{chunk-Q6E6FM7P.js.map → chunk-XKNXPLKR.js.map} +1 -1
  274. package/dist/{chunk-7XSAW5OC.js → chunk-YLLVSR2U.js} +4 -4
  275. package/dist/{chunk-7XSAW5OC.js.map → chunk-YLLVSR2U.js.map} +1 -1
  276. package/dist/{chunk-6Z5KTFJT.js → chunk-Z3VKUWAX.js} +3 -3
  277. package/dist/{chunk-6Z5KTFJT.js.map → chunk-Z3VKUWAX.js.map} +1 -1
  278. package/dist/{chunk-5BEFNLOR.js → chunk-Z7ZEZZB6.js} +8 -8
  279. package/dist/chunk-Z7ZEZZB6.js.map +1 -0
  280. package/dist/{chunk-2LSDMJI2.js → chunk-ZAELRYKS.js} +4 -4
  281. package/dist/{chunk-2LSDMJI2.js.map → chunk-ZAELRYKS.js.map} +1 -1
  282. package/dist/{chunk-UQ33Y4DM.js → chunk-ZBHZLWV3.js} +4 -4
  283. package/dist/{chunk-UQ33Y4DM.js.map → chunk-ZBHZLWV3.js.map} +1 -1
  284. package/dist/{chunk-TIIXG3PN.js → chunk-ZDLUQLI6.js} +4 -4
  285. package/dist/{chunk-TIIXG3PN.js.map → chunk-ZDLUQLI6.js.map} +1 -1
  286. package/dist/{chunk-PHRNUTSG.js → chunk-ZFUZ5AKM.js} +4 -4
  287. package/dist/{chunk-PHRNUTSG.js.map → chunk-ZFUZ5AKM.js.map} +1 -1
  288. package/dist/{chunk-V257LUBM.js → chunk-ZHGKAZJ7.js} +251 -26
  289. package/dist/chunk-ZHGKAZJ7.js.map +1 -0
  290. package/dist/claude-code-RE46FJXI.js +10 -0
  291. package/dist/{claude-code-2PU7TITZ.js.map → claude-code-RE46FJXI.js.map} +1 -1
  292. package/dist/cli/index.js +1066 -647
  293. package/dist/cli/index.js.map +1 -1
  294. package/dist/cli/src/agent-pins.d.ts +11 -0
  295. package/dist/cli/src/agent-pins.d.ts.map +1 -1
  296. package/dist/cli/src/commands/catalog.d.ts +4 -4
  297. package/dist/cli/src/commands/catalog.d.ts.map +1 -1
  298. package/dist/cli/src/commands/complete-resolvers.d.ts.map +1 -1
  299. package/dist/cli/src/commands/config.d.ts +2 -2
  300. package/dist/cli/src/commands/config.d.ts.map +1 -1
  301. package/dist/cli/src/commands/diff.d.ts.map +1 -1
  302. package/dist/cli/src/commands/harness.d.ts +24 -0
  303. package/dist/cli/src/commands/harness.d.ts.map +1 -0
  304. package/dist/cli/src/commands/integration.d.ts +1 -1
  305. package/dist/cli/src/commands/integration.d.ts.map +1 -1
  306. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  307. package/dist/cli/src/commands/library-index.d.ts +20 -2
  308. package/dist/cli/src/commands/library-index.d.ts.map +1 -1
  309. package/dist/cli/src/commands/library-publish.d.ts.map +1 -1
  310. package/dist/cli/src/commands/migrate-assets.d.ts.map +1 -1
  311. package/dist/cli/src/commands/migrate-files.d.ts +14 -0
  312. package/dist/cli/src/commands/migrate-files.d.ts.map +1 -1
  313. package/dist/cli/src/commands/migrate-harness.d.ts +49 -0
  314. package/dist/cli/src/commands/migrate-harness.d.ts.map +1 -0
  315. package/dist/cli/src/commands/migrate.d.ts +4 -2
  316. package/dist/cli/src/commands/migrate.d.ts.map +1 -1
  317. package/dist/cli/src/commands/plugin/types.d.ts +1 -6
  318. package/dist/cli/src/commands/plugin/types.d.ts.map +1 -1
  319. package/dist/cli/src/commands/plugin-registry-cmd.d.ts +1 -1
  320. package/dist/cli/src/commands/preset-export.d.ts +1 -1
  321. package/dist/cli/src/commands/project.d.ts +20 -2
  322. package/dist/cli/src/commands/project.d.ts.map +1 -1
  323. package/dist/cli/src/commands/run.d.ts +2 -2
  324. package/dist/cli/src/commands/run.d.ts.map +1 -1
  325. package/dist/cli/src/commands/serve-preflight.d.ts +11 -11
  326. package/dist/cli/src/commands/serve-preflight.d.ts.map +1 -1
  327. package/dist/cli/src/commands/serve.d.ts +1 -1
  328. package/dist/cli/src/commands/serve.d.ts.map +1 -1
  329. package/dist/cli/src/commands/session-logs/local-query.d.ts +2 -0
  330. package/dist/cli/src/commands/session-logs/local-query.d.ts.map +1 -1
  331. package/dist/cli/src/commands/source.d.ts +9 -2
  332. package/dist/cli/src/commands/source.d.ts.map +1 -1
  333. package/dist/cli/src/commands/store.d.ts.map +1 -1
  334. package/dist/cli/src/commands/update.d.ts.map +1 -1
  335. package/dist/cli/src/commands/validate.d.ts.map +1 -1
  336. package/dist/cli/src/config-checks.d.ts +37 -0
  337. package/dist/cli/src/config-checks.d.ts.map +1 -0
  338. package/dist/cli/src/harness-error.d.ts +47 -0
  339. package/dist/cli/src/harness-error.d.ts.map +1 -0
  340. package/dist/cli/src/helpers.d.ts +5 -5
  341. package/dist/cli/src/helpers.d.ts.map +1 -1
  342. package/dist/cli/src/plugin-store/index.d.ts +2 -2
  343. package/dist/cli/src/setup.d.ts +3 -3
  344. package/dist/cli/src/setup.d.ts.map +1 -1
  345. package/dist/cli/src/skill-checks.d.ts +27 -0
  346. package/dist/cli/src/skill-checks.d.ts.map +1 -1
  347. package/dist/cli/src/store-addable.d.ts +11 -0
  348. package/dist/cli/src/store-addable.d.ts.map +1 -1
  349. package/dist/connectors/config.js +6 -6
  350. package/dist/connectors/index.js +31 -31
  351. package/dist/connectors/src/connector-prompt.d.ts +5 -5
  352. package/dist/connectors/src/connector-registry.d.ts +1 -1
  353. package/dist/connectors-7THEF7YA.js +48 -0
  354. package/dist/{connectors-RBGZ3M7G.js.map → connectors-7THEF7YA.js.map} +1 -1
  355. package/dist/connectors-shared/index.js +2 -2
  356. package/dist/core/framework.js +1 -1
  357. package/dist/{bridge/drivers/codex.d.ts → core/harness-targets.d.ts} +1 -1
  358. package/dist/core/harness-targets.js +4 -0
  359. package/dist/core/harness-targets.js.map +1 -0
  360. package/dist/core/index.js +11 -11
  361. package/dist/core/manifest.js +2 -2
  362. package/dist/core/models.js +1 -1
  363. package/dist/core/provider-registry-credentials.js +2 -2
  364. package/dist/core/provider-registry.js +1 -1
  365. package/dist/core/publish-manifest.js +3 -3
  366. package/dist/core/ref.js +1 -1
  367. package/dist/core/runtime-assets.js +6 -6
  368. package/dist/core/src/agent-instances.d.ts.map +1 -1
  369. package/dist/core/src/asset-roots.d.ts +2 -2
  370. package/dist/core/src/config-key-diagnostics.d.ts +9 -0
  371. package/dist/core/src/config-key-diagnostics.d.ts.map +1 -0
  372. package/dist/core/src/framework.d.ts +21 -21
  373. package/dist/core/src/framework.d.ts.map +1 -1
  374. package/dist/core/src/{driver-sdk.d.ts → harness-sdk.d.ts} +9 -9
  375. package/dist/core/src/harness-sdk.d.ts.map +1 -0
  376. package/dist/core/src/harness-targets.d.ts +71 -0
  377. package/dist/core/src/harness-targets.d.ts.map +1 -0
  378. package/dist/core/src/index.d.ts +8 -8
  379. package/dist/core/src/index.d.ts.map +1 -1
  380. package/dist/core/src/manifest.d.ts +10 -0
  381. package/dist/core/src/manifest.d.ts.map +1 -1
  382. package/dist/core/src/models.d.ts +8 -0
  383. package/dist/core/src/models.d.ts.map +1 -1
  384. package/dist/core/src/provider-registry.d.ts +2 -2
  385. package/dist/core/src/settings.d.ts +17 -16
  386. package/dist/core/src/settings.d.ts.map +1 -1
  387. package/dist/core/src/store.d.ts +12 -12
  388. package/dist/core/src/store.d.ts.map +1 -1
  389. package/dist/core/src/workspace-config.d.ts +39 -21
  390. package/dist/core/src/workspace-config.d.ts.map +1 -1
  391. package/dist/core/src/workspace-yaml-editor.d.ts +10 -3
  392. package/dist/core/src/workspace-yaml-editor.d.ts.map +1 -1
  393. package/dist/core/store.js +2 -2
  394. package/dist/core/workspace-config.js +5 -5
  395. package/dist/deploy/index.js +12 -12
  396. package/dist/discovery/index.js +5 -5
  397. package/dist/discovery/src/builtin-providers.d.ts.map +1 -1
  398. package/dist/discovery/src/parse-manifest.d.ts.map +1 -1
  399. package/dist/{ensure-sources-GKVLE6L5.js → ensure-sources-IH7CHSJF.js} +22 -22
  400. package/dist/{ensure-sources-GKVLE6L5.js.map → ensure-sources-IH7CHSJF.js.map} +1 -1
  401. package/dist/factory-assets/connectors/box.js +31 -31
  402. package/dist/factory-assets/connectors/deploy.js +31 -31
  403. package/dist/factory-assets/connectors/devserver.js +31 -31
  404. package/dist/factory-assets/connectors/flow/CONNECTOR.md +5 -5
  405. package/dist/factory-assets/connectors/flow/adapter.d.ts +3 -3
  406. package/dist/factory-assets/connectors/flow/adapter.d.ts.map +1 -1
  407. package/dist/factory-assets/connectors/flow/adapter.js +31 -31
  408. package/dist/factory-assets/connectors/flow/contract/normalize.d.ts.map +1 -1
  409. package/dist/factory-assets/connectors/flow/contract.js +1 -1
  410. package/dist/factory-assets/connectors/flow/engine/types.d.ts +1 -1
  411. package/dist/factory-assets/connectors/flow/engine.js +13 -13
  412. package/dist/factory-assets/connectors/flow/inline-sub-flow-host.d.ts +2 -2
  413. package/dist/factory-assets/connectors/flow/inline-sub-flow-host.d.ts.map +1 -1
  414. package/dist/factory-assets/connectors/flow/orchestrator-turn.d.ts +4 -4
  415. package/dist/factory-assets/connectors/flow/orchestrator-turn.d.ts.map +1 -1
  416. package/dist/factory-assets/connectors/flow/prompt-fragments.d.ts +1 -1
  417. package/dist/factory-assets/connectors/flow/prompt-fragments.js +1 -1
  418. package/dist/factory-assets/connectors/flow/run-flow.d.ts +12 -12
  419. package/dist/factory-assets/connectors/flow/run-flow.d.ts.map +1 -1
  420. package/dist/factory-assets/connectors/flow/run-flow.js +33 -33
  421. package/dist/factory-assets/connectors/flow/sub-flow-runner.d.ts +1 -1
  422. package/dist/factory-assets/connectors/flow/sub-flow-runner.d.ts.map +1 -1
  423. package/dist/factory-assets/connectors/flow/subprompt-runner.d.ts +22 -22
  424. package/dist/factory-assets/connectors/flow/subprompt-runner.d.ts.map +1 -1
  425. package/dist/factory-assets/connectors/flow.js +31 -31
  426. package/dist/factory-assets/connectors/git.js +31 -31
  427. package/dist/factory-assets/connectors/gmail.js +31 -31
  428. package/dist/factory-assets/connectors/googledrive.js +31 -31
  429. package/dist/factory-assets/connectors/local.js +31 -31
  430. package/dist/factory-assets/connectors/mattermost.js +31 -31
  431. package/dist/factory-assets/connectors/memory.js +31 -31
  432. package/dist/factory-assets/connectors/minio.js +31 -31
  433. package/dist/factory-assets/connectors/postgres.js +31 -31
  434. package/dist/factory-assets/connectors/s3.js +31 -31
  435. package/dist/factory-assets/connectors/sharepoint.js +31 -31
  436. package/dist/factory-assets/connectors/sqlite.js +31 -31
  437. package/dist/factory-assets/connectors/static-server.js +31 -31
  438. package/dist/factory-assets/connectors/tunnel.js +31 -31
  439. package/dist/factory-assets/connectors/webdav.js +31 -31
  440. package/dist/factory-assets/connectors/xstate-store.js +31 -31
  441. package/dist/factory-assets/connectors/xstate.js +31 -31
  442. package/dist/factory-assets/skills/authoring-skaile-assets/SKILL.md +1 -1
  443. package/dist/factory-assets/skills/authoring-skaile-manifests/SKILL.md +2 -2
  444. package/dist/factory-assets/skills/authoring-skaile-manifests/references/dependency-standard.md +3 -3
  445. package/dist/factory-assets/skills/skaile-manage-workspace/SKILL.md +1 -1
  446. package/dist/flows-4JZQ3XFK.js +26 -0
  447. package/dist/{flows-W2FB7WIM.js.map → flows-4JZQ3XFK.js.map} +1 -1
  448. package/dist/{helpers-34QNVIGB.js → helpers-JNMK3FC2.js} +22 -22
  449. package/dist/{helpers-34QNVIGB.js.map → helpers-JNMK3FC2.js.map} +1 -1
  450. package/dist/library/index.js +15 -15
  451. package/dist/library/install.js +4 -4
  452. package/dist/library/src/index.d.ts +1 -1
  453. package/dist/library/src/index.d.ts.map +1 -1
  454. package/dist/library/src/local/library-dir.d.ts +22 -5
  455. package/dist/library/src/local/library-dir.d.ts.map +1 -1
  456. package/dist/library/src/local/local-catalog-source.d.ts.map +1 -1
  457. package/dist/library/src/remote/remote-catalog-source.d.ts +6 -0
  458. package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
  459. package/dist/{library-publish-RUQTKTJU.js → library-publish-I3UWXAHI.js} +69 -67
  460. package/dist/library-publish-I3UWXAHI.js.map +1 -0
  461. package/dist/model-endpoint/index.js +15 -15
  462. package/dist/model-endpoint/src/resolve.d.ts +1 -1
  463. package/dist/open-library-NKKUJLWA.js +42 -0
  464. package/dist/{open-library-PVTIUQUF.js.map → open-library-NKKUJLWA.js.map} +1 -1
  465. package/dist/open-registry-BYAXSHUI.js +32 -0
  466. package/dist/{open-registry-SOIS3TA2.js.map → open-registry-BYAXSHUI.js.map} +1 -1
  467. package/dist/paths-UKWE35XS.js +22 -0
  468. package/dist/{paths-JLNX7Y4X.js.map → paths-UKWE35XS.js.map} +1 -1
  469. package/dist/plugin-registry/index.js +1 -1
  470. package/dist/plugin-registry/src/context.d.ts +3 -3
  471. package/dist/plugin-registry/src/context.d.ts.map +1 -1
  472. package/dist/plugin-registry/src/deploy-handle.d.ts +1 -1
  473. package/dist/plugin-registry/src/index.d.ts +2 -2
  474. package/dist/plugin-registry/src/index.d.ts.map +1 -1
  475. package/dist/plugin-registry/src/internal.d.ts.map +1 -1
  476. package/dist/plugin-registry/src/registry.d.ts +3 -3
  477. package/dist/plugin-registry/src/registry.d.ts.map +1 -1
  478. package/dist/plugin-registry/src/targets.d.ts +9 -9
  479. package/dist/plugin-registry/src/targets.d.ts.map +1 -1
  480. package/dist/plugin-store-ABE35NRX.js +23 -0
  481. package/dist/{plugin-store-G2GWAHSD.js.map → plugin-store-ABE35NRX.js.map} +1 -1
  482. package/dist/plugins/src/asset-kind-provider.d.ts +1 -1
  483. package/dist/project-BIPK47JK.js +86 -0
  484. package/dist/{project-EX47PUBN.js.map → project-BIPK47JK.js.map} +1 -1
  485. package/dist/resolver/index.js +12 -12
  486. package/dist/runner/index.js +50 -50
  487. package/dist/runner/src/agent.d.ts +3 -3
  488. package/dist/runner/src/agent.d.ts.map +1 -1
  489. package/dist/runner/src/agents/in-process-host.d.ts +1 -1
  490. package/dist/runner/src/agents/instances.d.ts +1 -1
  491. package/dist/runner/src/agents/instances.d.ts.map +1 -1
  492. package/dist/runner/src/agents/run-controller.d.ts +7 -7
  493. package/dist/runner/src/agents/run-controller.d.ts.map +1 -1
  494. package/dist/runner/src/agents/standalone-surface.d.ts +2 -2
  495. package/dist/runner/src/agents/standalone-surface.d.ts.map +1 -1
  496. package/dist/runner/src/ai-provider-switch.d.ts +7 -7
  497. package/dist/runner/src/assistant-home.d.ts +1 -1
  498. package/dist/runner/src/capability-registry.d.ts +2 -2
  499. package/dist/runner/src/coalesced-restart.d.ts +2 -2
  500. package/dist/runner/src/compaction/context-window.d.ts +8 -8
  501. package/dist/runner/src/compaction/context-window.d.ts.map +1 -1
  502. package/dist/runner/src/compaction/orchestrator.d.ts +24 -24
  503. package/dist/runner/src/compaction/orchestrator.d.ts.map +1 -1
  504. package/dist/runner/src/compaction-gate.d.ts +30 -30
  505. package/dist/runner/src/compaction-gate.d.ts.map +1 -1
  506. package/dist/runner/src/composition/content-source.d.ts.map +1 -1
  507. package/dist/runner/src/composition/dry-run.d.ts +2 -2
  508. package/dist/runner/src/composition/dry-run.d.ts.map +1 -1
  509. package/dist/runner/src/composition/errors.d.ts +16 -1
  510. package/dist/runner/src/composition/errors.d.ts.map +1 -1
  511. package/dist/runner/src/composition/resolve-instance.d.ts +2 -2
  512. package/dist/runner/src/composition/resolve.d.ts +1 -1
  513. package/dist/runner/src/config.d.ts +3 -3
  514. package/dist/runner/src/config.d.ts.map +1 -1
  515. package/dist/runner/src/context-usage/collector.d.ts +15 -15
  516. package/dist/runner/src/context-usage/collector.d.ts.map +1 -1
  517. package/dist/runner/src/context-usage/compose.d.ts +6 -6
  518. package/dist/runner/src/context-usage/compose.d.ts.map +1 -1
  519. package/dist/runner/src/context-usage/estimator.d.ts +1 -1
  520. package/dist/runner/src/context-usage/index.d.ts +1 -1
  521. package/dist/runner/src/context-usage/index.d.ts.map +1 -1
  522. package/dist/runner/src/context-usage/transcript-tracker.d.ts +2 -2
  523. package/dist/runner/src/context-usage/transcript-tracker.d.ts.map +1 -1
  524. package/dist/runner/src/credential-notice.d.ts +4 -4
  525. package/dist/runner/src/credential-notice.d.ts.map +1 -1
  526. package/dist/runner/src/credential-rotated.d.ts +1 -1
  527. package/dist/runner/src/final-text.d.ts +1 -1
  528. package/dist/runner/src/{driver-swap-gate.d.ts → harness-swap-gate.d.ts} +21 -21
  529. package/dist/runner/src/harness-swap-gate.d.ts.map +1 -0
  530. package/dist/runner/src/late-mcp-rebuild.d.ts +6 -6
  531. package/dist/runner/src/late-mcp-rebuild.d.ts.map +1 -1
  532. package/dist/runner/src/lifecycle-handler.d.ts +1 -1
  533. package/dist/runner/src/lifecycle-handler.d.ts.map +1 -1
  534. package/dist/runner/src/manifest.d.ts +1 -1
  535. package/dist/runner/src/mcp-runtime-handlers.d.ts +6 -6
  536. package/dist/runner/src/mcp-runtime-handlers.d.ts.map +1 -1
  537. package/dist/runner/src/model-endpoint-discovery.d.ts +1 -1
  538. package/dist/runner/src/pending-turns.d.ts +3 -3
  539. package/dist/runner/src/platform-blocks.d.ts +5 -5
  540. package/dist/runner/src/platform-blocks.d.ts.map +1 -1
  541. package/dist/runner/src/prompt-turn-queue.d.ts +1 -1
  542. package/dist/runner/src/provider-quota-forwarder.d.ts +1 -1
  543. package/dist/runner/src/provider-quota-forwarder.d.ts.map +1 -1
  544. package/dist/runner/src/reconfigure-handler.d.ts +14 -14
  545. package/dist/runner/src/reconfigure-handler.d.ts.map +1 -1
  546. package/dist/runner/src/resource-handler.d.ts +1 -1
  547. package/dist/runner/src/resources.d.ts +5 -5
  548. package/dist/runner/src/resources.d.ts.map +1 -1
  549. package/dist/runner/src/runner-capabilities.d.ts +7 -7
  550. package/dist/runner/src/runtime-session-emit.d.ts +5 -5
  551. package/dist/runner/src/runtime-session-emit.d.ts.map +1 -1
  552. package/dist/runner/src/s3-presign-client.d.ts +1 -1
  553. package/dist/runner/src/serve-credentials.d.ts +7 -7
  554. package/dist/runner/src/serve-credentials.d.ts.map +1 -1
  555. package/dist/runner/src/serve.d.ts +46 -34
  556. package/dist/runner/src/serve.d.ts.map +1 -1
  557. package/dist/runner/src/session-builder.d.ts +41 -41
  558. package/dist/runner/src/session-builder.d.ts.map +1 -1
  559. package/dist/runner/src/session-capability-wiring.d.ts +9 -9
  560. package/dist/runner/src/session-capability-wiring.d.ts.map +1 -1
  561. package/dist/runner/src/session-stimulus.d.ts +1 -1
  562. package/dist/runner/src/session.d.ts +5 -5
  563. package/dist/runner/src/session.d.ts.map +1 -1
  564. package/dist/runner/src/skill-staging.d.ts +16 -16
  565. package/dist/runner/src/skill-staging.d.ts.map +1 -1
  566. package/dist/runner/src/turn-end-contract.d.ts +5 -5
  567. package/dist/runner/src/turn-end-contract.d.ts.map +1 -1
  568. package/dist/runner/src/turn-scheduler.d.ts +22 -22
  569. package/dist/runner/src/turn-scheduler.d.ts.map +1 -1
  570. package/dist/runner/src/turn-status-replay.d.ts +1 -1
  571. package/dist/runner/src/usage-limit-turn-hold.d.ts +1 -1
  572. package/dist/sdk/asset-manager.js +19 -19
  573. package/dist/sdk/bridge.js +25 -25
  574. package/dist/sdk/core.js +11 -11
  575. package/dist/sdk/flow.js +13 -13
  576. package/dist/sdk/index.js +54 -54
  577. package/dist/sdk/index.js.map +1 -1
  578. package/dist/sdk/resolver.js +12 -12
  579. package/dist/sdk/runner.js +50 -50
  580. package/dist/sdk/session.js +2 -2
  581. package/dist/sdk/src/agent-session.d.ts +1 -1
  582. package/dist/sdk/src/local-runtime.d.ts +1 -1
  583. package/dist/sdk/src/local-runtime.d.ts.map +1 -1
  584. package/dist/sdk/src/types.d.ts +1 -1
  585. package/dist/sdk/src/types.d.ts.map +1 -1
  586. package/dist/sdk/store.js +2 -2
  587. package/dist/sdk/transport/ws/server.js +12 -12
  588. package/dist/sdk/transport/ws.js +12 -12
  589. package/dist/sdk/transport.js +12 -12
  590. package/dist/sdk/types.js +1 -1
  591. package/dist/serve-preflight-FLTIBTEX.js +107 -0
  592. package/dist/serve-preflight-FLTIBTEX.js.map +1 -0
  593. package/dist/session/index.js +2 -2
  594. package/dist/session/src/dispatcher.d.ts +2 -2
  595. package/dist/sessions-2Q7SSYPT.js +5 -0
  596. package/dist/{sessions-DICDEONJ.js.map → sessions-2Q7SSYPT.js.map} +1 -1
  597. package/dist/{setup-AFZQNGKA.js → setup-AG6NFHSN.js} +52 -52
  598. package/dist/setup-AG6NFHSN.js.map +1 -0
  599. package/dist/skills-UQYUHVKO.js +26 -0
  600. package/dist/{skills-YYYC6D5X.js.map → skills-UQYUHVKO.js.map} +1 -1
  601. package/dist/source-ASEHI2XS.js +85 -0
  602. package/dist/{source-DGPCT5IC.js.map → source-ASEHI2XS.js.map} +1 -1
  603. package/dist/{source-manifest-publish-AGJ63JF2.js → source-manifest-publish-IEVV3W6J.js} +62 -62
  604. package/dist/{source-manifest-publish-AGJ63JF2.js.map → source-manifest-publish-IEVV3W6J.js.map} +1 -1
  605. package/dist/store/index.js +2 -2
  606. package/dist/store/src/store.d.ts +3 -3
  607. package/dist/store/src/store.d.ts.map +1 -1
  608. package/dist/transport/index.js +12 -12
  609. package/dist/transport/ws/server.js +12 -12
  610. package/dist/transport/ws.js +12 -12
  611. package/dist/tui/index.js +70 -70
  612. package/dist/tui/index.js.map +1 -1
  613. package/dist/tui/src/repl-session.d.ts +5 -5
  614. package/dist/tui/src/repl.d.ts +5 -5
  615. package/dist/tui/src/repl.d.ts.map +1 -1
  616. package/dist/types/index.js +1 -1
  617. package/dist/types/manifests.js +1 -1
  618. package/dist/types/src/agent-lifecycle.d.ts +1 -1
  619. package/dist/types/src/agent-lifecycle.d.ts.map +1 -1
  620. package/dist/types/src/ask-slots.d.ts +1 -1
  621. package/dist/types/src/capabilities.d.ts +1 -1
  622. package/dist/types/src/context-usage.d.ts +22 -22
  623. package/dist/types/src/context-usage.d.ts.map +1 -1
  624. package/dist/types/src/events.d.ts +49 -49
  625. package/dist/types/src/events.d.ts.map +1 -1
  626. package/dist/types/src/index.d.ts +2 -2
  627. package/dist/types/src/index.d.ts.map +1 -1
  628. package/dist/types/src/install-manifest.d.ts +1 -1
  629. package/dist/types/src/install-manifest.d.ts.map +1 -1
  630. package/dist/types/src/lifecycle.d.ts +6 -6
  631. package/dist/types/src/lifecycle.d.ts.map +1 -1
  632. package/dist/types/src/logging.d.ts +1 -1
  633. package/dist/types/src/manifests/agent.d.ts +3 -3
  634. package/dist/types/src/protocol.d.ts +4 -4
  635. package/dist/types/src/runtime.d.ts +38 -38
  636. package/dist/types/src/runtime.d.ts.map +1 -1
  637. package/dist/types/src/version.d.ts +22 -11
  638. package/dist/types/src/version.d.ts.map +1 -1
  639. package/dist/validator-DRHMJ457.js +5 -0
  640. package/dist/{validator-FA2PFW6N.js.map → validator-DRHMJ457.js.map} +1 -1
  641. package/dist/workspace-plugin/adapters/mcp.js +41 -41
  642. package/dist/workspace-plugin/adapters/omp.js +26 -26
  643. package/dist/workspace-plugin/adapters/omp.js.map +1 -1
  644. package/dist/workspace-plugin/index.js +3 -3
  645. package/dist/workspace-plugin/src/plugin.d.ts +5 -5
  646. package/dist/workspace-plugin/src/plugin.d.ts.map +1 -1
  647. package/dist/workspace-plugin/src/tools/flows.d.ts +1 -1
  648. package/dist/workspace-plugin/src/tools/validator.d.ts +6 -6
  649. package/dist/workspace-plugin/src/tools/validator.d.ts.map +1 -1
  650. package/dist/workspace-plugin/src/types.d.ts +2 -2
  651. package/dist/workspace-plugin/src/types.d.ts.map +1 -1
  652. package/package.json +59 -59
  653. package/dist/asset-feeds-QGLI3AXI.js.map +0 -1
  654. package/dist/bridge/drivers/claude-sdk.js.map +0 -1
  655. package/dist/bridge/drivers/codex.js.map +0 -1
  656. package/dist/bridge/drivers/continue.js.map +0 -1
  657. package/dist/bridge/drivers/echo.js.map +0 -1
  658. package/dist/bridge/drivers/gemini.js +0 -18
  659. package/dist/bridge/drivers/goose.js.map +0 -1
  660. package/dist/bridge/drivers/omp.js.map +0 -1
  661. package/dist/bridge/drivers/opencode.js.map +0 -1
  662. package/dist/bridge/drivers/qwen.js.map +0 -1
  663. package/dist/bridge/src/codex/managed-driver.d.ts.map +0 -1
  664. package/dist/bridge/src/driver-capabilities.d.ts.map +0 -1
  665. package/dist/bridge/src/driver-model-check.d.ts +0 -25
  666. package/dist/bridge/src/driver-model-check.d.ts.map +0 -1
  667. package/dist/bridge/src/drivers/_subprocess-cli.d.ts.map +0 -1
  668. package/dist/bridge/src/drivers/claude-context-usage.d.ts.map +0 -1
  669. package/dist/bridge/src/drivers/claude-sdk.d.ts.map +0 -1
  670. package/dist/bridge/src/drivers/claude-self-turns.d.ts.map +0 -1
  671. package/dist/bridge/src/drivers/claude-tool-allowlist.d.ts.map +0 -1
  672. package/dist/bridge/src/drivers/codex.d.ts.map +0 -1
  673. package/dist/bridge/src/drivers/continue.d.ts.map +0 -1
  674. package/dist/bridge/src/drivers/echo.d.ts.map +0 -1
  675. package/dist/bridge/src/drivers/flow-script.d.ts.map +0 -1
  676. package/dist/bridge/src/drivers/gemini.d.ts.map +0 -1
  677. package/dist/bridge/src/drivers/goose.d.ts.map +0 -1
  678. package/dist/bridge/src/drivers/omp-models-yml.d.ts.map +0 -1
  679. package/dist/bridge/src/drivers/omp.d.ts.map +0 -1
  680. package/dist/bridge/src/drivers/opencode.d.ts.map +0 -1
  681. package/dist/bridge/src/drivers/qwen.d.ts.map +0 -1
  682. package/dist/bridge/src/drivers/recovery-policy.d.ts.map +0 -1
  683. package/dist/bridge/src/drivers/resume-probe.d.ts.map +0 -1
  684. package/dist/bridge/src/drivers/sanitize-assistant-text.d.ts.map +0 -1
  685. package/dist/bridge/src/drivers/scrub-transcript.d.ts.map +0 -1
  686. package/dist/bridge/src/provider-materialize/env-drivers.d.ts.map +0 -1
  687. package/dist/chunk-2GXSSZAM.js.map +0 -1
  688. package/dist/chunk-4ZTPYIBE.js.map +0 -1
  689. package/dist/chunk-5BEFNLOR.js.map +0 -1
  690. package/dist/chunk-5TBFN46Z.js.map +0 -1
  691. package/dist/chunk-6E6PKKAD.js.map +0 -1
  692. package/dist/chunk-7NT4F6SR.js.map +0 -1
  693. package/dist/chunk-7SCS64BG.js.map +0 -1
  694. package/dist/chunk-AJ7EGIFR.js.map +0 -1
  695. package/dist/chunk-C7WBGSBV.js.map +0 -1
  696. package/dist/chunk-COJIL7G4.js.map +0 -1
  697. package/dist/chunk-CQJH4G2K.js.map +0 -1
  698. package/dist/chunk-EAZECHPM.js.map +0 -1
  699. package/dist/chunk-EPBKISS5.js.map +0 -1
  700. package/dist/chunk-FPHNJE4M.js.map +0 -1
  701. package/dist/chunk-GOCWM7FN.js.map +0 -1
  702. package/dist/chunk-HT35SQZD.js.map +0 -1
  703. package/dist/chunk-I37INEWE.js.map +0 -1
  704. package/dist/chunk-IG5LZ3WU.js.map +0 -1
  705. package/dist/chunk-IP2IPMEH.js.map +0 -1
  706. package/dist/chunk-IZCR27MU.js.map +0 -1
  707. package/dist/chunk-J24CY3PF.js.map +0 -1
  708. package/dist/chunk-JTOWA6RS.js.map +0 -1
  709. package/dist/chunk-L2AMXONH.js.map +0 -1
  710. package/dist/chunk-MJHSLODD.js.map +0 -1
  711. package/dist/chunk-MKRWN7XP.js.map +0 -1
  712. package/dist/chunk-MRHVPQNO.js.map +0 -1
  713. package/dist/chunk-N46LQR46.js.map +0 -1
  714. package/dist/chunk-PUK7TQT4.js +0 -13
  715. package/dist/chunk-PUK7TQT4.js.map +0 -1
  716. package/dist/chunk-QG6GHTRM.js.map +0 -1
  717. package/dist/chunk-RO6VOM6Z.js.map +0 -1
  718. package/dist/chunk-RPZVHXQ3.js.map +0 -1
  719. package/dist/chunk-V257LUBM.js.map +0 -1
  720. package/dist/chunk-VJ7NU7GD.js.map +0 -1
  721. package/dist/chunk-VSZWNUZC.js.map +0 -1
  722. package/dist/chunk-W4Q6CKJ5.js.map +0 -1
  723. package/dist/chunk-WOIRYY5L.js.map +0 -1
  724. package/dist/chunk-WST6UITC.js.map +0 -1
  725. package/dist/chunk-X3RMRJNR.js.map +0 -1
  726. package/dist/chunk-XJVBUDDJ.js.map +0 -1
  727. package/dist/chunk-XM6T2AZ2.js.map +0 -1
  728. package/dist/chunk-XWOPZW26.js.map +0 -1
  729. package/dist/chunk-Y56YIT6J.js.map +0 -1
  730. package/dist/chunk-YROR332M.js.map +0 -1
  731. package/dist/chunk-ZQSOJH6I.js.map +0 -1
  732. package/dist/claude-code-2PU7TITZ.js +0 -10
  733. package/dist/cli/src/driver-error.d.ts +0 -28
  734. package/dist/cli/src/driver-error.d.ts.map +0 -1
  735. package/dist/connectors-RBGZ3M7G.js +0 -48
  736. package/dist/core/driver-targets.d.ts +0 -2
  737. package/dist/core/driver-targets.js +0 -4
  738. package/dist/core/driver-targets.js.map +0 -1
  739. package/dist/core/src/driver-sdk.d.ts.map +0 -1
  740. package/dist/core/src/driver-targets.d.ts +0 -71
  741. package/dist/core/src/driver-targets.d.ts.map +0 -1
  742. package/dist/flows-W2FB7WIM.js +0 -26
  743. package/dist/library-publish-RUQTKTJU.js.map +0 -1
  744. package/dist/open-library-PVTIUQUF.js +0 -42
  745. package/dist/open-registry-SOIS3TA2.js +0 -32
  746. package/dist/paths-JLNX7Y4X.js +0 -22
  747. package/dist/plugin-store-G2GWAHSD.js +0 -23
  748. package/dist/project-EX47PUBN.js +0 -84
  749. package/dist/runner/src/driver-swap-gate.d.ts.map +0 -1
  750. package/dist/serve-preflight-QXRKGOI5.js +0 -108
  751. package/dist/serve-preflight-QXRKGOI5.js.map +0 -1
  752. package/dist/sessions-DICDEONJ.js +0 -5
  753. package/dist/setup-AFZQNGKA.js.map +0 -1
  754. package/dist/skills-YYYC6D5X.js +0 -26
  755. package/dist/source-DGPCT5IC.js +0 -85
  756. package/dist/validator-FA2PFW6N.js +0 -5
  757. /package/dist/bridge/{drivers → harnesses}/gemini.js.map +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../bridge/src/provider-materialize/continue-config-yaml.ts","../../../bridge/src/harnesses/continue.ts"],"names":["stringifyYaml","text"],"mappings":"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","file":"continue.js","sourcesContent":["/**\n * Continue's `config.yaml` adapter — the file half of the Continue row (§2.3).\n *\n * `cn` has no model flag. Its assistant is a document, and the document binds\n * models to **roles** (`chat`, `edit`, `apply`, `autocomplete`, `embed`,\n * `rerank`, `summarize`); a headless `cn -p` turn runs as `chat`. So unlike\n * OpenCode and Goose, Continue needs a file for *every* endpoint, stock or\n * custom — it has no built-in provider table keyed by vendor names to fall\n * back on:\n *\n * ```yaml\n * name: Skaile session\n * version: 0.0.1\n * schema: v1\n * models:\n * - name: corp-gateway/corp-fast-1\n * provider: openai\n * model: corp-fast-1\n * apiBase: https://llm.corp.example/v1\n * apiKey: ${{ secrets.SKAILE_AIP_CORP_GATEWAY_KEY }}\n * roles:\n * - chat\n * ```\n *\n * `provider` is Continue's *adapter class*, not an endpoint name — the\n * endpoint is `apiBase`. The row's `name` carries the identity instead, and it\n * is `harnessProviderName`/`harnessModelSelector` verbatim, so a model reads\n * the same here as in every other adapter.\n *\n * **Credentials never enter the file.** `apiKey` holds Continue's own\n * `${{ secrets.NAME }}` indirection; the CLI resolves a secret from the\n * process environment before it asks Continue Hub, so `SKAILE_AIP_<ID>_KEY`\n * in the child env is what authenticates the request.\n *\n * **Roles.** The session's `roles` table is the source: every entry whose key\n * is one of Continue's roles becomes that role's binding (`default` is read as\n * `chat`, matching how the rest of the programme spells the fallback), and the\n * session's own model selection wins `chat` when it named one.\n *\n * @see https://docs.continue.dev/reference\n * @docLink packages/bridge/harnesses#one-shot-cli-harnesses-gemini-qwen-opencode-goose-continue\n */\n\nimport {\n type AIProviderLlmEntry,\n type AIProviderSurface,\n parseModelRef,\n} from \"@skaile/workspaces/core/provider-registry\";\nimport { stringify as stringifyYaml } from \"yaml\";\nimport { providerCredentialEnvName } from \"./credential-env.js\";\nimport {\n harnessProviderName,\n continueRoleBinding,\n entryBaseUrl,\n entrySurface,\n type EnvHarnessSession,\n selectableEntries,\n versionedAnthropicBaseUrl,\n} from \"./env-harnesses.js\";\nimport {\n harnessSessionConfigHome,\n removeSessionConfigFile,\n writeSessionConfigFile,\n} from \"./session-config-home.js\";\n\n/**\n * `surface` → Continue's provider class. Continue's `openai` adapter is the\n * OpenAI adapter, so both OpenAI-flavoured surfaces resolve to it; the\n * surfaces Continue has no adapter for are reported instead of guessed at.\n */\nconst CONTINUE_PROVIDER_CLASS: Partial<Record<AIProviderSurface, string>> = {\n \"anthropic-messages\": \"anthropic\",\n \"openai-completions\": \"openai\",\n \"openai-responses\": \"openai\",\n \"google-generative-ai\": \"gemini\",\n};\n\n/** Credential kinds whose value the adapter hands over in an env var. */\nconst ENV_DELIVERED_CREDENTIALS: Record<string, true> = {\n api_key_header: true,\n bearer: true,\n command: true,\n};\n\n/** Roles a Continue `config.yaml` can bind a model to. */\nconst CONTINUE_ROLES: Record<string, true> = {\n chat: true,\n edit: true,\n apply: true,\n autocomplete: true,\n embed: true,\n rerank: true,\n summarize: true,\n};\n\n/** Filename Continue reads its local assistant from, under the global dir. */\nexport const CONTINUE_CONFIG_FILENAME = \"config.yaml\";\n\n/** One `models[]` row. */\nexport interface ContinueModelRow {\n /** `<harnessProviderName>/<providerModelId>` — the programme-wide model id. */\n name: string;\n /** Continue adapter class: `openai`, `anthropic`, `gemini`. */\n provider: string;\n /** Provider-side model id. */\n model: string;\n apiBase?: string;\n /** Continue's `${{ secrets.NAME }}` indirection — never a secret. */\n apiKey?: string;\n roles: string[];\n requestOptions?: { headers: Record<string, string> };\n}\n\n/** The `config.yaml` document this adapter owns. */\nexport interface ContinueConfigDocument {\n name: string;\n version: string;\n schema: string;\n models: ContinueModelRow[];\n}\n\n/** Result of {@link buildContinueConfigDocument}. */\nexport interface ContinueConfigBuild {\n document: ContinueConfigDocument;\n /** Role bindings that resolved to nothing Continue can run. */\n warnings: string[];\n}\n\n/** One resolved role → endpoint + model. */\ninterface RoleTarget {\n role: string;\n providerId: string;\n model: string;\n}\n\n/**\n * Render one entry + model as a `models[]` row, or explain why Continue cannot\n * run it.\n */\nexport function renderContinueModel(\n providerId: string,\n entry: AIProviderLlmEntry,\n model: string,\n roles: string[],\n): { row: ContinueModelRow } | { skipped: string } {\n const surface = entrySurface(entry);\n const providerClass = surface ? CONTINUE_PROVIDER_CLASS[surface] : undefined;\n if (!providerClass)\n return {\n skipped: surface\n ? `Continue has no provider class for surface '${surface}'`\n : \"entry declares no surface\",\n };\n\n const row: ContinueModelRow = {\n name: `${harnessProviderName(providerId, entry)}/${model}`,\n provider: providerClass,\n model,\n roles,\n };\n const baseUrl = entryBaseUrl(entry);\n // Continue posts to `new URL(\"messages\", apiBase)` after BaseLLM's constructor\n // appends a trailing `/` (continuedev/continue core/llm/index.ts), so the\n // Anthropic `/v1` belongs in `apiBase`: `…/v1` resolves to `…/v1/messages`.\n if (baseUrl) row.apiBase = versionedAnthropicBaseUrl(baseUrl, surface);\n const credentialKind = entry.credential?.kind;\n if (credentialKind && ENV_DELIVERED_CREDENTIALS[credentialKind])\n row.apiKey = `\\${{ secrets.${providerCredentialEnvName(providerId)} }}`;\n if (entry.headers && Object.keys(entry.headers).length > 0)\n row.requestOptions = { headers: { ...entry.headers } };\n return { row };\n}\n\n/**\n * Build the document for a session: one `models[]` row per distinct endpoint +\n * model a role binds, with every role that binds it.\n *\n * Only bound models are rendered. Continue defaults an omitted `roles` to\n * `[chat, edit, apply, summarize]`, so listing the registry's other models\n * would silently make each of them a chat candidate — the document says\n * exactly what the session decided and nothing else.\n *\n * An empty registry renders nothing — `cn` then runs on whatever its own\n * `config.yaml` or Hub login provides.\n */\nexport function buildContinueConfigDocument(session: EnvHarnessSession): ContinueConfigBuild {\n const warnings: string[] = [];\n const models: ContinueModelRow[] = [];\n const document: ContinueConfigDocument = {\n name: \"Skaile session\",\n version: \"0.0.1\",\n schema: \"v1\",\n models,\n };\n const targets: RoleTarget[] = [];\n\n for (const [name, selector] of Object.entries(session.roles ?? {})) {\n const role = CONTINUE_ROLES[name] ? name : name === \"default\" ? \"chat\" : undefined;\n if (!role) {\n warnings.push(`role '${name}' is not a Continue role — dropped`);\n continue;\n }\n const trimmed = selector.trim();\n if (!trimmed) continue;\n // Roles do not chain: each value is a plain selector, never another `@role`.\n const resolved = parseModelRef(trimmed, session.registry);\n if (!resolved?.providerModelId) {\n warnings.push(`role '${name}' ('${selector}') resolves to no model in this registry`);\n continue;\n }\n targets.push({ role, providerId: resolved.providerId, model: resolved.providerModelId });\n }\n\n // The session's own selection is more specific than the roles table, and an\n // absent `chat` has to come from somewhere: the env half's chat binding is\n // the same resolution `cn` would otherwise have had no way to express.\n const chat = continueRoleBinding(session);\n if (chat?.model && (session.modelRef || !targets.some((t) => t.role === \"chat\"))) {\n const existing = targets.findIndex((t) => t.role === \"chat\");\n const bound: RoleTarget = { role: \"chat\", providerId: chat.providerId, model: chat.model };\n if (existing >= 0) targets[existing] = bound;\n else targets.unshift(bound);\n }\n\n const entries = new Map(selectableEntries(session.registry));\n const rowByModel = new Map<string, ContinueModelRow>();\n for (const target of targets) {\n const entry = entries.get(target.providerId);\n if (!entry) {\n warnings.push(`role '${target.role}' names disabled or unknown entry '${target.providerId}'`);\n continue;\n }\n const key = `${target.providerId}/${target.model}`;\n const already = rowByModel.get(key);\n if (already) {\n if (!already.roles.includes(target.role)) already.roles.push(target.role);\n continue;\n }\n const rendered = renderContinueModel(target.providerId, entry, target.model, [target.role]);\n if (\"skipped\" in rendered) {\n warnings.push(`role '${target.role}' on '${target.providerId}': ${rendered.skipped}`);\n continue;\n }\n rowByModel.set(key, rendered.row);\n models.push(rendered.row);\n }\n\n return { document, warnings };\n}\n\n/** What {@link materializeContinueConfig} handed the harness. */\nexport interface ContinueMaterialization extends ContinueConfigBuild {\n /** Child env fragment: `CONTINUE_GLOBAL_DIR`, or empty when nothing was written. */\n env: Record<string, string>;\n /** Absolute path of the rendered file, when one was written. */\n path?: string;\n}\n\n/**\n * Render the session's role bindings and point the child at them.\n *\n * A session that bound no model writes nothing and leaves\n * `CONTINUE_GLOBAL_DIR` alone, so `cn` keeps resolving its Hub assistant (or\n * the developer's own `~/.continue/config.yaml`) exactly as before. A file\n * left by an earlier render of the same session is removed in that case.\n */\nexport function materializeContinueConfig(\n session: EnvHarnessSession,\n config: { cwd: string; sessionId?: string },\n): ContinueMaterialization {\n const build = buildContinueConfigDocument(session);\n const home = harnessSessionConfigHome(\"continue\", config);\n if (build.document.models.length === 0) {\n removeSessionConfigFile(home, CONTINUE_CONFIG_FILENAME);\n return { ...build, env: {} };\n }\n const path = writeSessionConfigFile(\n home,\n CONTINUE_CONFIG_FILENAME,\n stringifyYaml(build.document),\n );\n return { ...build, env: { CONTINUE_GLOBAL_DIR: home }, path };\n}\n","import type { HarnessTarget } from \"@skaile/workspaces/plugin-registry\";\nimport type { Logger } from \"@skaile/workspaces/types\";\nimport * as z from \"zod\";\nimport { getBridgeLogger } from \"../logger.js\";\nimport type { ModelEntry } from \"../models.js\";\nimport { materializeContinueConfig } from \"../provider-materialize/continue-config-yaml.js\";\nimport { entryCredentialValue } from \"../provider-materialize/credential-env.js\";\nimport {\n type ContinueRoleBinding,\n continueRoleBinding,\n credentialsForEveryProvider,\n type EnvHarnessSession,\n registryModelEntries,\n resolveEnvHarnessSession,\n} from \"../provider-materialize/env-harnesses.js\";\nimport { registryHarnessConfig } from \"../provider-registry-derive.js\";\nimport { BUILTIN_HARNESS_CATALOG } from \"../registry.js\";\nimport type { AgentConfig, HarnessInfo, ReconfigureApplied } from \"../types.js\";\nimport {\n extractCost,\n extractText,\n extractTokens,\n SubprocessCliHarness,\n} from \"./_subprocess-cli.js\";\n\n/**\n * Agent harness for the **Continue CLI** (`cn`), the model-agnostic agent backed\n * by Continue Hub / `config.yaml` assistants.\n *\n * Unlike the other CLI harnesses, `cn -p \"<prompt>\" --format json` emits a single\n * **final-result JSON wrapper**, not a streaming event log. This harness runs in\n * `mode: \"buffered\"`: the base accumulates all stdout and {@link handleBuffered}\n * parses it once on exit — so there are no incremental deltas or per-tool\n * events, only a final assistant message plus a result.\n *\n * @remarks\n * - Auth via `CONTINUE_API_KEY` / `cn login`. A `credentials-n` harness\n * (§2.3): every enabled AI provider entry's credential reaches the child\n * environment, and the active model is a **role binding** — `cn` has no\n * `--model` flag, its `config.yaml` binds models to roles — so the session's\n * selector resolves to {@link ContinueRoleBinding} rather than a flag.\n * - `--config <slug>` selects a Continue Hub assistant; session resume via\n * `--resume` (last session only — Continue has no resume-by-id in headless\n * mode).\n * @see https://docs.continue.dev/guides/cli\n * @docLink packages/bridge/harnesses#continue-harness\n */\nexport class ContinueHarness extends SubprocessCliHarness {\n readonly harnessInfo: HarnessInfo = {\n id: \"continue\",\n name: \"Continue CLI\",\n modelAgnostic: true,\n supportsInBandAbort: false,\n };\n\n protected readonly log: Logger = getBridgeLogger(\"continue\");\n protected readonly defaultBin = \"cn\";\n protected readonly productName = \"Continue CLI\";\n protected readonly envPrefix = \"CONTINUE\";\n protected override readonly mode = \"buffered\" as const;\n\n private providers?: EnvHarnessSession;\n\n /** This session's AI providers, resolved once from the config. */\n private providerSession(): EnvHarnessSession {\n this.providers ??= resolveEnvHarnessSession(this.config);\n return this.providers;\n }\n\n /** The entry + model bound to Continue's `chat` role for this session. */\n private roleBinding(): ContinueRoleBinding | undefined {\n return continueRoleBinding(this.providerSession());\n }\n\n protected override onReconfigured(applied: ReconfigureApplied): void {\n if (applied.model !== undefined) this.providers = undefined;\n }\n\n override getModel(): string | undefined {\n return this.roleBinding()?.model ?? this.config.model;\n }\n\n override async start(): Promise<void> {\n const role = this.roleBinding();\n if (role) {\n this.log.debug(\"bound Continue's chat role to an AI provider entry\", {\n providerId: role.providerId,\n provider: role.provider,\n model: role.model,\n apiKeyEnv: role.apiKeyEnv,\n });\n }\n await super.start();\n }\n\n protected buildArgs(message: string, resumeId: string | undefined): string[] {\n const args = [\"-p\", message, \"--format\", \"json\", \"--silent\"];\n // `--config` names a Continue Hub assistant; `cn` has no model flag. A\n // selector the registry resolves is a *model*, so it must never be passed\n // here — that would point `cn` at an assistant slug that does not exist.\n const slug = this.roleBinding() ? undefined : this.config.model;\n if (slug) args.push(\"--config\", slug);\n if (resumeId) args.push(\"--resume\");\n return args;\n }\n\n /**\n * Base env plus one credential variable per enabled registry entry. The\n * Continue Hub key is its own credential, not an endpoint's: a registry\n * entry with the reserved id `continue` supplies it, otherwise an ambient\n * `CONTINUE_API_KEY` (or a `cn login`) does.\n *\n * This is also where the session's role bindings are rendered into a\n * private `config.yaml`. It runs once per spawn, so a `reconfigure()`\n * between turns re-renders rather than leaving `cn` bound to the previous\n * selection.\n */\n protected buildEnv(): Record<string, string> {\n const session = this.providerSession();\n const env = this.baseEnv([\"CONTINUE_API_KEY\"]);\n const hub = session.registry.providers.continue;\n const key =\n (hub ? entryCredentialValue(\"continue\", hub, { env: session.lookupEnv }) : undefined) ??\n session.lookupEnv.CONTINUE_API_KEY;\n if (key) env.CONTINUE_API_KEY = key;\n const materialized = materializeContinueConfig(session, this.config);\n for (const warning of materialized.warnings)\n this.log.warn(\"Continue role binding\", { warning });\n if (materialized.path)\n this.log.debug(\"rendered Continue assistant\", {\n path: materialized.path,\n models: materialized.document.models.map((m) => `${m.name} [${m.roles.join(\", \")}]`),\n });\n return {\n ...env,\n ...credentialsForEveryProvider(session),\n ...materialized.env,\n };\n }\n\n protected installHint(): string {\n return \"Continue CLI is not installed or not on your PATH. Install it with `npm i -g @continuedev/cli`.\";\n }\n\n protected handleBuffered(raw: string): void {\n const json = parseLastJsonObject(raw);\n if (!json) {\n // No structured wrapper — surface the raw stdout as the assistant reply.\n const text = raw.trim();\n if (text) {\n this.pushAssistantDelta(text);\n this.pushAssistantEnd(text);\n }\n this.pushResult({ summary: text || \"Task completed\" });\n return;\n }\n this.captureSession(json.sessionId ?? json.session_id ?? json.id);\n const text = extractText(json) || (typeof json.output === \"string\" ? json.output : \"\");\n if (text) {\n this.pushAssistantDelta(text);\n this.pushAssistantEnd(text);\n }\n this.pushResult({\n tokens: extractTokens(json),\n costUsd: extractCost(json),\n summary: text || \"Task completed\",\n });\n }\n\n /**\n * Continue resolves models through its `config.yaml` / Hub assistant, not\n * through an endpoint, so the session's registry is the list.\n */\n override async listModels(): Promise<ModelEntry[]> {\n return registryModelEntries(this.providerSession());\n }\n}\n\n/**\n * Parse the last balanced top-level JSON object in `raw`. Continue may print\n * log lines before the final `--format json` blob; we want the wrapper, which\n * is the last `{...}` in the output.\n */\nfunction parseLastJsonObject(raw: string): any | null {\n const end = raw.lastIndexOf(\"}\");\n if (end < 0) return null;\n let depth = 0;\n let inString = false;\n let escaped = false;\n for (let i = end; i >= 0; i--) {\n const ch = raw[i];\n if (inString) {\n if (escaped) escaped = false;\n else if (ch === \"\\\\\") escaped = true;\n else if (ch === '\"') inString = false;\n continue;\n }\n if (ch === '\"') inString = true;\n else if (ch === \"}\") depth++;\n else if (ch === \"{\") {\n depth--;\n if (depth === 0) {\n try {\n return JSON.parse(raw.slice(i, end + 1));\n } catch {\n return null;\n }\n }\n }\n }\n return null;\n}\n\n/**\n * `HarnessTarget` wrapper for the continue harness. Registered into the plugin\n * registry by `registerBuiltinHarnesses()`.\n */\nexport const continueHarnessTarget: HarnessTarget<AgentConfig> = {\n id: \"continue\",\n displayName: BUILTIN_HARNESS_CATALOG.continue?.name ?? \"Continue CLI\",\n apiVersion: 1,\n configSchema: z.custom<AgentConfig>(() => true),\n create: async (config, _ctx) => new ContinueHarness(config),\n listModels: async (registry, options) =>\n new ContinueHarness({\n cwd: process.cwd(),\n sessionId: \"model-list\",\n ...registryHarnessConfig(registry, options),\n }).listModels(),\n};\n"]}
@@ -1,2 +1,2 @@
1
1
  // Auto-generated by _scripts/emit-dts-sidecars.ts — do not edit by hand.
2
- export * from "../src/drivers/echo.js";
2
+ export * from "../src/harnesses/echo.js";
@@ -1,17 +1,17 @@
1
- import { dispatchCapability } from '../../chunk-AJ7EGIFR.js';
2
- import { AgentDriver, getBridgeLogger, registryDriverConfig } from '../../chunk-XWOPZW26.js';
3
- import { BUILTIN_DRIVER_CATALOG } from '../../chunk-CQJH4G2K.js';
4
- import '../../chunk-6E6PKKAD.js';
5
- import '../../chunk-Y56YIT6J.js';
6
- import '../../chunk-ICSCSM5D.js';
1
+ import { dispatchCapability } from '../../chunk-BIRW3HOG.js';
2
+ import { AgentHarness, getBridgeLogger, registryHarnessConfig } from '../../chunk-FKQNBCDW.js';
3
+ import { BUILTIN_HARNESS_CATALOG } from '../../chunk-ILLTBKDJ.js';
4
+ import '../../chunk-G5SUWZEU.js';
5
+ import '../../chunk-JCPD4QRM.js';
6
+ import '../../chunk-ADPM6AYF.js';
7
7
  import '../../chunk-DKXNKFKP.js';
8
- import '../../chunk-MJHSLODD.js';
8
+ import '../../chunk-LSI2IVFT.js';
9
9
  import '../../chunk-C3CAXQMA.js';
10
10
  import '../../chunk-BOFL7GIF.js';
11
11
  import '../../chunk-NSBPE2FW.js';
12
12
  import * as z from 'zod';
13
13
 
14
- // bridge/src/drivers/flow-script.ts
14
+ // bridge/src/harnesses/flow-script.ts
15
15
  var TURN_ENDING = /* @__PURE__ */ new Set([
16
16
  "request_approval",
17
17
  "request_input",
@@ -130,9 +130,9 @@ function parseFlowScript(body) {
130
130
  return parsed;
131
131
  }
132
132
 
133
- // bridge/src/drivers/echo.ts
134
- var EchoDriver = class extends AgentDriver {
135
- driverInfo = {
133
+ // bridge/src/harnesses/echo.ts
134
+ var EchoHarness = class extends AgentHarness {
135
+ harnessInfo = {
136
136
  id: "echo",
137
137
  name: "Echo (E2E mock)",
138
138
  modelAgnostic: true,
@@ -144,7 +144,7 @@ var EchoDriver = class extends AgentDriver {
144
144
  /**
145
145
  * Scripted-flow mode state (workspaces#396). Enabled by a `[test-flow]`
146
146
  * sentinel chat message; once on, orchestrator-prompt turns are driven
147
- * deterministically against `config.flowTestDriver`. `null` script ⇒ mode
147
+ * deterministically against `config.flowTestHarness`. `null` script ⇒ mode
148
148
  * off (default echo behaviour, unchanged).
149
149
  */
150
150
  flowScript = null;
@@ -155,7 +155,7 @@ var EchoDriver = class extends AgentDriver {
155
155
  /**
156
156
  * Test surface: returns the tool list the LLM would see for this turn.
157
157
  * Composition: the registry hooks (Protocol v2) take precedence; legacy
158
- * `mcpServers` is not enumerated here (the echo driver never exposed MCP
158
+ * `mcpServers` is not enumerated here (the echo harness never exposed MCP
159
159
  * tools to the LLM by name).
160
160
  */
161
161
  listCapabilityTools() {
@@ -163,14 +163,14 @@ var EchoDriver = class extends AgentDriver {
163
163
  }
164
164
  /**
165
165
  * Test surface: invoke a registered capability through the dispatch
166
- * helper. Mirrors what a real driver would do when the LLM produced a
166
+ * helper. Mirrors what a real harness would do when the LLM produced a
167
167
  * tool_use for the given name — applies fire-and-forget, render emission,
168
168
  * and fallback text. Returns the structured dispatch result so tests can
169
169
  * assert immediate-vs-background resolution.
170
170
  */
171
171
  async invokeCapabilityForTest(name, input) {
172
172
  const hooks = this.config.capabilities;
173
- if (!hooks) throw new Error("EchoDriver: no capability hooks configured");
173
+ if (!hooks) throw new Error("EchoHarness: no capability hooks configured");
174
174
  const out = await dispatchCapability(
175
175
  hooks,
176
176
  name,
@@ -186,7 +186,7 @@ var EchoDriver = class extends AgentDriver {
186
186
  }
187
187
  async start() {
188
188
  this.running = true;
189
- this.log.info("driver started");
189
+ this.log.info("harness started");
190
190
  }
191
191
  async prompt(message) {
192
192
  if (!this.running) return;
@@ -208,7 +208,7 @@ var EchoDriver = class extends AgentDriver {
208
208
  this.emit("agent-event", { type: "agent_end" });
209
209
  return;
210
210
  }
211
- if (this.flowScript && this.config.flowTestDriver && isFlowTurn(message)) {
211
+ if (this.flowScript && this.config.flowTestHarness && isFlowTurn(message)) {
212
212
  await this.runScriptedFlowTurn();
213
213
  return;
214
214
  }
@@ -270,14 +270,14 @@ var EchoDriver = class extends AgentDriver {
270
270
  }
271
271
  /**
272
272
  * Scripted-flow turn (workspaces#396). Reads the live flow state via the
273
- * runner-injected `flowTestDriver` hook and executes the scripted next
273
+ * runner-injected `flowTestHarness` hook and executes the scripted next
274
274
  * action(s) until the policy yields or emits a turn-ending action. Each
275
275
  * mutation fires the adapter's `onChange` (→ host `state_changed`) and, when
276
276
  * the runner wires the stimulus bus, queues the follow-up turn — so the
277
- * driver advances one step at a time exactly like a real LLM orchestrator.
277
+ * harness advances one step at a time exactly like a real LLM orchestrator.
278
278
  */
279
279
  async runScriptedFlowTurn() {
280
- const hook = this.config.flowTestDriver;
280
+ const hook = this.config.flowTestHarness;
281
281
  const script = this.flowScript;
282
282
  if (!hook || !script) {
283
283
  this.emit("agent-event", { type: "agent_end" });
@@ -440,20 +440,20 @@ function buildEchoEvents(content, originalPrompt) {
440
440
  }
441
441
  return events;
442
442
  }
443
- var echoDriverTarget = {
443
+ var echoHarnessTarget = {
444
444
  id: "echo",
445
- displayName: BUILTIN_DRIVER_CATALOG.echo?.name ?? "Echo (E2E mock)",
445
+ displayName: BUILTIN_HARNESS_CATALOG.echo?.name ?? "Echo (E2E mock)",
446
446
  apiVersion: 1,
447
- // Drivers take AgentConfig; passthrough — full schema validation is out of scope.
447
+ // Harnesses take AgentConfig; passthrough — full schema validation is out of scope.
448
448
  configSchema: z.custom(() => true),
449
- create: async (config, _ctx) => new EchoDriver(config),
450
- listModels: async (registry, options) => new EchoDriver({
449
+ create: async (config, _ctx) => new EchoHarness(config),
450
+ listModels: async (registry, options) => new EchoHarness({
451
451
  cwd: process.cwd(),
452
452
  sessionId: "model-list",
453
- ...registryDriverConfig(registry, options)
453
+ ...registryHarnessConfig(registry, options)
454
454
  }).listModels()
455
455
  };
456
456
 
457
- export { ECHO_QUESTION, ECHO_QUESTION_OPTIONS, EchoDriver, echoDriverTarget };
457
+ export { ECHO_QUESTION, ECHO_QUESTION_OPTIONS, EchoHarness, echoHarnessTarget };
458
458
  //# sourceMappingURL=echo.js.map
459
459
  //# sourceMappingURL=echo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../bridge/src/harnesses/flow-script.ts","../../../bridge/src/harnesses/echo.ts"],"names":["events"],"mappings":";;;;;;;;;;;;;;AA6FA,IAAM,WAAA,uBAAiD,GAAA,CAAI;AAAA,EACzD,kBAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAC,CAAA;AAGM,SAAS,aAAa,MAAA,EAA6B;AACxD,EAAA,OAAO,WAAA,CAAY,GAAA,CAAI,MAAA,CAAO,EAAE,CAAA;AAClC;AAGO,SAAS,WAAW,MAAA,EAA6C;AACtE,EAAA,QAAQ,OAAO,EAAA;AAAI,IACjB,KAAK,YAAA;AAAA,IACL,KAAK,WAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAO;AAAA,IACjC,KAAK,eAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAQ,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,IAC1D,KAAK,kBAAA;AACH,MAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAQ,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,IAC1D,KAAK,eAAA;AACH,MAAA,OAAO,EAAE,QAAQ,MAAA,CAAO,MAAA,EAAQ,QAAQ,MAAA,CAAO,MAAA,EAAQ,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAO;AAAA,IAC/E,KAAK,WAAA;AACH,MAAA,OAAO;AAAA,QACL,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,WAAA,EAAa,MAAA,CAAO,MAAA,CAAO,WAAW;AAAA,OACxC;AAAA;AAEN;AAEA,SAAS,UAAA,CAAW,GAAsB,CAAA,EAA0B;AAClE,EAAA,OAAO,CAAA,CAAE,OAAA,IAAW,CAAA,oBAAA,EAAuB,CAAA,CAAE,EAAE,CAAA,CAAA;AACjD;AAcO,SAAS,iBACd,KAAA,EACA,MAAA,EACA,cAAA,mBAAsC,IAAI,KAAI,EAC3B;AAEnB,EAAA,IAAI,KAAA,CAAM,WAAW,UAAA,IAAc,KAAA,CAAM,WAAW,QAAA,IAAY,KAAA,CAAM,WAAW,WAAA,EAAa;AAC5F,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,GAAA,GAAM,CAAC,EAAA,KAAkC,MAAA,CAAO,QAAQ,EAAE,CAAA,IAAK,MAAA,CAAO,OAAA,IAAW,EAAC;AACxF,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AAGvC,EAAA,MAAM,eAAA,GAAkB,CAAC,EAAA,KAAwB,KAAA,CAAM,kBAAkB,CAAC,cAAA,CAAe,IAAI,EAAE,CAAA;AAG/F,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,IAAI,EAAE,MAAA,KAAW,mBAAA,IAAuB,CAAA,CAAE,QAAA,EAAU,aAAa,UAAA,EAAY;AAC3E,MAAA,OAAO,EAAE,EAAA,EAAI,eAAA,EAAiB,MAAA,EAAQ,CAAA,CAAE,EAAA,EAAI,OAAA,EAAS,UAAA,CAAW,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA,EAAG,CAAC,CAAA,EAAE;AAAA,IAChF;AAAA,EACF;AAGA,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,IAAI,CAAA,CAAE,WAAW,SAAA,EAAW;AAC5B,IAAA,MAAM,CAAA,GAAI,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA;AAClB,IAAA,MAAM,KAAA,GAAe,EAAE,KAAA,IAAS,MAAA;AAChC,IAAA,MAAM,QAAA,GACJ,UAAU,MAAA,GAAU,eAAA,CAAgB,EAAE,EAAE,CAAA,GAAI,aAAa,SAAA,GAAa,KAAA;AAExE,IAAA,IAAI,aAAa,UAAA,EAAY;AAC3B,MAAA,OAAO,EAAE,EAAA,EAAI,eAAA,EAAiB,MAAA,EAAQ,CAAA,CAAE,IAAI,OAAA,EAAS,UAAA,CAAW,CAAA,EAAG,CAAC,CAAA,EAAE;AAAA,IACxE;AACA,IAAA,IAAI,aAAa,SAAA,EAAW;AAC1B,MAAA,OAAO,EAAE,EAAA,EAAI,kBAAA,EAAoB,MAAA,EAAQ,CAAA,CAAE,IAAI,OAAA,EAAS,UAAA,CAAW,CAAA,EAAG,CAAC,CAAA,EAAE;AAAA,IAC3E;AACA,IAAA,IAAI,aAAa,OAAA,EAAS;AACxB,MAAA,MAAM,YAAY,CAAA,CAAE,YAAA,CAAa,CAAA,CAAE,YAAA,CAAa,SAAS,CAAC,CAAA;AAC1D,MAAA,IAAI,SAAA,IAAa,SAAA,CAAU,QAAA,KAAa,MAAA,EAAW;AAEjD,QAAA,OAAO,eAAA,CAAgB,CAAA,CAAE,EAAE,CAAA,GACvB,EAAE,EAAA,EAAI,eAAA,EAAiB,MAAA,EAAQ,CAAA,CAAE,EAAA,EAAI,OAAA,EAAS,UAAA,CAAW,CAAA,EAAG,CAAC,CAAA,EAAE,GAC/D,EAAE,EAAA,EAAI,kBAAA,EAAoB,MAAA,EAAQ,CAAA,CAAE,EAAA,EAAI,OAAA,EAAS,UAAA,CAAW,CAAA,EAAG,CAAC,CAAA,EAAE;AAAA,MACxE;AACA,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,eAAA;AAAA,QACJ,QAAQ,CAAA,CAAE,EAAA;AAAA,QACV,QAAQ,CAAA,CAAE,KAAA,EAAO,MAAA,IAAU,CAAA,kBAAA,EAAqB,EAAE,EAAE,CAAA,CAAA;AAAA,QACpD,MAAA,EAAQ,KAAK,SAAA,CAAU,CAAA,CAAE,OAAO,MAAA,IAAU,EAAE,IAAA,EAAM,MAAA,EAAQ;AAAA,OAC5D;AAAA,IACF;AACA,IAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,MAAA,MAAM,WAAA,GAAc,EAAE,WAAA,IAAe,KAAA;AACrC,MAAA,IAAI,CAAC,WAAA,EAAa;AAGhB,QAAA,OAAO;AAAA,UACL,EAAA,EAAI,WAAA;AAAA,UACJ,QAAQ,CAAA,CAAE,EAAA;AAAA,UACV,OAAA,EAAS,CAAA,CAAE,OAAA,IAAW,CAAA,qBAAA,EAAwB,EAAE,EAAE,CAAA,CAAA;AAAA,UAClD,WAAA,EAAa;AAAA,SACf;AAAA,MACF;AAIA,MAAA,MAAM,OAAA,GAAU,EAAE,YAAA,CAAa,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA,CAAE,MAAA;AAC5D,MAAA,MAAM,YAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAA,CAAE,aAAa,CAAC,CAAA;AAC9C,MAAA,IAAI,UAAU,SAAA,EAAW;AACvB,QAAA,OAAO;AAAA,UACL,EAAA,EAAI,WAAA;AAAA,UACJ,QAAQ,CAAA,CAAE,EAAA;AAAA,UACV,OAAA,EAAS,CAAA,CAAE,OAAA,IAAW,CAAA,iCAAA,EAAoC,EAAE,EAAE,CAAA,CAAA;AAAA,UAC9D,WAAA,EAAa;AAAA,SACf;AAAA,MACF;AACA,MAAA,OAAO,eAAA,CAAgB,CAAA,CAAE,EAAE,CAAA,GACvB,EAAE,EAAA,EAAI,eAAA,EAAiB,MAAA,EAAQ,CAAA,CAAE,EAAA,EAAI,OAAA,EAAS,UAAA,CAAW,CAAA,EAAG,CAAC,CAAA,EAAE,GAC/D,EAAE,EAAA,EAAI,kBAAA,EAAoB,MAAA,EAAQ,CAAA,CAAE,EAAA,EAAI,OAAA,EAAS,UAAA,CAAW,CAAA,EAAG,CAAC,CAAA,EAAE;AAAA,IACxE;AAEA,IAAA,OAAO,EAAE,EAAA,EAAI,eAAA,EAAiB,MAAA,EAAQ,CAAA,CAAE,IAAI,OAAA,EAAS,UAAA,CAAW,CAAA,EAAG,CAAC,CAAA,EAAE;AAAA,EACxE;AAGA,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,IAAI,CAAA,CAAE,WAAW,WAAA,EAAa;AAC9B,IAAA,MAAM,CAAA,GAAI,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA;AAClB,IAAA,MAAM,eAAe,CAAA,CAAE,eAAA,CAAgB,CAAA,CAAE,eAAA,CAAgB,SAAS,CAAC,CAAA;AACnE,IAAA,IAAI,YAAA,EAAc,QAAA,KAAa,UAAA,IAAc,CAAA,CAAE,aAAa,MAAA,EAAQ;AAClE,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,WAAA;AAAA,QACJ,QAAQ,CAAA,CAAE,EAAA;AAAA,QACV,OAAA,EAAS,CAAA,CAAE,OAAA,IAAW,CAAA,8BAAA,EAAiC,EAAE,EAAE,CAAA,CAAA;AAAA,QAC3D,WAAA,EAAa;AAAA,OACf;AAAA,IACF;AACA,IAAA,IAAI,CAAA,CAAE,UAAU,MAAA,EAAQ;AACtB,MAAA,OAAO,EAAE,EAAA,EAAI,WAAA,EAAa,MAAA,EAAQ,EAAE,EAAA,EAAG;AAAA,IACzC;AACA,IAAA,OAAO,EAAE,EAAA,EAAI,YAAA,EAAc,MAAA,EAAQ,EAAE,EAAA,EAAG;AAAA,EAC1C;AAIA,EAAA,OAAO,IAAA;AACT;AAOO,SAAS,gBAAgB,IAAA,EAA0B;AACxD,EAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAClC,EAAA,MAAM,MAAA,GAAkB,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAC1C,EAAA,IAAI,MAAA,KAAW,QAAQ,OAAO,MAAA,KAAW,YAAY,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC1E,IAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA,EACrD;AACA,EAAA,OAAO,MAAA;AACT;;;AC9NO,IAAM,WAAA,GAAN,cAA0B,YAAA,CAAa;AAAA,EACnC,WAAA,GAA2B;AAAA,IAClC,EAAA,EAAI,MAAA;AAAA,IACJ,IAAA,EAAM,iBAAA;AAAA,IACN,aAAA,EAAe,IAAA;AAAA,IACf,mBAAA,EAAqB;AAAA,GACvB;AAAA,EAEiB,GAAA,GAAc,gBAAgB,MAAM,CAAA;AAAA,EAC7C,OAAA,GAAU,KAAA;AAAA,EACD,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQT,UAAA,GAAgC,IAAA;AAAA,EAExC,YAAY,MAAA,EAAqB;AAC/B,IAAA,KAAA,EAAM;AACN,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,mBAAA,GAA8C;AAC5C,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,YAAA,EAAc,YAAA,MAAkB,EAAC;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,uBAAA,CACJ,IAAA,EACA,KAAA,EACmD;AACnD,IAAA,MAAM,KAAA,GAAQ,KAAK,MAAA,CAAO,YAAA;AAC1B,IAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,MAAM,6CAA6C,CAAA;AACzE,IAAA,MAAM,MAAM,MAAM,kBAAA;AAAA,MAAmB,KAAA;AAAA,MAAO,IAAA;AAAA,MAAM,KAAA;AAAA,MAAO,CAAC,IAAA,EAAM,MAAA,KAC9D,IAAA,CAAK,GAAA,CAAI,KAAK,sCAAA,EAAwC;AAAA,QACpD,IAAA;AAAA,QACA;AAAA;AAAA;AAAA,OAGD;AAAA,KACH;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,IAAA,IAAA,CAAK,GAAA,CAAI,KAAK,iBAAiB,CAAA;AAAA,EACjC;AAAA,EAEA,MAAM,OAAO,OAAA,EAAgC;AAC3C,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACnB,IAAA,MAAM,OAAA,GAAU,QAAQ,WAAA,EAAY;AACpC,IAAA,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,iBAAA,EAAmB,EAAE,OAAA,EAAS,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,EAAG,MAAA,EAAQ,OAAA,CAAQ,QAAQ,CAAA;AAG1F,IAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,GAAG,CAAC,CAAA;AAcvD,IAAA,MAAM,SAAA,GAAY,kCAAA,CAAmC,IAAA,CAAK,OAAO,CAAA;AACjE,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,IAAI,OAAA;AACJ,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,UAAA,GAAa,eAAA,CAAgB,SAAA,CAAU,CAAC,KAAK,EAAE,CAAA;AACpD,QAAA,OAAA,GAAU,2CAAA;AAAA,MACZ,SAAS,GAAA,EAAK;AACZ,QAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAClB,QAAA,OAAA,GAAU,0CAAqC,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA;AAC/F,QAAA,IAAA,CAAK,IAAA,CAAK,eAAe,EAAE,IAAA,EAAM,SAAS,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,CAAA;AAAA,MAC1E;AACA,MAAA,KAAA,MAAW,SAAS,aAAA,CAAc,OAAO,GAAG,IAAA,CAAK,IAAA,CAAK,eAAe,KAAK,CAAA;AAC1E,MAAA,IAAA,CAAK,IAAA,CAAK,aAAA,EAAe,EAAE,IAAA,EAAM,aAAa,CAAA;AAC9C,MAAA;AAAA,IACF;AAKA,IAAA,IAAI,KAAK,UAAA,IAAc,IAAA,CAAK,OAAO,eAAA,IAAmB,UAAA,CAAW,OAAO,CAAA,EAAG;AACzE,MAAA,MAAM,KAAK,mBAAA,EAAoB;AAC/B,MAAA;AAAA,IACF;AAQA,IAAA,MAAM,QAAA,GAAW,6CAAA,CAA8C,IAAA,CAAK,OAAO,CAAA;AAC3E,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,CAAC,CAAA,IAAK,EAAA;AAC5B,MAAA,MAAM,QAAA,GAAA,CAAY,QAAA,CAAS,CAAC,CAAA,IAAK,IAAI,IAAA,EAAK;AAC1C,MAAA,IAAI,QAAiB,EAAC;AACtB,MAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,QAAA,IAAI;AACF,UAAA,KAAA,GAAQ,IAAA,CAAK,MAAM,QAAQ,CAAA;AAAA,QAC7B,SAAS,GAAA,EAAK;AACZ,UAAA,IAAA,CAAK,GAAA,CAAI,KAAK,qDAAA,EAAuD;AAAA,YACnE,KAAA,EAAO,OAAO,GAAG,CAAA;AAAA,YACjB,OAAA,EAAS,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE;AAAA,WAC9B,CAAA;AAAA,QACH;AAAA,MACF;AACA,MAAA,MAAMA,OAAAA,GAAS,MAAM,IAAA,CAAK,oBAAA,CAAqB,MAAM,KAAK,CAAA;AAC1D,MAAA,KAAA,MAAW,SAASA,OAAAA,EAAQ;AAC1B,QAAA,IAAA,CAAK,IAAA,CAAK,eAAe,KAAK,CAAA;AAC9B,QAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AAAA,MACxD;AACA,MAAA,IAAA,CAAK,IAAA,CAAK,aAAA,EAAe,EAAE,IAAA,EAAM,aAAa,CAAA;AAC9C,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,OAAA,EAAS,OAAO,CAAA;AAC/C,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,IAAA,CAAK,IAAA,CAAK,eAAe,KAAK,CAAA;AAE9B,MAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AAAA,IACxD;AAGA,IAAA,IAAA,CAAK,IAAA,CAAK,aAAA,EAAe,EAAE,IAAA,EAAM,aAAa,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAc,oBAAA,CAAqB,IAAA,EAAc,KAAA,EAAuC;AACtF,IAAA,MAAM,SAAuB,EAAC;AAC9B,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,YAAA,EAAc;AAC7B,MAAA,OAAO,aAAA,CAAc,CAAA,yDAAA,EAA4D,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,IAC1F;AACA,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,uBAAA,CAAwB,MAAM,KAAK,CAAA;AAC1D,MAAA,MAAM,UAAU,CAAA,wBAAA,EAA2B,IAAI,CAAA,OAAA,EAAU,aAAA,CAAc,KAAK,CAAC,CAAA,YAAA,EAAe,MAAA,CAAO,GAAA,CAAI,UAAU,CAAC,CAAA,QAAA,EAAW,aAAA,CAAc,GAAA,CAAI,MAAM,CAAC,CAAA,CAAA;AACtJ,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,aAAA,CAAc,OAAO,CAAC,CAAA;AAAA,IACvC,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,MAAM,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC3D,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,IAAA,EAAM,OAAA;AAAA,QACN,KAAA,EAAO,CAAA,gBAAA,EAAmB,IAAI,CAAA,SAAA,EAAY,GAAG,CAAA,CAAA;AAAA,QAC7C,KAAA,EAAO;AAAA,OACR,CAAA;AACD,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,aAAA,CAAc,CAAA,gBAAA,EAAmB,IAAI,CAAA,UAAA,EAAa,GAAG,GAAG,CAAC,CAAA;AAAA,IAC1E;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAc,mBAAA,GAAqC;AACjD,IAAA,MAAM,IAAA,GAAO,KAAK,MAAA,CAAO,eAAA;AACzB,IAAA,MAAM,SAAS,IAAA,CAAK,UAAA;AACpB,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,MAAA,EAAQ;AACpB,MAAA,IAAA,CAAK,IAAA,CAAK,aAAA,EAAe,EAAE,IAAA,EAAM,aAAa,CAAA;AAC9C,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,WAAqB,EAAC;AAE5B,IAAA,MAAM,SAAA,GAAY,GAAA;AAClB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,MAAA,MAAM,KAAA,GAAQ,KAAK,QAAA,EAAS;AAC5B,MAAA,IAAI,CAAC,KAAA,EAAO;AACZ,MAAA,MAAM,iBAAiB,IAAI,GAAA,CAAI,KAAK,cAAA,IAAiB,IAAK,EAAE,CAAA;AAC5D,MAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,KAAA,EAAO,MAAA,EAAQ,cAAc,CAAA;AAC7D,MAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,MAAA,IAAA,CAAK,KAAK,aAAA,EAAe;AAAA,QACvB,IAAA,EAAM,WAAA;AAAA,QACN,MAAM,MAAA,CAAO,EAAA;AAAA,QACb,IAAA,EAAM,EAAE,IAAA,EAAM,MAAA,CAAO,EAAA,EAAG;AAAA,QACxB,OAAO,MAAA,CAAO;AAAA,OACf,CAAA;AACD,MAAA,IAAI;AACF,QAAA,MAAM,KAAK,OAAA,CAAQ,MAAA,CAAO,EAAA,EAAI,UAAA,CAAW,MAAM,CAAC,CAAA;AAAA,MAClD,SAAS,GAAA,EAAK;AACZ,QAAA,MAAM,MAAM,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC3D,QAAA,IAAA,CAAK,GAAA,CAAI,KAAK,yBAAA,EAA2B;AAAA,UACvC,IAAI,MAAA,CAAO,EAAA;AAAA,UACX,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,KAAA,EAAO;AAAA,SACR,CAAA;AACD,QAAA,IAAA,CAAK,KAAK,aAAA,EAAe;AAAA,UACvB,IAAA,EAAM,OAAA;AAAA,UACN,KAAA,EAAO,oBAAoB,MAAA,CAAO,EAAE,IAAI,MAAA,CAAO,MAAM,aAAa,GAAG,CAAA,CAAA;AAAA,UACrE,KAAA,EAAO;AAAA,SACR,CAAA;AACD,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,IAAA,CAAK,eAAe,EAAE,IAAA,EAAM,sBAAsB,QAAA,EAAU,MAAA,CAAO,IAAI,CAAA;AAC5E,MAAA,QAAA,CAAS,KAAK,CAAA,EAAG,MAAA,CAAO,EAAE,CAAA,CAAA,EAAI,MAAA,CAAO,MAAM,CAAA,CAAA,CAAG,CAAA;AAC9C,MAAA,IAAI,YAAA,CAAa,MAAM,CAAA,EAAG;AAAA,IAC5B;AAEA,IAAA,MAAM,OAAA,GACJ,SAAS,MAAA,GAAS,CAAA,GACd,oBAAoB,QAAA,CAAS,IAAA,CAAK,UAAK,CAAC,CAAA,CAAA,GACxC,+CAAA;AACN,IAAA,KAAA,MAAW,SAAS,aAAA,CAAc,OAAO,GAAG,IAAA,CAAK,IAAA,CAAK,eAAe,KAAK,CAAA;AAC1E,IAAA,IAAA,CAAK,IAAA,CAAK,aAAA,EAAe,EAAE,IAAA,EAAM,aAAa,CAAA;AAAA,EAChD;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAA,CAAK,GAAA,CAAI,KAAK,iBAAiB,CAAA;AAAA,EACjC;AAAA,EAEA,IAAA,GAAa;AACX,IAAA,IAAA,CAAK,OAAA,GAAU,KAAA;AACf,IAAA,IAAA,CAAK,GAAA,CAAI,KAAK,QAAQ,CAAA;AAAA,EACxB;AAAA,EAEA,MAAM,YAAA,GAA8B;AAClC,IAAA,IAAA,CAAK,GAAA,CAAI,KAAK,eAAe,CAAA;AAAA,EAC/B;AAAA,EAEA,IAAI,SAAA,GAAqB;AACvB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AACF;AAYA,SAAS,WAAW,OAAA,EAA0B;AAC5C,EAAA,OAAO,OAAA,CAAQ,WAAW,0BAA0B,CAAA;AACtD;AAEA,SAAS,cAAc,CAAA,EAAoB;AACzC,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,UAAU,CAAC,CAAA;AAAA,EACzB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAO,CAAC,CAAA;AAAA,EACjB;AACF;AAEA,SAAS,cAAc,OAAA,EAA+B;AACpD,EAAA,OAAO;AAAA,IACL;AAAA,MACE,IAAA,EAAM,eAAA;AAAA,MACN,OAAA,EAAS,EAAE,IAAA,EAAM,WAAA,EAAa,SAAS,OAAA;AAAQ,KACjD;AAAA,IACA;AAAA,MACE,IAAA,EAAM,aAAA;AAAA,MACN,OAAA,EAAS,EAAE,IAAA,EAAM,WAAA,EAAa,SAAS,OAAA;AAAQ,KACjD;AAAA,IACA;AAAA,MACE,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,SAAA;AAAA,MACT,OAAA;AAAA,MACA,OAAA,EAAS;AAAA;AACX,GACF;AACF;AAGO,IAAM,aAAA,GACX;AAEK,IAAM,qBAAA,GAAwB,CAAC,YAAA,EAAc,OAAA,EAAS,QAAQ;AAErE,IAAI,eAAA,GAAkB,CAAA;AAQtB,SAAS,eAAA,CAAgB,UAAkB,OAAA,EAA0C;AACnF,EAAA,MAAM,UAAA,GAAa,CAAA,cAAA,EAAiB,EAAE,eAAe,CAAA,CAAA;AACrD,EAAA,MAAM,QAAQ,EAAE,SAAA,EAAW,CAAC,EAAE,UAAU,OAAA,EAAS,OAAA,CAAQ,GAAA,CAAI,CAAC,WAAW,EAAE,KAAA,EAAM,CAAE,CAAA,EAAG,CAAA,EAAE;AACxF,EAAA,OAAO;AAAA,IACL;AAAA,MACE,IAAA,EAAM,eAAA;AAAA,MACN,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,WAAA;AAAA,QACN,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,UAAA,EAAY,MAAM,iBAAA,EAAmB,EAAA,EAAI,UAAA,EAAY,KAAA,EAAO;AAAA;AAChF,KACF;AAAA,IACA;AAAA,MACE,IAAA,EAAM,WAAA;AAAA,MACN,IAAA,EAAM,iBAAA;AAAA,MACN,IAAA,EAAM,EAAE,IAAA,EAAM,iBAAA,EAAkB;AAAA,MAChC,UAAA;AAAA,MACA;AAAA;AACF,GACF;AACF;AAEA,SAAS,eAAA,CAAgB,SAAiB,cAAA,EAAsC;AAC9E,EAAA,MAAM,SAAuB,EAAC;AAE9B,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,UAAU,CAAA,EAAG;AAChC,IAAA,MAAA,CAAO,IAAA;AAAA,MACL,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,EAAE,IAAA,EAAM,MAAA,EAAO,EAAG,KAAA,EAAO,sBAAA,EAAuB;AAAA,MACzF,EAAE,IAAA,EAAM,oBAAA,EAAsB,QAAA,EAAU,MAAA,EAAO;AAAA,MAC/C;AAAA,QACE,IAAA,EAAM,WAAA;AAAA,QACN,IAAA,EAAM,OAAA;AAAA,QACN,IAAA,EAAM,EAAE,IAAA,EAAM,OAAA,EAAQ;AAAA,QACtB,KAAA,EAAO;AAAA,OACT;AAAA,MACA,EAAE,IAAA,EAAM,oBAAA,EAAsB,QAAA,EAAU,OAAA;AAAQ,KAClD;AACA,IAAA,MAAA,CAAO,IAAA;AAAA,MACL,GAAG,aAAA;AAAA,QACD;AAAA;AACF,KACF;AAAA,EACF,CAAA,MAAA,IAAW,OAAA,CAAQ,QAAA,CAAS,eAAe,CAAA,EAAG;AAC5C,IAAA,MAAA,CAAO,IAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,WAAA;AAAA,QACN,IAAA,EAAM,MAAA;AAAA,QACN,IAAA,EAAM,EAAE,IAAA,EAAM,MAAA,EAAO;AAAA,QACrB,KAAA,EAAO;AAAA,OACT;AAAA,MACA,EAAE,IAAA,EAAM,oBAAA,EAAsB,QAAA,EAAU,MAAA;AAAO,KACjD;AACA,IAAA,MAAA,CAAO,IAAA;AAAA,MACL,GAAG,aAAA;AAAA,QACD;AAAA;AACF,KACF;AAAA,EACF,CAAA,MAAA,IAAW,OAAA,CAAQ,QAAA,CAAS,eAAe,CAAA,EAAG;AAC5C,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,eAAA,CAAgB,aAAA,EAAe,qBAAqB,CAAC,CAAA;AAAA,EACtE,CAAA,MAAA,IAAW,OAAA,CAAQ,QAAA,CAAS,YAAY,CAAA,EAAG;AACzC,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,OAAA;AAAA,MACN,KAAA,EACE,oHAAA;AAAA,MACF,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,EACH,CAAA,MAAA,IAAW,OAAA,CAAQ,QAAA,CAAS,YAAY,CAAA,EAAG;AACzC,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,OAAA;AAAA,MACN,KAAA,EACE,yHAAA;AAAA,MACF,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,EACH,CAAA,MAAO;AAEL,IAAA,MAAM,OAAA,GACJ,6BAA6B,cAAc,CAAA,2GAAA,CAAA;AAE7C,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,aAAA,CAAc,OAAO,CAAC,CAAA;AAAA,EACvC;AAEA,EAAA,OAAO,MAAA;AACT;AAMO,IAAM,iBAAA,GAAgD;AAAA,EAC3D,EAAA,EAAI,MAAA;AAAA,EACJ,WAAA,EAAa,uBAAA,CAAwB,IAAA,EAAM,IAAA,IAAQ,iBAAA;AAAA,EACnD,UAAA,EAAY,CAAA;AAAA;AAAA,EAEZ,YAAA,EAAgB,CAAA,CAAA,MAAA,CAAoB,MAAM,IAAI,CAAA;AAAA,EAC9C,QAAQ,OAAO,MAAA,EAAQ,IAAA,KAAS,IAAI,YAAY,MAAM,CAAA;AAAA,EACtD,UAAA,EAAY,OAAO,QAAA,EAAU,OAAA,KAC3B,IAAI,WAAA,CAAY;AAAA,IACd,GAAA,EAAK,QAAQ,GAAA,EAAI;AAAA,IACjB,SAAA,EAAW,YAAA;AAAA,IACX,GAAG,qBAAA,CAAsB,QAAA,EAAU,OAAO;AAAA,GAC3C,EAAE,UAAA;AACP","file":"echo.js","sourcesContent":["/**\n * Scripted-flow decision logic for the echo harness.\n *\n * Pure, deterministic policy that maps a live {@link FlowExecution} snapshot\n * (plus an optional per-node script) to the single next flow-adapter mutation\n * the harness should emit this iteration. The echo harness calls this in a loop\n * per turn (see `echo.ts`), executing each returned action against the\n * runner-injected {@link FlowTestHarnessHook} until it yields (`null`) or emits\n * a turn-ending action.\n *\n * The policy mirrors what a real LLM orchestrator would do, but without an\n * LLM: it reacts to state each turn, so a host can drive a flow to `complete`,\n * park it at an approval/input gate, and exercise the reject/recover path\n * simply by applying host mutations (`applyApproval`, `applyInput`, …) between\n * turns. No new protocol, no flow-contract change — it only calls the existing\n * FlowAdapter agent-tool operations.\n *\n * @docLink packages/bridge/harnesses#scripted-flow\n * @since 3.6.0\n */\n\nimport type { FlowExecution, NodeExecution } from \"@skaile/workspaces/types\";\n\n/**\n * What the scripted harness should do when a node reaches its decision point.\n *\n * - `auto` (default): follow the flow's `autonomousMode` — `complete_node`\n * when autonomous, else `request_approval`. A mandatory approval gate always\n * resolves to `request_approval`, even when autonomous (it cannot be skipped).\n * - `complete`: always `complete_node` (autonomous-style, even if the flow's\n * autonomousMode is false — the adapter allows it only when autonomous, so\n * use with autonomous flows).\n * - `approve`: always `request_approval` (park at an approval gate).\n * - `input`: `request_input` once; after the host applies input, fall back to\n * `auto` behaviour.\n * - `skip`: `skip_node` (optional nodes only).\n * - `fail`: `fail_node`. With `recoverable: false` (default) this is terminal.\n * With `recoverable: true` the node returns to `available`; the harness\n * re-emits the recoverable failure `failCount` times (default 1) and then\n * proceeds as `auto` — it never deadlocks on a recoverable fail.\n */\nexport type OnRun = \"auto\" | \"complete\" | \"approve\" | \"input\" | \"skip\" | \"fail\";\n\n/**\n * What to do when a node returns to `available` after a rejection.\n *\n * - `retry` (default): re-drive it — `start_node` again, then its `onRun`.\n * - `fail`: `fail_node(recoverable: false)` — exercises the terminal path.\n */\nexport type OnReject = \"retry\" | \"fail\";\n\n/** Per-node scripting directive. All fields optional. */\nexport interface FlowNodeDirective {\n onRun?: OnRun;\n onReject?: OnReject;\n /** For `onRun: \"input\"` — the input request shown to the host. */\n input?: { prompt?: string; schema?: unknown };\n /** For `onRun: \"fail\"` — whether the failure is recoverable. Default false. */\n recoverable?: boolean;\n /**\n * For `onRun: \"fail\"` with `recoverable: true` — how many recoverable\n * failures to emit before the node proceeds as `auto`. Default 1. Counted\n * from the node's own `errorHistory`, so the policy stays a pure function of\n * state (no harness-instance bookkeeping) and never deadlocks.\n */\n failCount?: number;\n /** Summary text used for `complete_node` / `request_approval` / failures. */\n summary?: string;\n}\n\n/**\n * A scripted-flow program. Empty (`{}`) means \"canonical policy\": start each\n * available node, then complete (autonomous) or request approval (interactive)\n * — enough to drive the autonomous-complete, approval-gate, and reject/recover\n * scenarios with no per-node scripting at all.\n */\nexport interface FlowScript {\n /** Per-node overrides, keyed by node id. */\n nodes?: Record<string, FlowNodeDirective>;\n /** Fallback directive for any node without its own entry. */\n default?: FlowNodeDirective;\n}\n\n/** A single flow-adapter mutation the harness will execute. */\nexport type FlowAction =\n | { op: \"start_node\"; nodeId: string }\n | { op: \"complete_node\"; nodeId: string; summary: string }\n | { op: \"request_approval\"; nodeId: string; summary: string }\n | { op: \"request_input\"; nodeId: string; prompt: string; schema: string }\n | { op: \"skip_node\"; nodeId: string }\n | { op: \"fail_node\"; nodeId: string; message: string; recoverable: boolean };\n\n/** Ops that end the agent turn (the runner yields until the host acts). */\nconst TURN_ENDING: ReadonlySet<FlowAction[\"op\"]> = new Set([\n \"request_approval\",\n \"request_input\",\n \"fail_node\",\n]);\n\n/** Whether an action ends the turn (harness stops looping after emitting it). */\nexport function isTurnEnding(action: FlowAction): boolean {\n return TURN_ENDING.has(action.op);\n}\n\n/** Map a {@link FlowAction} to the `executeOp` argument bag the adapter expects. */\nexport function actionArgs(action: FlowAction): Record<string, unknown> {\n switch (action.op) {\n case \"start_node\":\n case \"skip_node\":\n return { nodeId: action.nodeId };\n case \"complete_node\":\n return { nodeId: action.nodeId, summary: action.summary };\n case \"request_approval\":\n return { nodeId: action.nodeId, summary: action.summary };\n case \"request_input\":\n return { nodeId: action.nodeId, prompt: action.prompt, schema: action.schema };\n case \"fail_node\":\n return {\n nodeId: action.nodeId,\n message: action.message,\n recoverable: String(action.recoverable),\n };\n }\n}\n\nfunction summaryFor(d: FlowNodeDirective, n: NodeExecution): string {\n return d.summary ?? `Scripted output for ${n.id}`;\n}\n\n/**\n * Decide the single next flow action for the current state, or `null` to yield\n * (nothing to do this iteration — wait for a host mutation).\n *\n * Priority order: resolve approved gates → advance running nodes → start (or\n * skip / terminally-fail) available nodes. Terminal flow states and gates with\n * no decision / input yet yield.\n *\n * Pure — the fail bookkeeping (how many recoverable failures a node has already\n * emitted) is read from the node's own `errorHistory`, so no external counter is\n * needed and a recoverable `fail` directive can never deadlock.\n */\nexport function decideFlowAction(\n state: FlowExecution,\n script: FlowScript,\n mandatoryGates: ReadonlySet<string> = new Set(),\n): FlowAction | null {\n // Terminal flow — never fight a completed/failed/cancelled run.\n if (state.status === \"complete\" || state.status === \"failed\" || state.status === \"cancelled\") {\n return null;\n }\n\n const dir = (id: string): FlowNodeDirective => script.nodes?.[id] ?? script.default ?? {};\n const nodes = Object.values(state.nodes);\n // A mandatory gate can never auto-complete — `auto` resolves to `approve`\n // regardless of autonomousMode so the host can drive it deterministically.\n const canAutoComplete = (id: string): boolean => state.autonomousMode && !mandatoryGates.has(id);\n\n // 1. Approved gate → complete.\n for (const n of nodes) {\n if (n.status === \"awaiting_approval\" && n.approval?.decision === \"approved\") {\n return { op: \"complete_node\", nodeId: n.id, summary: summaryFor(dir(n.id), n) };\n }\n }\n\n // 2. Running node → per directive.\n for (const n of nodes) {\n if (n.status !== \"running\") continue;\n const d = dir(n.id);\n const onRun: OnRun = d.onRun ?? \"auto\";\n const resolved: OnRun =\n onRun === \"auto\" ? (canAutoComplete(n.id) ? \"complete\" : \"approve\") : onRun;\n\n if (resolved === \"complete\") {\n return { op: \"complete_node\", nodeId: n.id, summary: summaryFor(d, n) };\n }\n if (resolved === \"approve\") {\n return { op: \"request_approval\", nodeId: n.id, summary: summaryFor(d, n) };\n }\n if (resolved === \"input\") {\n const lastInput = n.inputHistory[n.inputHistory.length - 1];\n if (lastInput && lastInput.response !== undefined) {\n // Input already provided — proceed as if `auto`.\n return canAutoComplete(n.id)\n ? { op: \"complete_node\", nodeId: n.id, summary: summaryFor(d, n) }\n : { op: \"request_approval\", nodeId: n.id, summary: summaryFor(d, n) };\n }\n return {\n op: \"request_input\",\n nodeId: n.id,\n prompt: d.input?.prompt ?? `Provide input for ${n.id}`,\n schema: JSON.stringify(d.input?.schema ?? { kind: \"text\" }),\n };\n }\n if (resolved === \"fail\") {\n const recoverable = d.recoverable ?? false;\n if (!recoverable) {\n // Terminal fail — the adapter marks node + flow `failed`, so the\n // terminal-status guard above stops any re-fire on later turns.\n return {\n op: \"fail_node\",\n nodeId: n.id,\n message: d.summary ?? `Scripted failure for ${n.id}`,\n recoverable: false,\n };\n }\n // Recoverable fail — emit up to `failCount` times (counting the node's\n // own recorded recoverable errors), then proceed as `auto` so the node\n // is not stranded in a re-drive loop.\n const emitted = n.errorHistory.filter((e) => e.recoverable).length;\n const failCount = Math.max(1, d.failCount ?? 1);\n if (emitted < failCount) {\n return {\n op: \"fail_node\",\n nodeId: n.id,\n message: d.summary ?? `Scripted recoverable failure for ${n.id}`,\n recoverable: true,\n };\n }\n return canAutoComplete(n.id)\n ? { op: \"complete_node\", nodeId: n.id, summary: summaryFor(d, n) }\n : { op: \"request_approval\", nodeId: n.id, summary: summaryFor(d, n) };\n }\n // `skip` while running is illegal; complete instead to avoid a deadlock.\n return { op: \"complete_node\", nodeId: n.id, summary: summaryFor(d, n) };\n }\n\n // 3. Available node → terminally-fail (post-reject), skip, or start.\n for (const n of nodes) {\n if (n.status !== \"available\") continue;\n const d = dir(n.id);\n const lastApproval = n.approvalHistory[n.approvalHistory.length - 1];\n if (lastApproval?.decision === \"rejected\" && d.onReject === \"fail\") {\n return {\n op: \"fail_node\",\n nodeId: n.id,\n message: d.summary ?? `Rejected and not recoverable: ${n.id}`,\n recoverable: false,\n };\n }\n if (d.onRun === \"skip\") {\n return { op: \"skip_node\", nodeId: n.id };\n }\n return { op: \"start_node\", nodeId: n.id };\n }\n\n // 4. Nothing actionable — awaiting_approval (no decision), awaiting_input\n // (no response), or fully drained. Yield.\n return null;\n}\n\n/**\n * Parse a `[test-flow]` sentinel body into a {@link FlowScript}. An empty body\n * yields the canonical (empty) script. Malformed JSON is a hard error so tests\n * fail loudly rather than silently running the wrong policy.\n */\nexport function parseFlowScript(body: string): FlowScript {\n const trimmed = body.trim();\n if (trimmed.length === 0) return {};\n const parsed: unknown = JSON.parse(trimmed);\n if (parsed === null || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new Error(\"flow script must be a JSON object\");\n }\n return parsed as FlowScript;\n}\n","import type { HarnessTarget } from \"@skaile/workspaces/plugin-registry\";\nimport type { Logger } from \"@skaile/workspaces/types\";\nimport * as z from \"zod\";\nimport { dispatchCapability } from \"../capability-dispatch.js\";\nimport { getBridgeLogger } from \"../logger.js\";\nimport { registryHarnessConfig } from \"../provider-registry-derive.js\";\nimport { BUILTIN_HARNESS_CATALOG } from \"../registry.js\";\nimport {\n type AgentConfig,\n AgentHarness,\n type AgentEvent,\n type BridgeCapabilityTool,\n type HarnessInfo,\n} from \"../types.js\";\nimport {\n actionArgs,\n type FlowScript,\n decideFlowAction,\n isTurnEnding,\n parseFlowScript,\n} from \"./flow-script.js\";\n\n/**\n * Echo/mock harness for E2E testing in docker mode.\n *\n * Runs inside a real Docker container with real WebSocket transport and\n * session lifecycle, but generates deterministic keyword-triggered responses\n * instead of calling the Anthropic API. This lets E2E tests exercise the\n * full infrastructure (containers, WebSocket, session management, message\n * persistence) without needing real AI credentials.\n *\n * Keyword triggers match the MockAgentClient in\n * `platform/backend/libs/agent-gateway/src/mock-agent-client.ts` — the\n * same test messages (\"test toolcall\", \"test question\", etc.) produce\n * the same events.\n *\n * Enable with `skaile run --harness echo`, or by passing `{ harness: 'echo' }`\n * in the runner config.\n *\n * @docLink packages/bridge/harnesses#echo-harness\n */\nexport class EchoHarness extends AgentHarness {\n readonly harnessInfo: HarnessInfo = {\n id: \"echo\",\n name: \"Echo (E2E mock)\",\n modelAgnostic: true,\n supportsInBandAbort: false,\n };\n\n private readonly log: Logger = getBridgeLogger(\"echo\");\n private running = false;\n private readonly config: AgentConfig;\n\n /**\n * Scripted-flow mode state (workspaces#396). Enabled by a `[test-flow]`\n * sentinel chat message; once on, orchestrator-prompt turns are driven\n * deterministically against `config.flowTestHarness`. `null` script ⇒ mode\n * off (default echo behaviour, unchanged).\n */\n private flowScript: FlowScript | null = null;\n\n constructor(config: AgentConfig) {\n super();\n this.config = config;\n }\n\n /**\n * Test surface: returns the tool list the LLM would see for this turn.\n * Composition: the registry hooks (Protocol v2) take precedence; legacy\n * `mcpServers` is not enumerated here (the echo harness never exposed MCP\n * tools to the LLM by name).\n */\n listCapabilityTools(): BridgeCapabilityTool[] {\n return this.config.capabilities?.composeTools() ?? [];\n }\n\n /**\n * Test surface: invoke a registered capability through the dispatch\n * helper. Mirrors what a real harness would do when the LLM produced a\n * tool_use for the given name — applies fire-and-forget, render emission,\n * and fallback text. Returns the structured dispatch result so tests can\n * assert immediate-vs-background resolution.\n */\n async invokeCapabilityForTest(\n name: string,\n input: unknown,\n ): Promise<{ result: unknown; background: boolean }> {\n const hooks = this.config.capabilities;\n if (!hooks) throw new Error(\"EchoHarness: no capability hooks configured\");\n const out = await dispatchCapability(hooks, name, input, (_err, callId) =>\n this.log.warn(\"background capability handler failed\", {\n name,\n callId,\n // Nothing from the error: its message or name can quote the call's\n // content. The registry's `failed` row for the same call has the metadata.\n }),\n );\n return out;\n }\n\n async start(): Promise<void> {\n this.running = true;\n this.log.info(\"harness started\");\n }\n\n async prompt(message: string): Promise<void> {\n if (!this.running) return;\n const content = message.toLowerCase();\n this.log.info(\"received prompt\", { preview: message.slice(0, 80), length: message.length });\n\n // Small delay to simulate real agent processing\n await new Promise((resolve) => setTimeout(resolve, 200));\n\n // Scripted-flow test seam (workspaces#396) — a `[test-flow]` sentinel\n // arms deterministic flow driving for this session and (optionally)\n // carries a JSON script. Format: `[test-flow] {json}`; empty body ⇒\n // canonical policy. Must be handled before the flow-turn branch below.\n //\n // Detection is LINE-anchored, not message-anchored (workspaces#401): hosts\n // decorate user messages (e.g. a prepended `<SESSION_MEMBERS>` block and a\n // wake-restoration preamble), so the sentinel is rarely at the start of the\n // composed prompt. We match `[test-flow]` at the start of ANY line (only\n // leading whitespace allowed), which is decoration-independent yet still\n // impossible to arm from ordinary prose — a line must BEGIN with the exact\n // token. The optional JSON script must sit on that same line.\n const flowMatch = /^[ \\t]*\\[test-flow\\][ \\t]*(.*)$/m.exec(message);\n if (flowMatch) {\n let summary: string;\n try {\n this.flowScript = parseFlowScript(flowMatch[1] ?? \"\");\n summary = \"echo[test-flow]: scripted-flow mode armed\";\n } catch (err) {\n this.flowScript = null;\n summary = `echo[test-flow]: invalid script — ${err instanceof Error ? err.message : String(err)}`;\n this.emit(\"agent-event\", { type: \"error\", error: summary, fatal: false });\n }\n for (const event of textAndResult(summary)) this.emit(\"agent-event\", event);\n this.emit(\"agent-event\", { type: \"agent_end\" });\n return;\n }\n\n // Scripted-flow turn — the runner reassembles the orchestrator prompt on\n // every flow turn; when scripted-flow mode is armed and a flow harness hook\n // is present, drive nodes deterministically instead of echoing text.\n if (this.flowScript && this.config.flowTestHarness && isFlowTurn(message)) {\n await this.runScriptedFlowTurn();\n return;\n }\n\n // Phase 7B test seam — explicit capability invocation keyword. Lets E2E\n // tests drive `dispatchCapability` from a chat prompt without a real LLM.\n // Format: `[test-cap:<name>] {json}`, LINE-anchored like `[test-flow]` above\n // because hosts decorate user messages. Both flags are load-bearing and are\n // pinned by tests: no `s` (dotAll swallows the host's closing tag into the\n // JSON body), and `[ \\t]` not `\\s` (`\\s` un-anchors the token from its line).\n const capMatch = /^[ \\t]*\\[test-cap:([\\w.\\-_]+)\\][ \\t]*(.*)$/m.exec(message);\n if (capMatch) {\n const name = capMatch[1] ?? \"\";\n const rawInput = (capMatch[2] ?? \"\").trim();\n let input: unknown = {};\n if (rawInput.length > 0) {\n try {\n input = JSON.parse(rawInput);\n } catch (err) {\n this.log.warn(\"test-cap input was not valid JSON; defaulting to {}\", {\n error: String(err),\n preview: rawInput.slice(0, 80),\n });\n }\n }\n const events = await this.runCapabilityKeyword(name, input);\n for (const event of events) {\n this.emit(\"agent-event\", event);\n await new Promise((resolve) => setTimeout(resolve, 20));\n }\n this.emit(\"agent-event\", { type: \"agent_end\" });\n return;\n }\n\n const events = buildEchoEvents(content, message);\n for (const event of events) {\n this.emit(\"agent-event\", event);\n // Small gap between events to let the transport process each one\n await new Promise((resolve) => setTimeout(resolve, 50));\n }\n // Signal turn completion — the runner waits for this before accepting\n // the next prompt. Without it, the runner stays stuck after the first message.\n this.emit(\"agent-event\", { type: \"agent_end\" });\n }\n\n /**\n * Phase 7B helper — drive a single capability through the dispatcher and\n * surface the structured outcome as a result event the LLM-side test code\n * can assert against. Used exclusively by the `[test-cap:<name>]` prompt\n * keyword above; never wired into normal chat flow.\n */\n private async runCapabilityKeyword(name: string, input: unknown): Promise<AgentEvent[]> {\n const events: AgentEvent[] = [];\n if (!this.config.capabilities) {\n return textAndResult(`echo[test-cap]: no capability hooks configured (skipping ${name})`);\n }\n try {\n const out = await this.invokeCapabilityForTest(name, input);\n const summary = `echo[test-cap]: invoked ${name} input=${safeStringify(input)} background=${String(out.background)} result=${safeStringify(out.result)}`;\n events.push(...textAndResult(summary));\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n events.push({\n type: \"error\",\n error: `echo[test-cap]: ${name} failed: ${msg}`,\n fatal: false,\n });\n events.push(...textAndResult(`echo[test-cap]: ${name} errored (${msg})`));\n }\n return events;\n }\n\n /**\n * Scripted-flow turn (workspaces#396). Reads the live flow state via the\n * runner-injected `flowTestHarness` hook and executes the scripted next\n * action(s) until the policy yields or emits a turn-ending action. Each\n * mutation fires the adapter's `onChange` (→ host `state_changed`) and, when\n * the runner wires the stimulus bus, queues the follow-up turn — so the\n * harness advances one step at a time exactly like a real LLM orchestrator.\n */\n private async runScriptedFlowTurn(): Promise<void> {\n const hook = this.config.flowTestHarness;\n const script = this.flowScript;\n if (!hook || !script) {\n this.emit(\"agent-event\", { type: \"agent_end\" });\n return;\n }\n\n const executed: string[] = [];\n // Hard cap — the policy is monotonic, but never let a bug spin forever.\n const MAX_STEPS = 200;\n for (let i = 0; i < MAX_STEPS; i++) {\n const state = hook.getState();\n if (!state) break;\n const mandatoryGates = new Set(hook.mandatoryGates?.() ?? []);\n const action = decideFlowAction(state, script, mandatoryGates);\n if (!action) break;\n\n this.emit(\"agent-event\", {\n type: \"tool_call\",\n name: action.op,\n tool: { name: action.op },\n input: action.nodeId,\n });\n try {\n await hook.execute(action.op, actionArgs(action));\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n this.log.warn(\"scripted flow op failed\", {\n op: action.op,\n nodeId: action.nodeId,\n error: msg,\n });\n this.emit(\"agent-event\", {\n type: \"error\",\n error: `echo[test-flow]: ${action.op}(${action.nodeId}) failed: ${msg}`,\n fatal: false,\n });\n break;\n }\n this.emit(\"agent-event\", { type: \"tool_execution_end\", toolName: action.op });\n executed.push(`${action.op}(${action.nodeId})`);\n if (isTurnEnding(action)) break;\n }\n\n const summary =\n executed.length > 0\n ? `echo[test-flow]: ${executed.join(\" → \")}`\n : \"echo[test-flow]: no action (yielding to host)\";\n for (const event of textAndResult(summary)) this.emit(\"agent-event\", event);\n this.emit(\"agent-event\", { type: \"agent_end\" });\n }\n\n async abort(): Promise<void> {\n this.log.info(\"abort requested\");\n }\n\n kill(): void {\n this.running = false;\n this.log.info(\"killed\");\n }\n\n async resetSession(): Promise<void> {\n this.log.info(\"session reset\");\n }\n\n get isRunning(): boolean {\n return this.running;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Echo response generation — mirrors MockAgentClient.buildMockEvents\n// ---------------------------------------------------------------------------\n\n/**\n * A flow turn is recognised by the orchestrator prompt's stable header\n * (`buildOrchestratorPrompt` in the flow connector). Detection is header-only —\n * the harness reads live state through the injected hook, never by parsing the\n * prompt body.\n */\nfunction isFlowTurn(message: string): boolean {\n return message.startsWith(\"# Flow Execution Context\");\n}\n\nfunction safeStringify(v: unknown): string {\n try {\n return JSON.stringify(v);\n } catch {\n return String(v);\n }\n}\n\nfunction textAndResult(summary: string): AgentEvent[] {\n return [\n {\n type: \"message_start\",\n message: { role: \"assistant\", content: summary },\n },\n {\n type: \"message_end\",\n message: { role: \"assistant\", content: summary },\n },\n {\n type: \"result\",\n subtype: \"success\",\n summary,\n costUsd: 0,\n },\n ];\n}\n\n/** What `test question` asks; hosts' e2e specs wait on these strings. */\nexport const ECHO_QUESTION =\n \"The blueprint calls for a relational database. Which engine should I target? \" +\n \"This will affect the Prisma provider, Docker Compose setup, and the connection string.\";\nexport const ECHO_QUESTION_OPTIONS = [\"PostgreSQL\", \"MySQL\", \"SQLite\"] as const;\n\nlet echoQuestionSeq = 0;\n\n/**\n * An `AskUserQuestion` call in the shape claude-sdk, omp and codex publish, which the\n * normalizer turns into a `question` event. No text and no `result` follow: a host\n * reads a text row or a turn summary as the agent moving on, which closes the question.\n * The turn still ends (no parked answer), so the reply arrives as a fresh prompt.\n */\nfunction askUserQuestion(question: string, options: readonly string[]): AgentEvent[] {\n const toolCallId = `echo-question-${++echoQuestionSeq}`;\n const input = { questions: [{ question, options: options.map((label) => ({ label })) }] };\n return [\n {\n type: \"message_start\",\n message: {\n role: \"assistant\",\n content: [{ type: \"tool_use\", name: \"AskUserQuestion\", id: toolCallId, input }],\n },\n },\n {\n type: \"tool_call\",\n name: \"AskUserQuestion\",\n tool: { name: \"AskUserQuestion\" },\n toolCallId,\n input,\n },\n ];\n}\n\nfunction buildEchoEvents(content: string, originalPrompt: string): AgentEvent[] {\n const events: AgentEvent[] = [];\n\n if (content.includes(\"test all\")) {\n events.push(\n { type: \"tool_call\", name: \"Read\", tool: { name: \"Read\" }, input: \"prisma/schema.prisma\" },\n { type: \"tool_execution_end\", toolName: \"Read\" },\n {\n type: \"tool_call\",\n name: \"Write\",\n tool: { name: \"Write\" },\n input: \"src/modules/sprint/sprint.service.ts\",\n },\n { type: \"tool_execution_end\", toolName: \"Write\" },\n );\n events.push(\n ...textAndResult(\n \"All operations completed successfully. Created sprint service, updated schema, started dev server, and ran E2E tests.\",\n ),\n );\n } else if (content.includes(\"test toolcall\")) {\n events.push(\n {\n type: \"tool_call\",\n name: \"Read\",\n tool: { name: \"Read\" },\n input: \"platform/prisma/schema.prisma\",\n },\n { type: \"tool_execution_end\", toolName: \"Read\" },\n );\n events.push(\n ...textAndResult(\n \"I've read the schema and found 42 models. The data model looks well-structured.\",\n ),\n );\n } else if (content.includes(\"test question\")) {\n events.push(...askUserQuestion(ECHO_QUESTION, ECHO_QUESTION_OPTIONS));\n } else if (content.includes(\"test error\")) {\n events.push({\n type: \"error\",\n error:\n \"AI provider returned HTTP 429 — rate limit exceeded. The request will be retried automatically in 35 seconds.\",\n fatal: false,\n });\n } else if (content.includes(\"test fatal\")) {\n events.push({\n type: \"error\",\n error:\n \"Session agent was killed by the container runtime (OOM — memory limit 2 GB exceeded). The session cannot continue.\",\n fatal: true,\n });\n } else {\n // Default echo response\n const summary =\n `I received your message: \"${originalPrompt}\". I'm the Skaile AI assistant running in echo mode. ` +\n `This is a deterministic mock response for E2E testing.`;\n events.push(...textAndResult(summary));\n }\n\n return events;\n}\n\n/**\n * `HarnessTarget` wrapper for the echo harness. Registered into the plugin\n * registry by `registerBuiltinHarnesses()`.\n */\nexport const echoHarnessTarget: HarnessTarget<AgentConfig> = {\n id: \"echo\",\n displayName: BUILTIN_HARNESS_CATALOG.echo?.name ?? \"Echo (E2E mock)\",\n apiVersion: 1,\n // Harnesses take AgentConfig; passthrough — full schema validation is out of scope.\n configSchema: z.custom<AgentConfig>(() => true),\n create: async (config, _ctx) => new EchoHarness(config),\n listModels: async (registry, options) =>\n new EchoHarness({\n cwd: process.cwd(),\n sessionId: \"model-list\",\n ...registryHarnessConfig(registry, options),\n }).listModels(),\n};\n"]}
@@ -1,2 +1,2 @@
1
1
  // Auto-generated by _scripts/emit-dts-sidecars.ts — do not edit by hand.
2
- export * from "../src/drivers/continue.js";
2
+ export * from "../src/harnesses/gemini.js";
@@ -0,0 +1,18 @@
1
+ export { GeminiFamilyHarness, GeminiHarness, geminiHarnessTarget } from '../../chunk-HPMQRAIF.js';
2
+ import '../../chunk-DIGFA7Z5.js';
3
+ import '../../chunk-5J4NPGFM.js';
4
+ import '../../chunk-GNZBFSRB.js';
5
+ import '../../chunk-XFIEVEU7.js';
6
+ import '../../chunk-7DN6JKP2.js';
7
+ import '../../chunk-FKQNBCDW.js';
8
+ import '../../chunk-ILLTBKDJ.js';
9
+ import '../../chunk-G5SUWZEU.js';
10
+ import '../../chunk-E572OHGY.js';
11
+ import '../../chunk-ADPM6AYF.js';
12
+ import '../../chunk-DKXNKFKP.js';
13
+ import '../../chunk-LSI2IVFT.js';
14
+ import '../../chunk-C3CAXQMA.js';
15
+ import '../../chunk-BOFL7GIF.js';
16
+ import '../../chunk-NSBPE2FW.js';
17
+ //# sourceMappingURL=gemini.js.map
18
+ //# sourceMappingURL=gemini.js.map
@@ -1,2 +1,2 @@
1
1
  // Auto-generated by _scripts/emit-dts-sidecars.ts — do not edit by hand.
2
- export * from "../src/drivers/goose.js";
2
+ export * from "../src/harnesses/goose.js";
@@ -1,27 +1,27 @@
1
- import { driverSessionConfigHome, pruneSessionConfigDir, writeSessionConfigFile } from '../../chunk-EAZECHPM.js';
2
- import { SubprocessCliDriver, extractText, extractCost, extractTokens } from '../../chunk-W4Q6CKJ5.js';
3
- import { resolveEnvDriverSession, resolveRegistryBinding, credentialsForEveryProvider, registryModelEntries, selectableEntries, isStockCatalogEndpoint, entrySurface, entryBaseUrl, entryModelIds } from '../../chunk-2GXSSZAM.js';
4
- import '../../chunk-RPZVHXQ3.js';
5
- import '../../chunk-YROR332M.js';
6
- import { getBridgeLogger, registryDriverConfig } from '../../chunk-XWOPZW26.js';
7
- import { BUILTIN_DRIVER_CATALOG, providerCredentialEnvName } from '../../chunk-CQJH4G2K.js';
8
- import '../../chunk-6E6PKKAD.js';
9
- import '../../chunk-N46LQR46.js';
1
+ import { harnessSessionConfigHome, pruneSessionConfigDir, writeSessionConfigFile } from '../../chunk-NBAGV6L2.js';
2
+ import { SubprocessCliHarness, extractText, extractCost, extractTokens } from '../../chunk-DIGFA7Z5.js';
3
+ import { resolveEnvHarnessSession, resolveRegistryBinding, credentialsForEveryProvider, registryModelEntries, selectableEntries, isStockCatalogEndpoint, entrySurface, entryBaseUrl, entryModelIds } from '../../chunk-GNZBFSRB.js';
4
+ import '../../chunk-XFIEVEU7.js';
5
+ import '../../chunk-7DN6JKP2.js';
6
+ import { getBridgeLogger, registryHarnessConfig } from '../../chunk-FKQNBCDW.js';
7
+ import { BUILTIN_HARNESS_CATALOG, providerCredentialEnvName } from '../../chunk-ILLTBKDJ.js';
8
+ import '../../chunk-G5SUWZEU.js';
9
+ import '../../chunk-VMVDAZLA.js';
10
10
  import '../../chunk-4GY63JU6.js';
11
- import '../../chunk-TIIXG3PN.js';
12
- import '../../chunk-5TBFN46Z.js';
13
- import '../../chunk-5BEFNLOR.js';
11
+ import '../../chunk-ZDLUQLI6.js';
12
+ import '../../chunk-5KRMNUL4.js';
13
+ import '../../chunk-Z7ZEZZB6.js';
14
14
  import '../../chunk-MWXYN6NY.js';
15
- import '../../chunk-V257LUBM.js';
15
+ import '../../chunk-ZHGKAZJ7.js';
16
16
  import '../../chunk-L5VSIPQD.js';
17
- import '../../chunk-IG5LZ3WU.js';
18
- import '../../chunk-UQ33Y4DM.js';
17
+ import '../../chunk-VTETQCR6.js';
18
+ import '../../chunk-ZBHZLWV3.js';
19
19
  import '../../chunk-RVRB27AN.js';
20
- import '../../chunk-GOCWM7FN.js';
21
- import '../../chunk-WDXZA7QW.js';
22
- import '../../chunk-ICSCSM5D.js';
20
+ import '../../chunk-RHN5MRQO.js';
21
+ import '../../chunk-LSSYC5IC.js';
22
+ import '../../chunk-ADPM6AYF.js';
23
23
  import '../../chunk-DKXNKFKP.js';
24
- import '../../chunk-MJHSLODD.js';
24
+ import '../../chunk-LSI2IVFT.js';
25
25
  import '../../chunk-C3CAXQMA.js';
26
26
  import '../../chunk-BOFL7GIF.js';
27
27
  import '../../chunk-NSBPE2FW.js';
@@ -96,7 +96,7 @@ function buildGooseCustomProviders(session) {
96
96
  }
97
97
  function materializeGooseCustomProviders(session, config) {
98
98
  const build = buildGooseCustomProviders(session);
99
- const root = driverSessionConfigHome("goose", config);
99
+ const root = harnessSessionConfigHome("goose", config);
100
100
  const providersDir = join(root, GOOSE_CONFIG_DIRNAME, GOOSE_CUSTOM_PROVIDERS_DIRNAME);
101
101
  const ids = Object.keys(build.providers);
102
102
  if (ids.length === 0) {
@@ -115,9 +115,9 @@ function materializeGooseCustomProviders(session, config) {
115
115
  return { ...build, env: { GOOSE_PATH_ROOT: root }, paths };
116
116
  }
117
117
 
118
- // bridge/src/drivers/goose.ts
119
- var GooseDriver = class extends SubprocessCliDriver {
120
- driverInfo = {
118
+ // bridge/src/harnesses/goose.ts
119
+ var GooseHarness = class extends SubprocessCliHarness {
120
+ harnessInfo = {
121
121
  id: "goose",
122
122
  name: "Goose",
123
123
  modelAgnostic: true,
@@ -130,7 +130,7 @@ var GooseDriver = class extends SubprocessCliDriver {
130
130
  providers;
131
131
  /** This session's AI providers, resolved once from the config. */
132
132
  providerSession() {
133
- this.providers ??= resolveEnvDriverSession(this.config);
133
+ this.providers ??= resolveEnvHarnessSession(this.config);
134
134
  return this.providers;
135
135
  }
136
136
  onReconfigured(applied) {
@@ -230,19 +230,19 @@ var GooseDriver = class extends SubprocessCliDriver {
230
230
  return registryModelEntries(this.providerSession());
231
231
  }
232
232
  };
233
- var gooseDriverTarget = {
233
+ var gooseHarnessTarget = {
234
234
  id: "goose",
235
- displayName: BUILTIN_DRIVER_CATALOG.goose?.name ?? "Goose",
235
+ displayName: BUILTIN_HARNESS_CATALOG.goose?.name ?? "Goose",
236
236
  apiVersion: 1,
237
237
  configSchema: z.custom(() => true),
238
- create: async (config, _ctx) => new GooseDriver(config),
239
- listModels: async (registry, options) => new GooseDriver({
238
+ create: async (config, _ctx) => new GooseHarness(config),
239
+ listModels: async (registry, options) => new GooseHarness({
240
240
  cwd: process.cwd(),
241
241
  sessionId: "model-list",
242
- ...registryDriverConfig(registry, options)
242
+ ...registryHarnessConfig(registry, options)
243
243
  }).listModels()
244
244
  };
245
245
 
246
- export { GooseDriver, gooseDriverTarget };
246
+ export { GooseHarness, gooseHarnessTarget };
247
247
  //# sourceMappingURL=goose.js.map
248
248
  //# sourceMappingURL=goose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../bridge/src/provider-materialize/goose-custom-providers.ts","../../../bridge/src/harnesses/goose.ts"],"names":[],"mappings":"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","file":"goose.js","sourcesContent":["/**\n * Goose's `custom_providers/*.json` adapter — the file half of the Goose row\n * (§2.3).\n *\n * `GOOSE_PROVIDER` can only name a provider Goose already has: one of its\n * built-in Rust providers, or one of the JSON *declarative* providers it loads\n * from `<config dir>/custom_providers/`. An endpoint of the session's own is\n * therefore a file — one per entry, named after the entry, in Goose's own\n * vocabulary:\n *\n * ```json\n * {\n * \"name\": \"corp-gateway\",\n * \"engine\": \"openai\",\n * \"display_name\": \"Corp Gateway\",\n * \"api_key_env\": \"SKAILE_AIP_CORP_GATEWAY_KEY\",\n * \"base_url\": \"https://llm.corp.example/v1\",\n * \"models\": [{ \"name\": \"corp-fast-1\" }],\n * \"requires_auth\": true\n * }\n * ```\n *\n * `name` is {@link harnessProviderName}, so the id in the file is the one the\n * env half already puts in `GOOSE_PROVIDER`. `api_key_env` is a variable\n * *name*: Goose resolves it from the child environment (its config layer reads\n * the process environment first), so no secret is ever written.\n *\n * **Engines.** A declarative provider is one of three engines — `openai`,\n * `anthropic`, `ollama` — each a request shape, not a vendor. Only the two\n * surfaces that map onto one are rendered; `google-generative-ai` and\n * `bedrock-converse-stream` are built-in Goose providers with no declarative\n * spelling, so an entry on those surfaces is reported instead of guessed at.\n *\n * **Config home.** Goose resolves its config, data and state directories from\n * one variable, `GOOSE_PATH_ROOT`, so a session that renders anything moves\n * the whole tree and never touches the developer's own — neither reading it\n * nor writing to it.\n *\n * @see https://block.github.io/goose/docs/guides/custom-providers\n * @docLink packages/bridge/harnesses#one-shot-cli-harnesses-gemini-qwen-opencode-goose-continue\n */\n\nimport { join } from \"node:path\";\nimport type {\n AIProviderLlmEntry,\n AIProviderSurface,\n} from \"@skaile/workspaces/core/provider-registry\";\nimport { providerCredentialEnvName } from \"./credential-env.js\";\nimport {\n entryBaseUrl,\n entryModelIds,\n entrySurface,\n type EnvHarnessSession,\n isStockCatalogEndpoint,\n resolveRegistryBinding,\n selectableEntries,\n} from \"./env-harnesses.js\";\nimport {\n harnessSessionConfigHome,\n pruneSessionConfigDir,\n writeSessionConfigFile,\n} from \"./session-config-home.js\";\n\n/**\n * `surface` → Goose declarative `engine`. `openai-completions` is the only\n * OpenAI-flavoured surface here on purpose: the `openai` engine posts to\n * `<base>/v1/chat/completions`, which is not the Responses API.\n */\nconst GOOSE_ENGINE: Partial<Record<AIProviderSurface, string>> = {\n \"openai-completions\": \"openai\",\n \"anthropic-messages\": \"anthropic\",\n};\n\n/** Credential kinds whose value the adapter hands over in an env var. */\nconst ENV_DELIVERED_CREDENTIALS: Record<string, true> = {\n api_key_header: true,\n bearer: true,\n command: true,\n};\n\n/** Directory, relative to `GOOSE_PATH_ROOT`, Goose reads its config from. */\nexport const GOOSE_CONFIG_DIRNAME = \"config\";\n\n/** Directory, relative to the config dir, declarative providers are loaded from. */\nexport const GOOSE_CUSTOM_PROVIDERS_DIRNAME = \"custom_providers\";\n\n/** One entry of a declarative provider's `models[]`. */\nexport interface GooseModelEntry {\n name: string;\n context_limit?: number;\n}\n\n/** One `custom_providers/<id>.json` document. */\nexport interface GooseCustomProvider {\n /** Provider id — what `GOOSE_PROVIDER` names. Must equal the file stem. */\n name: string;\n engine: string;\n display_name: string;\n /** Name of the variable carrying the credential — never the credential. */\n api_key_env?: string;\n base_url: string;\n models: GooseModelEntry[];\n headers?: Record<string, string>;\n supports_streaming?: boolean;\n requires_auth: boolean;\n /**\n * `false` keeps Goose on the static `models[]` instead of probing\n * `<base>/v1/models`; only meaningful with a non-empty list.\n */\n dynamic_models?: boolean;\n}\n\n/** An entry Goose cannot be taught, and why. */\nexport interface GooseSkippedEntry {\n id: string;\n reason: string;\n}\n\n/** Result of {@link buildGooseCustomProviders}. */\nexport interface GooseCustomProvidersBuild {\n /** Provider id → its document, in registry order. */\n providers: Record<string, GooseCustomProvider>;\n skipped: GooseSkippedEntry[];\n}\n\n/**\n * Render one entry as a declarative provider, or explain why Goose cannot load\n * it.\n */\nexport function renderGooseCustomProvider(\n providerId: string,\n entry: AIProviderLlmEntry,\n): { provider: GooseCustomProvider } | { skipped: string } {\n const surface = entrySurface(entry);\n const engine = surface ? GOOSE_ENGINE[surface] : undefined;\n if (!engine)\n return {\n skipped: surface\n ? `Goose has no declarative engine for surface '${surface}'`\n : \"entry declares no surface\",\n };\n const baseUrl = entryBaseUrl(entry);\n if (!baseUrl)\n return { skipped: \"entry states no base_url, and Goose does not know this provider\" };\n\n const credentialKind = entry.credential?.kind;\n const envDelivered = Boolean(credentialKind && ENV_DELIVERED_CREDENTIALS[credentialKind]);\n if (credentialKind && credentialKind !== \"none\" && !envDelivered)\n return {\n skipped: `Goose cannot present a '${credentialKind}' credential for a declarative provider`,\n };\n\n const models: GooseModelEntry[] = [];\n for (const [logicalId, providerModelId] of entryModelIds(entry)) {\n const contextWindow = entry.capabilities?.[logicalId]?.context_window;\n models.push({\n name: providerModelId,\n ...(contextWindow ? { context_limit: contextWindow } : {}),\n });\n }\n\n const provider: GooseCustomProvider = {\n name: providerId,\n engine,\n display_name: entry.label ?? providerId,\n ...(envDelivered ? { api_key_env: providerCredentialEnvName(providerId) } : {}),\n base_url: baseUrl,\n models,\n ...(entry.headers && Object.keys(entry.headers).length > 0\n ? { headers: { ...entry.headers } }\n : {}),\n supports_streaming: true,\n requires_auth: envDelivered,\n };\n return { provider };\n}\n\n/**\n * Build one declarative provider per entry Goose cannot name on its own.\n *\n * The selected model is appended to its provider's `models[]` when the\n * registry did not enumerate it, so `GOOSE_MODEL` always names something the\n * file declares. A provider with a static list gets `dynamic_models: false` —\n * without it Goose probes `<base>/v1/models` on every run, which a gateway\n * that serves only completions answers with an error.\n *\n * An empty registry renders nothing — Goose's built-in provider table\n * already covers every stock catalog endpoint.\n */\nexport function buildGooseCustomProviders(session: EnvHarnessSession): GooseCustomProvidersBuild {\n const providers: Record<string, GooseCustomProvider> = {};\n const skipped: GooseSkippedEntry[] = [];\n\n for (const [providerId, entry] of selectableEntries(session.registry)) {\n // Goose's built-in provider table already knows every catalog endpoint,\n // under the same name `harnessProviderName` puts in `GOOSE_PROVIDER`.\n // What it cannot know is an endpoint of the session's own — one rule,\n // read by both halves.\n if (isStockCatalogEndpoint(entry)) continue;\n const rendered = renderGooseCustomProvider(providerId, entry);\n if (\"skipped\" in rendered) skipped.push({ id: providerId, reason: rendered.skipped });\n else providers[providerId] = rendered.provider;\n }\n\n const binding = resolveRegistryBinding(session);\n const selected = binding ? providers[binding.providerId] : undefined;\n if (\n selected &&\n binding?.providerModelId &&\n !selected.models.some((m) => m.name === binding.providerModelId)\n )\n selected.models.push({ name: binding.providerModelId });\n\n for (const provider of Object.values(providers)) {\n if (provider.models.length > 0) provider.dynamic_models = false;\n }\n\n return { providers, skipped };\n}\n\n/** What {@link materializeGooseCustomProviders} handed the harness. */\nexport interface GooseMaterialization extends GooseCustomProvidersBuild {\n /** Child env fragment: `GOOSE_PATH_ROOT`, or empty when nothing was written. */\n env: Record<string, string>;\n /** Absolute paths of the rendered provider files. */\n paths: string[];\n}\n\n/**\n * Render the session's custom endpoints and point the child at them.\n *\n * A session whose every endpoint is a Goose built-in writes nothing and\n * leaves `GOOSE_PATH_ROOT` unset, so the developer's own Goose tree keeps\n * working exactly as before. Once anything *is* rendered the whole tree moves\n * — config, data and state together, because Goose derives all three from\n * that one variable — and the session stops inheriting the developer's Goose\n * settings along with their config directory. That is the price of never\n * reading or writing it.\n */\nexport function materializeGooseCustomProviders(\n session: EnvHarnessSession,\n config: { cwd: string; sessionId?: string },\n): GooseMaterialization {\n const build = buildGooseCustomProviders(session);\n const root = harnessSessionConfigHome(\"goose\", config);\n const providersDir = join(root, GOOSE_CONFIG_DIRNAME, GOOSE_CUSTOM_PROVIDERS_DIRNAME);\n const ids = Object.keys(build.providers);\n if (ids.length === 0) {\n pruneSessionConfigDir(providersDir, new Set());\n return { ...build, env: {}, paths: [] };\n }\n\n const paths = ids.map((id) =>\n writeSessionConfigFile(\n providersDir,\n `${id}.json`,\n `${JSON.stringify(build.providers[id], null, 2)}\\n`,\n ),\n );\n pruneSessionConfigDir(providersDir, new Set(ids.map((id) => `${id}.json`)));\n return { ...build, env: { GOOSE_PATH_ROOT: root }, paths };\n}\n","import type { HarnessTarget } from \"@skaile/workspaces/plugin-registry\";\nimport type { Logger } from \"@skaile/workspaces/types\";\nimport * as z from \"zod\";\nimport { getBridgeLogger } from \"../logger.js\";\nimport type { ModelEntry } from \"../models.js\";\nimport {\n credentialsForEveryProvider,\n type EnvHarnessSession,\n registryModelEntries,\n resolveEnvHarnessSession,\n resolveRegistryBinding,\n} from \"../provider-materialize/env-harnesses.js\";\nimport { materializeGooseCustomProviders } from \"../provider-materialize/goose-custom-providers.js\";\nimport { registryHarnessConfig } from \"../provider-registry-derive.js\";\nimport { BUILTIN_HARNESS_CATALOG } from \"../registry.js\";\nimport type { AgentConfig, HarnessInfo, ReconfigureApplied } from \"../types.js\";\nimport {\n extractCost,\n extractText,\n extractTokens,\n SubprocessCliHarness,\n} from \"./_subprocess-cli.js\";\n\n/**\n * Agent harness for **Goose** (Block) (`goose`), the model-agnostic open-source\n * agent.\n *\n * Spawns `goose run -t \"<prompt>\" --output-format stream-json --quiet` per turn\n * and maps Goose's stream-json events to the unified {@link AgentEvent} stream.\n * A `credentials-n` harness (§2.3): every enabled AI provider entry's\n * credential reaches the child environment, and the active endpoint + model\n * are named by `GOOSE_PROVIDER` / `GOOSE_MODEL`. An endpoint Goose has no\n * built-in provider for is additionally rendered as a declarative\n * `custom_providers/<id>.json`\n * (`provider-materialize/goose-custom-providers.ts`) under the session's own\n * `GOOSE_PATH_ROOT`.\n *\n * @remarks\n * - Goose is a Rust binary (not npm) — install via Block's `download_cli.sh` or\n * Homebrew.\n * - `--output-format` support is version-dependent; a too-old CLI surfaces as a\n * `process`-category exit error.\n * - Session resume via `--resume --id <id>`.\n *\n * @see https://github.com/block/goose\n * @docLink packages/bridge/harnesses#goose-harness\n */\nexport class GooseHarness extends SubprocessCliHarness {\n readonly harnessInfo: HarnessInfo = {\n id: \"goose\",\n name: \"Goose\",\n modelAgnostic: true,\n supportsInBandAbort: false,\n };\n\n protected readonly log: Logger = getBridgeLogger(\"goose\");\n protected readonly defaultBin = \"goose\";\n protected readonly productName = \"Goose\";\n protected readonly envPrefix = \"GOOSE\";\n\n private providers?: EnvHarnessSession;\n\n /** This session's AI providers, resolved once from the config. */\n private providerSession(): EnvHarnessSession {\n this.providers ??= resolveEnvHarnessSession(this.config);\n return this.providers;\n }\n\n protected override onReconfigured(applied: ReconfigureApplied): void {\n if (applied.model !== undefined) this.providers = undefined;\n }\n\n override getModel(): string | undefined {\n return resolveRegistryBinding(this.providerSession())?.providerModelId ?? this.config.model;\n }\n\n protected buildArgs(message: string, resumeId: string | undefined): string[] {\n const args = [\"run\", \"-t\", message, \"--output-format\", \"stream-json\", \"--quiet\"];\n if (resumeId) args.push(\"--resume\", \"--id\", resumeId);\n return args;\n }\n\n /**\n * Base env plus the active endpoint (`GOOSE_PROVIDER`/`GOOSE_MODEL`) and one\n * credential variable per enabled registry entry — the canonical\n * `SKAILE_AIP_<ID>_KEY` and, for a stock catalog endpoint, the vendor\n * carrier Goose's built-in provider table reads.\n *\n * This is also where the session's custom endpoints are rendered. It runs\n * once per spawn, so a `reconfigure()` between turns re-renders rather than\n * leaving the child pointed at the previous selection.\n */\n protected buildEnv(): Record<string, string> {\n const session = this.providerSession();\n const env = this.baseEnv([\"GOOSE_PROVIDER\", \"GOOSE_MODEL\"]);\n const binding = resolveRegistryBinding(session);\n if (binding) {\n env.GOOSE_PROVIDER = binding.harnessProviderId;\n if (binding.providerModelId) env.GOOSE_MODEL = binding.providerModelId;\n else delete env.GOOSE_MODEL;\n } else if (this.config.model) {\n env.GOOSE_MODEL = this.config.model;\n }\n const materialized = materializeGooseCustomProviders(session, this.config);\n for (const entry of materialized.skipped)\n this.log.warn(\"Goose cannot address an AI provider entry\", {\n providerId: entry.id,\n reason: entry.reason,\n });\n if (materialized.paths.length > 0)\n this.log.debug(\"rendered Goose custom providers\", { paths: materialized.paths });\n return {\n ...env,\n ...credentialsForEveryProvider(session),\n ...materialized.env,\n };\n }\n\n protected installHint(): string {\n return \"Goose is not installed or not on your PATH. Install it from https://block.github.io/goose (download script or Homebrew).\";\n }\n\n protected handleJson(json: any): void {\n switch (json?.type) {\n case \"init\":\n case \"session\":\n this.captureSession(json.sessionId ?? json.session_id ?? json.id);\n break;\n\n case \"message\":\n case \"assistant\": {\n const role = json.role ?? json.message?.role ?? \"assistant\";\n if (role !== \"assistant\") break;\n const text = extractText(json);\n if (json.done === true || json.final === true) this.pushAssistantEnd(text);\n else this.pushAssistantDelta(text);\n break;\n }\n\n case \"tool_use\":\n case \"tool_request\":\n this.pushToolCall(json.name ?? json.tool ?? \"tool\", json.input ?? json.args ?? {});\n break;\n\n case \"tool_result\":\n case \"tool_response\":\n this.pushToolResult(\n json.name ?? json.tool ?? \"tool\",\n json.result ?? json.output ?? json.content,\n Boolean(json.is_error ?? json.error),\n );\n break;\n\n case \"error\":\n this.pushError(this.classifyMessage(String(json.message ?? json.error ?? \"error\")));\n break;\n\n case \"result\":\n case \"complete\":\n this.pushResult({\n tokens: extractTokens(json),\n costUsd: extractCost(json),\n summary: extractText(json) || \"Task completed\",\n });\n break;\n }\n }\n\n /**\n * Goose enumerates models from its own provider table and config, not from\n * an endpoint, so the session's registry is the list.\n */\n override async listModels(): Promise<ModelEntry[]> {\n return registryModelEntries(this.providerSession());\n }\n}\n\n/**\n * `HarnessTarget` wrapper for the goose harness. Registered into the plugin\n * registry by `registerBuiltinHarnesses()`.\n */\nexport const gooseHarnessTarget: HarnessTarget<AgentConfig> = {\n id: \"goose\",\n displayName: BUILTIN_HARNESS_CATALOG.goose?.name ?? \"Goose\",\n apiVersion: 1,\n configSchema: z.custom<AgentConfig>(() => true),\n create: async (config, _ctx) => new GooseHarness(config),\n listModels: async (registry, options) =>\n new GooseHarness({\n cwd: process.cwd(),\n sessionId: \"model-list\",\n ...registryHarnessConfig(registry, options),\n }).listModels(),\n};\n"]}
@@ -1,2 +1,2 @@
1
1
  // Auto-generated by _scripts/emit-dts-sidecars.ts — do not edit by hand.
2
- export * from "../src/drivers/omp.js";
2
+ export * from "../src/harnesses/omp.js";