@skaile/workspaces 4.11.0 → 4.13.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 (293) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/{asset-feeds-3TOP4ZKE.js → asset-feeds-AAQOGRLM.js} +14 -13
  3. package/dist/asset-feeds-AAQOGRLM.js.map +1 -0
  4. package/dist/asset-manager/catalog-deployer.js +10 -9
  5. package/dist/asset-manager/index.js +14 -13
  6. package/dist/asset-manager/installer.js +10 -9
  7. package/dist/bridge/drivers/claude-sdk.js +229 -26
  8. package/dist/bridge/drivers/claude-sdk.js.map +1 -1
  9. package/dist/bridge/drivers/codex.js +12 -11
  10. package/dist/bridge/drivers/codex.js.map +1 -1
  11. package/dist/bridge/drivers/continue.js +14 -12
  12. package/dist/bridge/drivers/continue.js.map +1 -1
  13. package/dist/bridge/drivers/echo.js +11 -8
  14. package/dist/bridge/drivers/echo.js.map +1 -1
  15. package/dist/bridge/drivers/gemini.js +10 -8
  16. package/dist/bridge/drivers/goose.js +13 -11
  17. package/dist/bridge/drivers/goose.js.map +1 -1
  18. package/dist/bridge/drivers/omp.js +8 -6
  19. package/dist/bridge/drivers/omp.js.map +1 -1
  20. package/dist/bridge/drivers/opencode.js +15 -12
  21. package/dist/bridge/drivers/opencode.js.map +1 -1
  22. package/dist/bridge/drivers/qwen.js +10 -8
  23. package/dist/bridge/drivers/qwen.js.map +1 -1
  24. package/dist/bridge/index.js +14 -13
  25. package/dist/bridge/src/cloud.d.ts.map +1 -1
  26. package/dist/bridge/src/drivers/claude-sdk.d.ts +18 -1
  27. package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
  28. package/dist/bridge/src/drivers/echo.d.ts.map +1 -1
  29. package/dist/bridge/src/drivers/omp-models-yml.d.ts.map +1 -1
  30. package/dist/bridge/src/mcp-tool-schema-filter.d.ts +44 -0
  31. package/dist/bridge/src/mcp-tool-schema-filter.d.ts.map +1 -0
  32. package/dist/bridge/src/provider-materialize/continue-config-yaml.d.ts.map +1 -1
  33. package/dist/bridge/src/provider-materialize/env-drivers.d.ts +20 -5
  34. package/dist/bridge/src/provider-materialize/env-drivers.d.ts.map +1 -1
  35. package/dist/bridge/src/provider-materialize/opencode-config.d.ts.map +1 -1
  36. package/dist/bridge/src/types.d.ts +6 -2
  37. package/dist/bridge/src/types.d.ts.map +1 -1
  38. package/dist/{chunk-MKZOK4JU.js → chunk-2FBPAR2V.js} +3 -3
  39. package/dist/{chunk-MKZOK4JU.js.map → chunk-2FBPAR2V.js.map} +1 -1
  40. package/dist/{chunk-CJXSTOGW.js → chunk-4JGTXBQB.js} +4 -4
  41. package/dist/{chunk-CJXSTOGW.js.map → chunk-4JGTXBQB.js.map} +1 -1
  42. package/dist/{chunk-OUJVFZWJ.js → chunk-4SIMGJIU.js} +4 -9
  43. package/dist/chunk-4SIMGJIU.js.map +1 -0
  44. package/dist/{chunk-AT2TJEWG.js → chunk-65VAYFIJ.js} +11 -11
  45. package/dist/chunk-65VAYFIJ.js.map +1 -0
  46. package/dist/{chunk-JM2LRJ46.js → chunk-6Y3ICAPP.js} +3 -3
  47. package/dist/{chunk-JM2LRJ46.js.map → chunk-6Y3ICAPP.js.map} +1 -1
  48. package/dist/{chunk-7IRJ4K4F.js → chunk-7IH3RKKK.js} +3 -3
  49. package/dist/{chunk-7IRJ4K4F.js.map → chunk-7IH3RKKK.js.map} +1 -1
  50. package/dist/{chunk-JECDED7B.js → chunk-7NRF7BQB.js} +5 -5
  51. package/dist/{chunk-JECDED7B.js.map → chunk-7NRF7BQB.js.map} +1 -1
  52. package/dist/{chunk-O3DHAGBO.js → chunk-A2T4WIZL.js} +6 -5
  53. package/dist/chunk-A2T4WIZL.js.map +1 -0
  54. package/dist/chunk-ALLCAFHQ.js +365 -0
  55. package/dist/chunk-ALLCAFHQ.js.map +1 -0
  56. package/dist/chunk-BDFR5MHE.js +141 -0
  57. package/dist/chunk-BDFR5MHE.js.map +1 -0
  58. package/dist/{chunk-W4IPN3DD.js → chunk-BOFL7GIF.js} +62 -10
  59. package/dist/chunk-BOFL7GIF.js.map +1 -0
  60. package/dist/{chunk-WXB6YEHZ.js → chunk-BRNGJTHH.js} +3 -3
  61. package/dist/{chunk-WXB6YEHZ.js.map → chunk-BRNGJTHH.js.map} +1 -1
  62. package/dist/chunk-C3CAXQMA.js +8 -0
  63. package/dist/chunk-C3CAXQMA.js.map +1 -0
  64. package/dist/{chunk-35PMOWAD.js → chunk-CPIAQTYM.js} +4 -4
  65. package/dist/chunk-CPIAQTYM.js.map +1 -0
  66. package/dist/{chunk-REYJKU7T.js → chunk-DHMBE5J7.js} +12 -364
  67. package/dist/chunk-DHMBE5J7.js.map +1 -0
  68. package/dist/{chunk-KSIRR5PL.js → chunk-DPLIN2RA.js} +3 -3
  69. package/dist/{chunk-KSIRR5PL.js.map → chunk-DPLIN2RA.js.map} +1 -1
  70. package/dist/{chunk-PBCNRS7Q.js → chunk-EUHB2BD2.js} +6 -6
  71. package/dist/{chunk-PBCNRS7Q.js.map → chunk-EUHB2BD2.js.map} +1 -1
  72. package/dist/{chunk-6XKQEDF7.js → chunk-FKWGIDUG.js} +6 -5
  73. package/dist/chunk-FKWGIDUG.js.map +1 -0
  74. package/dist/{chunk-ILG4BXYE.js → chunk-GZZPKAV5.js} +27 -3
  75. package/dist/chunk-GZZPKAV5.js.map +1 -0
  76. package/dist/{chunk-M5H4DWIA.js → chunk-HGPSZXZP.js} +3 -3
  77. package/dist/{chunk-M5H4DWIA.js.map → chunk-HGPSZXZP.js.map} +1 -1
  78. package/dist/{chunk-L3PZINDD.js → chunk-HXTBOZL6.js} +8 -8
  79. package/dist/{chunk-L3PZINDD.js.map → chunk-HXTBOZL6.js.map} +1 -1
  80. package/dist/{chunk-IGGHUTOW.js → chunk-HZBRHZPI.js} +4 -4
  81. package/dist/{chunk-IGGHUTOW.js.map → chunk-HZBRHZPI.js.map} +1 -1
  82. package/dist/{chunk-VLXODO37.js → chunk-IQFSXFYG.js} +3 -3
  83. package/dist/{chunk-VLXODO37.js.map → chunk-IQFSXFYG.js.map} +1 -1
  84. package/dist/{chunk-3HKYCT2M.js → chunk-JMKB7IB4.js} +4 -6
  85. package/dist/chunk-JMKB7IB4.js.map +1 -0
  86. package/dist/{chunk-S2MT6SDZ.js → chunk-KTSV5TDX.js} +107 -48
  87. package/dist/chunk-KTSV5TDX.js.map +1 -0
  88. package/dist/{chunk-IECQMSQ5.js → chunk-KUH4EKQQ.js} +4 -129
  89. package/dist/chunk-KUH4EKQQ.js.map +1 -0
  90. package/dist/{chunk-3YTFHHMI.js → chunk-LCKZCLXA.js} +3 -3
  91. package/dist/{chunk-3YTFHHMI.js.map → chunk-LCKZCLXA.js.map} +1 -1
  92. package/dist/{chunk-GXACG5ZE.js → chunk-N6XJGVSK.js} +50 -41
  93. package/dist/chunk-N6XJGVSK.js.map +1 -0
  94. package/dist/{chunk-SIGVAFRJ.js → chunk-NC7YSNBP.js} +10 -10
  95. package/dist/{chunk-SIGVAFRJ.js.map → chunk-NC7YSNBP.js.map} +1 -1
  96. package/dist/{chunk-UXUDNBJM.js → chunk-NKRAHM7T.js} +3 -3
  97. package/dist/{chunk-UXUDNBJM.js.map → chunk-NKRAHM7T.js.map} +1 -1
  98. package/dist/{chunk-WILO77HE.js → chunk-NXTLDFLA.js} +4 -4
  99. package/dist/{chunk-WILO77HE.js.map → chunk-NXTLDFLA.js.map} +1 -1
  100. package/dist/{chunk-FAI2SMFE.js → chunk-P2DLXBZK.js} +4 -4
  101. package/dist/{chunk-FAI2SMFE.js.map → chunk-P2DLXBZK.js.map} +1 -1
  102. package/dist/{chunk-2HUQUTJ3.js → chunk-PE3A6FFW.js} +4 -4
  103. package/dist/{chunk-2HUQUTJ3.js.map → chunk-PE3A6FFW.js.map} +1 -1
  104. package/dist/{chunk-DMUY5C3X.js → chunk-PHURDPQO.js} +10 -8
  105. package/dist/chunk-PHURDPQO.js.map +1 -0
  106. package/dist/{chunk-3T5DRUNZ.js → chunk-PQF3NDQH.js} +5 -5
  107. package/dist/{chunk-3T5DRUNZ.js.map → chunk-PQF3NDQH.js.map} +1 -1
  108. package/dist/{chunk-7BUZQVRR.js → chunk-Q6NDQ6BH.js} +4 -4
  109. package/dist/{chunk-7BUZQVRR.js.map → chunk-Q6NDQ6BH.js.map} +1 -1
  110. package/dist/{chunk-HO4UO25I.js → chunk-QWGSKDD7.js} +91 -7
  111. package/dist/chunk-QWGSKDD7.js.map +1 -0
  112. package/dist/{chunk-2D5BYAL6.js → chunk-RQLL7L72.js} +3 -3
  113. package/dist/{chunk-2D5BYAL6.js.map → chunk-RQLL7L72.js.map} +1 -1
  114. package/dist/{chunk-3XXQPHGL.js → chunk-T3YUSWVK.js} +4 -4
  115. package/dist/{chunk-3XXQPHGL.js.map → chunk-T3YUSWVK.js.map} +1 -1
  116. package/dist/{chunk-MMLXSVQ3.js → chunk-UOJW2DOZ.js} +5 -5
  117. package/dist/{chunk-MMLXSVQ3.js.map → chunk-UOJW2DOZ.js.map} +1 -1
  118. package/dist/{chunk-ELPR5XBG.js → chunk-V4RGCKYC.js} +5 -3
  119. package/dist/chunk-V4RGCKYC.js.map +1 -0
  120. package/dist/{chunk-UKJMQZV6.js → chunk-VOEBLPXO.js} +2 -2
  121. package/dist/chunk-VOEBLPXO.js.map +1 -0
  122. package/dist/{chunk-7SNYWCQS.js → chunk-WIQDBNMF.js} +3 -3
  123. package/dist/{chunk-7SNYWCQS.js.map → chunk-WIQDBNMF.js.map} +1 -1
  124. package/dist/{chunk-A3X4LDOD.js → chunk-WQPLZUXU.js} +6 -6
  125. package/dist/{chunk-A3X4LDOD.js.map → chunk-WQPLZUXU.js.map} +1 -1
  126. package/dist/{chunk-7ZJXFQ42.js → chunk-WZQWZJYL.js} +3 -3
  127. package/dist/{chunk-7ZJXFQ42.js.map → chunk-WZQWZJYL.js.map} +1 -1
  128. package/dist/{chunk-BXV6RLF4.js → chunk-XKPFQ3JT.js} +4 -4
  129. package/dist/{chunk-BXV6RLF4.js.map → chunk-XKPFQ3JT.js.map} +1 -1
  130. package/dist/{chunk-KLMXMW6Z.js → chunk-XPDB4O4H.js} +3 -3
  131. package/dist/{chunk-KLMXMW6Z.js.map → chunk-XPDB4O4H.js.map} +1 -1
  132. package/dist/{chunk-GUZNTYHE.js → chunk-YXUVOWEU.js} +4 -4
  133. package/dist/{chunk-GUZNTYHE.js.map → chunk-YXUVOWEU.js.map} +1 -1
  134. package/dist/{chunk-I3UWSGEB.js → chunk-ZK7DQRB2.js} +3 -3
  135. package/dist/{chunk-I3UWSGEB.js.map → chunk-ZK7DQRB2.js.map} +1 -1
  136. package/dist/{chunk-KJM7Y2FW.js → chunk-ZUOZV7CS.js} +7 -7
  137. package/dist/{chunk-KJM7Y2FW.js.map → chunk-ZUOZV7CS.js.map} +1 -1
  138. package/dist/cli/index.js +76 -69
  139. package/dist/cli/index.js.map +1 -1
  140. package/dist/cli/src/commands/migrate-legacy-entry.d.ts.map +1 -1
  141. package/dist/cli/src/commands/project.d.ts.map +1 -1
  142. package/dist/cli/src/store-auth.d.ts.map +1 -1
  143. package/dist/connectors/config.js +5 -13
  144. package/dist/connectors/index.js +22 -20
  145. package/dist/connectors/src/config.d.ts.map +1 -1
  146. package/dist/connectors/src/connector-manager.d.ts.map +1 -1
  147. package/dist/connectors/src/materialized-connectors.d.ts.map +1 -1
  148. package/dist/connectors/src/secrets.d.ts.map +1 -1
  149. package/dist/core/index.js +9 -8
  150. package/dist/core/logging.js +3 -2
  151. package/dist/core/manifest.js +2 -2
  152. package/dist/core/provider-registry-credentials.js +2 -2
  153. package/dist/core/provider-registry.js +1 -1
  154. package/dist/core/runtime-assets.js +5 -4
  155. package/dist/core/src/index.d.ts +3 -3
  156. package/dist/core/src/index.d.ts.map +1 -1
  157. package/dist/core/src/logging/create-logger.d.ts.map +1 -1
  158. package/dist/core/src/logging/index.d.ts +1 -0
  159. package/dist/core/src/logging/index.d.ts.map +1 -1
  160. package/dist/core/src/logging/redact.d.ts +33 -0
  161. package/dist/core/src/logging/redact.d.ts.map +1 -0
  162. package/dist/core/src/logging/retention-value.d.ts +7 -0
  163. package/dist/core/src/logging/retention-value.d.ts.map +1 -0
  164. package/dist/core/src/logging/retention.d.ts.map +1 -1
  165. package/dist/core/src/logging/sanitize.d.ts +11 -0
  166. package/dist/core/src/logging/sanitize.d.ts.map +1 -1
  167. package/dist/core/src/provider-registry.d.ts +22 -0
  168. package/dist/core/src/provider-registry.d.ts.map +1 -1
  169. package/dist/core/src/workspace-config.d.ts +51 -2
  170. package/dist/core/src/workspace-config.d.ts.map +1 -1
  171. package/dist/core/workspace-config.js +4 -3
  172. package/dist/deploy/index.js +9 -8
  173. package/dist/deploy/index.js.map +1 -1
  174. package/dist/discovery/index.js +3 -3
  175. package/dist/{ensure-sources-2OC2X3ZM.js → ensure-sources-PSWARJPK.js} +17 -16
  176. package/dist/ensure-sources-PSWARJPK.js.map +1 -0
  177. package/dist/factory-assets/connectors/box.js +22 -20
  178. package/dist/factory-assets/connectors/deploy.js +22 -20
  179. package/dist/factory-assets/connectors/devserver.js +22 -20
  180. package/dist/factory-assets/connectors/flow/CONNECTOR.md +4 -2
  181. package/dist/factory-assets/connectors/flow/adapter.js +22 -20
  182. package/dist/factory-assets/connectors/flow/contract/schema.d.ts +12 -0
  183. package/dist/factory-assets/connectors/flow/contract/schema.d.ts.map +1 -1
  184. package/dist/factory-assets/connectors/flow/contract.js +4 -3
  185. package/dist/factory-assets/connectors/flow/engine/node-shape.d.ts.map +1 -1
  186. package/dist/factory-assets/connectors/flow/engine.js +13 -11
  187. package/dist/factory-assets/connectors/flow/prompt-fragments.js +3 -2
  188. package/dist/factory-assets/connectors/flow/run-flow.js +24 -22
  189. package/dist/factory-assets/connectors/flow/subprompt-runner.d.ts.map +1 -1
  190. package/dist/factory-assets/connectors/flow.js +22 -20
  191. package/dist/factory-assets/connectors/git/driver.d.ts.map +1 -1
  192. package/dist/factory-assets/connectors/git.js +22 -20
  193. package/dist/factory-assets/connectors/gmail.js +22 -20
  194. package/dist/factory-assets/connectors/googledrive.js +22 -20
  195. package/dist/factory-assets/connectors/local.js +22 -20
  196. package/dist/factory-assets/connectors/mattermost.js +22 -20
  197. package/dist/factory-assets/connectors/memory.js +22 -20
  198. package/dist/factory-assets/connectors/minio.js +22 -20
  199. package/dist/factory-assets/connectors/postgres.js +22 -20
  200. package/dist/factory-assets/connectors/s3.js +22 -20
  201. package/dist/factory-assets/connectors/sharepoint.js +22 -20
  202. package/dist/factory-assets/connectors/sqlite.js +22 -20
  203. package/dist/factory-assets/connectors/static-server.js +22 -20
  204. package/dist/factory-assets/connectors/tunnel.js +22 -20
  205. package/dist/factory-assets/connectors/webdav.js +22 -20
  206. package/dist/factory-assets/connectors/xstate-store.js +22 -20
  207. package/dist/factory-assets/connectors/xstate.js +22 -20
  208. package/dist/flows-7EB63Q2Q.js +24 -0
  209. package/dist/{flows-H6FL4NZU.js.map → flows-7EB63Q2Q.js.map} +1 -1
  210. package/dist/{helpers-RPJUSSG3.js → helpers-LHHGL2NL.js} +17 -16
  211. package/dist/{helpers-RPJUSSG3.js.map → helpers-LHHGL2NL.js.map} +1 -1
  212. package/dist/library/index.js +12 -11
  213. package/dist/library/install.js +1 -15
  214. package/dist/library/src/install/install-from-manifest.d.ts.map +1 -1
  215. package/dist/{library-publish-AAD6GTIF.js → library-publish-4SBO437O.js} +24 -22
  216. package/dist/library-publish-4SBO437O.js.map +1 -0
  217. package/dist/open-library-SF2F7NDS.js +37 -0
  218. package/dist/{open-library-HDOM4MLS.js.map → open-library-SF2F7NDS.js.map} +1 -1
  219. package/dist/paths-IK6Y4OIU.js +20 -0
  220. package/dist/{paths-RL6NZW5X.js.map → paths-IK6Y4OIU.js.map} +1 -1
  221. package/dist/{plugin-store-ZTAJCMTY.js → plugin-store-LUJ4GXSO.js} +11 -10
  222. package/dist/plugin-store-LUJ4GXSO.js.map +1 -0
  223. package/dist/{project-2B52FKAY.js → project-ZHPOPJBE.js} +18 -17
  224. package/dist/{project-2B52FKAY.js.map → project-ZHPOPJBE.js.map} +1 -1
  225. package/dist/resolver/index.js +10 -9
  226. package/dist/run-group-engine/index.js.map +1 -1
  227. package/dist/run-group-engine/src/rollup.d.ts.map +1 -1
  228. package/dist/runner/index.js +33 -31
  229. package/dist/runner/src/capability-registry.d.ts +13 -1
  230. package/dist/runner/src/capability-registry.d.ts.map +1 -1
  231. package/dist/runner/src/codex-init.d.ts.map +1 -1
  232. package/dist/runner/src/compaction/orchestrator.d.ts.map +1 -1
  233. package/dist/runner/src/compaction/strategy.d.ts +8 -5
  234. package/dist/runner/src/compaction/strategy.d.ts.map +1 -1
  235. package/dist/runner/src/lifecycle-handler.d.ts.map +1 -1
  236. package/dist/runner/src/log-content.d.ts +22 -0
  237. package/dist/runner/src/log-content.d.ts.map +1 -0
  238. package/dist/runner/src/logging-bootstrap.d.ts +6 -1
  239. package/dist/runner/src/logging-bootstrap.d.ts.map +1 -1
  240. package/dist/runner/src/serve.d.ts.map +1 -1
  241. package/dist/runner/src/session-builder.d.ts.map +1 -1
  242. package/dist/sdk/asset-manager.js +14 -13
  243. package/dist/sdk/bridge.js +14 -13
  244. package/dist/sdk/core.js +9 -8
  245. package/dist/sdk/flow.js +13 -11
  246. package/dist/sdk/index.js +33 -31
  247. package/dist/sdk/index.js.map +1 -1
  248. package/dist/sdk/resolver.js +10 -9
  249. package/dist/sdk/runner.js +33 -31
  250. package/dist/{setup-MVBITSVT.js → setup-3NXXR7SH.js} +23 -22
  251. package/dist/setup-3NXXR7SH.js.map +1 -0
  252. package/dist/skills-YB5RHUAT.js +24 -0
  253. package/dist/{skills-Y6MU2NRI.js.map → skills-YB5RHUAT.js.map} +1 -1
  254. package/dist/source-C2OYNI3T.js +38 -0
  255. package/dist/{source-53PY7DXF.js.map → source-C2OYNI3T.js.map} +1 -1
  256. package/dist/{source-manifest-publish-ALRZKEBO.js → source-manifest-publish-BKS763DB.js} +25 -23
  257. package/dist/source-manifest-publish-BKS763DB.js.map +1 -0
  258. package/dist/tui/index.js +33 -31
  259. package/dist/tui/index.js.map +1 -1
  260. package/dist/types/src/manifests/preset.d.ts +5 -5
  261. package/dist/workspace-plugin/adapters/mcp.js +15 -14
  262. package/dist/workspace-plugin/adapters/omp.js +7 -7
  263. package/dist/workspace-plugin/adapters/omp.js.map +1 -1
  264. package/dist/workspace-plugin/index.js +4 -3
  265. package/dist/workspace-plugin/src/adapters/omp.d.ts.map +1 -1
  266. package/package.json +3 -1
  267. package/dist/asset-feeds-3TOP4ZKE.js.map +0 -1
  268. package/dist/chunk-35PMOWAD.js.map +0 -1
  269. package/dist/chunk-3HKYCT2M.js.map +0 -1
  270. package/dist/chunk-6XKQEDF7.js.map +0 -1
  271. package/dist/chunk-AT2TJEWG.js.map +0 -1
  272. package/dist/chunk-DMUY5C3X.js.map +0 -1
  273. package/dist/chunk-ELPR5XBG.js.map +0 -1
  274. package/dist/chunk-GXACG5ZE.js.map +0 -1
  275. package/dist/chunk-HO4UO25I.js.map +0 -1
  276. package/dist/chunk-IECQMSQ5.js.map +0 -1
  277. package/dist/chunk-ILG4BXYE.js.map +0 -1
  278. package/dist/chunk-O3DHAGBO.js.map +0 -1
  279. package/dist/chunk-OUJVFZWJ.js.map +0 -1
  280. package/dist/chunk-REYJKU7T.js.map +0 -1
  281. package/dist/chunk-S2MT6SDZ.js.map +0 -1
  282. package/dist/chunk-UKJMQZV6.js.map +0 -1
  283. package/dist/chunk-W4IPN3DD.js.map +0 -1
  284. package/dist/ensure-sources-2OC2X3ZM.js.map +0 -1
  285. package/dist/flows-H6FL4NZU.js +0 -23
  286. package/dist/library-publish-AAD6GTIF.js.map +0 -1
  287. package/dist/open-library-HDOM4MLS.js +0 -35
  288. package/dist/paths-RL6NZW5X.js +0 -19
  289. package/dist/plugin-store-ZTAJCMTY.js.map +0 -1
  290. package/dist/setup-MVBITSVT.js.map +0 -1
  291. package/dist/skills-Y6MU2NRI.js +0 -23
  292. package/dist/source-53PY7DXF.js +0 -36
  293. package/dist/source-manifest-publish-ALRZKEBO.js.map +0 -1
@@ -1,133 +1,8 @@
1
1
  import { classifyGenericErrorMessage } from './chunk-GAH4YRCI.js';
2
- import { getProviderPreset, registryCredentialEnv, providerCredentialEnvName, AgentDriver, BUILTIN_DRIVER_CATALOG } from './chunk-3T5DRUNZ.js';
3
- import { mergeRegistries, resolveEntryBaseUrl, registryEntries, isEntryEnabled, parseModelRef } from './chunk-ILG4BXYE.js';
2
+ import { AgentDriver } from './chunk-PQF3NDQH.js';
4
3
  import { spawn } from 'child_process';
5
4
  import { createInterface } from 'readline';
6
5
 
7
- // bridge/src/provider-materialize/env-drivers.ts
8
- function resolveEnvDriverSession(config, processEnv = process.env) {
9
- return {
10
- registry: config.registry ?? mergeRegistries([]),
11
- lookupEnv: { ...processEnv, ...config.env },
12
- ...config.modelRef ? { modelRef: config.modelRef } : {},
13
- ...config.roles ? { roles: config.roles } : {}
14
- };
15
- }
16
- function entrySurface(entry) {
17
- if (entry.surface) return entry.surface;
18
- return entry.preset ? getProviderPreset(entry.preset)?.surface : void 0;
19
- }
20
- function entryBaseUrl(entry) {
21
- const resolved = resolveEntryBaseUrl(entry);
22
- if (resolved) return resolved;
23
- return entry.preset ? getProviderPreset(entry.preset)?.base_url : void 0;
24
- }
25
- function isStockCatalogEndpoint(entry) {
26
- const preset = entry.preset ? getProviderPreset(entry.preset) : void 0;
27
- return preset !== void 0 && entryBaseUrl(entry) === preset.base_url;
28
- }
29
- function backendProviderName(providerId, entry) {
30
- const preset = entry.preset ? getProviderPreset(entry.preset) : void 0;
31
- if (!preset || !isStockCatalogEndpoint(entry)) return providerId;
32
- return preset.id;
33
- }
34
- function selectableEntries(registry) {
35
- return registryEntries(registry).filter(
36
- (pair) => (pair[1].kind === "llm" || pair[1].kind === "embed") && isEntryEnabled(pair[1])
37
- );
38
- }
39
- function entryModelIds(entry) {
40
- const logicalIds = [
41
- ...Object.keys(entry.model_map ?? {}),
42
- ...Object.keys(entry.capabilities ?? {}).filter((id) => !(id in (entry.model_map ?? {})))
43
- ];
44
- return logicalIds.map((id) => [id, entry.model_map?.[id] ?? id]);
45
- }
46
- function describeBinding(providerId, entry, modelId, providerModelId, warnings) {
47
- const surface = entrySurface(entry);
48
- const baseUrl = entryBaseUrl(entry);
49
- return {
50
- providerId,
51
- entry,
52
- ...modelId === void 0 ? {} : { modelId },
53
- ...providerModelId === void 0 ? {} : { providerModelId },
54
- ...surface ? { surface } : {},
55
- ...baseUrl ? { baseUrl } : {},
56
- backendProviderId: backendProviderName(providerId, entry),
57
- warnings
58
- };
59
- }
60
- function resolveRegistryBinding(session) {
61
- const entries = selectableEntries(session.registry);
62
- if (entries.length === 0) return void 0;
63
- const selector = session.modelRef?.trim();
64
- if (!selector) {
65
- const [providerId, entry] = entries[0];
66
- return describeBinding(providerId, entry, void 0, void 0, []);
67
- }
68
- const named = entries.find(([id]) => id === selector);
69
- if (named) return describeBinding(named[0], named[1], void 0, void 0, []);
70
- const resolved = parseModelRef(selector, session.registry, session.roles);
71
- if (!resolved) return void 0;
72
- const match = entries.find(([id]) => id === resolved.providerId);
73
- if (!match) return void 0;
74
- return describeBinding(
75
- match[0],
76
- match[1],
77
- resolved.modelId,
78
- resolved.providerModelId,
79
- resolved.warnings
80
- );
81
- }
82
- function credentialsForEveryProvider(session) {
83
- return registryCredentialEnv(session.registry, { env: session.lookupEnv });
84
- }
85
- function assertDriverSpeaksSurface(driverId, productName, binding) {
86
- const supported = BUILTIN_DRIVER_CATALOG[driverId]?.surfaces;
87
- if (!supported || supported.length === 0) return;
88
- const surface = binding.surface;
89
- if (!surface || supported.includes(surface)) return;
90
- throw new Error(
91
- `${productName} cannot speak the '${surface}' surface of AI provider entry '${binding.providerId}'. ${productName} speaks: ${supported.join(", ")}. Point this session's model at an entry with one of those surfaces, or run it on a driver that speaks '${surface}'.`
92
- );
93
- }
94
- function registryModelEntries(session) {
95
- const out = [];
96
- const seen = /* @__PURE__ */ new Set();
97
- for (const [providerId, entry] of selectableEntries(session.registry)) {
98
- const backendId = backendProviderName(providerId, entry);
99
- const label = entry.label ?? providerId;
100
- for (const [logicalId, providerModelId] of entryModelIds(entry)) {
101
- const id = `${backendId}/${providerModelId}`;
102
- if (seen.has(id)) continue;
103
- seen.add(id);
104
- out.push({ id, name: `${label} ${logicalId}` });
105
- }
106
- }
107
- return out;
108
- }
109
- function bindSingleProviderEntry(driverId, productName, session) {
110
- const binding = resolveRegistryBinding(session);
111
- if (!binding) return void 0;
112
- assertDriverSpeaksSurface(driverId, productName, binding);
113
- return binding;
114
- }
115
- function backendModelSelector(binding) {
116
- if (!binding.providerModelId) return void 0;
117
- return `${binding.backendProviderId}/${binding.providerModelId}`;
118
- }
119
- function continueRoleBinding(session) {
120
- const binding = resolveRegistryBinding(session);
121
- if (!binding) return void 0;
122
- return {
123
- role: "chat",
124
- providerId: binding.providerId,
125
- provider: binding.backendProviderId,
126
- ...binding.providerModelId ? { model: binding.providerModelId } : {},
127
- ...binding.baseUrl ? { apiBase: binding.baseUrl } : {},
128
- apiKeyEnv: providerCredentialEnvName(binding.providerId)
129
- };
130
- }
131
6
  var SubprocessCliDriver = class extends AgentDriver {
132
7
  /** `"jsonl"` streams events line-by-line; `"buffered"` parses all stdout once on exit. */
133
8
  mode = "jsonl";
@@ -550,6 +425,6 @@ function extractCost(json) {
550
425
  return typeof c === "number" ? c : void 0;
551
426
  }
552
427
 
553
- export { SubprocessCliDriver, backendModelSelector, backendProviderName, bindSingleProviderEntry, continueRoleBinding, credentialsForEveryProvider, entryBaseUrl, entryModelIds, entrySurface, extractCost, extractText, extractTokens, isStockCatalogEndpoint, registryModelEntries, resolveEnvDriverSession, resolveRegistryBinding, selectableEntries };
554
- //# sourceMappingURL=chunk-IECQMSQ5.js.map
555
- //# sourceMappingURL=chunk-IECQMSQ5.js.map
428
+ export { SubprocessCliDriver, extractCost, extractText, extractTokens };
429
+ //# sourceMappingURL=chunk-KUH4EKQQ.js.map
430
+ //# sourceMappingURL=chunk-KUH4EKQQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../bridge/src/drivers/_subprocess-cli.ts"],"names":[],"mappings":";;;;;AAqCO,IAAe,mBAAA,GAAf,cAA2C,WAAA,CAAY;AAAA;AAAA,EAezC,IAAA,GAA6B,OAAA;AAAA,EAEtC,MAAA;AAAA,EAEF,IAAA,GAA4B,IAAA;AAAA,EAC5B,EAAA,GAAuB,IAAA;AAAA,EACvB,eAAyB,EAAC;AAAA,EAC1B,YAAA,GAAe,EAAA;AAAA,EACf,OAAA,GAAU,KAAA;AAAA;AAAA,EAGV,QAAA,GAAW,EAAA;AAAA,EACX,eAAA,GAAkB,KAAA;AAAA,EAClB,qBAAqC,EAAC;AAAA,EACtC,SAAA,GAAY,KAAA;AAAA,EACZ,QAAA,GAAW,KAAA;AAAA,EACX,WAAA,GAAmC,IAAA;AAAA,EACnC,UAAA,GAA4C,IAAA;AAAA,EAE1C,UAAA;AAAA,EACA,WAAA,GAAiC,IAAA;AAAA,EAE3C,YAAY,MAAA,EAAqB;AAC/B,IAAA,KAAA,EAAM;AACN,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA,EAEA,IAAa,gBAAA,GAAuC;AAClD,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAAA,EAES,QAAA,GAA+B;AACtC,IAAA,OAAO,KAAK,MAAA,CAAO,KAAA;AAAA,EACrB;AAAA,EAES,aAAA,GAAmC;AAC1C,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA,EAES,YAAY,KAAA,EAA0E;AAC7F,IAAA,IAAI,MAAM,KAAA,KAAU,MAAA,EAAW,IAAA,CAAK,MAAA,CAAO,QAAQ,KAAA,CAAM,KAAA;AACzD,IAAA,IAAI,MAAM,QAAA,KAAa,MAAA,EAAW,IAAA,CAAK,MAAA,CAAO,WAAW,KAAA,CAAM,QAAA;AAC/D,IAAA,IAAI,MAAM,MAAA,KAAW,MAAA,EAAW,IAAA,CAAK,MAAA,CAAO,SAAS,KAAA,CAAM,MAAA;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAAA,EACjB;AAAA,EAEA,IAAI,SAAA,GAAqB;AACvB,IAAA,OAAO,IAAA,CAAK,IAAA,KAAS,IAAA,IAAQ,CAAC,KAAK,IAAA,CAAK,MAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,OAAO,OAAA,EAAgC;AAC3C,IAAA,IAAI,IAAA,CAAK,MAAM,MAAM,IAAI,MAAM,CAAA,EAAG,IAAA,CAAK,WAAW,CAAA,yBAAA,CAA2B,CAAA;AAC7E,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAS,MAAM,KAAK,KAAA,EAAM;AAEpC,IAAA,IAAA,CAAK,QAAA,GAAW,EAAA;AAChB,IAAA,IAAA,CAAK,eAAA,GAAkB,KAAA;AACvB,IAAA,IAAA,CAAK,qBAAqB,EAAC;AAC3B,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,IAAA,IAAA,CAAK,QAAA,GAAW,KAAA;AAChB,IAAA,IAAA,CAAK,eAAe,EAAC;AACrB,IAAA,IAAA,CAAK,YAAA,GAAe,EAAA;AACpB,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AAEnB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA;AAC3C,IAAA,MAAM,cAAc,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,SAAS,CAAA,WAAA,CAAa,CAAA;AAC9D,IAAA,MAAM,OAAA,GAAU,QAAQ,GAAA,CAAI,CAAA,EAAG,KAAK,SAAS,CAAA,eAAA,CAAiB,IACzD,OAAA,CAAQ,GAAA,CAAI,GAAG,IAAA,CAAK,SAAS,iBAAiB,CAAA,CAAa,KAAA,CAAM,KAAK,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,GACvF,EAAC;AACL,IAAA,MAAM,GAAA,GAAM,eAAe,IAAA,CAAK,UAAA;AAChC,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,OAAA,EAAS,GAAG,KAAK,SAAA,CAAU,QAAA,EAAU,IAAA,CAAK,UAAU,CAAC,CAAA;AACtE,IAAA,MAAM,GAAA,GAAM,KAAK,QAAA,EAAS;AAE1B,IAAA,OAAO,IAAI,OAAA,CAAc,CAAC,OAAA,EAAS,MAAA,KAAW;AAC5C,MAAA,IAAA,CAAK,WAAA,GAAc,OAAA;AACnB,MAAA,IAAA,CAAK,UAAA,GAAa,MAAA;AAClB,MAAA,IAAA,CAAK,GAAA,CAAI,KAAK,cAAA,EAAgB;AAAA,QAC5B,GAAA;AAAA,QACA,GAAA,EAAK,KAAK,MAAA,CAAO,GAAA;AAAA,QACjB,MAAA,EAAQ,OAAA,CAAQ,IAAA,CAAK,UAAU;AAAA,OAChC,CAAA;AAED,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,GAAA,EAAK,IAAA,EAAM;AAAA,QAC5B,GAAA,EAAK,KAAK,MAAA,CAAO,GAAA;AAAA,QACjB,GAAA;AAAA,QACA,KAAA,EAAO,CAAC,QAAA,EAAU,MAAA,EAAQ,MAAM;AAAA,OACjC,CAAA;AACD,MAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,MAAA,MAAM,WAAA,GAAc,IAAA;AAEpB,MAAA,WAAA,CAAY,EAAA,CAAG,OAAA,EAAS,CAAC,GAAA,KAAe;AACtC,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,oBAAA,CAAqB,GAA4B,CAAA;AACrE,QAAA,IAAA,CAAK,IAAI,KAAA,CAAM,aAAA,EAAe,GAAA,EAAK,EAAE,QAAQ,CAAA;AAC7C,QAAA,IAAA,CAAK,UAAU,MAAM,CAAA;AACrB,QAAA,IAAA,CAAK,IAAA,CAAK,aAAA,EAAe,EAAE,IAAA,EAAM,aAAkC,CAAA;AACnE,QAAA,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,MAAA,CAAO,IAAI,KAAA,CAAM,MAAA,CAAO,OAAO,CAAA,EAAG,EAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,MACxE,CAAC,CAAA;AAED,MAAA,IAAI,KAAK,MAAA,EAAQ;AACf,QAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,UAAA,MAAM,KAAK,eAAA,CAAgB,EAAE,KAAA,EAAO,IAAA,CAAK,QAAQ,CAAA;AACjD,UAAA,IAAA,CAAK,EAAA,GAAK,EAAA;AACV,UAAC,EAAA,CAA+B,GAAG,MAAA,EAAQ,CAAC,SAAiB,IAAA,CAAK,YAAA,CAAa,IAAI,CAAC,CAAA;AAAA,QACtF,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,MAAA,CAAO,YAAY,MAAM,CAAA;AAC9B,UAAA,IAAA,CAAK,MAAA,CAAO,EAAA,CAAG,MAAA,EAAQ,CAAC,KAAA,KAAkB;AACxC,YAAA,IAAA,CAAK,YAAA,IAAgB,KAAA;AAAA,UACvB,CAAC,CAAA;AAAA,QACH;AAAA,MACF;AAEA,MAAA,IAAI,KAAK,MAAA,EAAQ;AACf,QAAA,MAAM,WAAW,eAAA,CAAgB,EAAE,KAAA,EAAO,IAAA,CAAK,QAAQ,CAAA;AACvD,QAAC,QAAA,CAAqC,EAAA,CAAG,MAAA,EAAQ,CAAC,IAAA,KAAiB;AACjE,UAAA,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,QAAA,EAAU,EAAE,MAAM,CAAA;AACjC,UAAA,IAAA,CAAK,YAAA,CAAa,KAAK,IAAI,CAAA;AAC3B,UAAA,IAAI,KAAK,YAAA,CAAa,MAAA,GAAS,EAAA,EAAI,IAAA,CAAK,aAAa,KAAA,EAAM;AAAA,QAC7D,CAAC,CAAA;AAAA,MACH;AAEA,MAAA,WAAA,CAAY,EAAA,CAAG,MAAA,EAAQ,CAAC,IAAA,EAAqB,MAAA,KAAkC;AAC7E,QAAA,IAAA,CAAK,IAAI,IAAA,CAAK,YAAA,EAAc,EAAE,IAAA,EAAM,QAAQ,CAAA;AAC5C,QAAA,IAAA,CAAK,MAAA,CAAO,MAAM,MAAM,CAAA;AAAA,MAC1B,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,IAAA,IAAA,CAAK,IAAA,EAAM,KAAK,SAAS,CAAA;AAAA,EAC3B;AAAA,EAEA,IAAA,GAAa;AACX,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,IAAA,IAAA,CAAK,IAAA,EAAM,KAAK,SAAS,CAAA;AACzB,IAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,EACf;AAAA,EAEA,MAAM,YAAA,GAA8B;AAClC,IAAA,IAAA,CAAK,IAAA,EAAK;AACV,IAAA,IAAA,CAAK,UAAA,GAAa,MAAA;AAClB,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AAAA,EACrB;AAAA;AAAA,EAWU,WAAW,KAAA,EAAsB;AAAA,EAAC;AAAA;AAAA,EAGlC,eAAe,IAAA,EAAoB;AAAA,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUpC,YAAA,CAAa,MAAqB,MAAA,EAAkD;AAC5F,IAAA,IAAI,SAAS,CAAA,IAAM,IAAA,KAAS,IAAA,IAAQ,MAAA,KAAW,MAAO,OAAO,IAAA;AAC7D,IAAA,MAAM,OAAO,IAAA,CAAK,YAAA,CAAa,MAAM,GAAG,CAAA,CAAE,KAAK,IAAI,CAAA;AACnD,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,CAAA,EAAG,IAAA,CAAK,WAAW,CAAA,kBAAA,EAAqB,IAAA,IAAQ,MAAM,CAAA,EAAG,IAAA,GAAO,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AAAA,MACzF,QAAA,EAAU,SAAA;AAAA,MACV,SAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAM,IAAA,IAAQ,CAAA,IAAA,EAAO,IAAA,CAAK,WAAW,CAAA,mDAAA;AAAA,KACvC;AAAA,EACF;AAAA;AAAA;AAAA,EAKU,cAAc,OAAA,EAAyB;AAC/C,IAAA,OAAO,KAAK,MAAA,CAAO,YAAA,GAAe,CAAA,EAAG,IAAA,CAAK,OAAO,YAAY;;AAAA;;AAAA,EAAc,OAAO,CAAA,CAAA,GAAK,OAAA;AAAA,EACzF;AAAA,EAEU,mBAAmB,QAAA,EAAwB;AACnD,IAAA,IAAI,CAAC,KAAK,eAAA,EAAiB;AACzB,MAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AACvB,MAAA,IAAA,CAAK,QAAA,GAAW,EAAA;AAChB,MAAA,IAAA,CAAK,KAAK,aAAA,EAAe;AAAA,QACvB,IAAA,EAAM,eAAA;AAAA,QACN,OAAA,EAAS,YAAY,EAAE;AAAA,OACH,CAAA;AAAA,IACxB;AACA,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,UAAA,CAAW,IAAA,CAAK,QAAQ,CAAA,GAC3C,QAAA,CAAS,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,GACnC,QAAA;AACJ,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,IAAA,CAAK,KAAK,aAAA,EAAe;AAAA,QACvB,IAAA,EAAM,gBAAA;AAAA,QACN,OAAA,EAAS,YAAY,QAAQ,CAAA;AAAA,QAC7B,UAAA,EAAY;AAAA,OACQ,CAAA;AAAA,IACxB;AAAA,EACF;AAAA,EAEU,iBAAiB,QAAA,EAAyB;AAClD,IAAA,IAAI,CAAC,KAAK,eAAA,EAAiB;AAC3B,IAAA,MAAM,IAAA,GAAO,YAAY,IAAA,CAAK,QAAA;AAC9B,IAAA,IAAA,CAAK,KAAK,aAAA,EAAe;AAAA,MACvB,IAAA,EAAM,aAAA;AAAA,MACN,OAAA,EAAS,YAAY,IAAI;AAAA,KACL,CAAA;AACtB,IAAA,IAAA,CAAK,eAAA,GAAkB,KAAA;AACvB,IAAA,IAAA,CAAK,QAAA,GAAW,EAAA;AAAA,EAClB;AAAA,EAEU,YAAA,CAAa,MAAc,KAAA,EAAsB;AACzD,IAAA,IAAA,CAAK,KAAK,aAAA,EAAe;AAAA,MACvB,IAAA,EAAM,WAAA;AAAA,MACN,IAAA;AAAA,MACA,IAAA,EAAM,EAAE,IAAA,EAAK;AAAA,MACb;AAAA,KACoB,CAAA;AAAA,EACxB;AAAA,EAEU,cAAA,CAAe,IAAA,EAAc,IAAA,EAAe,OAAA,GAAU,KAAA,EAAa;AAC3E,IAAA,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,OAAA,EAAS,EAAA,EAAI,IAAA,EAAM,OAAA,EAAS,CAAA;AACzF,IAAA,IAAA,CAAK,KAAK,aAAA,EAAe;AAAA,MACvB,IAAA,EAAM,oBAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACU,CAAA;AAAA,EACxB;AAAA,EAEQ,gBAAA,GAAyB;AAC/B,IAAA,IAAI,IAAA,CAAK,kBAAA,CAAmB,MAAA,KAAW,CAAA,EAAG;AAC1C,IAAA,IAAA,CAAK,KAAK,aAAA,EAAe;AAAA,MACvB,IAAA,EAAM,UAAA;AAAA,MACN,WAAA,EAAa,CAAC,GAAG,IAAA,CAAK,kBAAkB;AAAA,KACpB,CAAA;AACtB,IAAA,IAAA,CAAK,qBAAqB,EAAC;AAAA,EAC7B;AAAA,EAEU,WAAW,IAAA,EAKZ;AACP,IAAA,IAAA,CAAK,gBAAA,EAAiB;AACtB,IAAA,IAAA,CAAK,gBAAA,EAAiB;AACtB,IAAA,IAAI,IAAA,CAAK,MAAA,EAAQ,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,MAAA;AACzC,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,IAAA,IAAA,CAAK,KAAK,aAAA,EAAe;AAAA,MACvB,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,KAAK,OAAA,IAAW,SAAA;AAAA,MACzB,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,OAAA,EAAS,KAAK,OAAA,IAAW,CAAA;AAAA,MACzB,GAAI,KAAK,MAAA,GAAS,EAAE,QAAQ,IAAA,CAAK,MAAA,KAAW;AAAC,KACzB,CAAA;AAAA,EACxB;AAAA,EAEU,SAAA,CAAU,MAAA,EAAoB,KAAA,GAAQ,KAAA,EAAa;AAC3D,IAAA,IAAA,CAAK,KAAK,aAAA,EAAe;AAAA,MACvB,IAAA,EAAM,OAAA;AAAA,MACN,OAAO,MAAA,CAAO,OAAA;AAAA,MACd,MAAA;AAAA,MACA;AAAA,KACoB,CAAA;AAAA,EACxB;AAAA,EAEU,cAAA,CAAe,IAAa,IAAA,EAAqB;AACzD,IAAA,IAAI,CAAC,EAAA,IAAM,EAAA,KAAO,IAAA,CAAK,UAAA,EAAY;AACnC,IAAA,IAAA,CAAK,UAAA,GAAa,EAAA;AAClB,IAAA,IAAA,CAAK,KAAK,aAAA,EAAe;AAAA,MACvB,IAAA,EAAM,cAAA;AAAA,MACN,eAAA,EAAiB,EAAA;AAAA,MACjB,GAAI,IAAA,GAAO,EAAE,WAAA,EAAa,IAAA,KAAS;AAAC,KAChB,CAAA;AAAA,EACxB;AAAA;AAAA,EAGU,gBAAgB,OAAA,EAA6B;AACrD,IAAA,MAAM,OAAA,GAAU,4BAA4B,OAAO,CAAA;AACnD,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO;AAAA,QACL,OAAA;AAAA,QACA,QAAA,EAAU,SAAA;AAAA,QACV,SAAA,EAAW,IAAA;AAAA,QACX,IAAA,EAAM,CAAA,cAAA,EAAiB,IAAA,CAAK,WAAW,CAAA,sCAAA;AAAA,OACzC;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GACJ,QAAQ,QAAA,KAAa,MAAA,GACjB,4CAA4C,IAAA,CAAK,WAAW,MAC5D,OAAA,CAAQ,QAAA,KAAa,eACnB,CAAA,EAAG,IAAA,CAAK,WAAW,CAAA,wDAAA,CAAA,GACnB,OAAA,CAAQ,aAAa,OAAA,GACnB,wGAAA,GACA,CAAA,0CAAA,EAA6C,IAAA,CAAK,WAAW,CAAA,CAAA,CAAA;AACvE,IAAA,OAAO,EAAE,SAAS,QAAA,EAAU,OAAA,CAAQ,UAAU,SAAA,EAAW,OAAA,CAAQ,WAAW,IAAA,EAAK;AAAA,EACnF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBU,OAAA,CAAQ,SAAA,GAAsB,EAAC,EAA2B;AAClE,IAAA,MAAM,MAA8B,EAAC;AACrC,IAAA,MAAM,QAAA,GAAW,CAAC,MAAA,EAAQ,MAAA,EAAQ,QAAQ,UAAA,EAAY,mBAAA,EAAqB,GAAG,SAAS,CAAA;AACvF,IAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,MAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AACzB,MAAA,IAAI,CAAA,KAAM,MAAA,EAAW,GAAA,CAAI,GAAG,CAAA,GAAI,CAAA;AAAA,IAClC;AACA,IAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtD,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC/B,MAAA,IAAI,GAAA,CAAI,UAAA,CAAW,CAAA,EAAG,IAAA,CAAK,SAAS,UAAU,CAAA,IAAK,GAAA,CAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC9E,QAAA,GAAA,CAAI,GAAG,CAAA,GAAI,KAAA;AAAA,MACb;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,OAAO,UAAA,EAAY;AAC1B,MAAA,GAAA,CAAI,eAAA,GAAkB,CAAA,QAAA,EAAW,IAAA,CAAK,MAAA,CAAO,UAAU,CAAA,qCAAA,CAAA;AAAA,IACzD;AACA,IAAA,IAAI,IAAA,CAAK,OAAO,GAAA,EAAK,MAAA,CAAO,OAAO,GAAA,EAAK,IAAA,CAAK,OAAO,GAAG,CAAA;AACvD,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA,EAIQ,aAAa,IAAA,EAAoB;AACvC,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,EAAK,EAAG;AAClB,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI;AACF,MAAA,IAAA,GAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,IACxB,CAAA,CAAA,MAAQ;AACN,MAAA,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,sBAAA,EAAwB,EAAE,MAAM,CAAA;AAC/C,MAAA;AAAA,IACF;AACA,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,WAAW,IAAI,CAAA;AAAA,IACtB,SAAS,GAAA,EAAK;AACZ,MAAA,IAAA,CAAK,GAAA,CAAI,KAAK,kBAAA,EAAoB,EAAE,OAAO,MAAA,CAAO,GAAG,GAAG,CAAA;AAAA,IAC1D;AAAA,EACF;AAAA,EAEQ,MAAA,CAAO,MAAqB,MAAA,EAAqC;AACvE,IAAA,IAAA,CAAK,OAAA,EAAQ;AAEb,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,IAAA,CAAK,gBAAA,EAAiB;AACtB,MAAA,IAAA,CAAK,gBAAA,EAAiB;AACtB,MAAA,IAAA,CAAK,IAAA,CAAK,aAAA,EAAe,EAAE,IAAA,EAAM,aAAkC,CAAA;AACnE,MAAA,IAAA,CAAK,aAAA,EAAc;AACnB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,KAAK,IAAA,KAAS,UAAA,KAAe,IAAA,KAAS,CAAA,IAAK,SAAS,IAAA,CAAA,EAAO;AAC7D,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,cAAA,CAAe,KAAK,YAAY,CAAA;AAAA,MACvC,SAAS,GAAA,EAAK;AACZ,QAAA,IAAA,CAAK,GAAA,CAAI,KAAK,sBAAA,EAAwB,EAAE,OAAO,MAAA,CAAO,GAAG,GAAG,CAAA;AAAA,MAC9D;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,YAAA,CAAa,IAAA,EAAM,MAAM,CAAA;AAC9C,IAAA,IAAI,OAAA,IAAW,CAAC,IAAA,CAAK,SAAA,EAAW;AAC9B,MAAA,IAAA,CAAK,gBAAA,EAAiB;AACtB,MAAA,IAAA,CAAK,gBAAA,EAAiB;AACtB,MAAA,IAAA,CAAK,UAAU,OAAO,CAAA;AACtB,MAAA,IAAA,CAAK,IAAA,CAAK,aAAA,EAAe,EAAE,IAAA,EAAM,aAAkC,CAAA;AACnE,MAAA,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,MAAA,CAAO,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG,EAAE,MAAA,EAAQ,OAAA,EAAS,CAAC,CAAA;AAChF,MAAA;AAAA,IACF;AAIA,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW,IAAA,CAAK,WAAW,EAAE,OAAA,EAAS,kBAAkB,CAAA;AAAA,SAC7D;AACH,MAAA,IAAA,CAAK,gBAAA,EAAiB;AACtB,MAAA,IAAA,CAAK,gBAAA,EAAiB;AAAA,IACxB;AACA,IAAA,IAAA,CAAK,IAAA,CAAK,aAAA,EAAe,EAAE,IAAA,EAAM,aAAkC,CAAA;AACnE,IAAA,IAAA,CAAK,aAAA,EAAc;AAAA,EACrB;AAAA,EAEQ,aAAA,GAAsB;AAC5B,IAAA,MAAM,UAAU,IAAA,CAAK,WAAA;AACrB,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAClB,IAAA,OAAA,IAAU;AAAA,EACZ;AAAA,EAEQ,aAAa,GAAA,EAAkB;AACrC,IAAA,MAAM,SAAS,IAAA,CAAK,UAAA;AACpB,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAClB,IAAA,MAAA,GAAS,GAAG,CAAA;AAAA,EACd;AAAA,EAEQ,OAAA,GAAgB;AACtB,IAAA,IAAA,CAAK,IAAI,KAAA,EAAM;AACf,IAAA,IAAA,CAAK,EAAA,GAAK,IAAA;AACV,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EACd;AAAA,EAEQ,qBAAqB,GAAA,EAAwC;AACnE,IAAA,IAAI,GAAA,CAAI,SAAS,QAAA,EAAU;AACzB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,CAAA,EAAG,IAAA,CAAK,UAAU,CAAA,kBAAA,CAAA;AAAA,QAC3B,QAAA,EAAU,QAAA;AAAA,QACV,SAAA,EAAW,KAAA;AAAA,QACX,IAAA,EAAM,KAAK,WAAA;AAAY,OACzB;AAAA,IACF;AACA,IAAA,IAAI,GAAA,CAAI,SAAS,QAAA,EAAU;AACzB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,CAAA,0BAAA,EAA6B,IAAA,CAAK,UAAU,CAAA,CAAA;AAAA,QACrD,QAAA,EAAU,QAAA;AAAA,QACV,SAAA,EAAW,KAAA;AAAA,QACX,IAAA,EAAM,CAAA,+BAAA,EAAkC,IAAA,CAAK,UAAU,CAAA,QAAA;AAAA,OACzD;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,SAAS,GAAA,CAAI,OAAA;AAAA,MACb,QAAA,EAAU,SAAA;AAAA,MACV,SAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAM,CAAA,6CAAA,EAAgD,IAAA,CAAK,WAAW,CAAA,YAAA;AAAA,KACxE;AAAA,EACF;AACF;AAOA,SAAS,YAAY,IAAA,EAA4B;AAC/C,EAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,CAAA,EAAE;AAChE;AAGO,SAAS,YAAY,IAAA,EAAmB;AAC7C,EAAA,IAAI,OAAO,IAAA,EAAM,IAAA,KAAS,QAAA,SAAiB,IAAA,CAAK,IAAA;AAChD,EAAA,IAAI,OAAO,IAAA,EAAM,KAAA,KAAU,QAAA,SAAiB,IAAA,CAAK,KAAA;AACjD,EAAA,IAAI,OAAO,IAAA,EAAM,OAAA,KAAY,QAAA,SAAiB,IAAA,CAAK,OAAA;AACnD,EAAA,IAAI,OAAO,IAAA,EAAM,QAAA,KAAa,QAAA,SAAiB,IAAA,CAAK,QAAA;AACpD,EAAA,MAAM,MAAM,IAAA,EAAM,OAAA;AAClB,EAAA,IAAI,OAAO,GAAA,EAAK,OAAA,KAAY,QAAA,SAAiB,GAAA,CAAI,OAAA;AACjD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAA,EAAK,OAAO,CAAA,EAAG;AAC/B,IAAA,OAAO,IAAI,OAAA,CACR,MAAA;AAAA,MACC,CAAC,CAAA,KAAA,CAAY,CAAA,EAAG,IAAA,KAAS,MAAA,IAAU,GAAG,IAAA,KAAS,MAAA,KAAc,OAAO,CAAA,EAAG,IAAA,KAAS;AAAA,KAClF,CACC,IAAI,CAAC,CAAA,KAAW,EAAE,IAAI,CAAA,CACtB,KAAK,EAAE,CAAA;AAAA,EACZ;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAM,KAAK,CAAA,EAAG;AAC9B,IAAA,OAAO,KAAK,KAAA,CACT,MAAA,CAAO,CAAC,CAAA,KAAW,OAAO,CAAA,EAAG,IAAA,KAAS,QAAQ,CAAA,CAC9C,IAAI,CAAC,CAAA,KAAW,EAAE,IAAI,CAAA,CACtB,KAAK,EAAE,CAAA;AAAA,EACZ;AACA,EAAA,OAAO,EAAA;AACT;AAGO,SAAS,cAAc,IAAA,EAA8B;AAC1D,EAAA,MAAM,CAAA,GAAI,MAAM,KAAA,IAAS,IAAA,EAAM,OAAO,KAAA,IAAS,IAAA,EAAM,KAAA,IAAS,IAAA,EAAM,MAAA,IAAU,IAAA;AAC9E,EAAA,IAAI,CAAC,CAAA,IAAK,OAAO,CAAA,KAAM,UAAU,OAAO,IAAA;AACxC,EAAA,MAAM,KAAA,GAAQ,EAAE,YAAA,IAAgB,CAAA,CAAE,eAAe,CAAA,CAAE,aAAA,IAAiB,CAAA,CAAE,gBAAA,IAAoB,CAAA,CAAE,KAAA;AAC5F,EAAA,MAAM,MAAA,GACJ,EAAE,aAAA,IAAiB,CAAA,CAAE,gBAAgB,CAAA,CAAE,iBAAA,IAAqB,CAAA,CAAE,oBAAA,IAAwB,CAAA,CAAE,MAAA;AAC1F,EAAA,MAAM,SAAA,GAAY,CAAA,CAAE,mBAAA,IAAuB,CAAA,CAAE,mBAAmB,CAAA,CAAE,uBAAA;AAClE,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,MAAA,KAAW,MAAA,EAAW,OAAO,IAAA;AACxD,EAAA,MAAM,SAAqB,EAAC;AAC5B,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,MAAA,CAAO,WAAA,GAAc,KAAA;AACpD,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA,EAAU,MAAA,CAAO,YAAA,GAAe,MAAA;AACtD,EAAA,IAAI,OAAO,SAAA,KAAc,QAAA,EAAU,MAAA,CAAO,eAAA,GAAkB,SAAA;AAC5D,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,YAAY,IAAA,EAA+B;AACzD,EAAA,MAAM,CAAA,GACJ,IAAA,EAAM,IAAA,IAAQ,IAAA,EAAM,OAAA,IAAW,IAAA,EAAM,cAAA,IAAkB,IAAA,EAAM,KAAA,EAAO,IAAA,IAAQ,IAAA,EAAM,KAAA,EAAO,IAAA;AAC3F,EAAA,OAAO,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,GAAI,MAAA;AACrC","file":"chunk-KUH4EKQQ.js","sourcesContent":["import { type ChildProcess, spawn } from \"node:child_process\";\nimport type { EventEmitter } from \"node:events\";\nimport { createInterface, type Interface } from \"node:readline\";\nimport type { Logger, TokenUsage } from \"@skaile/workspaces/types\";\nimport { classifyGenericErrorMessage } from \"../error-classifier.js\";\nimport {\n type AgentConfig,\n AgentDriver,\n type AgentError,\n type AgentEvent,\n type AgentMessage,\n} from \"../types.js\";\n\n/**\n * Shared base for one-shot **subprocess CLI** agent backends (Gemini, Qwen,\n * OpenCode, Goose, Continue).\n *\n * These backends are neither persistent JSON-RPC subprocesses (`omp`) nor\n * in-process SDKs (`claude-sdk`, `codex`). In headless mode each is invoked\n * **once per turn** — `prompt()` spawns the CLI fresh, a `readline` loop maps\n * newline-delimited JSON on stdout to the unified {@link AgentEvent} stream, and\n * **process exit marks the end of the turn**. Multi-turn continuity comes from\n * capturing a backend session id (emitted as `session_info`) and replaying it\n * via a resume flag on the next spawn.\n *\n * Subclasses implement {@link buildArgs}, {@link buildEnv}, and either\n * {@link handleJson} (streaming JSONL, the default) or {@link handleBuffered}\n * (`mode = \"buffered\"`, for CLIs that print a single JSON blob at the end).\n *\n * **Terminal-sequence invariant.** Subclasses MUST NOT emit `agent_end`. The\n * base emits exactly one `result` (synthesizing a success result when the\n * stream produced none) followed by a single `agent_end` on clean exit, or an\n * `error` + `agent_end` on crash. This keeps the turn-completion contract\n * (`prompt()` resolves after `agent_end`) identical across every CLI driver.\n *\n * @docLink packages/bridge/drivers#subprocess-cli\n */\nexport abstract class SubprocessCliDriver extends AgentDriver {\n /** Per-driver logger, constructed once by the subclass. */\n protected abstract readonly log: Logger;\n /** Default binary name spawned in production (e.g. `\"gemini\"`). */\n protected abstract readonly defaultBin: string;\n /** Human product name used in error messages / hints (e.g. `\"Gemini CLI\"`). */\n protected abstract readonly productName: string;\n /**\n * Test-seam env prefix. `<PREFIX>_BRIDGE_BIN` overrides the spawn binary and\n * `<PREFIX>_BRIDGE_PREARGS` (space-delimited) supplies leading argv — used by\n * the fake-CLI harness to redirect spawn without monkey-patching\n * `child_process`. Both are ignored in production.\n */\n protected abstract readonly envPrefix: string;\n /** `\"jsonl\"` streams events line-by-line; `\"buffered\"` parses all stdout once on exit. */\n protected readonly mode: \"jsonl\" | \"buffered\" = \"jsonl\";\n\n protected config: AgentConfig;\n\n private proc: ChildProcess | null = null;\n private rl: Interface | null = null;\n private stderrBuffer: string[] = [];\n private stdoutBuffer = \"\";\n private started = false;\n\n // ── Per-turn state ──────────────────────────────────────────────────────\n private prevText = \"\";\n private activeAssistant = false;\n private pendingToolResults: AgentMessage[] = [];\n private sawResult = false;\n private aborting = false;\n private turnResolve: (() => void) | null = null;\n private turnReject: ((err: Error) => void) | null = null;\n\n protected _sessionId?: string;\n protected _lastTokens: TokenUsage | null = null;\n\n constructor(config: AgentConfig) {\n super();\n this.config = config;\n }\n\n override get runtimeSessionId(): string | undefined {\n return this._sessionId;\n }\n\n override getModel(): string | undefined {\n return this.config.model;\n }\n\n override getTokenUsage(): TokenUsage | null {\n return this._lastTokens;\n }\n\n override reconfigure(patch: Partial<Pick<AgentConfig, \"model\" | \"thinking\" | \"effort\">>): void {\n if (patch.model !== undefined) this.config.model = patch.model;\n if (patch.thinking !== undefined) this.config.thinking = patch.thinking;\n if (patch.effort !== undefined) this.config.effort = patch.effort;\n }\n\n /**\n * No-op for one-shot CLIs — there is no long-lived process to spawn until the\n * first prompt. Kept so the runner's `start()` → `prompt()` ordering works\n * uniformly; binary-presence failures surface as a `config` error on the\n * first spawn (see {@link classifyProcessError}).\n */\n async start(): Promise<void> {\n this.started = true;\n }\n\n get isRunning(): boolean {\n return this.proc !== null && !this.proc.killed;\n }\n\n /**\n * Sends a user message to the CLI and resolves after the turn completes\n * (`agent_end`). Spawns a fresh child per call; rejects if the child exits\n * non-zero before emitting a result, so the caller never hangs.\n */\n async prompt(message: string): Promise<void> {\n if (this.proc) throw new Error(`${this.productName} turn already in progress`);\n if (!this.started) await this.start();\n\n this.prevText = \"\";\n this.activeAssistant = false;\n this.pendingToolResults = [];\n this.sawResult = false;\n this.aborting = false;\n this.stderrBuffer = [];\n this.stdoutBuffer = \"\";\n this._lastTokens = null;\n\n const composed = this.composePrompt(message);\n const overrideBin = process.env[`${this.envPrefix}_BRIDGE_BIN`];\n const preArgs = process.env[`${this.envPrefix}_BRIDGE_PREARGS`]\n ? (process.env[`${this.envPrefix}_BRIDGE_PREARGS`] as string).split(/\\s+/).filter(Boolean)\n : [];\n const bin = overrideBin || this.defaultBin;\n const args = [...preArgs, ...this.buildArgs(composed, this._sessionId)];\n const env = this.buildEnv();\n\n return new Promise<void>((resolve, reject) => {\n this.turnResolve = resolve;\n this.turnReject = reject;\n this.log.info(\"spawning CLI\", {\n bin,\n cwd: this.config.cwd,\n resume: Boolean(this._sessionId),\n });\n\n const proc = spawn(bin, args, {\n cwd: this.config.cwd,\n env,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n }) as ChildProcess;\n this.proc = proc;\n const procEmitter = proc as unknown as EventEmitter;\n\n procEmitter.on(\"error\", (err: Error) => {\n const detail = this.classifyProcessError(err as NodeJS.ErrnoException);\n this.log.error(\"spawn error\", err, { detail });\n this.pushError(detail);\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n this.settleReject(Object.assign(new Error(detail.message), { detail }));\n });\n\n if (proc.stdout) {\n if (this.mode === \"jsonl\") {\n const rl = createInterface({ input: proc.stdout });\n this.rl = rl;\n (rl as unknown as EventEmitter).on(\"line\", (line: string) => this.onStdoutLine(line));\n } else {\n proc.stdout.setEncoding(\"utf8\");\n proc.stdout.on(\"data\", (chunk: string) => {\n this.stdoutBuffer += chunk;\n });\n }\n }\n\n if (proc.stderr) {\n const stderrRl = createInterface({ input: proc.stderr });\n (stderrRl as unknown as EventEmitter).on(\"line\", (line: string) => {\n this.log.debug(\"stderr\", { line });\n this.stderrBuffer.push(line);\n if (this.stderrBuffer.length > 20) this.stderrBuffer.shift();\n });\n }\n\n procEmitter.on(\"exit\", (code: number | null, signal: NodeJS.Signals | null) => {\n this.log.info(\"CLI exited\", { code, signal });\n this.onExit(code, signal);\n });\n });\n }\n\n /** Out-of-band abort: terminates the current child. Driver stays usable for the next prompt. */\n async abort(): Promise<void> {\n this.aborting = true;\n this.proc?.kill(\"SIGTERM\");\n }\n\n kill(): void {\n this.aborting = true;\n this.proc?.kill(\"SIGTERM\");\n this.cleanup();\n }\n\n async resetSession(): Promise<void> {\n this.kill();\n this._sessionId = undefined;\n this._lastTokens = null;\n }\n\n // ── Subclass hooks ────────────────────────────────────────────────────────\n\n /** Build the CLI argv (binary excluded) for one turn. `resumeId` is the captured session id, if any. */\n protected abstract buildArgs(message: string, resumeId: string | undefined): string[];\n\n /** Build the child-process env (explicit allowlist — see {@link baseEnv}). */\n protected abstract buildEnv(): Record<string, string>;\n\n /** Map one parsed stdout JSON object to events via the `push*` helpers. Streaming (`jsonl`) mode only. */\n protected handleJson(_json: unknown): void {}\n\n /** Parse the full stdout blob once on clean exit. `buffered` mode only. */\n protected handleBuffered(_raw: string): void {}\n\n /** Install-failure hint surfaced when the binary is missing. */\n protected abstract installHint(): string;\n\n /**\n * Classify a non-zero exit into an {@link AgentError}, or `null` to treat the\n * exit as success (e.g. a turn-limit code where a result was already\n * emitted). Default: code `0` / clean signal → success; otherwise `process`.\n */\n protected classifyExit(code: number | null, signal: NodeJS.Signals | null): AgentError | null {\n if (code === 0 || (code === null && signal === null)) return null;\n const tail = this.stderrBuffer.slice(-10).join(\"\\n\");\n return {\n message: `${this.productName} exited with code ${code ?? \"null\"}${tail ? `: ${tail}` : \"\"}`,\n category: \"process\",\n retryable: true,\n hint: tail || `The ${this.productName} process exited unexpectedly. Try the prompt again.`,\n };\n }\n\n // ── Protected emit helpers (used by handleJson / handleBuffered) ────────────\n\n /** Prepend `systemPrompt` to the user message — uniform across CLIs lacking a reliable system flag. */\n protected composePrompt(message: string): string {\n return this.config.systemPrompt ? `${this.config.systemPrompt}\\n\\n---\\n\\n${message}` : message;\n }\n\n protected pushAssistantDelta(fullText: string): void {\n if (!this.activeAssistant) {\n this.activeAssistant = true;\n this.prevText = \"\";\n this.emit(\"agent-event\", {\n type: \"message_start\",\n message: asstMessage(\"\"),\n } satisfies AgentEvent);\n }\n const delta = fullText.startsWith(this.prevText)\n ? fullText.slice(this.prevText.length)\n : fullText;\n this.prevText = fullText;\n if (delta) {\n this.emit(\"agent-event\", {\n type: \"message_update\",\n message: asstMessage(fullText),\n _textDelta: delta,\n } satisfies AgentEvent);\n }\n }\n\n protected pushAssistantEnd(fullText?: string): void {\n if (!this.activeAssistant) return;\n const text = fullText ?? this.prevText;\n this.emit(\"agent-event\", {\n type: \"message_end\",\n message: asstMessage(text),\n } satisfies AgentEvent);\n this.activeAssistant = false;\n this.prevText = \"\";\n }\n\n protected pushToolCall(name: string, input: unknown): void {\n this.emit(\"agent-event\", {\n type: \"tool_call\",\n name,\n tool: { name },\n input,\n } satisfies AgentEvent);\n }\n\n protected pushToolResult(name: string, data: unknown, isError = false): void {\n this.pendingToolResults.push({ role: \"tool\", toolName: name, content: \"\", data, isError });\n this.emit(\"agent-event\", {\n type: \"tool_execution_end\",\n toolName: name,\n } satisfies AgentEvent);\n }\n\n private flushToolResults(): void {\n if (this.pendingToolResults.length === 0) return;\n this.emit(\"agent-event\", {\n type: \"turn_end\",\n toolResults: [...this.pendingToolResults],\n } satisfies AgentEvent);\n this.pendingToolResults = [];\n }\n\n protected pushResult(opts: {\n tokens?: TokenUsage | null;\n costUsd?: number;\n summary?: string;\n subtype?: string;\n }): void {\n this.pushAssistantEnd();\n this.flushToolResults();\n if (opts.tokens) this._lastTokens = opts.tokens;\n this.sawResult = true;\n this.emit(\"agent-event\", {\n type: \"result\",\n subtype: opts.subtype ?? \"success\",\n summary: opts.summary,\n costUsd: opts.costUsd ?? 0,\n ...(opts.tokens ? { tokens: opts.tokens } : {}),\n } satisfies AgentEvent);\n }\n\n protected pushError(detail: AgentError, fatal = false): void {\n this.emit(\"agent-event\", {\n type: \"error\",\n error: detail.message,\n detail,\n fatal,\n } satisfies AgentEvent);\n }\n\n protected captureSession(id?: string, file?: string): void {\n if (!id || id === this._sessionId) return;\n this._sessionId = id;\n this.emit(\"agent-event\", {\n type: \"session_info\",\n driverSessionId: id,\n ...(file ? { sessionFile: file } : {}),\n } satisfies AgentEvent);\n }\n\n /** Shared keyword classification + per-driver hint copy (mirrors omp/codex). */\n protected classifyMessage(message: string): AgentError {\n const generic = classifyGenericErrorMessage(message);\n if (!generic) {\n return {\n message,\n category: \"unknown\",\n retryable: true,\n hint: `An unexpected ${this.productName} error occurred. Try the prompt again.`,\n };\n }\n const hint =\n generic.category === \"auth\"\n ? `Check the API key / login configured for ${this.productName}.`\n : generic.category === \"rate_limit\"\n ? `${this.productName} hit a provider rate limit. Wait a moment and try again.`\n : generic.category === \"model\"\n ? \"The selected model is unavailable or the context is too long. Change the model or start a new session.\"\n : `A network error occurred while talking to ${this.productName}.`;\n return { message, category: generic.category, retryable: generic.retryable, hint };\n }\n\n // ── Env allowlist ──────────────────────────────────────────────────────────\n\n /**\n * Explicit env whitelist forwarded to the child. Omits anything provisioned\n * by `provision_secrets` so user credentials stay out of the subprocess\n * environment. Always passes through the driver's test-seam vars and\n * `FAKE_CLI_*`.\n *\n * `config.env` is merged **over** the whitelist, not in place of it. It used\n * to replace it wholesale, which meant any caller that set a single variable\n * silently dropped `PATH` and `HOME` and the spawn failed with ENOENT —\n * unusable as the delivery channel for registry-derived endpoint variables\n * (plan §2.3, \"Delivery rule\"). Widening keeps both: the caller's variables\n * win per key, the process still has a `PATH`.\n */\n protected baseEnv(extraKeys: string[] = []): Record<string, string> {\n const out: Record<string, string> = {};\n const explicit = [\"PATH\", \"HOME\", \"USER\", \"HOSTNAME\", \"SKAILE_SESSION_ID\", ...extraKeys];\n for (const key of explicit) {\n const v = process.env[key];\n if (v !== undefined) out[key] = v;\n }\n for (const [key, value] of Object.entries(process.env)) {\n if (typeof value !== \"string\") continue;\n if (key.startsWith(`${this.envPrefix}_BRIDGE_`) || key.startsWith(\"FAKE_CLI_\")) {\n out[key] = value;\n }\n }\n if (this.config.sshKeyPath) {\n out.GIT_SSH_COMMAND = `ssh -i \"${this.config.sshKeyPath}\" -o StrictHostKeyChecking=accept-new`;\n }\n if (this.config.env) Object.assign(out, this.config.env);\n return out;\n }\n\n // ── Internals ────────────────────────────────────────────────────────────\n\n private onStdoutLine(line: string): void {\n if (!line.trim()) return;\n let json: unknown;\n try {\n json = JSON.parse(line);\n } catch {\n this.log.debug(\"non-JSON stdout line\", { line });\n return;\n }\n try {\n this.handleJson(json);\n } catch (err) {\n this.log.warn(\"handleJson threw\", { error: String(err) });\n }\n }\n\n private onExit(code: number | null, signal: NodeJS.Signals | null): void {\n this.cleanup();\n\n if (this.aborting) {\n this.pushAssistantEnd();\n this.flushToolResults();\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n this.settleResolve();\n return;\n }\n\n if (this.mode === \"buffered\" && (code === 0 || code === null)) {\n try {\n this.handleBuffered(this.stdoutBuffer);\n } catch (err) {\n this.log.warn(\"handleBuffered threw\", { error: String(err) });\n }\n }\n\n const exitErr = this.classifyExit(code, signal);\n if (exitErr && !this.sawResult) {\n this.pushAssistantEnd();\n this.flushToolResults();\n this.pushError(exitErr);\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n this.settleReject(Object.assign(new Error(exitErr.message), { detail: exitErr }));\n return;\n }\n\n // Clean exit (or non-zero exit after a result already streamed): close any\n // open assistant message, synthesize a success result if none arrived, end.\n if (!this.sawResult) this.pushResult({ summary: \"Task completed\" });\n else {\n this.pushAssistantEnd();\n this.flushToolResults();\n }\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n this.settleResolve();\n }\n\n private settleResolve(): void {\n const resolve = this.turnResolve;\n this.turnResolve = null;\n this.turnReject = null;\n resolve?.();\n }\n\n private settleReject(err: Error): void {\n const reject = this.turnReject;\n this.turnResolve = null;\n this.turnReject = null;\n reject?.(err);\n }\n\n private cleanup(): void {\n this.rl?.close();\n this.rl = null;\n this.proc = null;\n }\n\n private classifyProcessError(err: NodeJS.ErrnoException): AgentError {\n if (err.code === \"ENOENT\") {\n return {\n message: `${this.defaultBin} command not found`,\n category: \"config\",\n retryable: false,\n hint: this.installHint(),\n };\n }\n if (err.code === \"EACCES\") {\n return {\n message: `Permission denied running ${this.defaultBin}`,\n category: \"config\",\n retryable: false,\n hint: `Check file permissions for the ${this.defaultBin} binary.`,\n };\n }\n return {\n message: err.message,\n category: \"process\",\n retryable: true,\n hint: `An unexpected process error occurred running ${this.productName}. Try again.`,\n };\n }\n}\n\n// ───────────────────────────────────────────────────────────────────────────\n// Tolerant JSON extractors — shared because the upstream stream-json schemas\n// are not fully pinned; read the common field-name variants defensively.\n// ───────────────────────────────────────────────────────────────────────────\n\nfunction asstMessage(text: string): AgentMessage {\n return { role: \"assistant\", content: [{ type: \"text\", text }] };\n}\n\n/** Pull assistant text out of a CLI event, trying the common field names. */\nexport function extractText(json: any): string {\n if (typeof json?.text === \"string\") return json.text;\n if (typeof json?.delta === \"string\") return json.delta;\n if (typeof json?.content === \"string\") return json.content;\n if (typeof json?.response === \"string\") return json.response;\n const msg = json?.message;\n if (typeof msg?.content === \"string\") return msg.content;\n if (Array.isArray(msg?.content)) {\n return msg.content\n .filter(\n (b: any) => (b?.type === \"text\" || b?.type === undefined) && typeof b?.text === \"string\",\n )\n .map((b: any) => b.text)\n .join(\"\");\n }\n if (Array.isArray(json?.parts)) {\n return json.parts\n .filter((p: any) => typeof p?.text === \"string\")\n .map((p: any) => p.text)\n .join(\"\");\n }\n return \"\";\n}\n\n/** Map a CLI usage/stats object onto {@link TokenUsage}, trying common field names. */\nexport function extractTokens(json: any): TokenUsage | null {\n const u = json?.usage ?? json?.stats?.usage ?? json?.stats ?? json?.tokens ?? json;\n if (!u || typeof u !== \"object\") return null;\n const input = u.input_tokens ?? u.inputTokens ?? u.prompt_tokens ?? u.promptTokenCount ?? u.input;\n const output =\n u.output_tokens ?? u.outputTokens ?? u.completion_tokens ?? u.candidatesTokenCount ?? u.output;\n const cacheRead = u.cached_input_tokens ?? u.cacheReadTokens ?? u.cachedContentTokenCount;\n if (input === undefined && output === undefined) return null;\n const tokens: TokenUsage = {};\n if (typeof input === \"number\") tokens.inputTokens = input;\n if (typeof output === \"number\") tokens.outputTokens = output;\n if (typeof cacheRead === \"number\") tokens.cacheReadTokens = cacheRead;\n return tokens;\n}\n\n/** Pull a per-turn USD cost from a CLI result object, or `undefined`. */\nexport function extractCost(json: any): number | undefined {\n const c =\n json?.cost ?? json?.costUsd ?? json?.total_cost_usd ?? json?.stats?.cost ?? json?.usage?.cost;\n return typeof c === \"number\" ? c : undefined;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { findAiAssetsRoot } from './chunk-7IRJ4K4F.js';
1
+ import { findAiAssetsRoot } from './chunk-7IH3RKKK.js';
2
2
  import { readAllSessions } from './chunk-R6O6YWU7.js';
3
3
  import { okJson, err } from './chunk-X5YPJV4N.js';
4
4
 
@@ -68,5 +68,5 @@ async function flowFindFlowForSession(projectDir, runId) {
68
68
  }
69
69
 
70
70
  export { flowFindFlowForSession, flowGetSession, flowList, flowListSessions, flowShow };
71
- //# sourceMappingURL=chunk-3YTFHHMI.js.map
72
- //# sourceMappingURL=chunk-3YTFHHMI.js.map
71
+ //# sourceMappingURL=chunk-LCKZCLXA.js.map
72
+ //# sourceMappingURL=chunk-LCKZCLXA.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../workspace-plugin/src/tools/flows.ts"],"names":[],"mappings":"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","file":"chunk-3YTFHHMI.js","sourcesContent":["// src/tools/flows.ts\n\nimport type { ToolResult } from \"../types.js\";\nimport { err, okJson } from \"../types.js\";\nimport { findAiAssetsRoot } from \"../utils/ai-assets.js\";\nimport { readAllSessions } from \"./sessions.js\";\n\n// ── Flow tools ────────────────────────────────────────────────────────────────\n\n/**\n * List all flow definitions available in the project's `ai-assets` directory.\n *\n * Returns a JSON array of summary objects `{ id, name, nodeCount }`.\n * Returns an empty array when no `ai-assets` root is found.\n *\n * @param projectDir - Absolute path to the skaile project root.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowList(projectDir: string): Promise<ToolResult> {\n try {\n const assetsRoot = await findAiAssetsRoot(projectDir);\n if (!assetsRoot) return okJson([]);\n const { loadAllFlows } = await import(\n \"@skaile/workspaces/factory-assets/connectors/flow/engine\"\n );\n const flows = loadAllFlows(assetsRoot);\n const summary = flows.map((f: any) => ({\n id: f.id,\n name: f.name ?? f.id,\n nodeCount: f.nodes?.length ?? 0,\n }));\n return okJson(summary);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Show the full flow definition (nodes, edges, metadata) for a specific flow.\n *\n * @param projectDir - Absolute path to the skaile project root.\n * @param flowId - Flow ID as returned by {@link flowList}.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowShow(projectDir: string, flowId: string): Promise<ToolResult> {\n try {\n const assetsRoot = await findAiAssetsRoot(projectDir);\n if (!assetsRoot) return err(`Flow not found: ${flowId}`);\n const { loadAllFlows } = await import(\n \"@skaile/workspaces/factory-assets/connectors/flow/engine\"\n );\n const flows = loadAllFlows(assetsRoot);\n const flow = flows.find((f: any) => f.id === flowId);\n if (!flow) return err(`Flow not found: ${flowId}`);\n return okJson(flow);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * List all past and active flow run sessions for the workspace.\n *\n * Delegates to {@link readAllSessions} (reads `.skaile/sessions/*.json`),\n * sorted newest-first by `updatedAt`.\n *\n * @param projectDir - Absolute path to the skaile project root.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowListSessions(projectDir: string): Promise<ToolResult> {\n try {\n const sessions = await readAllSessions(projectDir);\n return okJson(sessions);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Get driver metadata for a specific flow run session.\n *\n * @param projectDir - Absolute path to the skaile project root.\n * @param runId - Run ID from {@link flowListSessions}.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowGetSession(projectDir: string, runId: string): Promise<ToolResult> {\n try {\n const sessions = await readAllSessions(projectDir);\n const session = sessions.find((s) => s.runId === runId);\n if (!session) return err(`Session not found: ${runId}`);\n return okJson(session);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Resolve and return the flow definition that was used in a past session.\n *\n * Looks up the session by `runId`, reads its `flowId`, then returns the full\n * flow definition from `ai-assets`.\n *\n * @param projectDir - Absolute path to the skaile project root.\n * @param runId - Run ID from {@link flowListSessions}.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowFindFlowForSession(\n projectDir: string,\n runId: string,\n): Promise<ToolResult> {\n try {\n const sessions = await readAllSessions(projectDir);\n const session = sessions.find((s) => s.runId === runId);\n if (!session) return err(`Session not found: ${runId}`);\n\n const assetsRoot = await findAiAssetsRoot(projectDir);\n if (!assetsRoot) return err(`Flow not found for session: ${runId} (no ai-assets root)`);\n\n const { loadAllFlows } = await import(\n \"@skaile/workspaces/factory-assets/connectors/flow/engine\"\n );\n const flows = loadAllFlows(assetsRoot);\n const flow = flows.find((f: any) => f.id === session.flowId);\n if (!flow) return err(`Flow not found: ${session.flowId}`);\n return okJson(flow);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n"]}
1
+ {"version":3,"sources":["../workspace-plugin/src/tools/flows.ts"],"names":[],"mappings":"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","file":"chunk-LCKZCLXA.js","sourcesContent":["// src/tools/flows.ts\n\nimport type { ToolResult } from \"../types.js\";\nimport { err, okJson } from \"../types.js\";\nimport { findAiAssetsRoot } from \"../utils/ai-assets.js\";\nimport { readAllSessions } from \"./sessions.js\";\n\n// ── Flow tools ────────────────────────────────────────────────────────────────\n\n/**\n * List all flow definitions available in the project's `ai-assets` directory.\n *\n * Returns a JSON array of summary objects `{ id, name, nodeCount }`.\n * Returns an empty array when no `ai-assets` root is found.\n *\n * @param projectDir - Absolute path to the skaile project root.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowList(projectDir: string): Promise<ToolResult> {\n try {\n const assetsRoot = await findAiAssetsRoot(projectDir);\n if (!assetsRoot) return okJson([]);\n const { loadAllFlows } = await import(\n \"@skaile/workspaces/factory-assets/connectors/flow/engine\"\n );\n const flows = loadAllFlows(assetsRoot);\n const summary = flows.map((f: any) => ({\n id: f.id,\n name: f.name ?? f.id,\n nodeCount: f.nodes?.length ?? 0,\n }));\n return okJson(summary);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Show the full flow definition (nodes, edges, metadata) for a specific flow.\n *\n * @param projectDir - Absolute path to the skaile project root.\n * @param flowId - Flow ID as returned by {@link flowList}.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowShow(projectDir: string, flowId: string): Promise<ToolResult> {\n try {\n const assetsRoot = await findAiAssetsRoot(projectDir);\n if (!assetsRoot) return err(`Flow not found: ${flowId}`);\n const { loadAllFlows } = await import(\n \"@skaile/workspaces/factory-assets/connectors/flow/engine\"\n );\n const flows = loadAllFlows(assetsRoot);\n const flow = flows.find((f: any) => f.id === flowId);\n if (!flow) return err(`Flow not found: ${flowId}`);\n return okJson(flow);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * List all past and active flow run sessions for the workspace.\n *\n * Delegates to {@link readAllSessions} (reads `.skaile/sessions/*.json`),\n * sorted newest-first by `updatedAt`.\n *\n * @param projectDir - Absolute path to the skaile project root.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowListSessions(projectDir: string): Promise<ToolResult> {\n try {\n const sessions = await readAllSessions(projectDir);\n return okJson(sessions);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Get driver metadata for a specific flow run session.\n *\n * @param projectDir - Absolute path to the skaile project root.\n * @param runId - Run ID from {@link flowListSessions}.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowGetSession(projectDir: string, runId: string): Promise<ToolResult> {\n try {\n const sessions = await readAllSessions(projectDir);\n const session = sessions.find((s) => s.runId === runId);\n if (!session) return err(`Session not found: ${runId}`);\n return okJson(session);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n\n/**\n * Resolve and return the flow definition that was used in a past session.\n *\n * Looks up the session by `runId`, reads its `flowId`, then returns the full\n * flow definition from `ai-assets`.\n *\n * @param projectDir - Absolute path to the skaile project root.\n * @param runId - Run ID from {@link flowListSessions}.\n *\n * @docLink packages/workspace-plugin/concepts#tool-delivery\n */\nexport async function flowFindFlowForSession(\n projectDir: string,\n runId: string,\n): Promise<ToolResult> {\n try {\n const sessions = await readAllSessions(projectDir);\n const session = sessions.find((s) => s.runId === runId);\n if (!session) return err(`Session not found: ${runId}`);\n\n const assetsRoot = await findAiAssetsRoot(projectDir);\n if (!assetsRoot) return err(`Flow not found for session: ${runId} (no ai-assets root)`);\n\n const { loadAllFlows } = await import(\n \"@skaile/workspaces/factory-assets/connectors/flow/engine\"\n );\n const flows = loadAllFlows(assetsRoot);\n const flow = flows.find((f: any) => f.id === session.flowId);\n if (!flow) return err(`Flow not found: ${session.flowId}`);\n return okJson(flow);\n } catch (e: unknown) {\n return err(e instanceof Error ? e.message : String(e));\n }\n}\n"]}
@@ -1,20 +1,21 @@
1
1
  import { declaredConnectErrorKind, ClassifiedConnectError, withConnectErrorKind } from './chunk-YZSMZK37.js';
2
- import { OAuthRequiredError, ConnectorFieldMissingError, LegacyAuthGrammarError, resolveAuthRef, readUnavailableMarker, ConnectorStartupError } from './chunk-MMLXSVQ3.js';
3
- import { EventNormalizer } from './chunk-VLXODO37.js';
4
- import { resolveModelTier } from './chunk-BXV6RLF4.js';
5
- import { createDriver } from './chunk-3T5DRUNZ.js';
2
+ import { OAuthRequiredError, ConnectorFieldMissingError, LegacyAuthGrammarError, resolveAuthRef, readUnavailableMarker, ConnectorStartupError } from './chunk-UOJW2DOZ.js';
3
+ import { EventNormalizer } from './chunk-IQFSXFYG.js';
4
+ import { resolveModelTier } from './chunk-XKPFQ3JT.js';
5
+ import { createDriver } from './chunk-PQF3NDQH.js';
6
6
  import { pluginRegistry } from './chunk-6E6PKKAD.js';
7
7
  import { computeStimulus } from './chunk-IFGTRL2I.js';
8
- import { interpolateNodeInstruction, resolveNodeBindings, getConsumedOutputSchema, validateConsumedNodeOutput, appendAttempt, resolveTerminalFailureStatus, remainingActiveExecutionMs, deriveCheckEvidence, computeFlowStateFromSnapshots, availableRouterFrontier, evaluateRouterSelection, routerSelectionOutput, planRouterSkips, unsettledRouterBranchIds, countFailedAttempts, hasAutomaticRetryBudget, persistedRouterSelection } from './chunk-O3DHAGBO.js';
9
- import { INPUT_SCHEMA_SHAPES_HINT, coerceInputSchema } from './chunk-KLMXMW6Z.js';
10
- import { classifierDecision, withoutReservedClassifierFields, parseFlowDefinition } from './chunk-REYJKU7T.js';
11
- import { describeStimulus, buildOrchestratorPrompt, renderSubpromptPrompt, renderStimulusPrompt } from './chunk-2D5BYAL6.js';
12
- import { deterministicNodeKindLabel, nodeInstruction, flowDefaults, isAgentNode, isGateNode, isCheckNode, nodeRequiresApproval, isSubFlowNode, isFunctionNode, isSubpromptNode, isRouterNode, isActiveRuntimeNode, nodeIsOptional, nodeLabel, nodeAssets } from './chunk-ELPR5XBG.js';
8
+ import { interpolateNodeInstruction, resolveNodeBindings, getConsumedOutputSchema, validateConsumedNodeOutput, appendAttempt, resolveTerminalFailureStatus, remainingActiveExecutionMs, deriveCheckEvidence, computeFlowStateFromSnapshots, availableRouterFrontier, evaluateRouterSelection, routerSelectionOutput, planRouterSkips, unsettledRouterBranchIds, countFailedAttempts, hasAutomaticRetryBudget, persistedRouterSelection } from './chunk-A2T4WIZL.js';
9
+ import { INPUT_SCHEMA_SHAPES_HINT, coerceInputSchema } from './chunk-XPDB4O4H.js';
10
+ import { parseFlowDefinition } from './chunk-ALLCAFHQ.js';
11
+ import { describeStimulus, buildOrchestratorPrompt, renderSubpromptPrompt, renderStimulusPrompt } from './chunk-RQLL7L72.js';
12
+ import { deterministicNodeKindLabel, nodeInstruction, flowDefaults, isAgentNode, isGateNode, isCheckNode, nodeRequiresApproval, isSubFlowNode, isFunctionNode, isSubpromptNode, isRouterNode, isActiveRuntimeNode, nodeIsOptional, nodeLabel, nodeAssets } from './chunk-V4RGCKYC.js';
13
+ import { classifierDecision, withoutReservedClassifierFields } from './chunk-DHMBE5J7.js';
13
14
  import { withActivityLabelDefs } from './chunk-O64WU6WS.js';
14
15
  import { processAlive } from './chunk-4GY63JU6.js';
15
- import { withFsDeadline, tryWithFsDeadline, FsDeadlineError, fsDeadlineMs } from './chunk-MKZOK4JU.js';
16
- import { portableSpawn } from './chunk-KSIRR5PL.js';
17
- import { createLogger } from './chunk-W4IPN3DD.js';
16
+ import { withFsDeadline, tryWithFsDeadline, FsDeadlineError, fsDeadlineMs } from './chunk-2FBPAR2V.js';
17
+ import { portableSpawn } from './chunk-DPLIN2RA.js';
18
+ import { createLogger, redactCredentials } from './chunk-BOFL7GIF.js';
18
19
  import { resolve, relative, sep, isAbsolute, join, dirname } from 'path';
19
20
  import { mkdir, rename, writeFile, readFile, stat, cp, chmod, rm, readdir, realpath } from 'fs/promises';
20
21
  import * as z4 from 'zod';
@@ -1535,14 +1536,11 @@ var MIN_REFRESH_DELAY_MS = 3e4;
1535
1536
  var TRANSIENT_REFRESH_RETRY_MS = 3e4;
1536
1537
  var MAX_REARM_MS = 24 * 24 * 60 * 60 * 1e3;
1537
1538
  var execFileAsync2 = promisify(execFile);
1538
- function redactUrlAuth(text) {
1539
- return text.replace(/\/\/[^/\s]*@/g, "//***@");
1540
- }
1541
1539
  function redactError(err) {
1542
1540
  const original = err instanceof Error ? err : new Error(String(err));
1543
- const copy = new Error(redactUrlAuth(original.message));
1541
+ const copy = new Error(redactCredentials(original.message));
1544
1542
  copy.name = original.name;
1545
- copy.stack = original.stack === void 0 ? void 0 : redactUrlAuth(original.stack);
1543
+ copy.stack = original.stack === void 0 ? void 0 : redactCredentials(original.stack);
1546
1544
  return copy;
1547
1545
  }
1548
1546
  var BOOTSTRAP_COMMIT_NAME = "Skaile";
@@ -1690,7 +1688,7 @@ async function syncSubmodules(cwd, log) {
1690
1688
  await git(["submodule", "update", "--init", "--recursive"], cwd, 12e4);
1691
1689
  } catch (err) {
1692
1690
  log.warn("git submodule update failed \u2014 checkout may be incomplete", {
1693
- error: redactUrlAuth(err instanceof Error ? err.message : String(err))
1691
+ error: redactCredentials(err instanceof Error ? err.message : String(err))
1694
1692
  });
1695
1693
  }
1696
1694
  }
@@ -1934,7 +1932,7 @@ var GitConnector = class extends AbstractConnector {
1934
1932
  origin: "tier-1",
1935
1933
  tier: 1,
1936
1934
  provider: providerKind,
1937
- scope: redactUrlAuth(state.url),
1935
+ scope: redactCredentials(state.url),
1938
1936
  expiresAt: initial.expiresAt ? initial.expiresAt.toISOString() : null,
1939
1937
  ...initial.scope ? { permissions: initial.scope } : {},
1940
1938
  ...skipReason === null ? {} : { warning: "static-credential", reason: skipReason }
@@ -2131,7 +2129,7 @@ var GitConnector = class extends AbstractConnector {
2131
2129
  });
2132
2130
  outcome = "fetched";
2133
2131
  } catch (err) {
2134
- const message = redactUrlAuth(err instanceof Error ? err.message : String(err));
2132
+ const message = redactCredentials(err instanceof Error ? err.message : String(err));
2135
2133
  if (!/couldn't find remote ref/i.test(message)) {
2136
2134
  this.log.warn("session-branch fetch failed", { sessionBranch, error: message });
2137
2135
  return "failed";
@@ -2148,7 +2146,7 @@ var GitConnector = class extends AbstractConnector {
2148
2146
  } catch (err) {
2149
2147
  this.log.warn("could not update session-branch fetch refspec", {
2150
2148
  sessionBranch,
2151
- error: redactUrlAuth(err instanceof Error ? err.message : String(err))
2149
+ error: redactCredentials(err instanceof Error ? err.message : String(err))
2152
2150
  });
2153
2151
  }
2154
2152
  return outcome;
@@ -2168,7 +2166,7 @@ var GitConnector = class extends AbstractConnector {
2168
2166
  } catch (err) {
2169
2167
  this.log.warn("could not re-point session branch at origin", {
2170
2168
  sessionBranch,
2171
- error: redactUrlAuth(err instanceof Error ? err.message : String(err))
2169
+ error: redactCredentials(err instanceof Error ? err.message : String(err))
2172
2170
  });
2173
2171
  }
2174
2172
  }
@@ -2207,7 +2205,7 @@ var GitConnector = class extends AbstractConnector {
2207
2205
  } catch (err) {
2208
2206
  this.log.warn("could not line up the local session branch with origin", {
2209
2207
  sessionBranch,
2210
- error: redactUrlAuth(err instanceof Error ? err.message : String(err))
2208
+ error: redactCredentials(err instanceof Error ? err.message : String(err))
2211
2209
  });
2212
2210
  }
2213
2211
  }
@@ -2228,7 +2226,7 @@ var GitConnector = class extends AbstractConnector {
2228
2226
  } catch (err) {
2229
2227
  this.log.warn("merge of origin session branch failed", {
2230
2228
  branch,
2231
- error: redactUrlAuth(err instanceof Error ? err.message : String(err))
2229
+ error: redactCredentials(err instanceof Error ? err.message : String(err))
2232
2230
  });
2233
2231
  await this.resolveConflictsOrAbort(s, cwd, "merge");
2234
2232
  }
@@ -2248,7 +2246,7 @@ var GitConnector = class extends AbstractConnector {
2248
2246
  } catch (err) {
2249
2247
  this.log.warn("could not record the pushed session branch", {
2250
2248
  branch,
2251
- error: redactUrlAuth(err instanceof Error ? err.message : String(err))
2249
+ error: redactCredentials(err instanceof Error ? err.message : String(err))
2252
2250
  });
2253
2251
  }
2254
2252
  }
@@ -2512,7 +2510,7 @@ var GitConnector = class extends AbstractConnector {
2512
2510
  } catch (err) {
2513
2511
  this.log.warn("merge failed", {
2514
2512
  branch: s.activeBranch,
2515
- error: redactUrlAuth(err instanceof Error ? err.message : String(err))
2513
+ error: redactCredentials(err instanceof Error ? err.message : String(err))
2516
2514
  });
2517
2515
  const resolved = await this.resolveConflictsOrAbort(s, handle.mountPath, "merge");
2518
2516
  if (resolved) {
@@ -2630,7 +2628,7 @@ var GitConnector = class extends AbstractConnector {
2630
2628
  const urlPrefix = this.deriveCredentialScope(url);
2631
2629
  const helperScriptPath = join(skaileDir, `credential-helper-${declaration.id}.sh`);
2632
2630
  const refreshAttemptPath = join(skaileDir, `refresh-attempt-${declaration.id}`);
2633
- const reason = redactUrlAuth(err instanceof Error ? err.message : String(err));
2631
+ const reason = redactCredentials(err instanceof Error ? err.message : String(err));
2634
2632
  this.ensureAttemptStamp(declaration.id, refreshAttemptPath);
2635
2633
  writeHelperScript(
2636
2634
  helperScriptPath,
@@ -2952,7 +2950,7 @@ var GitConnector = class extends AbstractConnector {
2952
2950
  return out.length === 0 ? 0 : out.split("\n").length;
2953
2951
  } catch (err) {
2954
2952
  this.log.warn("ls-remote probe failed \u2014 assuming a populated remote", {
2955
- error: redactUrlAuth(err instanceof Error ? err.message : String(err))
2953
+ error: redactCredentials(err instanceof Error ? err.message : String(err))
2956
2954
  });
2957
2955
  return null;
2958
2956
  }
@@ -3011,7 +3009,7 @@ var GitConnector = class extends AbstractConnector {
3011
3009
  } catch (err) {
3012
3010
  this.log.warn("empty-remote publish push failed; deferring to lifecycle push", {
3013
3011
  branch,
3014
- error: redactUrlAuth(err instanceof Error ? err.message : String(err))
3012
+ error: redactCredentials(err instanceof Error ? err.message : String(err))
3015
3013
  });
3016
3014
  }
3017
3015
  const publishedElsewhere = await this.countRemoteHeads(targetDir, authUrl, branch);
@@ -3022,7 +3020,7 @@ var GitConnector = class extends AbstractConnector {
3022
3020
  } catch (err) {
3023
3021
  this.log.warn("adopting the concurrently-created branch failed; keeping local branch", {
3024
3022
  branch,
3025
- error: redactUrlAuth(err instanceof Error ? err.message : String(err))
3023
+ error: redactCredentials(err instanceof Error ? err.message : String(err))
3026
3024
  });
3027
3025
  }
3028
3026
  }
@@ -3181,7 +3179,7 @@ var GitConnector = class extends AbstractConnector {
3181
3179
  s.fetchInFlight = true;
3182
3180
  void this.runPeriodicFetch(s, mountPath).catch((err) => {
3183
3181
  this.log.debug("periodic fetch failed", {
3184
- error: redactUrlAuth(err instanceof Error ? err.message : String(err))
3182
+ error: redactCredentials(err instanceof Error ? err.message : String(err))
3185
3183
  });
3186
3184
  }).finally(() => {
3187
3185
  s.fetchInFlight = false;
@@ -3206,7 +3204,7 @@ var GitConnector = class extends AbstractConnector {
3206
3204
  } catch (err) {
3207
3205
  this.log.warn("rebase failed", {
3208
3206
  branch: s.branch,
3209
- error: redactUrlAuth(err instanceof Error ? err.message : String(err))
3207
+ error: redactCredentials(err instanceof Error ? err.message : String(err))
3210
3208
  });
3211
3209
  await this.resolveConflictsOrAbort(s, mountPath, "rebase");
3212
3210
  }
@@ -3266,7 +3264,7 @@ var GitConnector = class extends AbstractConnector {
3266
3264
  this.log.warn("merge of base into session branch failed", {
3267
3265
  branch: s.activeBranch,
3268
3266
  base: s.branch,
3269
- error: redactUrlAuth(err instanceof Error ? err.message : String(err))
3267
+ error: redactCredentials(err instanceof Error ? err.message : String(err))
3270
3268
  });
3271
3269
  await this.resolveConflictsOrAbort(s, mountPath, "merge");
3272
3270
  }
@@ -6950,12 +6948,14 @@ var ConnectorManager = class {
6950
6948
  driver: decl.driver,
6951
6949
  access: decl.access,
6952
6950
  ...decl.label !== void 0 ? { label: decl.label } : {},
6953
- ...decl.mount?.source !== void 0 ? { source: decl.mount.source } : {},
6951
+ ...decl.mount?.source !== void 0 ? { source: redactCredentials(decl.mount.source) } : {},
6954
6952
  ...mountPath !== void 0 ? { mountPath } : {},
6955
6953
  // A host-declared unavailable connector is never fail-fast material.
6956
6954
  required: unavailable === void 0 && decl.access === "read-write" && decl.mount != null,
6957
- error,
6958
- ...unavailable !== void 0 ? { unavailable } : {}
6955
+ // Redacted here as well as at the callers: every failure record reaches
6956
+ // the agent through `connector_list`, whoever wrote the text.
6957
+ error: redactCredentials(error),
6958
+ ...unavailable !== void 0 ? { unavailable: redactMarker(unavailable) } : {}
6959
6959
  });
6960
6960
  }
6961
6961
  /**
@@ -6967,7 +6967,9 @@ var ConnectorManager = class {
6967
6967
  * newer than that record and replace it in a host's newest-wins failure view.
6968
6968
  */
6969
6969
  recordUnavailable(decl, unavailable) {
6970
- const msg = `Not attached by the host (${unavailable.reason})` + (unavailable.detail ? `: ${unavailable.detail}` : "");
6970
+ const msg = redactCredentials(
6971
+ `Not attached by the host (${unavailable.reason})` + (unavailable.detail ? `: ${unavailable.detail}` : "")
6972
+ );
6971
6973
  this.recordFailure(decl, msg, unavailable);
6972
6974
  this.mgrLog.warn("connector declared unavailable by the host", {
6973
6975
  id: decl.id,
@@ -7148,7 +7150,7 @@ var ConnectorManager = class {
7148
7150
  };
7149
7151
  } catch (err) {
7150
7152
  if (!this.active.has(decl.id)) this.releaseMountTarget(decl.id);
7151
- const msg = err instanceof Error ? err.message : String(err);
7153
+ const msg = redactCredentials(err instanceof Error ? err.message : String(err));
7152
7154
  this.recordFailure(decl, msg);
7153
7155
  const errorKind = classifyConnectError(err);
7154
7156
  this.mgrLog.error("connect failed", err, {
@@ -7258,7 +7260,7 @@ var ConnectorManager = class {
7258
7260
  return handle;
7259
7261
  } catch (err) {
7260
7262
  this.releaseMountTarget(declaration.id);
7261
- const msg = err instanceof Error ? err.message : String(err);
7263
+ const msg = redactCredentials(err instanceof Error ? err.message : String(err));
7262
7264
  this.recordFailure(declaration, msg);
7263
7265
  const errorKind = classifyConnectError(err);
7264
7266
  this.opts.onStatusChange?.({
@@ -7692,6 +7694,13 @@ var ConnectorManager = class {
7692
7694
  return buildSkillBody(descriptor, ops, shellAccess);
7693
7695
  }
7694
7696
  };
7697
+ function redactMarker(marker) {
7698
+ return {
7699
+ ...marker,
7700
+ reason: redactCredentials(marker.reason),
7701
+ ...marker.detail !== void 0 ? { detail: redactCredentials(marker.detail) } : {}
7702
+ };
7703
+ }
7695
7704
  var zStatic = z4.z ?? z4.default ?? z4;
7696
7705
  function readFailedConnectors(manager) {
7697
7706
  if (typeof manager.listFailedConnectors !== "function") return [];
@@ -11494,5 +11503,5 @@ function describeFlowOperations() {
11494
11503
  }
11495
11504
 
11496
11505
  export { AbstractConnector, BUILTIN_CONNECTOR_CATALOG, BoxConnector, ClassifierSubpromptRunner, ConnectorManager, DeployConnector, DevServerConnector, FlowAdapter, GitConnector, GmailConnector, GoogleDriveConnector, LocalConnector, LogBuffer, MAX_REARM_MS, MIN_REFRESH_DELAY_MS, ManagedGitconfigCollisionError, MattermostConnector, MemoryConnector, MinIOConnector, NO_ACTIVE_FLOW_ERROR, PortPool, PostgresConnector, REFRESH_LEAD_MS, S3Connector, SQLiteConnector, SessionInlineSubFlowRunner, SessionNodeExecutor, SessionSubpromptRunner, SharePointConnector, StaticServerConnector, TunnelConnector, WebDAVConnector, XStateConnector, XStateStoreConnector, __test, atomicReplaceCredential, buildConnectorPromptSection, buildConnectorToolDefs, buildFlowPromptEvent, buildFlowToolDefs, buildLazyFlowToolDefs, buildLazySdkFlowTools, buildSdkConnectorTools, buildSdkFlowTools, checkFleetMountLiveness, classifierQuestion, classifyConnectError, createConnector, createConnector10, createConnector11, createConnector12, createConnector13, createConnector14, createConnector15, createConnector16, createConnector17, createConnector18, createConnector19, createConnector2, createConnector20, createConnector3, createConnector4, createConnector5, createConnector6, createConnector7, createConnector8, createConnector9, createFsWatcher, createWorktree, defaultSpawn, describeFlowOperations, driveOrchestratorTurn, ensureDirMode, ensureFleetMounted, ensureRefreshAttemptStamp, findGitRoot, findMissingPackages, getConnector, installNpmPackages, isFleetManaged, isPackageResolvable, listConnectors, listWorktrees, readGitSyncStatus, registerBuiltinConnectors, removeMountBlock, removeUnavailableMountBlock, renderCredentialHelperScript, tryGetConnector, worktreeRegistry, writeHelperScript, writeMountBlock, writeUnavailableMountBlock };
11497
- //# sourceMappingURL=chunk-GXACG5ZE.js.map
11498
- //# sourceMappingURL=chunk-GXACG5ZE.js.map
11506
+ //# sourceMappingURL=chunk-N6XJGVSK.js.map
11507
+ //# sourceMappingURL=chunk-N6XJGVSK.js.map