@skaile/workspaces 3.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/{asset-feeds-XKPJZ6QT.js → asset-feeds-3XCKB542.js} +4 -4
  3. package/dist/{asset-feeds-XKPJZ6QT.js.map → asset-feeds-3XCKB542.js.map} +1 -1
  4. package/dist/asset-manager/index.js +1 -1
  5. package/dist/bridge/drivers/claude-sdk.js +5 -205
  6. package/dist/bridge/drivers/claude-sdk.js.map +1 -1
  7. package/dist/bridge/drivers/codex.js +1 -1
  8. package/dist/bridge/drivers/continue.js +2 -2
  9. package/dist/bridge/drivers/echo.js +1 -1
  10. package/dist/bridge/drivers/gemini.js +3 -3
  11. package/dist/bridge/drivers/goose.js +2 -2
  12. package/dist/bridge/drivers/omp.js +1 -1
  13. package/dist/bridge/drivers/opencode.js +2 -2
  14. package/dist/bridge/drivers/qwen.js +3 -3
  15. package/dist/bridge/index.js +13 -3
  16. package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
  17. package/dist/bridge/src/drivers/resume-probe.d.ts +54 -0
  18. package/dist/bridge/src/drivers/resume-probe.d.ts.map +1 -0
  19. package/dist/bridge/src/drivers/scrub-transcript.d.ts +17 -0
  20. package/dist/bridge/src/drivers/scrub-transcript.d.ts.map +1 -1
  21. package/dist/bridge/src/index.d.ts +1 -0
  22. package/dist/bridge/src/index.d.ts.map +1 -1
  23. package/dist/{chunk-KXWUCKP5.js → chunk-2U4ISGE2.js} +4 -4
  24. package/dist/{chunk-KXWUCKP5.js.map → chunk-2U4ISGE2.js.map} +1 -1
  25. package/dist/chunk-46LE3GNY.js +296 -0
  26. package/dist/chunk-46LE3GNY.js.map +1 -0
  27. package/dist/{chunk-QGDQHNYC.js → chunk-BENN6MO4.js} +3 -3
  28. package/dist/{chunk-QGDQHNYC.js.map → chunk-BENN6MO4.js.map} +1 -1
  29. package/dist/{chunk-BJDACPWZ.js → chunk-FP7DNGX6.js} +3 -3
  30. package/dist/{chunk-BJDACPWZ.js.map → chunk-FP7DNGX6.js.map} +1 -1
  31. package/dist/{chunk-ZO7KL7GN.js → chunk-H26KDA7J.js} +4 -4
  32. package/dist/{chunk-ZO7KL7GN.js.map → chunk-H26KDA7J.js.map} +1 -1
  33. package/dist/{chunk-P5W6JVD4.js → chunk-HA2H3FLE.js} +3 -3
  34. package/dist/{chunk-P5W6JVD4.js.map → chunk-HA2H3FLE.js.map} +1 -1
  35. package/dist/{chunk-JQMULHO6.js → chunk-HNR2IT34.js} +11 -9
  36. package/dist/chunk-HNR2IT34.js.map +1 -0
  37. package/dist/{chunk-TXTCW7V6.js → chunk-MJ6EME7A.js} +6 -6
  38. package/dist/{chunk-TXTCW7V6.js.map → chunk-MJ6EME7A.js.map} +1 -1
  39. package/dist/{chunk-NMKTM55X.js → chunk-PT2ZUW2E.js} +2 -2
  40. package/dist/{chunk-NMKTM55X.js.map → chunk-PT2ZUW2E.js.map} +1 -1
  41. package/dist/{chunk-WECBTWWZ.js → chunk-PUEHYNBT.js} +3 -3
  42. package/dist/{chunk-WECBTWWZ.js.map → chunk-PUEHYNBT.js.map} +1 -1
  43. package/dist/{chunk-SR6NBBWT.js → chunk-QFO4IYBZ.js} +2 -2
  44. package/dist/{chunk-SR6NBBWT.js.map → chunk-QFO4IYBZ.js.map} +1 -1
  45. package/dist/{chunk-EH7BCJF4.js → chunk-TARN55L3.js} +6 -6
  46. package/dist/{chunk-EH7BCJF4.js.map → chunk-TARN55L3.js.map} +1 -1
  47. package/dist/{chunk-P2J3MLTW.js → chunk-VBMY3VCW.js} +3 -3
  48. package/dist/{chunk-P2J3MLTW.js.map → chunk-VBMY3VCW.js.map} +1 -1
  49. package/dist/{chunk-XJECOBCO.js → chunk-X73AMPOT.js} +3 -3
  50. package/dist/{chunk-XJECOBCO.js.map → chunk-X73AMPOT.js.map} +1 -1
  51. package/dist/{chunk-Q6O53D5Q.js → chunk-ZGTM4BOU.js} +2 -2
  52. package/dist/{chunk-Q6O53D5Q.js.map → chunk-ZGTM4BOU.js.map} +1 -1
  53. package/dist/cli/index.js +30 -30
  54. package/dist/connectors/index.js +4 -4
  55. package/dist/{ensure-sources-D6R57GAP.js → ensure-sources-AST427RF.js} +4 -4
  56. package/dist/{ensure-sources-D6R57GAP.js.map → ensure-sources-AST427RF.js.map} +1 -1
  57. package/dist/factory-assets/connectors/box.js +4 -4
  58. package/dist/factory-assets/connectors/deploy.js +4 -4
  59. package/dist/factory-assets/connectors/devserver.js +4 -4
  60. package/dist/factory-assets/connectors/flow/adapter.js +4 -4
  61. package/dist/factory-assets/connectors/flow/run-flow.js +5 -5
  62. package/dist/factory-assets/connectors/flow.js +4 -4
  63. package/dist/factory-assets/connectors/git.js +4 -4
  64. package/dist/factory-assets/connectors/gmail.js +4 -4
  65. package/dist/factory-assets/connectors/googledrive.js +4 -4
  66. package/dist/factory-assets/connectors/local.js +4 -4
  67. package/dist/factory-assets/connectors/mattermost.js +4 -4
  68. package/dist/factory-assets/connectors/memory.js +4 -4
  69. package/dist/factory-assets/connectors/minio.js +4 -4
  70. package/dist/factory-assets/connectors/postgres.js +4 -4
  71. package/dist/factory-assets/connectors/s3.js +4 -4
  72. package/dist/factory-assets/connectors/sharepoint.js +4 -4
  73. package/dist/factory-assets/connectors/sqlite.js +4 -4
  74. package/dist/factory-assets/connectors/static-server.js +4 -4
  75. package/dist/factory-assets/connectors/tunnel.js +4 -4
  76. package/dist/factory-assets/connectors/webdav.js +4 -4
  77. package/dist/factory-assets/connectors/xstate-store.js +4 -4
  78. package/dist/factory-assets/connectors/xstate.js +4 -4
  79. package/dist/{helpers-IS4MSEOQ.js → helpers-IZDG57TR.js} +4 -4
  80. package/dist/{helpers-IS4MSEOQ.js.map → helpers-IZDG57TR.js.map} +1 -1
  81. package/dist/{library-publish-QJACP6FW.js → library-publish-XGJ7IOU2.js} +6 -6
  82. package/dist/{library-publish-QJACP6FW.js.map → library-publish-XGJ7IOU2.js.map} +1 -1
  83. package/dist/{open-library-3FMLAU3F.js → open-library-YDS66KLH.js} +5 -5
  84. package/dist/{open-library-3FMLAU3F.js.map → open-library-YDS66KLH.js.map} +1 -1
  85. package/dist/{project-KEAAGHSX.js → project-NR53RZOT.js} +5 -5
  86. package/dist/{project-KEAAGHSX.js.map → project-NR53RZOT.js.map} +1 -1
  87. package/dist/runner/index.js +7 -7
  88. package/dist/runner/src/serve.d.ts.map +1 -1
  89. package/dist/sdk/asset-manager.js +1 -1
  90. package/dist/sdk/bridge.js +13 -3
  91. package/dist/sdk/index.js +7 -7
  92. package/dist/sdk/runner.js +7 -7
  93. package/dist/{setup-VX6EPF5P.js → setup-I5SLLHRA.js} +5 -5
  94. package/dist/{setup-VX6EPF5P.js.map → setup-I5SLLHRA.js.map} +1 -1
  95. package/dist/{source-45XHQSBF.js → source-DDZKKQH2.js} +6 -6
  96. package/dist/{source-45XHQSBF.js.map → source-DDZKKQH2.js.map} +1 -1
  97. package/dist/{source-manifest-publish-M34SKD46.js → source-manifest-publish-OTVKHRX3.js} +7 -7
  98. package/dist/{source-manifest-publish-M34SKD46.js.map → source-manifest-publish-OTVKHRX3.js.map} +1 -1
  99. package/dist/tui/index.js +7 -7
  100. package/dist/types/src/lifecycle.d.ts +12 -0
  101. package/dist/types/src/lifecycle.d.ts.map +1 -1
  102. package/dist/workspace-plugin/index.js +1 -1
  103. package/package.json +1 -1
  104. package/dist/chunk-ISQWMBKD.js +0 -74
  105. package/dist/chunk-ISQWMBKD.js.map +0 -1
  106. package/dist/chunk-JQMULHO6.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import { fetchProviderModels } from '../../chunk-V34ZEXSE.js';
2
2
  import { classifyGenericErrorMessage } from '../../chunk-GAH4YRCI.js';
3
- import { BUILTIN_DRIVER_CATALOG, AgentDriver, getBridgeLogger } from '../../chunk-SR6NBBWT.js';
3
+ import { BUILTIN_DRIVER_CATALOG, AgentDriver, getBridgeLogger } from '../../chunk-QFO4IYBZ.js';
4
4
  import '../../chunk-6E6PKKAD.js';
5
5
  import '../../chunk-U5POE4BA.js';
6
6
  import '../../chunk-7GOCNYUV.js';
@@ -1,6 +1,6 @@
1
- import { SubprocessCliDriver, mapApiKeysToEnv, extractText, extractCost, extractTokens } from '../../chunk-BJDACPWZ.js';
1
+ import { SubprocessCliDriver, mapApiKeysToEnv, extractText, extractCost, extractTokens } from '../../chunk-FP7DNGX6.js';
2
2
  import '../../chunk-GAH4YRCI.js';
3
- import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from '../../chunk-SR6NBBWT.js';
3
+ import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from '../../chunk-QFO4IYBZ.js';
4
4
  import '../../chunk-6E6PKKAD.js';
5
5
  import '../../chunk-U5POE4BA.js';
6
6
  import '../../chunk-7GOCNYUV.js';
@@ -1,5 +1,5 @@
1
1
  import { dispatchCapability } from '../../chunk-RRVQAE5D.js';
2
- import { BUILTIN_DRIVER_CATALOG, AgentDriver, getBridgeLogger } from '../../chunk-SR6NBBWT.js';
2
+ import { BUILTIN_DRIVER_CATALOG, AgentDriver, getBridgeLogger } from '../../chunk-QFO4IYBZ.js';
3
3
  import '../../chunk-6E6PKKAD.js';
4
4
  import '../../chunk-U5POE4BA.js';
5
5
  import '../../chunk-7GOCNYUV.js';
@@ -1,8 +1,8 @@
1
- export { GeminiDriver, GeminiFamilyDriver, geminiDriverTarget } from '../../chunk-KXWUCKP5.js';
2
- import '../../chunk-BJDACPWZ.js';
1
+ export { GeminiDriver, GeminiFamilyDriver, geminiDriverTarget } from '../../chunk-2U4ISGE2.js';
2
+ import '../../chunk-FP7DNGX6.js';
3
3
  import '../../chunk-V34ZEXSE.js';
4
4
  import '../../chunk-GAH4YRCI.js';
5
- import '../../chunk-SR6NBBWT.js';
5
+ import '../../chunk-QFO4IYBZ.js';
6
6
  import '../../chunk-6E6PKKAD.js';
7
7
  import '../../chunk-U5POE4BA.js';
8
8
  import '../../chunk-7GOCNYUV.js';
@@ -1,6 +1,6 @@
1
- import { SubprocessCliDriver, mapApiKeysToEnv, extractText, extractCost, extractTokens } from '../../chunk-BJDACPWZ.js';
1
+ import { SubprocessCliDriver, mapApiKeysToEnv, extractText, extractCost, extractTokens } from '../../chunk-FP7DNGX6.js';
2
2
  import '../../chunk-GAH4YRCI.js';
3
- import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from '../../chunk-SR6NBBWT.js';
3
+ import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from '../../chunk-QFO4IYBZ.js';
4
4
  import '../../chunk-6E6PKKAD.js';
5
5
  import '../../chunk-U5POE4BA.js';
6
6
  import '../../chunk-7GOCNYUV.js';
@@ -1,5 +1,5 @@
1
1
  import { classifyGenericErrorMessage } from '../../chunk-GAH4YRCI.js';
2
- import { BUILTIN_DRIVER_CATALOG, AgentDriver, getBridgeLogger } from '../../chunk-SR6NBBWT.js';
2
+ import { BUILTIN_DRIVER_CATALOG, AgentDriver, getBridgeLogger } from '../../chunk-QFO4IYBZ.js';
3
3
  import '../../chunk-6E6PKKAD.js';
4
4
  import '../../chunk-U5POE4BA.js';
5
5
  import '../../chunk-7GOCNYUV.js';
@@ -1,6 +1,6 @@
1
- import { SubprocessCliDriver, mapApiKeysToEnv, extractText, extractCost, extractTokens } from '../../chunk-BJDACPWZ.js';
1
+ import { SubprocessCliDriver, mapApiKeysToEnv, extractText, extractCost, extractTokens } from '../../chunk-FP7DNGX6.js';
2
2
  import '../../chunk-GAH4YRCI.js';
3
- import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from '../../chunk-SR6NBBWT.js';
3
+ import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from '../../chunk-QFO4IYBZ.js';
4
4
  import '../../chunk-6E6PKKAD.js';
5
5
  import '../../chunk-U5POE4BA.js';
6
6
  import '../../chunk-7GOCNYUV.js';
@@ -1,8 +1,8 @@
1
- import { GeminiFamilyDriver } from '../../chunk-KXWUCKP5.js';
2
- import '../../chunk-BJDACPWZ.js';
1
+ import { GeminiFamilyDriver } from '../../chunk-2U4ISGE2.js';
2
+ import '../../chunk-FP7DNGX6.js';
3
3
  import { fetchProviderModels } from '../../chunk-V34ZEXSE.js';
4
4
  import '../../chunk-GAH4YRCI.js';
5
- import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from '../../chunk-SR6NBBWT.js';
5
+ import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from '../../chunk-QFO4IYBZ.js';
6
6
  import '../../chunk-6E6PKKAD.js';
7
7
  import '../../chunk-U5POE4BA.js';
8
8
  import '../../chunk-7GOCNYUV.js';
@@ -1,10 +1,20 @@
1
- export { BridgeRuntime, EventNormalizer, createRuntime, detectFileChange, detectFileChanges, summarizeToolCall, summarizeToolResult, validateApiKey } from '../chunk-P5W6JVD4.js';
2
- export { CLOUD_SECRET_ENV_KEYS, SUPPORTED_CLOUDS, buildClaudeCloudEnv } from '../chunk-ISQWMBKD.js';
1
+ export { BridgeRuntime, EventNormalizer, createRuntime, detectFileChange, detectFileChanges, summarizeToolCall, summarizeToolResult, validateApiKey } from '../chunk-HA2H3FLE.js';
2
+ export { CLOUD_SECRET_ENV_KEYS, SUPPORTED_CLOUDS, buildClaudeCloudEnv, probeResumeTranscript, resolveClaudeConfigDir } from '../chunk-46LE3GNY.js';
3
3
  export { dispatchCapability, filterRenderCapabilities, renderFallback } from '../chunk-RRVQAE5D.js';
4
4
  export { ModelTierResolutionError, PROVIDER_MODEL_TIERS, STATIC_MODELS, fetchProviderModels, getModels, getStaticModels, resolveModelTier } from '../chunk-V34ZEXSE.js';
5
5
  export { AccountUnavailableError, AuthError, classifyClaudeSdkError, reclassifyAuthAsAccountUnavailable } from '../chunk-GAH4YRCI.js';
6
- export { AgentDriver, BUILTIN_DRIVER_CATALOG, DRIVER_CATALOG, createDriver, getBridgeLogger, listDrivers, listModelsForDriver, registerBuiltinDrivers } from '../chunk-SR6NBBWT.js';
6
+ export { AgentDriver, BUILTIN_DRIVER_CATALOG, DRIVER_CATALOG, createDriver, getBridgeLogger, listDrivers, listModelsForDriver, registerBuiltinDrivers } from '../chunk-QFO4IYBZ.js';
7
7
  import '../chunk-6E6PKKAD.js';
8
+ import '../chunk-P43HBWKK.js';
9
+ import '../chunk-F3HNW354.js';
10
+ import '../chunk-K5GBV4SA.js';
11
+ import '../chunk-ZAP2BDHG.js';
12
+ import '../chunk-UFY2HFLO.js';
13
+ import '../chunk-Q26C5GLO.js';
14
+ import '../chunk-MENCWIHW.js';
15
+ import '../chunk-P4VHQA4N.js';
16
+ import '../chunk-DYMWJAL4.js';
17
+ import '../chunk-GEEW6SY2.js';
8
18
  import '../chunk-U5POE4BA.js';
9
19
  import '../chunk-7GOCNYUV.js';
10
20
  import '../chunk-NSBPE2FW.js';
@@ -1 +1 @@
1
- {"version":3,"file":"claude-sdk.d.ts","sourceRoot":"","sources":["../../../../bridge/src/drivers/claude-sdk.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAU,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAUnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAUvE,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAEpE,OAAO,EACL,KAAK,WAAW,EAChB,WAAW,EAIX,KAAK,UAAU,EACf,KAAK,gBAAgB,EAEtB,MAAM,aAAa,CAAC;AAsJrB,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,QAAQ,CAAC,UAAU,EAAE,UAAU,CAK7B;IAEF,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAyC;IAC7D,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,GAAG,CAA6C;IACxD,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,QAAQ,CAAM;IACtB;;;;OAIG;IACH,OAAO,CAAC,mBAAmB,CAAK;IAChC,oGAAoG;IACpG,OAAO,CAAC,qBAAqB,CAAS;IAEtC,wEAAwE;IACxE,OAAO,CAAC,KAAK,CAAyB;IACtC;;;;OAIG;IACH,OAAO,CAAC,aAAa,CAAuB;IAC5C,gDAAgD;IAChD,OAAO,CAAC,WAAW,CAA6B;IAChD,4CAA4C;IAC5C,OAAO,CAAC,UAAU,CAAuC;IACzD;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAoC;IACtD,6DAA6D;IAC7D,OAAO,CAAC,aAAa,CAAS;IAC9B,oFAAoF;IACpF,OAAO,CAAC,gBAAgB,CAAK;IAC7B,oFAAoF;IACpF,OAAO,CAAC,cAAc,CAA8C;IACpE;;;;;;;;OAQG;IACH,OAAO,CAAC,gBAAgB,CAAS;IACjC,sEAAsE;IACtE,OAAO,CAAC,UAAU,CAAS;IAC3B,+DAA+D;IAC/D,OAAO,CAAC,SAAS,CAAM;IACvB;;;;;;;;;OASG;IACH,OAAO,CAAC,eAAe,CAKP;IAChB,qDAAqD;IACrD,OAAO,CAAC,cAAc,CAA0B;IAChD,uDAAuD;IACvD,OAAO,CAAC,WAAW,CAA2B;IAC9C,oEAAoE;IACpE,OAAO,CAAC,cAAc,CAAuB;IAC7C;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB,CAAS;IAErC;;;;;;;;;;;;;;OAcG;gBACS,MAAM,EAAE,WAAW;IAK/B,IAAa,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAElD;IAEQ,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAC,CAAC,GAAG,IAAI;IAMrF,QAAQ,IAAI,MAAM,GAAG,SAAS;IAIvC;;;;;OAKG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAWnC;;;;;;;;;;;;;;OAcG;IACI,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY7C;;;;;OAKG;YACW,SAAS;IAmJvB;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IA4B5B,OAAO,CAAC,uBAAuB;IAO/B;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAiBrB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,cAAc;IAetB;;;;;;;OAOG;IACH,OAAO,CAAC,sBAAsB;IAM9B,2EAA2E;IAC3E,OAAO,CAAC,QAAQ;IAiBhB,+EAA+E;IAC/E,OAAO,CAAC,SAAS;IASjB,iFAAiF;IACjF,OAAO,CAAC,qBAAqB;IAgB7B;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IA4B/B;;;;;;;OAOG;YACW,uBAAuB;IAgDrC;;;;;;;OAOG;YACW,mBAAmB;IA0DjC;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAQ9B;;;;;;;;;;;;;;;;OAgBG;YACW,2BAA2B;IA6BzC;;;;;OAKG;IACH,OAAO,CAAC,YAAY;YAQN,UAAU;IA6Lf,gBAAgB,IAAI,gBAAgB,EAAE;IAM/C;;;;;;;;;OASG;IACH,OAAO,CAAC,gBAAgB,CAyCtB;IAEO,kBAAkB,IAAI,OAAO;IAI7B,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO;IAgCnE;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAS3B;;;;;;;;OAQG;YACW,wBAAwB;IAiBtC;;;;;;;OAOG;YACW,wBAAwB;IAwDtC,yDAAyD;YAC3C,kBAAkB;IAmBhC;;;;OAIG;YACW,eAAe;IA6C7B,gFAAgF;IAChF,OAAO,CAAC,gBAAgB;IAWxB;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAkC3B;;;;;;;OAOG;IACH,OAAO,CAAC,YAAY;IAkBpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,OAAO,CAAC,QAAQ;IAsChB,OAAO,CAAC,gBAAgB;IAoBxB;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,sBAAsB;IAkC9B,OAAO,CAAC,wBAAwB;IAehC,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,iBAAiB;IAyCzB,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,mBAAmB;IA4B3B;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IA4B1B,6EAA6E;IAC7E,OAAO,CAAC,mBAAmB;IAwB3B;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAazB;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAgDhC,+CAA+C;IAC/C,OAAO,CAAC,gBAAgB;IAYxB,gEAAgE;YACjD,kBAAkB;IAIjC,OAAO,CAAC,mBAAmB;IAiC3B,OAAO,CAAC,cAAc;IAqBtB;;;;;;;;;;;;OAYG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA0CnC,+DAA+D;IAC/D,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;;;;;;;;OASG;IACI,IAAI,IAAI,IAAI;IAkBJ,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAczC,aAAa,IAAI,UAAU,GAAG,IAAI;IAIlC,gBAAgB,IAAI,MAAM,GAAG,IAAI;IAIpC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBnC;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;IA0B7B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAazB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,gBAAgB;CAezB;AAED;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,YAAY,CAAC,WAAW,CAU3D,CAAC"}
1
+ {"version":3,"file":"claude-sdk.d.ts","sourceRoot":"","sources":["../../../../bridge/src/drivers/claude-sdk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Pre-first-turn resume probe for the Claude Agent SDK driver.
3
+ *
4
+ * A tier-1 native resume only hands its session id to the SDK inside the first
5
+ * real turn, so the `jsonl_lost` outcome ("No conversation found") is invisible
6
+ * until a turn is consumed. The runner shares the container filesystem with the
7
+ * SDK, so a cheap `stat` of the on-disk JSONL transcript is an authoritative,
8
+ * side-effect-free signal of whether the resume will find its history — no
9
+ * probe query, no spurious model turn.
10
+ *
11
+ * @module
12
+ */
13
+ /**
14
+ * Outcome of {@link probeResumeTranscript}: whether the SDK transcript for a
15
+ * requested tier-1 resume exists on disk.
16
+ *
17
+ * @category Resume probe
18
+ */
19
+ export type ResumeProbeOutcome = "transcript_found" | "jsonl_lost";
20
+ /**
21
+ * Resolve the Claude Code config directory — the parent of `projects/` — from
22
+ * an explicit env map, the process environment, or the `~/.claude` default.
23
+ *
24
+ * The runner's probe and the claude-sdk driver share this one resolver, so they
25
+ * agree as long as they see the same `CLAUDE_CONFIG_DIR`. Today they do:
26
+ * `CLAUDE_CONFIG_DIR` is container-scoped and neither side threads a per-session
27
+ * override through `config.env`, so both fall through to `process.env`. If a
28
+ * future change ever set the driver's `config.env.CLAUDE_CONFIG_DIR` to a
29
+ * divergent path, the reactive `resume_failed { jsonl_lost }` turn remains the
30
+ * safety net.
31
+ *
32
+ * @category Resume probe
33
+ */
34
+ export declare function resolveClaudeConfigDir(env?: Record<string, string | undefined>): string;
35
+ /**
36
+ * Probe whether the SDK JSONL transcript for `sessionId` exists on disk.
37
+ *
38
+ * Non-null locator result → `transcript_found`; null → `jsonl_lost`;
39
+ * `undefined` → outcome unknown (the probe exceeded its budget or errored). The
40
+ * caller leaves the ack field ABSENT on `undefined` so the reactive
41
+ * `resume_failed { jsonl_lost }` turn stays the safety net — a timed-out probe
42
+ * must never masquerade as a genuine `jsonl_lost` and force a needless downgrade.
43
+ *
44
+ * `opts.timeoutMs` overrides {@link RESUME_PROBE_TIMEOUT_MS}; `opts.locate`
45
+ * overrides the transcript locator (used by tests / alternate stores).
46
+ *
47
+ * @category Resume probe
48
+ */
49
+ export declare function probeResumeTranscript(sessionId: string, opts?: {
50
+ env?: Record<string, string | undefined>;
51
+ timeoutMs?: number;
52
+ locate?: (configDir: string, sessionId: string) => Promise<string | null>;
53
+ }): Promise<ResumeProbeOutcome | undefined>;
54
+ //# sourceMappingURL=resume-probe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume-probe.d.ts","sourceRoot":"","sources":["../../../../bridge/src/drivers/resume-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAeH;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,kBAAkB,GAAG,YAAY,CAAC;AAEnE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,CAEvF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE;IACL,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC3E,GACA,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAiBzC"}
@@ -110,6 +110,23 @@ export interface ScrubTranscriptResult {
110
110
  * @category Transcript repair
111
111
  */
112
112
  export declare function sniffImageMediaType(base64: string): string | null;
113
+ /**
114
+ * Locate the JSONL transcript for `sessionId` under `<configDir>/projects/`.
115
+ *
116
+ * Claude Code encodes the project directory into the `projects/` subfolder
117
+ * name; rather than reproduce that encoding, this scans every subfolder for
118
+ * `<sessionId>.jsonl` (the session id is a UUID — globally unique).
119
+ *
120
+ * Async and deadline-bounded since #454. The `existsSync(projectsDir)` probe is
121
+ * gone: `readdir` already fails on a missing directory, so the probe was a
122
+ * second stat on the same path for no information.
123
+ *
124
+ * `timeoutMs` defaults to {@link fsDeadlineMs} so callers that only need the
125
+ * path (the resume probe) can omit it.
126
+ *
127
+ * @category Transcript repair
128
+ */
129
+ export declare function locateTranscriptPath(configDir: string, sessionId: string, timeoutMs?: number): Promise<string | null>;
113
130
  /**
114
131
  * Scan a Claude Code SDK transcript for image content blocks whose declared
115
132
  * `media_type` does not match the actual bytes, repair them, and atomically
@@ -1 +1 @@
1
- {"version":3,"file":"scrub-transcript.d.ts","sourceRoot":"","sources":["../../../../bridge/src/drivers/scrub-transcript.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAQH;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC7D;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,GAAG,CAAC,EAAE,WAAW,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,mEAAmE;IACnE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,uFAAuF;IACvF,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,aAAa,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAC;CAClB;AAeD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwCjE;AAgMD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,qBAAqB,CAAC,CAsFhC"}
1
+ {"version":3,"file":"scrub-transcript.d.ts","sourceRoot":"","sources":["../../../../bridge/src/drivers/scrub-transcript.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAQH;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC7D;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,GAAG,CAAC,EAAE,WAAW,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,mEAAmE;IACnE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,uFAAuF;IACvF,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,aAAa,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAC;CAClB;AAeD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwCjE;AA6FD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,MAAuB,GACjC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAoBxB;AAgED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,qBAAqB,CAAC,CAsFhC"}
@@ -5,6 +5,7 @@ export * from "./logger.js";
5
5
  export * from "./models.js";
6
6
  export * from "./normalizer.js";
7
7
  export * from "./registry.js";
8
+ export { probeResumeTranscript, type ResumeProbeOutcome, resolveClaudeConfigDir, } from "./drivers/resume-probe.js";
8
9
  export * from "./runtime.js";
9
10
  export * from "./types.js";
10
11
  export * from "./validation.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,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,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,6 +1,6 @@
1
- import { SubprocessCliDriver, extractText, extractCost, extractTokens } from './chunk-BJDACPWZ.js';
1
+ import { SubprocessCliDriver, extractText, extractCost, extractTokens } from './chunk-FP7DNGX6.js';
2
2
  import { getStaticModels, fetchProviderModels } from './chunk-V34ZEXSE.js';
3
- import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from './chunk-SR6NBBWT.js';
3
+ import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from './chunk-QFO4IYBZ.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-KXWUCKP5.js.map
110
- //# sourceMappingURL=chunk-KXWUCKP5.js.map
109
+ //# sourceMappingURL=chunk-2U4ISGE2.js.map
110
+ //# sourceMappingURL=chunk-2U4ISGE2.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../bridge/src/drivers/gemini.ts"],"names":[],"mappings":"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","file":"chunk-KXWUCKP5.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-2U4ISGE2.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"]}
@@ -0,0 +1,296 @@
1
+ import { fsDeadlineMs, withFsDeadline, tryWithFsDeadline } from './chunk-DYMWJAL4.js';
2
+ import { createReadStream, createWriteStream } from 'fs';
3
+ import { readdir, stat, rename, unlink } from 'fs/promises';
4
+ import { join } from 'path';
5
+ import { pipeline } from 'stream/promises';
6
+ import { homedir } from 'os';
7
+
8
+ // bridge/src/cloud.ts
9
+ var SUPPORTED_CLOUDS = ["default", "bedrock", "vertex", "azure", "gateway"];
10
+ var CLOUD_SECRET_ENV_KEYS = {
11
+ bedrock: [
12
+ "AWS_ACCESS_KEY_ID",
13
+ "AWS_SECRET_ACCESS_KEY",
14
+ "AWS_SESSION_TOKEN",
15
+ "AWS_BEARER_TOKEN_BEDROCK"
16
+ ],
17
+ vertex: ["GOOGLE_APPLICATION_CREDENTIALS_JSON"],
18
+ azure: ["ANTHROPIC_FOUNDRY_API_KEY"],
19
+ gateway: ["ANTHROPIC_AUTH_TOKEN", "ANTHROPIC_API_KEY"]
20
+ };
21
+ var SCRUBBED_ENV_KEYS = ["ANTHROPIC_API_KEY", "ANTHROPIC_AUTH_TOKEN", "ANTHROPIC_BASE_URL"];
22
+ function buildClaudeCloudEnv(args) {
23
+ const { cloud, cloudConfig, cloudSecrets, baseEnv, configEnv, fallbackApiKey } = args;
24
+ const env = { ...baseEnv, ...configEnv ?? {} };
25
+ const ambient = {
26
+ authToken: env.ANTHROPIC_AUTH_TOKEN,
27
+ apiKey: env.ANTHROPIC_API_KEY,
28
+ baseUrl: env.ANTHROPIC_BASE_URL
29
+ };
30
+ for (const key of Object.keys(env)) {
31
+ if (SCRUBBED_ENV_KEYS.includes(key) || key.startsWith("CLAUDE_CODE_USE_")) {
32
+ delete env[key];
33
+ }
34
+ }
35
+ const set = (key, value) => {
36
+ if (value) env[key] = value;
37
+ };
38
+ switch (cloud) {
39
+ case "bedrock": {
40
+ env.CLAUDE_CODE_USE_BEDROCK = "1";
41
+ for (const key of CLOUD_SECRET_ENV_KEYS.bedrock) set(key, cloudSecrets?.[key]);
42
+ set("AWS_REGION", cloudConfig?.region);
43
+ break;
44
+ }
45
+ case "vertex": {
46
+ env.CLAUDE_CODE_USE_VERTEX = "1";
47
+ set("GOOGLE_APPLICATION_CREDENTIALS", cloudSecrets?.GOOGLE_APPLICATION_CREDENTIALS);
48
+ set("ANTHROPIC_VERTEX_PROJECT_ID", cloudConfig?.projectId);
49
+ set("CLOUD_ML_REGION", cloudConfig?.region);
50
+ break;
51
+ }
52
+ case "azure": {
53
+ env.CLAUDE_CODE_USE_FOUNDRY = "1";
54
+ set("ANTHROPIC_FOUNDRY_API_KEY", cloudSecrets?.ANTHROPIC_FOUNDRY_API_KEY);
55
+ if (cloudConfig?.resource) {
56
+ env.ANTHROPIC_FOUNDRY_RESOURCE = cloudConfig.resource;
57
+ } else {
58
+ set("ANTHROPIC_FOUNDRY_BASE_URL", cloudConfig?.baseUrl);
59
+ }
60
+ break;
61
+ }
62
+ case "gateway": {
63
+ set("ANTHROPIC_BASE_URL", cloudConfig?.baseUrl ?? ambient.baseUrl);
64
+ const authToken = cloudSecrets?.ANTHROPIC_AUTH_TOKEN ?? ambient.authToken;
65
+ if (authToken) {
66
+ env.ANTHROPIC_AUTH_TOKEN = authToken;
67
+ } else {
68
+ set(
69
+ "ANTHROPIC_API_KEY",
70
+ cloudSecrets?.ANTHROPIC_API_KEY ?? fallbackApiKey ?? ambient.apiKey
71
+ );
72
+ }
73
+ break;
74
+ }
75
+ }
76
+ return env;
77
+ }
78
+ var STUB_TEXT = "[image removed: unprocessable image data]";
79
+ var STUB_TEXT_OVERSIZED = "[image removed: image too large]";
80
+ var MAX_IMAGE_BYTES = 5 * 1024 * 1024;
81
+ function sniffImageMediaType(base64) {
82
+ let buf;
83
+ try {
84
+ buf = Buffer.from(base64.slice(0, 32), "base64");
85
+ } catch {
86
+ return null;
87
+ }
88
+ if (buf.length < 4) {
89
+ return null;
90
+ }
91
+ if (buf[0] === 255 && buf[1] === 216) {
92
+ return "image/jpeg";
93
+ }
94
+ if (buf[0] === 137 && buf[1] === 80 && buf[2] === 78 && buf[3] === 71) {
95
+ return "image/png";
96
+ }
97
+ if (buf[0] === 71 && buf[1] === 73 && buf[2] === 70 && buf[3] === 56) {
98
+ return "image/gif";
99
+ }
100
+ if (buf.length >= 12 && buf[0] === 82 && buf[1] === 73 && buf[2] === 70 && buf[3] === 70 && buf[8] === 87 && buf[9] === 69 && buf[10] === 66 && buf[11] === 80) {
101
+ return "image/webp";
102
+ }
103
+ return null;
104
+ }
105
+ function totalChanges(c) {
106
+ return c.corrected + c.stubbed + c.cacheStripped;
107
+ }
108
+ function scrubBlock(block, counters) {
109
+ if (block.type === "tool_result" && Array.isArray(block.content)) {
110
+ return {
111
+ ...block,
112
+ content: block.content.map((inner) => scrubBlock(inner, counters))
113
+ };
114
+ }
115
+ if (block.type === "text" && block.cache_control != null) {
116
+ const text = typeof block.text === "string" ? block.text : "";
117
+ if (text.trim() === "") {
118
+ counters.cacheStripped++;
119
+ const clone = { ...block };
120
+ delete clone.cache_control;
121
+ return clone;
122
+ }
123
+ }
124
+ if (block.type === "image" && block.source?.type === "base64" && typeof block.source.data === "string") {
125
+ const data = block.source.data;
126
+ if (Math.floor(data.length * 3 / 4) > MAX_IMAGE_BYTES) {
127
+ counters.stubbed++;
128
+ return { type: "text", text: STUB_TEXT_OVERSIZED };
129
+ }
130
+ const sniffed = sniffImageMediaType(data);
131
+ if (sniffed === null) {
132
+ counters.stubbed++;
133
+ return { type: "text", text: STUB_TEXT };
134
+ }
135
+ if (sniffed !== block.source.media_type) {
136
+ counters.corrected++;
137
+ return { ...block, source: { ...block.source, media_type: sniffed } };
138
+ }
139
+ }
140
+ return block;
141
+ }
142
+ async function locateTranscriptPath(configDir, sessionId, timeoutMs = fsDeadlineMs()) {
143
+ const projectsDir = join(configDir, "projects");
144
+ const entries = await tryWithFsDeadline(
145
+ `readdir ${projectsDir}`,
146
+ () => readdir(projectsDir),
147
+ null,
148
+ timeoutMs
149
+ );
150
+ if (!entries) return null;
151
+ for (const entry of entries) {
152
+ const candidate = join(projectsDir, entry, `${sessionId}.jsonl`);
153
+ const found = await tryWithFsDeadline(
154
+ `stat ${candidate}`,
155
+ async () => (await stat(candidate)).isFile(),
156
+ false,
157
+ timeoutMs
158
+ );
159
+ if (found) return candidate;
160
+ }
161
+ return null;
162
+ }
163
+ async function* streamLines(filePath) {
164
+ const stream = createReadStream(filePath, { encoding: "utf8" });
165
+ let pending = "";
166
+ try {
167
+ for await (const chunk of stream) {
168
+ pending += chunk;
169
+ let idx = pending.indexOf("\n");
170
+ while (idx !== -1) {
171
+ yield pending.slice(0, idx);
172
+ pending = pending.slice(idx + 1);
173
+ idx = pending.indexOf("\n");
174
+ }
175
+ }
176
+ yield pending;
177
+ } finally {
178
+ stream.destroy();
179
+ }
180
+ }
181
+ function repairLine(line, counters) {
182
+ if (line.trim() === "") return line;
183
+ const eol = line.endsWith("\r") ? "\r" : "";
184
+ const body = eol === "" ? line : line.slice(0, -1);
185
+ let entry;
186
+ try {
187
+ entry = JSON.parse(body);
188
+ } catch {
189
+ return line;
190
+ }
191
+ const content = entry.message?.content;
192
+ if (!Array.isArray(content)) return line;
193
+ const before = totalChanges(counters);
194
+ const scrubbed = content.map((block) => scrubBlock(block, counters));
195
+ if (totalChanges(counters) === before) return line;
196
+ return `${JSON.stringify({ ...entry, message: { ...entry.message, content: scrubbed } })}${eol}`;
197
+ }
198
+ async function scrubPoisonedTranscript(opts) {
199
+ const { configDir, sessionId, log } = opts;
200
+ const timeoutMs = fsDeadlineMs();
201
+ const result = {
202
+ filePath: null,
203
+ corrected: 0,
204
+ stubbed: 0,
205
+ cacheStripped: 0,
206
+ changed: false
207
+ };
208
+ const filePath = await locateTranscriptPath(configDir, sessionId, timeoutMs);
209
+ if (!filePath) {
210
+ log?.warn("scrub-transcript: no transcript found", { configDir, sessionId });
211
+ return result;
212
+ }
213
+ result.filePath = filePath;
214
+ const counters = { corrected: 0, stubbed: 0, cacheStripped: 0 };
215
+ try {
216
+ await withFsDeadline(
217
+ `scan transcript ${filePath}`,
218
+ async () => {
219
+ for await (const line of streamLines(filePath)) repairLine(line, counters);
220
+ },
221
+ timeoutMs
222
+ );
223
+ } catch (err) {
224
+ log?.warn("scrub-transcript: failed to read transcript", {
225
+ filePath,
226
+ error: err instanceof Error ? err.message : String(err)
227
+ });
228
+ return result;
229
+ }
230
+ result.corrected = counters.corrected;
231
+ result.stubbed = counters.stubbed;
232
+ result.cacheStripped = counters.cacheStripped;
233
+ if (totalChanges(counters) === 0) {
234
+ return result;
235
+ }
236
+ const tmpPath = `${filePath}.scrub-tmp`;
237
+ try {
238
+ await withFsDeadline(
239
+ `rewrite transcript ${filePath}`,
240
+ async () => {
241
+ const discard = { corrected: 0, stubbed: 0, cacheStripped: 0 };
242
+ await pipeline(
243
+ (async function* () {
244
+ let first = true;
245
+ for await (const line of streamLines(filePath)) {
246
+ yield first ? repairLine(line, discard) : `
247
+ ${repairLine(line, discard)}`;
248
+ first = false;
249
+ }
250
+ })(),
251
+ createWriteStream(tmpPath, { encoding: "utf8" })
252
+ );
253
+ await rename(tmpPath, filePath);
254
+ },
255
+ timeoutMs
256
+ );
257
+ } catch (err) {
258
+ log?.warn("scrub-transcript: failed to rewrite transcript", {
259
+ filePath,
260
+ error: err instanceof Error ? err.message : String(err)
261
+ });
262
+ await tryWithFsDeadline(`unlink ${tmpPath}`, () => unlink(tmpPath), void 0, timeoutMs);
263
+ return result;
264
+ }
265
+ result.changed = true;
266
+ log?.info("scrub-transcript: repaired poisoned transcript", {
267
+ filePath,
268
+ corrected: result.corrected,
269
+ stubbed: result.stubbed,
270
+ cacheStripped: result.cacheStripped
271
+ });
272
+ return result;
273
+ }
274
+ var RESUME_PROBE_TIMEOUT_MS = 2e3;
275
+ function resolveClaudeConfigDir(env) {
276
+ return env?.CLAUDE_CONFIG_DIR || process.env.CLAUDE_CONFIG_DIR || join(homedir(), ".claude");
277
+ }
278
+ async function probeResumeTranscript(sessionId, opts) {
279
+ const configDir = resolveClaudeConfigDir(opts?.env);
280
+ const timeoutMs = opts?.timeoutMs ?? RESUME_PROBE_TIMEOUT_MS;
281
+ const locate = opts?.locate ?? locateTranscriptPath;
282
+ try {
283
+ const filePath = await withFsDeadline(
284
+ `resume-probe ${sessionId}`,
285
+ () => locate(configDir, sessionId),
286
+ timeoutMs
287
+ );
288
+ return filePath ? "transcript_found" : "jsonl_lost";
289
+ } catch {
290
+ return void 0;
291
+ }
292
+ }
293
+
294
+ export { CLOUD_SECRET_ENV_KEYS, SUPPORTED_CLOUDS, buildClaudeCloudEnv, probeResumeTranscript, resolveClaudeConfigDir, scrubPoisonedTranscript };
295
+ //# sourceMappingURL=chunk-46LE3GNY.js.map
296
+ //# sourceMappingURL=chunk-46LE3GNY.js.map