@skaile/workspaces 3.14.0 → 3.15.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 (165) hide show
  1. package/CHANGELOG.md +165 -0
  2. package/dist/{asset-feeds-STHKKTW3.js → asset-feeds-XSUE5LE6.js} +7 -7
  3. package/dist/{asset-feeds-STHKKTW3.js.map → asset-feeds-XSUE5LE6.js.map} +1 -1
  4. package/dist/asset-manager/catalog-deployer.js +1 -1
  5. package/dist/asset-manager/index.js +7 -7
  6. package/dist/asset-manager/installer.js +4 -4
  7. package/dist/asset-manager/renderers.js +2 -2
  8. package/dist/bridge/drivers/claude-sdk.js +9 -6
  9. package/dist/bridge/drivers/claude-sdk.js.map +1 -1
  10. package/dist/bridge/drivers/codex.js +2 -2
  11. package/dist/bridge/drivers/continue.js +2 -2
  12. package/dist/bridge/drivers/echo.js +1 -1
  13. package/dist/bridge/drivers/gemini.js +4 -4
  14. package/dist/bridge/drivers/goose.js +2 -2
  15. package/dist/bridge/drivers/omp.js +145 -6
  16. package/dist/bridge/drivers/omp.js.map +1 -1
  17. package/dist/bridge/drivers/opencode.js +2 -2
  18. package/dist/bridge/drivers/qwen.js +4 -4
  19. package/dist/bridge/index.js +4 -4
  20. package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
  21. package/dist/bridge/src/drivers/omp.d.ts +62 -0
  22. package/dist/bridge/src/drivers/omp.d.ts.map +1 -1
  23. package/dist/bridge/src/index.d.ts +1 -0
  24. package/dist/bridge/src/index.d.ts.map +1 -1
  25. package/dist/bridge/src/models.d.ts +27 -2
  26. package/dist/bridge/src/models.d.ts.map +1 -1
  27. package/dist/bridge/src/provider-endpoints.d.ts +39 -0
  28. package/dist/bridge/src/provider-endpoints.d.ts.map +1 -1
  29. package/dist/bridge/src/validation.d.ts +6 -1
  30. package/dist/bridge/src/validation.d.ts.map +1 -1
  31. package/dist/{chunk-ZSZSDBBW.js → chunk-4OQ2HQCQ.js} +5 -5
  32. package/dist/{chunk-ZSZSDBBW.js.map → chunk-4OQ2HQCQ.js.map} +1 -1
  33. package/dist/{chunk-GY5SLCH2.js → chunk-5WMFU575.js} +158 -13
  34. package/dist/chunk-5WMFU575.js.map +1 -0
  35. package/dist/{chunk-UTW6YKAC.js → chunk-6YDXCJGK.js} +2 -2
  36. package/dist/{chunk-UTW6YKAC.js.map → chunk-6YDXCJGK.js.map} +1 -1
  37. package/dist/{chunk-IRORTHGA.js → chunk-AN6NAFRT.js} +21 -7
  38. package/dist/chunk-AN6NAFRT.js.map +1 -0
  39. package/dist/{chunk-HYFJPR7W.js → chunk-CWTL2QWL.js} +7 -7
  40. package/dist/{chunk-HYFJPR7W.js.map → chunk-CWTL2QWL.js.map} +1 -1
  41. package/dist/{chunk-2A7BV6WT.js → chunk-DTSKPMP3.js} +9 -6
  42. package/dist/chunk-DTSKPMP3.js.map +1 -0
  43. package/dist/{chunk-IEX5YV4R.js → chunk-DVSASEGO.js} +3 -3
  44. package/dist/{chunk-IEX5YV4R.js.map → chunk-DVSASEGO.js.map} +1 -1
  45. package/dist/{chunk-XICDQVOG.js → chunk-DWO2N72K.js} +4 -4
  46. package/dist/{chunk-XICDQVOG.js.map → chunk-DWO2N72K.js.map} +1 -1
  47. package/dist/{chunk-AZPXCHDK.js → chunk-F2WTSHZS.js} +3 -4
  48. package/dist/chunk-F2WTSHZS.js.map +1 -0
  49. package/dist/{chunk-URB2QZ4W.js → chunk-FI4QNNMD.js} +5 -5
  50. package/dist/{chunk-URB2QZ4W.js.map → chunk-FI4QNNMD.js.map} +1 -1
  51. package/dist/{chunk-PGUTER7Z.js → chunk-FYLIY6TO.js} +3 -3
  52. package/dist/{chunk-PGUTER7Z.js.map → chunk-FYLIY6TO.js.map} +1 -1
  53. package/dist/{chunk-V34ZEXSE.js → chunk-GURXUF2J.js} +32 -7
  54. package/dist/chunk-GURXUF2J.js.map +1 -0
  55. package/dist/{chunk-NELENR57.js → chunk-LAOS2TZU.js} +5 -5
  56. package/dist/{chunk-NELENR57.js.map → chunk-LAOS2TZU.js.map} +1 -1
  57. package/dist/{chunk-5F33LGZL.js → chunk-LVZ5NGME.js} +3 -3
  58. package/dist/{chunk-5F33LGZL.js.map → chunk-LVZ5NGME.js.map} +1 -1
  59. package/dist/{chunk-KKMRT6GU.js → chunk-MTCLDJPR.js} +7 -7
  60. package/dist/{chunk-KKMRT6GU.js.map → chunk-MTCLDJPR.js.map} +1 -1
  61. package/dist/{chunk-GRMQBBN4.js → chunk-O52DU5KU.js} +2 -2
  62. package/dist/{chunk-GRMQBBN4.js.map → chunk-O52DU5KU.js.map} +1 -1
  63. package/dist/{chunk-PW4SJE3X.js → chunk-PPKK5EV6.js} +3 -3
  64. package/dist/{chunk-PW4SJE3X.js.map → chunk-PPKK5EV6.js.map} +1 -1
  65. package/dist/{chunk-OCLCDB7G.js → chunk-Q7KWJO4J.js} +5 -5
  66. package/dist/{chunk-OCLCDB7G.js.map → chunk-Q7KWJO4J.js.map} +1 -1
  67. package/dist/{chunk-OYZIURPH.js → chunk-QZ6XXD3A.js} +3 -3
  68. package/dist/{chunk-OYZIURPH.js.map → chunk-QZ6XXD3A.js.map} +1 -1
  69. package/dist/{chunk-Z7W4B7P2.js → chunk-TMAGWRKY.js} +6 -6
  70. package/dist/{chunk-Z7W4B7P2.js.map → chunk-TMAGWRKY.js.map} +1 -1
  71. package/dist/{chunk-Y6JJHOLR.js → chunk-VFPFW67T.js} +9 -9
  72. package/dist/{chunk-Y6JJHOLR.js.map → chunk-VFPFW67T.js.map} +1 -1
  73. package/dist/{chunk-WAFHQDLK.js → chunk-WE7ONZNB.js} +3 -3
  74. package/dist/{chunk-WAFHQDLK.js.map → chunk-WE7ONZNB.js.map} +1 -1
  75. package/dist/{chunk-O7WKKINT.js → chunk-X5EYJEEQ.js} +4 -4
  76. package/dist/{chunk-O7WKKINT.js.map → chunk-X5EYJEEQ.js.map} +1 -1
  77. package/dist/{chunk-AONVXRAE.js → chunk-Z5ED4E57.js} +2 -2
  78. package/dist/{chunk-AONVXRAE.js.map → chunk-Z5ED4E57.js.map} +1 -1
  79. package/dist/cli/index.js +46 -46
  80. package/dist/cli/index.js.map +1 -1
  81. package/dist/connectors/config.js +1 -1
  82. package/dist/connectors/index.js +6 -6
  83. package/dist/core/index.js +1 -1
  84. package/dist/core/src/settings.d.ts +12 -1
  85. package/dist/core/src/settings.d.ts.map +1 -1
  86. package/dist/deploy/index.js +1 -1
  87. package/dist/discovery/index.js +2 -2
  88. package/dist/{ensure-sources-BFVKV773.js → ensure-sources-SFQT5GXY.js} +10 -10
  89. package/dist/{ensure-sources-BFVKV773.js.map → ensure-sources-SFQT5GXY.js.map} +1 -1
  90. package/dist/factory-assets/connectors/box.js +6 -6
  91. package/dist/factory-assets/connectors/deploy.js +6 -6
  92. package/dist/factory-assets/connectors/devserver.js +6 -6
  93. package/dist/factory-assets/connectors/flow/adapter.js +6 -6
  94. package/dist/factory-assets/connectors/flow/engine.js +2 -2
  95. package/dist/factory-assets/connectors/flow/run-flow.js +7 -7
  96. package/dist/factory-assets/connectors/flow.js +6 -6
  97. package/dist/factory-assets/connectors/git.js +6 -6
  98. package/dist/factory-assets/connectors/gmail.js +6 -6
  99. package/dist/factory-assets/connectors/googledrive.js +6 -6
  100. package/dist/factory-assets/connectors/local.js +6 -6
  101. package/dist/factory-assets/connectors/mattermost.js +6 -6
  102. package/dist/factory-assets/connectors/memory.js +6 -6
  103. package/dist/factory-assets/connectors/minio.js +6 -6
  104. package/dist/factory-assets/connectors/postgres.js +6 -6
  105. package/dist/factory-assets/connectors/s3.js +6 -6
  106. package/dist/factory-assets/connectors/sharepoint.js +6 -6
  107. package/dist/factory-assets/connectors/sqlite.js +6 -6
  108. package/dist/factory-assets/connectors/static-server.js +6 -6
  109. package/dist/factory-assets/connectors/tunnel.js +6 -6
  110. package/dist/factory-assets/connectors/webdav.js +6 -6
  111. package/dist/factory-assets/connectors/xstate-store.js +6 -6
  112. package/dist/factory-assets/connectors/xstate.js +6 -6
  113. package/dist/{flows-4R4VJ5VM.js → flows-Z3DM5BHF.js} +4 -4
  114. package/dist/{flows-4R4VJ5VM.js.map → flows-Z3DM5BHF.js.map} +1 -1
  115. package/dist/{helpers-CQV2V2SL.js → helpers-VRQXNHFR.js} +10 -10
  116. package/dist/{helpers-CQV2V2SL.js.map → helpers-VRQXNHFR.js.map} +1 -1
  117. package/dist/library/index.js +4 -4
  118. package/dist/library/install.js +1 -1
  119. package/dist/{library-publish-6FZCXPYU.js → library-publish-DV3B2ITY.js} +14 -14
  120. package/dist/{library-publish-6FZCXPYU.js.map → library-publish-DV3B2ITY.js.map} +1 -1
  121. package/dist/{open-library-4EOFZ4QD.js → open-library-2BXBAC6Q.js} +12 -12
  122. package/dist/{open-library-4EOFZ4QD.js.map → open-library-2BXBAC6Q.js.map} +1 -1
  123. package/dist/{paths-S7UESJKT.js → paths-AI7MDPNA.js} +3 -3
  124. package/dist/{paths-S7UESJKT.js.map → paths-AI7MDPNA.js.map} +1 -1
  125. package/dist/{plugin-store-5SJX2PRR.js → plugin-store-OO5EZBYP.js} +3 -3
  126. package/dist/{plugin-store-5SJX2PRR.js.map → plugin-store-OO5EZBYP.js.map} +1 -1
  127. package/dist/{project-J7RSKBAU.js → project-2TYDMEZB.js} +11 -11
  128. package/dist/{project-J7RSKBAU.js.map → project-2TYDMEZB.js.map} +1 -1
  129. package/dist/resolver/index.js +1 -1
  130. package/dist/runner/index.js +9 -9
  131. package/dist/runner/src/compaction/orchestrator.d.ts +23 -0
  132. package/dist/runner/src/compaction/orchestrator.d.ts.map +1 -1
  133. package/dist/runner/src/compaction-gate.d.ts +93 -0
  134. package/dist/runner/src/compaction-gate.d.ts.map +1 -0
  135. package/dist/runner/src/serve.d.ts.map +1 -1
  136. package/dist/sdk/asset-manager.js +7 -7
  137. package/dist/sdk/bridge.js +4 -4
  138. package/dist/sdk/core.js +1 -1
  139. package/dist/sdk/flow.js +2 -2
  140. package/dist/sdk/index.js +9 -9
  141. package/dist/sdk/resolver.js +1 -1
  142. package/dist/sdk/runner.js +9 -9
  143. package/dist/{setup-OQT5YK2Q.js → setup-EH4TZFMN.js} +6 -6
  144. package/dist/{setup-OQT5YK2Q.js.map → setup-EH4TZFMN.js.map} +1 -1
  145. package/dist/{skills-OBJX3VYG.js → skills-XZOG6ZPX.js} +3 -3
  146. package/dist/{skills-OBJX3VYG.js.map → skills-XZOG6ZPX.js.map} +1 -1
  147. package/dist/{source-AJ27AS6D.js → source-PVTUMNAO.js} +13 -13
  148. package/dist/{source-AJ27AS6D.js.map → source-PVTUMNAO.js.map} +1 -1
  149. package/dist/{source-manifest-publish-UCA2O5UA.js → source-manifest-publish-3XYTUVQQ.js} +15 -15
  150. package/dist/{source-manifest-publish-UCA2O5UA.js.map → source-manifest-publish-3XYTUVQQ.js.map} +1 -1
  151. package/dist/tui/index.js +9 -9
  152. package/dist/types/manifests.js +1 -1
  153. package/dist/types/src/manifests/agent.d.ts +47 -7
  154. package/dist/types/src/manifests/agent.d.ts.map +1 -1
  155. package/dist/types/src/manifests/index.d.ts +2 -2
  156. package/dist/types/src/manifests/index.d.ts.map +1 -1
  157. package/dist/workspace-plugin/adapters/mcp.js +2 -2
  158. package/dist/workspace-plugin/adapters/omp.js +7 -7
  159. package/dist/workspace-plugin/index.js +1 -1
  160. package/package.json +2 -1
  161. package/dist/chunk-2A7BV6WT.js.map +0 -1
  162. package/dist/chunk-AZPXCHDK.js.map +0 -1
  163. package/dist/chunk-GY5SLCH2.js.map +0 -1
  164. package/dist/chunk-IRORTHGA.js.map +0 -1
  165. package/dist/chunk-V34ZEXSE.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"omp.d.ts","sourceRoot":"","sources":["../../../../bridge/src/drivers/omp.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAKvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,KAAK,WAAW,EAAE,WAAW,EAAmB,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAyD9F;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,SAAU,SAAQ,WAAW;IACxC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAK7B;IAEF,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkC;IACtD,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,QAAQ,CAAM;IACtB,+DAA+D;IAC/D,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,+EAA+E;IAC/E,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,UAAU,CAAuC;IAEzD,IAAa,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAElD;IAEQ,QAAQ,IAAI,MAAM,GAAG,SAAS;IAIvC;;;;;;;;OAQG;gBACS,MAAM,EAAE,WAAW;IAKlB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAOrB,MAAM;IA+KpB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,WAAW;IAqDnB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAOnB;;;OAGG;IACH,OAAO,CAAC,UAAU;IAOlB;;;;OAIG;YACW,gBAAgB;IAqC9B,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,IAAI;IAcZ;;;;;;;;;;;;OAYG;IACU,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBnD;;;;;;OAMG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAMnC,0EAA0E;IAC1E,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED;;;;;OAKG;IACH,IAAI,IAAI,IAAI;IAON,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAKnC,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,oBAAoB;IAoBb,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IA8BlD,OAAO,CAAC,OAAO;CAQhB;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,YAAY,CAAC,WAAW,CASrD,CAAC"}
1
+ {"version":3,"file":"omp.d.ts","sourceRoot":"","sources":["../../../../bridge/src/drivers/omp.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAKvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,KAAK,WAAW,EAAE,WAAW,EAAmB,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAO9F;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,qBAAqB,mpCAiExB,CAAC;AAEX;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAalF;AAED;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,qJAgBpB,CAAC;AAEX,wEAAwE;AACxE,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAE9C,CAAC;AAyDF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE,CAgBtE;AAkCD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,SAAU,SAAQ,WAAW;IACxC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAK7B;IAEF,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkC;IACtD,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,QAAQ,CAAM;IACtB,+DAA+D;IAC/D,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,+EAA+E;IAC/E,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,UAAU,CAAuC;IAEzD,IAAa,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAElD;IAEQ,QAAQ,IAAI,MAAM,GAAG,SAAS;IAIvC;;;;;;;;OAQG;gBACS,MAAM,EAAE,WAAW;IAKlB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAOrB,MAAM;IA0LpB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,WAAW;IAyEnB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAOnB;;;OAGG;IACH,OAAO,CAAC,UAAU;IAOlB;;;;OAIG;YACW,gBAAgB;IAqC9B,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,IAAI;IAcZ;;;;;;;;;;;;OAYG;IACU,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBnD;;;;;;OAMG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAMnC,0EAA0E;IAC1E,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED;;;;;OAKG;IACH,IAAI,IAAI,IAAI;IAON,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAKnC,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,oBAAoB;IAoBb,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IA8BlD,OAAO,CAAC,OAAO;CAQhB;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,YAAY,CAAC,WAAW,CASrD,CAAC"}
@@ -4,6 +4,7 @@ export { AccountUnavailableError, AuthError, type ClaudeSdkResultErrorInput, cla
4
4
  export * from "./logger.js";
5
5
  export * from "./models.js";
6
6
  export * from "./normalizer.js";
7
+ export * from "./provider-endpoints.js";
7
8
  export * from "./registry.js";
8
9
  export { probeResumeTranscript, type ResumeProbeOutcome, resolveClaudeConfigDir, } from "./drivers/resume-probe.js";
9
10
  export * from "./runtime.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../bridge/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,KAAK,yBAAyB,EAC9B,sBAAsB,EACtB,kCAAkC,GACnC,MAAM,uBAAuB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,OAAO,EACL,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../bridge/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,KAAK,yBAAyB,EAC9B,sBAAsB,EACtB,kCAAkC,GACnC,MAAM,uBAAuB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,OAAO,EACL,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC"}
@@ -38,6 +38,25 @@ export interface FetchModelsResult {
38
38
  /** Whether the result came from a live API call or the static fallback. */
39
39
  source: "api" | "static";
40
40
  }
41
+ /**
42
+ * Options controlling where a model-list fetch is addressed.
43
+ *
44
+ * @since 1.5.0
45
+ */
46
+ export interface FetchModelsOptions {
47
+ /**
48
+ * Base URL to resolve the provider's models endpoint against — e.g. the
49
+ * gateway a session already routes completions through. Overrides the
50
+ * provider's `baseUrlEnv` value.
51
+ */
52
+ baseUrl?: string;
53
+ /**
54
+ * Environment consulted for the provider's base-URL env var
55
+ * (`ANTHROPIC_BASE_URL` for `anthropic`). Defaults to `process.env`; pass an
56
+ * explicit record to keep a call hermetic.
57
+ */
58
+ env?: Record<string, string | undefined>;
59
+ }
41
60
  /**
42
61
  * Fetch the model list from a provider's REST API.
43
62
  *
@@ -45,13 +64,18 @@ export interface FetchModelsResult {
45
64
  * `{ ok: false, models: [], error }` on any HTTP or network failure — the
46
65
  * caller should fall back to {@link getStaticModels} in that case.
47
66
  *
67
+ * When the provider is reachable through a gateway, the request targets the
68
+ * configured base URL rather than the provider's public API — see
69
+ * {@link resolveProviderModelsUrl}. Without one, behaviour is unchanged.
70
+ *
48
71
  * @param provider - Provider name matching a key in the shared `PROVIDER_ENDPOINTS` map
49
72
  * (e.g. `"anthropic"`, `"openai"`, `"google"`).
50
73
  * @param apiKey - API key forwarded in the request header or query parameter.
74
+ * @param options - Optional base-URL / environment overrides.
51
75
  * @returns Resolved model list with source attribution.
52
76
  * @docLink packages/bridge/api-reference#models
53
77
  */
54
- export declare function fetchProviderModels(provider: string, apiKey: string): Promise<FetchModelsResult>;
78
+ export declare function fetchProviderModels(provider: string, apiKey: string, options?: FetchModelsOptions): Promise<FetchModelsResult>;
55
79
  /**
56
80
  * Get models for a provider, trying the live API first and falling back to the static catalog.
57
81
  *
@@ -61,10 +85,11 @@ export declare function fetchProviderModels(provider: string, apiKey: string): P
61
85
  *
62
86
  * @param provider - Provider name (e.g. `"anthropic"`, `"openai"`, `"google"`).
63
87
  * @param apiKey - Optional API key; omit to skip the live fetch and use the static catalog.
88
+ * @param options - Optional base-URL / environment overrides (see {@link FetchModelsOptions}).
64
89
  * @returns Resolved model list with source attribution.
65
90
  * @docLink packages/bridge/api-reference#models
66
91
  */
67
- export declare function getModels(provider: string, apiKey?: string): Promise<FetchModelsResult>;
92
+ export declare function getModels(provider: string, apiKey?: string, options?: FetchModelsOptions): Promise<FetchModelsResult>;
68
93
  /**
69
94
  * Offline model catalog keyed by provider name.
70
95
  *
@@ -1 +1 @@
1
- {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../bridge/src/models.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACzB,yFAAyF;IACzF,EAAE,EAAE,MAAM,CAAC;IACX,iFAAiF;IACjF,IAAI,EAAE,MAAM,CAAC;CACd;AA6GD;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,iEAAiE;IACjE,EAAE,EAAE,OAAO,CAAC;IACZ,4CAA4C;IAC5C,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,MAAM,EAAE,KAAK,GAAG,QAAQ,CAAC;CAC1B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,CAAC,CA+C5B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAkB7F;AAMD;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAgEtD,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,CAE9D;AAMD,oDAAoD;AACpD,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAmC7E,CAAC;AAEF,qEAAqE;AACrE,qBAAa,wBAAyB,SAAQ,KAAK;IAE/C,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS;gBAD5B,IAAI,EAAE,OAAO,GAAG,MAAM,EACtB,QAAQ,EAAE,MAAM,GAAG,SAAS;CAQxC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,EAC9C,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,kBAAkB,CAAA;CAAO,GAClF,MAAM,GAAG,SAAS,CAWpB"}
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../bridge/src/models.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACzB,yFAAyF;IACzF,EAAE,EAAE,MAAM,CAAC;IACX,iFAAiF;IACjF,IAAI,EAAE,MAAM,CAAC;CACd;AA6GD;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,iEAAiE;IACjE,EAAE,EAAE,OAAO,CAAC;IACZ,4CAA4C;IAC5C,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,MAAM,EAAE,KAAK,GAAG,QAAQ,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAmD5B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAkB5B;AAMD;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAgEtD,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,CAE9D;AAMD,oDAAoD;AACpD,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAmC7E,CAAC;AAEF,qEAAqE;AACrE,qBAAa,wBAAyB,SAAQ,KAAK;IAE/C,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS;gBAD5B,IAAI,EAAE,OAAO,GAAG,MAAM,EACtB,QAAQ,EAAE,MAAM,GAAG,SAAS;CAQxC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,EAC9C,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,kBAAkB,CAAA;CAAO,GAClF,MAAM,GAAG,SAAS,CAWpB"}
@@ -8,9 +8,48 @@
8
8
  */
9
9
  /** REST endpoint descriptor for a provider's models listing. */
10
10
  export interface ProviderEndpoint {
11
+ /** Full models-list URL against the provider's own public API. */
11
12
  url: string;
13
+ /**
14
+ * Path appended to a caller- or env-supplied base URL. Present only for
15
+ * providers that can legitimately be addressed through a gateway/proxy that
16
+ * emulates their wire protocol.
17
+ */
18
+ path?: string;
19
+ /**
20
+ * Env var carrying a base-URL override for this provider, using the same
21
+ * name the provider's own SDK reads. Consulted by
22
+ * {@link resolveProviderModelsUrl} when no explicit base URL is passed.
23
+ */
24
+ baseUrlEnv?: string;
12
25
  headers: (key: string) => Record<string, string>;
13
26
  queryParam?: string;
14
27
  }
15
28
  export declare const PROVIDER_ENDPOINTS: Record<string, ProviderEndpoint>;
29
+ /**
30
+ * Resolve the models-list URL for a provider, honouring a configured base URL.
31
+ *
32
+ * Behind a gateway (LiteLLM, a corporate proxy, an Anthropic-compatible
33
+ * router) the credential in play is the *gateway's*, not the provider's. Firing
34
+ * discovery at the provider's own public API therefore 401s and yields an empty
35
+ * catalog — which a caller that reads "empty" as "unknown" then degrades into
36
+ * "accept anything". Resolving against the same base URL the runtime already
37
+ * routes completions through keeps discovery and dispatch pointed at one place.
38
+ *
39
+ * Precedence: explicit `baseUrl` argument → the endpoint's `baseUrlEnv` value
40
+ * in `env` → the provider's own `url`. A provider with no `path` has no
41
+ * gateway form and always returns `url`.
42
+ *
43
+ * The base URL is joined tolerantly: a trailing slash is stripped, and a base
44
+ * that already ends in the path's leading version segment (`…/v1` for a
45
+ * `/v1/models` path) is not doubled up. Both spellings are common in the wild.
46
+ *
47
+ * Pure: reads only the `env` record it is handed.
48
+ *
49
+ * @since 1.5.0
50
+ */
51
+ export declare function resolveProviderModelsUrl(provider: string, options?: {
52
+ baseUrl?: string;
53
+ env?: Record<string, string | undefined>;
54
+ }): string | undefined;
16
55
  //# sourceMappingURL=provider-endpoints.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider-endpoints.d.ts","sourceRoot":"","sources":["../../../bridge/src/provider-endpoints.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,gEAAgE;AAChE,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CA0C/D,CAAC"}
1
+ {"version":3,"file":"provider-endpoints.d.ts","sourceRoot":"","sources":["../../../bridge/src/provider-endpoints.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,gEAAgE;AAChE,MAAM,WAAW,gBAAgB;IAC/B,kEAAkE;IAClE,GAAG,EAAE,MAAM,CAAC;IACZ;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CA8C/D,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;CAAO,GAC3E,MAAM,GAAG,SAAS,CAUpB"}
@@ -20,8 +20,13 @@ export interface ValidationResult {
20
20
  * @param provider - Provider name matching a key in the shared `PROVIDER_ENDPOINTS` map
21
21
  * (e.g. `"anthropic"`, `"openai"`, `"google"`).
22
22
  * @param key - API key to validate.
23
+ * @param options - Optional base-URL / environment overrides; defaults to the
24
+ * provider's own API, or its `baseUrlEnv` value when one is set.
23
25
  * @returns Validation result with optional error description.
24
26
  * @docLink packages/bridge/api-reference#validation
25
27
  */
26
- export declare function validateApiKey(provider: string, key: string): Promise<ValidationResult>;
28
+ export declare function validateApiKey(provider: string, key: string, options?: {
29
+ baseUrl?: string;
30
+ env?: Record<string, string | undefined>;
31
+ }): Promise<ValidationResult>;
27
32
  //# sourceMappingURL=validation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../bridge/src/validation.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAIlG;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8EAA8E;IAC9E,EAAE,EAAE,OAAO,CAAC;IACZ,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA8B7F"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../bridge/src/validation.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAIlG;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8EAA8E;IAC9E,EAAE,EAAE,OAAO,CAAC;IACZ,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;CAAO,GAC3E,OAAO,CAAC,gBAAgB,CAAC,CAoC3B"}
@@ -1,6 +1,6 @@
1
- import { SubprocessCliDriver, extractText, extractCost, extractTokens } from './chunk-PGUTER7Z.js';
2
- import { getStaticModels, fetchProviderModels } from './chunk-V34ZEXSE.js';
3
- import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from './chunk-AONVXRAE.js';
1
+ import { SubprocessCliDriver, extractText, extractCost, extractTokens } from './chunk-FYLIY6TO.js';
2
+ import { getStaticModels, fetchProviderModels } from './chunk-GURXUF2J.js';
3
+ import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from './chunk-Z5ED4E57.js';
4
4
  import * as z from 'zod';
5
5
 
6
6
  var GeminiFamilyDriver = class extends SubprocessCliDriver {
@@ -106,5 +106,5 @@ var geminiDriverTarget = {
106
106
  };
107
107
 
108
108
  export { GeminiDriver, GeminiFamilyDriver, geminiDriverTarget };
109
- //# sourceMappingURL=chunk-ZSZSDBBW.js.map
110
- //# sourceMappingURL=chunk-ZSZSDBBW.js.map
109
+ //# sourceMappingURL=chunk-4OQ2HQCQ.js.map
110
+ //# sourceMappingURL=chunk-4OQ2HQCQ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../bridge/src/drivers/gemini.ts"],"names":[],"mappings":"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","file":"chunk-ZSZSDBBW.js","sourcesContent":["import type { DriverTarget } from \"@skaile/workspaces/plugin-registry\";\nimport type { Logger } from \"@skaile/workspaces/types\";\nimport * as z from \"zod\";\nimport { getBridgeLogger } from \"../logger.js\";\nimport { fetchProviderModels, getStaticModels, type ModelEntry } from \"../models.js\";\nimport { BUILTIN_DRIVER_CATALOG } from \"../registry.js\";\nimport type { AgentConfig, DriverInfo } from \"../types.js\";\nimport { extractCost, extractText, extractTokens, SubprocessCliDriver } from \"./_subprocess-cli.js\";\n\n/**\n * Shared base for the Gemini-CLI event family. Gemini CLI and Qwen Code (a fork\n * of Gemini CLI) emit the same `stream-json` event shape, so both dispatch the\n * same {@link handleJson}: `init`/`system` → session capture, `message`/\n * `assistant` → streamed assistant text, `tool_use` / `tool_result` → tool\n * events, `result` → tokens + cost.\n *\n * @docLink packages/bridge/drivers#gemini-driver\n */\nexport abstract class GeminiFamilyDriver extends SubprocessCliDriver {\n protected handleJson(json: any): void {\n switch (json?.type) {\n case \"init\":\n case \"system\":\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 || json.finished === true) {\n this.pushAssistantEnd(text);\n } else {\n this.pushAssistantDelta(text);\n }\n break;\n }\n\n case \"tool_use\":\n case \"tool_call\":\n this.pushToolCall(json.name ?? json.tool ?? \"tool\", json.input ?? json.args ?? {});\n break;\n\n case \"tool_result\":\n this.pushToolResult(\n json.name ?? json.tool ?? \"tool\",\n json.result ?? json.output ?? json.content,\n Boolean(json.is_error ?? json.isError ?? 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 this.captureSession(json.sessionId ?? json.session_id);\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/**\n * Agent driver for the Google **Gemini CLI** (`gemini`).\n *\n * Spawns `gemini -p \"<prompt>\" --output-format stream-json` per turn and maps\n * the stream-json events to the unified {@link AgentEvent} stream. Google /\n * Vertex models only — uses `GEMINI_API_KEY` from `apiKeys.google` /\n * `apiKeys.gemini` / env.\n *\n * @remarks\n * - **Requires Gemini CLI ≥ v0.6.1** — earlier versions reject\n * `--output-format`. A too-old CLI surfaces as a `process`-category exit error.\n * - **Session resume is not available in headless (`-p`) mode** — the CLI errors\n * if asked to resume non-interactively, so this driver runs single-turn per\n * process and logs a warning when a resume id is present.\n * - Exit codes: `42` → input/validation error, `53` → turn-limit (treated as a\n * completed turn).\n *\n * @see https://github.com/google-gemini/gemini-cli\n * @docLink packages/bridge/drivers#gemini-driver\n */\nexport class GeminiDriver extends GeminiFamilyDriver {\n readonly driverInfo: DriverInfo = {\n id: \"gemini\",\n name: \"Gemini CLI\",\n modelAgnostic: false,\n supportsInBandAbort: false,\n };\n\n protected readonly log: Logger = getBridgeLogger(\"gemini\");\n protected readonly defaultBin = \"gemini\";\n protected readonly productName = \"Gemini CLI\";\n protected readonly envPrefix = \"GEMINI\";\n\n protected buildArgs(message: string, resumeId: string | undefined): string[] {\n if (resumeId) {\n this.log.warn(\"Gemini CLI cannot resume in headless mode; starting a fresh turn\", {\n resumeId,\n });\n }\n const args = [\"-p\", message, \"--output-format\", \"stream-json\"];\n if (this.config.model) args.push(\"-m\", this.config.model);\n return args;\n }\n\n protected buildEnv(): Record<string, string> {\n const env = this.baseEnv([\"GEMINI_API_KEY\", \"GOOGLE_API_KEY\"]);\n const key =\n this.config.apiKeys?.google ??\n this.config.apiKeys?.gemini ??\n this.config.env?.GEMINI_API_KEY ??\n process.env.GEMINI_API_KEY;\n if (key) env.GEMINI_API_KEY = key;\n return env;\n }\n\n protected installHint(): string {\n return \"Gemini CLI is not installed or not on your PATH. Install it with `npm i -g @google/gemini-cli` (≥ v0.6.1).\";\n }\n\n protected override classifyExit(code: number | null, signal: NodeJS.Signals | null) {\n if (code === 42) {\n return {\n message: \"Gemini CLI reported an input error (exit 42)\",\n category: \"validation\" as const,\n retryable: false,\n hint: \"The prompt or flags were rejected by Gemini CLI. Check the model name and arguments.\",\n };\n }\n if (code === 53) return null; // turn-limit — the result was already emitted.\n return super.classifyExit(code, signal);\n }\n\n override async listModels(): Promise<ModelEntry[]> {\n const key =\n this.config.apiKeys?.google ?? this.config.apiKeys?.gemini ?? process.env.GEMINI_API_KEY;\n if (!key) return getStaticModels(\"google\");\n const result = await fetchProviderModels(\"google\", key);\n return result.ok && result.models.length > 0 ? result.models : getStaticModels(\"google\");\n }\n}\n\n/**\n * `DriverTarget` wrapper for the gemini driver. Registered into the plugin\n * registry by `registerBuiltinDrivers()`.\n */\nexport const geminiDriverTarget: DriverTarget<AgentConfig> = {\n id: \"gemini\",\n displayName: BUILTIN_DRIVER_CATALOG.gemini?.name ?? \"Gemini CLI\",\n apiVersion: 1,\n configSchema: z.custom<AgentConfig>(() => true),\n create: async (config, _ctx) => new GeminiDriver(config),\n listModels: async (apiKeys) =>\n new GeminiDriver({ cwd: process.cwd(), sessionId: \"model-list\", apiKeys }).listModels(),\n};\n"]}
1
+ {"version":3,"sources":["../bridge/src/drivers/gemini.ts"],"names":[],"mappings":"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","file":"chunk-4OQ2HQCQ.js","sourcesContent":["import type { DriverTarget } from \"@skaile/workspaces/plugin-registry\";\nimport type { Logger } from \"@skaile/workspaces/types\";\nimport * as z from \"zod\";\nimport { getBridgeLogger } from \"../logger.js\";\nimport { fetchProviderModels, getStaticModels, type ModelEntry } from \"../models.js\";\nimport { BUILTIN_DRIVER_CATALOG } from \"../registry.js\";\nimport type { AgentConfig, DriverInfo } from \"../types.js\";\nimport { extractCost, extractText, extractTokens, SubprocessCliDriver } from \"./_subprocess-cli.js\";\n\n/**\n * Shared base for the Gemini-CLI event family. Gemini CLI and Qwen Code (a fork\n * of Gemini CLI) emit the same `stream-json` event shape, so both dispatch the\n * same {@link handleJson}: `init`/`system` → session capture, `message`/\n * `assistant` → streamed assistant text, `tool_use` / `tool_result` → tool\n * events, `result` → tokens + cost.\n *\n * @docLink packages/bridge/drivers#gemini-driver\n */\nexport abstract class GeminiFamilyDriver extends SubprocessCliDriver {\n protected handleJson(json: any): void {\n switch (json?.type) {\n case \"init\":\n case \"system\":\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 || json.finished === true) {\n this.pushAssistantEnd(text);\n } else {\n this.pushAssistantDelta(text);\n }\n break;\n }\n\n case \"tool_use\":\n case \"tool_call\":\n this.pushToolCall(json.name ?? json.tool ?? \"tool\", json.input ?? json.args ?? {});\n break;\n\n case \"tool_result\":\n this.pushToolResult(\n json.name ?? json.tool ?? \"tool\",\n json.result ?? json.output ?? json.content,\n Boolean(json.is_error ?? json.isError ?? 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 this.captureSession(json.sessionId ?? json.session_id);\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/**\n * Agent driver for the Google **Gemini CLI** (`gemini`).\n *\n * Spawns `gemini -p \"<prompt>\" --output-format stream-json` per turn and maps\n * the stream-json events to the unified {@link AgentEvent} stream. Google /\n * Vertex models only — uses `GEMINI_API_KEY` from `apiKeys.google` /\n * `apiKeys.gemini` / env.\n *\n * @remarks\n * - **Requires Gemini CLI ≥ v0.6.1** — earlier versions reject\n * `--output-format`. A too-old CLI surfaces as a `process`-category exit error.\n * - **Session resume is not available in headless (`-p`) mode** — the CLI errors\n * if asked to resume non-interactively, so this driver runs single-turn per\n * process and logs a warning when a resume id is present.\n * - Exit codes: `42` → input/validation error, `53` → turn-limit (treated as a\n * completed turn).\n *\n * @see https://github.com/google-gemini/gemini-cli\n * @docLink packages/bridge/drivers#gemini-driver\n */\nexport class GeminiDriver extends GeminiFamilyDriver {\n readonly driverInfo: DriverInfo = {\n id: \"gemini\",\n name: \"Gemini CLI\",\n modelAgnostic: false,\n supportsInBandAbort: false,\n };\n\n protected readonly log: Logger = getBridgeLogger(\"gemini\");\n protected readonly defaultBin = \"gemini\";\n protected readonly productName = \"Gemini CLI\";\n protected readonly envPrefix = \"GEMINI\";\n\n protected buildArgs(message: string, resumeId: string | undefined): string[] {\n if (resumeId) {\n this.log.warn(\"Gemini CLI cannot resume in headless mode; starting a fresh turn\", {\n resumeId,\n });\n }\n const args = [\"-p\", message, \"--output-format\", \"stream-json\"];\n if (this.config.model) args.push(\"-m\", this.config.model);\n return args;\n }\n\n protected buildEnv(): Record<string, string> {\n const env = this.baseEnv([\"GEMINI_API_KEY\", \"GOOGLE_API_KEY\"]);\n const key =\n this.config.apiKeys?.google ??\n this.config.apiKeys?.gemini ??\n this.config.env?.GEMINI_API_KEY ??\n process.env.GEMINI_API_KEY;\n if (key) env.GEMINI_API_KEY = key;\n return env;\n }\n\n protected installHint(): string {\n return \"Gemini CLI is not installed or not on your PATH. Install it with `npm i -g @google/gemini-cli` (≥ v0.6.1).\";\n }\n\n protected override classifyExit(code: number | null, signal: NodeJS.Signals | null) {\n if (code === 42) {\n return {\n message: \"Gemini CLI reported an input error (exit 42)\",\n category: \"validation\" as const,\n retryable: false,\n hint: \"The prompt or flags were rejected by Gemini CLI. Check the model name and arguments.\",\n };\n }\n if (code === 53) return null; // turn-limit — the result was already emitted.\n return super.classifyExit(code, signal);\n }\n\n override async listModels(): Promise<ModelEntry[]> {\n const key =\n this.config.apiKeys?.google ?? this.config.apiKeys?.gemini ?? process.env.GEMINI_API_KEY;\n if (!key) return getStaticModels(\"google\");\n const result = await fetchProviderModels(\"google\", key);\n return result.ok && result.models.length > 0 ? result.models : getStaticModels(\"google\");\n }\n}\n\n/**\n * `DriverTarget` wrapper for the gemini driver. Registered into the plugin\n * registry by `registerBuiltinDrivers()`.\n */\nexport const geminiDriverTarget: DriverTarget<AgentConfig> = {\n id: \"gemini\",\n displayName: BUILTIN_DRIVER_CATALOG.gemini?.name ?? \"Gemini CLI\",\n apiVersion: 1,\n configSchema: z.custom<AgentConfig>(() => true),\n create: async (config, _ctx) => new GeminiDriver(config),\n listModels: async (apiKeys) =>\n new GeminiDriver({ cwd: process.cwd(), sessionId: \"model-list\", apiKeys }).listModels(),\n};\n"]}
@@ -1,19 +1,19 @@
1
- import { WorkspacePlugin } from './chunk-UTW6YKAC.js';
1
+ import { WorkspacePlugin } from './chunk-6YDXCJGK.js';
2
2
  import { assembleSystemPrompt, buildCapabilitiesPromptSection } from './chunk-W3UDISS2.js';
3
3
  import { WebSocketServerTransport } from './chunk-WQ7DE5UC.js';
4
- import { resolveFlowPath } from './chunk-NELENR57.js';
4
+ import { resolveFlowPath } from './chunk-LAOS2TZU.js';
5
5
  import { findAiAssetsRoot, deployCatalogEntry, undeployCatalogEntry } from './chunk-GHWJHOYX.js';
6
- import { registerBuiltinConnectors, buildConnectorPromptSection, findMissingPackages, installNpmPackages, ConnectorManager, ConnectorStartupError, buildSdkConnectorTools, driveOrchestratorTurn, SessionNodeExecutor, SessionSubpromptRunner, SessionInlineSubFlowRunner, buildSdkFlowTools } from './chunk-KKMRT6GU.js';
6
+ import { registerBuiltinConnectors, buildConnectorPromptSection, findMissingPackages, installNpmPackages, ConnectorManager, ConnectorStartupError, buildSdkConnectorTools, driveOrchestratorTurn, SessionNodeExecutor, SessionSubpromptRunner, SessionInlineSubFlowRunner, buildSdkFlowTools } from './chunk-MTCLDJPR.js';
7
7
  import { loadConnectorDeclarations, SecretProviderChain, PreMintedSecretProvider, InMemorySecretProvider, resolvedConfigToDeclarations, isKnownSecretRef, deriveSingleMaterializedConnectorDeclaration } from './chunk-3UU3D2Q3.js';
8
- import { EventNormalizer } from './chunk-2A7BV6WT.js';
8
+ import { EventNormalizer } from './chunk-DTSKPMP3.js';
9
9
  import { SUPPORTED_CLOUDS, probeResumeTranscript, CLOUD_SECRET_ENV_KEYS } from './chunk-RUFTB7QN.js';
10
10
  import { classifyClaudeSdkError } from './chunk-GAH4YRCI.js';
11
- import { createDriver } from './chunk-AONVXRAE.js';
12
- import { loadFlow } from './chunk-OYZIURPH.js';
11
+ import { createDriver } from './chunk-Z5ED4E57.js';
12
+ import { loadFlow } from './chunk-QZ6XXD3A.js';
13
13
  import { parseFlowDefinition } from './chunk-HY6CIKFH.js';
14
14
  import { renderStimulusPrompt } from './chunk-2D5BYAL6.js';
15
15
  import { PROTOCOL_VERSION } from './chunk-2KBA5OO2.js';
16
- import { resolveSettings, resolveApiKey, providerEnvKey } from './chunk-AZPXCHDK.js';
16
+ import { resolveSettings, resolveApiKey, providerEnvKey } from './chunk-F2WTSHZS.js';
17
17
  import { resolveDriverPaths } from './chunk-K5GBV4SA.js';
18
18
  import { resolveRuntimeAssets } from './chunk-SH572OBN.js';
19
19
  import { resolveSkWorkspaceConfig, resolveAgentDir, cloudConfigFromProfile, stageMaterializedSkills, loadMcpServerDeclarations, COMPACTION_DEFAULTS, validateAssetRecipeAttr, deriveSingleMaterializedMcpDeclaration } from './chunk-IP3GXHOB.js';
@@ -3123,6 +3123,108 @@ function cleanupCloudCredentialFiles(projectDir) {
3123
3123
  }
3124
3124
  }
3125
3125
 
3126
+ // runner/src/compaction-gate.ts
3127
+ var CompactionGate = class {
3128
+ /**
3129
+ * Every compaction currently holding the driver.
3130
+ *
3131
+ * A set rather than a boolean because holds can overlap: a driver swap
3132
+ * rebuilds the orchestrator, and the new instance carries its own
3133
+ * `_isCompacting`, so it can start a compaction while the previous
3134
+ * instance's call is still unwinding. Keyed by handle so the older one
3135
+ * settling cannot open the gate under the newer one — the same identity
3136
+ * check `DriverSwapGate.beginSwap` makes for swaps.
3137
+ */
3138
+ held = /* @__PURE__ */ new Set();
3139
+ /** Resolves when the last hold is released. Null whenever the driver is free. */
3140
+ opened = null;
3141
+ release = null;
3142
+ /**
3143
+ * Mark a compaction as occupying the driver. The returned handle is the only
3144
+ * thing that can release it.
3145
+ */
3146
+ begin() {
3147
+ const hold = /* @__PURE__ */ Symbol("compaction");
3148
+ if (this.held.size === 0) {
3149
+ this.opened = new Promise((resolve4) => {
3150
+ this.release = resolve4;
3151
+ });
3152
+ }
3153
+ this.held.add(hold);
3154
+ return hold;
3155
+ }
3156
+ /**
3157
+ * Release one hold, opening the gate once none remain. Unknown and null
3158
+ * handles are ignored, so a settle signal that fires without a matching
3159
+ * `begin()` is harmless.
3160
+ *
3161
+ * Call this from a signal the orchestrator emits unconditionally. A `begin()`
3162
+ * whose `settle()` can be skipped holds user turns forever, which is a worse
3163
+ * failure than the discarded reply this gate exists to prevent.
3164
+ */
3165
+ settle(hold) {
3166
+ if (hold == null || !this.held.delete(hold)) return;
3167
+ if (this.held.size > 0) return;
3168
+ const release = this.release;
3169
+ this.opened = null;
3170
+ this.release = null;
3171
+ release?.();
3172
+ }
3173
+ /**
3174
+ * Wait for the driver to be free.
3175
+ *
3176
+ * Returns `idle` when nothing was in flight, `waited` when every compaction
3177
+ * settled within the bound, and `timeout` when they did not. A caller that
3178
+ * gets `timeout` must surface it rather than dispatch: a compaction still
3179
+ * holding the driver past this bound is stuck, and dispatching into it
3180
+ * reproduces the silent loss.
3181
+ *
3182
+ * Re-checks in a loop, as `DriverSwapGate.awaitSwap` does, so a compaction
3183
+ * armed while this turn was already waiting is also awaited. `timeoutMs`
3184
+ * bounds the whole wait, not each iteration.
3185
+ */
3186
+ async awaitIdle(timeoutMs) {
3187
+ if (this.held.size === 0) return "idle";
3188
+ const deadline = Date.now() + timeoutMs;
3189
+ let waited = false;
3190
+ while (this.held.size > 0) {
3191
+ const opened = this.opened;
3192
+ if (!opened) break;
3193
+ const remaining = deadline - Date.now();
3194
+ if (remaining <= 0) return "timeout";
3195
+ if (await raceDeadline(opened, remaining) === "timeout") return "timeout";
3196
+ waited = true;
3197
+ }
3198
+ return waited ? "waited" : "idle";
3199
+ }
3200
+ };
3201
+ async function raceDeadline(opened, ms) {
3202
+ let timer;
3203
+ const expired = new Promise((resolve4) => {
3204
+ timer = setTimeout(() => resolve4("timeout"), ms);
3205
+ timer.unref?.();
3206
+ });
3207
+ try {
3208
+ return await Promise.race([opened.then(() => "opened"), expired]);
3209
+ } finally {
3210
+ if (timer) clearTimeout(timer);
3211
+ }
3212
+ }
3213
+ var DEFAULT_COMPACTION_GATE_TIMEOUT_MS = 60 * 6e4;
3214
+ function compactionGateTimeoutMs() {
3215
+ const raw = Number(process.env.SKAILE_COMPACTION_GATE_TIMEOUT_MS);
3216
+ return Number.isFinite(raw) && raw > 0 ? raw : DEFAULT_COMPACTION_GATE_TIMEOUT_MS;
3217
+ }
3218
+ var COMPACTION_GATE_TIMEOUT_MESSAGE = "The session is still compacting its history and could not take this message. Send it again in a moment.";
3219
+ async function guardTurnAgainstCompaction(deps) {
3220
+ const outcome = await deps.gate.awaitIdle(deps.timeoutMs ?? compactionGateTimeoutMs());
3221
+ if (outcome === "waited") deps.log(`[serve] ${deps.what} released after compaction settled`);
3222
+ if (outcome !== "timeout") return true;
3223
+ deps.log(`[serve] ${deps.what} abandoned: a compaction has held the driver past its bound`);
3224
+ deps.sendEvent({ type: "error", message: COMPACTION_GATE_TIMEOUT_MESSAGE, fatal: false });
3225
+ return false;
3226
+ }
3227
+
3126
3228
  // runner/src/driver-swap-gate.ts
3127
3229
  var DriverSwapGate = class {
3128
3230
  /** Resolves when the in-flight driver recreate settles (resolve or reject). */
@@ -3374,6 +3476,10 @@ var CompactionOrchestrator = class {
3374
3476
  config;
3375
3477
  opts;
3376
3478
  _isCompacting = false;
3479
+ /** Whether {@link CompactionOrchestratorOptions.onCompactionStart} has fired for the current call. */
3480
+ _startFired = false;
3481
+ /** Whether {@link CompactionOrchestratorOptions.onCompactionEnd} has fired for the current call. */
3482
+ _endFired = false;
3377
3483
  lastCompactionSeq = null;
3378
3484
  lastCompactionTime = null;
3379
3485
  /**
@@ -3428,12 +3534,34 @@ var CompactionOrchestrator = class {
3428
3534
  async compact(trigger, focus) {
3429
3535
  if (this._isCompacting) return null;
3430
3536
  this._isCompacting = true;
3537
+ this._startFired = false;
3538
+ this._endFired = false;
3431
3539
  try {
3432
3540
  return await this._doCompact(trigger, focus);
3433
3541
  } finally {
3434
3542
  this._isCompacting = false;
3543
+ try {
3544
+ this._endCompaction();
3545
+ } catch (err) {
3546
+ this.opts.onLog?.(
3547
+ `[compaction] onCompactionEnd threw while unwinding: ${err instanceof Error ? err.message : String(err)}`
3548
+ );
3549
+ } finally {
3550
+ this.opts.onCompactionSettled?.();
3551
+ }
3435
3552
  }
3436
3553
  }
3554
+ /**
3555
+ * Fire {@link CompactionOrchestratorOptions.onCompactionEnd} once per
3556
+ * compaction. The host stops suppressing forwarded events here, so a second
3557
+ * call would emit a stray idle status over the injection turn that follows
3558
+ * it on the success path.
3559
+ */
3560
+ _endCompaction() {
3561
+ if (!this._startFired || this._endFired) return;
3562
+ this._endFired = true;
3563
+ this.opts.onCompactionEnd?.();
3564
+ }
3437
3565
  /**
3438
3566
  * One compaction attempt, plus at most one narrowed retry.
3439
3567
  *
@@ -3461,7 +3589,10 @@ var CompactionOrchestrator = class {
3461
3589
  modelAtCompaction: driverModel,
3462
3590
  capabilitySignatureAtCompaction
3463
3591
  };
3464
- if (!isRetry) this.opts.onCompactionStart?.(trigger);
3592
+ if (!isRetry) {
3593
+ this._startFired = true;
3594
+ this.opts.onCompactionStart?.(trigger);
3595
+ }
3465
3596
  this.opts.onLog?.(
3466
3597
  `[compaction] ${isRetry ? "Retrying" : "Starting"} (trigger=${trigger}, tokens=${tokensBefore})`
3467
3598
  );
@@ -3482,7 +3613,7 @@ var CompactionOrchestrator = class {
3482
3613
  if (this._shouldRetry(trigger, errorCode, focus, isRetry)) {
3483
3614
  return await this._doCompact(trigger, RETRY_FOCUS_DIRECTIVE, { tokensBefore });
3484
3615
  }
3485
- this.opts.onCompactionEnd?.();
3616
+ this._endCompaction();
3486
3617
  return null;
3487
3618
  }
3488
3619
  const actualUsage = this.driver.getTokenUsage();
@@ -3491,7 +3622,7 @@ var CompactionOrchestrator = class {
3491
3622
  if (!validation.ok) {
3492
3623
  this._emitValidationFailure(attempt, validation.errorCode, tokensAfter, summaryText);
3493
3624
  this._beginCooldown();
3494
- this.opts.onCompactionEnd?.();
3625
+ this._endCompaction();
3495
3626
  return null;
3496
3627
  }
3497
3628
  return await this._completeCompaction(
@@ -3711,7 +3842,7 @@ var CompactionOrchestrator = class {
3711
3842
  this.lastCompactionTime = Date.now();
3712
3843
  this.lastSummary = summaryText;
3713
3844
  this.messagesSinceCompaction = 0;
3714
- this.opts.onCompactionEnd?.();
3845
+ this._endCompaction();
3715
3846
  if (trigger !== "hibernate") {
3716
3847
  this.opts.onLog?.("[compaction] Resetting driver session");
3717
3848
  await this.driver.resetSession();
@@ -5737,6 +5868,7 @@ async function startAgentServer(opts) {
5737
5868
  let driverStarted = false;
5738
5869
  let driverStartInFlight = null;
5739
5870
  const driverSwapGate = new DriverSwapGate();
5871
+ const compactionGate = new CompactionGate();
5740
5872
  let driverRestartChain = Promise.resolve();
5741
5873
  let driver = secretsMode === "env" ? agentSession.driver : void 0;
5742
5874
  let secretsProvisioned = secretsMode === "env";
@@ -5761,15 +5893,19 @@ async function startAgentServer(opts) {
5761
5893
  let eventSeq = 0;
5762
5894
  let lastEmittedRuntimeSession;
5763
5895
  let compacting = false;
5896
+ let suppressedBy = null;
5764
5897
  let compactionOrchestrator = null;
5765
5898
  const compactionConfig = wsConfig.compaction;
5766
5899
  function rebuildCompactionOrchestrator() {
5767
5900
  if (!driver) return;
5901
+ let gateHold = null;
5768
5902
  compactionOrchestrator = new CompactionOrchestrator({
5769
5903
  driver,
5770
5904
  config: compactionConfig,
5771
5905
  onCompactionStart: (trigger) => {
5772
5906
  compacting = true;
5907
+ gateHold = compactionGate.begin();
5908
+ suppressedBy = gateHold;
5773
5909
  sendEvent({ type: "status", phase: "compacting" });
5774
5910
  log(`[serve] compaction started (trigger=${trigger})`);
5775
5911
  },
@@ -5780,9 +5916,15 @@ async function startAgentServer(opts) {
5780
5916
  sendEvent(event);
5781
5917
  },
5782
5918
  onCompactionEnd: () => {
5919
+ if (suppressedBy !== gateHold) return;
5783
5920
  compacting = false;
5921
+ suppressedBy = null;
5784
5922
  sendEvent({ type: "status", phase: "idle" });
5785
5923
  },
5924
+ onCompactionSettled: () => {
5925
+ compactionGate.settle(gateHold);
5926
+ gateHold = null;
5927
+ },
5786
5928
  onLog: (line) => log(`[serve] ${line}`),
5787
5929
  // Phase 3: stamp every CompactionAttemptEvent with the registry's
5788
5930
  // current signature so wake-time tier-1 selection has the input it
@@ -6587,6 +6729,7 @@ async function startAgentServer(opts) {
6587
6729
  rejectSessionReady(err instanceof Error ? err : new Error(errMsg));
6588
6730
  });
6589
6731
  }
6732
+ const awaitCompactionIdle = (what) => guardTurnAgainstCompaction({ gate: compactionGate, what, log, sendEvent });
6590
6733
  async function handlePrompt(cmd) {
6591
6734
  if (cmd.messageId) sendEvent({ type: "prompt_ack", messageId: cmd.messageId });
6592
6735
  if (!await awaitSessionReadyOrFail()) return;
@@ -6601,6 +6744,7 @@ async function startAgentServer(opts) {
6601
6744
  }
6602
6745
  log(`[serve] prompt: ${cmd.prompt.slice(0, 80)}...`);
6603
6746
  await driverSwapGate.awaitSwap();
6747
+ if (!await awaitCompactionIdle("prompt")) return;
6604
6748
  await restageMaterializedSkills(true);
6605
6749
  const activeFlow = getOnlyActiveFlow();
6606
6750
  if (activeFlow) {
@@ -6653,6 +6797,7 @@ async function startAgentServer(opts) {
6653
6797
  log(`[serve] reply: ${cmd.answer.slice(0, 80)}...`);
6654
6798
  await driverSwapGate.awaitSwap();
6655
6799
  if (driver.hasPendingQuestion() && driver.answerQuestion(cmd.answer, cmd.question)) return;
6800
+ if (!await awaitCompactionIdle("reply")) return;
6656
6801
  const endTurn = driverSwapGate.beginTurn();
6657
6802
  try {
6658
6803
  await driver.prompt(cmd.answer);
@@ -7194,5 +7339,5 @@ function touchSession(state) {
7194
7339
  }
7195
7340
 
7196
7341
  export { CLAUDE_CODE_CREDENTIALS_KEY, COMPILE_MANIFEST_FILENAME, CapabilityRegistry, DEFAULT_CAPABILITY_CALL_TIMEOUT_MS, DEFAULT_COALESCE_MS, DEFAULT_FLOW_MUTATE_CONNECTOR_WAIT_MS, MOUNT_LIST_MAX_DEPTH, MOUNT_LIST_MAX_ENTRIES, MOUNT_READ_DEADLINE_FACTOR, MOUNT_TREE_OP_DEADLINE_FACTOR, MarkdownStreamer, PreInitRingSink, agentDefinitionExists, bootstrapCapabilityRegistry, bootstrapRunnerLogStore, buildAgentResources, buildClientCapabilityHandler, buildConnectorTokenMediator, buildContextSection, buildEnvironmentSection, buildResourcesAvailablePayload, buildStoreSnapshotReplay, builtinCapabilities, capabilityLogInstance, clearPreInitRingSink, clearSession, compileComposition, computeCapabilitySignature, connectorRefreshKind, createAgentSession, createFlowConnectorReadiness, createSessionStimulusBus, defineCapability, deleteSession, dispatchRunnerCapabilityInvocation, emitSystemPromptComposed, ensureClaudeSettingsDisablesConnectors, ensureGitConfigInclude, executeConnectorMutate, extractClaudeAiOauthExpiresAt, getPreInitRingSink, handleMountResourceRequest, handleResourceRequest, hasNonTerminalFlow, hostOpResumeStimulus, installPreInitRingSink, isTerminalFlowStatus, listSessions, loadAgentManifest, loadCompileManifest, loadCompileManifestFromDir, loadSession, loadSessionById, mcpAuthSecretKey, newSession, nulTailPaddingLength, pickRepointedManager, planFlowMutate, reconcilePendingDecisions, registerActiveFlow, registerCompositionCapabilities, rejectCapabilityOnApprovalDeny, resetRunnerLogStore, resolveAgentComposition, resolveAgentMixins, resolveBinding, resolveCapabilityCallTimeoutMs, resolveCapabilityResult, resolveComposition, resolveFlowMutateConnectorWaitMs, resolveMixin, runAgentChat, saveSession, setCurrentSession, setUpFlowConnector, startAgentServer, stimulusFromMetas, touchSession, validateInputResponse, writeClaudeCodeCredentialsFile };
7197
- //# sourceMappingURL=chunk-GY5SLCH2.js.map
7198
- //# sourceMappingURL=chunk-GY5SLCH2.js.map
7342
+ //# sourceMappingURL=chunk-5WMFU575.js.map
7343
+ //# sourceMappingURL=chunk-5WMFU575.js.map