@machina.ai/cell-cli-core 1.4.0-rc2 → 1.5.5-rc1

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 (187) hide show
  1. package/dist/index.d.ts +2 -0
  2. package/dist/index.js +2 -0
  3. package/dist/index.js.map +1 -1
  4. package/dist/package.json +2 -2
  5. package/dist/src/code_assist/codeAssist.js +1 -1
  6. package/dist/src/code_assist/codeAssist.js.map +1 -1
  7. package/dist/src/code_assist/oauth-credential-storage.d.ts +27 -0
  8. package/dist/src/code_assist/oauth-credential-storage.js +112 -0
  9. package/dist/src/code_assist/oauth-credential-storage.js.map +1 -0
  10. package/dist/src/code_assist/oauth-credential-storage.test.js +134 -0
  11. package/dist/src/code_assist/oauth-credential-storage.test.js.map +1 -0
  12. package/dist/src/code_assist/server.d.ts +1 -1
  13. package/dist/src/code_assist/server.js +24 -1
  14. package/dist/src/code_assist/server.js.map +1 -1
  15. package/dist/src/code_assist/server.test.js +25 -0
  16. package/dist/src/code_assist/server.test.js.map +1 -1
  17. package/dist/src/code_assist/types.d.ts +17 -2
  18. package/dist/src/config/config.d.ts +25 -4
  19. package/dist/src/config/config.js +84 -29
  20. package/dist/src/config/config.js.map +1 -1
  21. package/dist/src/config/config.test.js +131 -121
  22. package/dist/src/config/config.test.js.map +1 -1
  23. package/dist/src/config/storage.d.ts +2 -0
  24. package/dist/src/config/storage.js +6 -1
  25. package/dist/src/config/storage.js.map +1 -1
  26. package/dist/src/config/storage.test.js +4 -0
  27. package/dist/src/config/storage.test.js.map +1 -1
  28. package/dist/src/core/baseLlmClient.d.ts +45 -0
  29. package/dist/src/core/baseLlmClient.js +88 -0
  30. package/dist/src/core/baseLlmClient.js.map +1 -0
  31. package/dist/src/core/baseLlmClient.test.d.ts +6 -0
  32. package/dist/src/core/baseLlmClient.test.js +190 -0
  33. package/dist/src/core/baseLlmClient.test.js.map +1 -0
  34. package/dist/src/core/client.d.ts +4 -15
  35. package/dist/src/core/client.js +56 -100
  36. package/dist/src/core/client.js.map +1 -1
  37. package/dist/src/core/client.test.js +101 -321
  38. package/dist/src/core/client.test.js.map +1 -1
  39. package/dist/src/core/contentGenerator.test.js +1 -0
  40. package/dist/src/core/contentGenerator.test.js.map +1 -1
  41. package/dist/src/core/coreToolScheduler.d.ts +4 -0
  42. package/dist/src/core/coreToolScheduler.js +66 -2
  43. package/dist/src/core/coreToolScheduler.js.map +1 -1
  44. package/dist/src/core/coreToolScheduler.test.js +172 -5
  45. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  46. package/dist/src/core/geminiChat.d.ts +2 -8
  47. package/dist/src/core/geminiChat.js +42 -46
  48. package/dist/src/core/geminiChat.js.map +1 -1
  49. package/dist/src/core/geminiChat.test.js +207 -48
  50. package/dist/src/core/geminiChat.test.js.map +1 -1
  51. package/dist/src/core/loggingContentGenerator.js +3 -6
  52. package/dist/src/core/loggingContentGenerator.js.map +1 -1
  53. package/dist/src/core/nonInteractiveToolExecutor.test.js +8 -1
  54. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  55. package/dist/src/core/prompts.d.ts +5 -0
  56. package/dist/src/core/prompts.js +64 -43
  57. package/dist/src/core/prompts.js.map +1 -1
  58. package/dist/src/core/prompts.test.js +146 -17
  59. package/dist/src/core/prompts.test.js.map +1 -1
  60. package/dist/src/core/subagent.js +1 -3
  61. package/dist/src/core/subagent.js.map +1 -1
  62. package/dist/src/core/subagent.test.js +3 -5
  63. package/dist/src/core/subagent.test.js.map +1 -1
  64. package/dist/src/core/turn.d.ts +1 -0
  65. package/dist/src/core/turn.js.map +1 -1
  66. package/dist/src/fallback/handler.d.ts +7 -0
  67. package/dist/src/fallback/handler.js +51 -0
  68. package/dist/src/fallback/handler.js.map +1 -0
  69. package/dist/src/fallback/handler.test.d.ts +6 -0
  70. package/dist/src/fallback/handler.test.js +130 -0
  71. package/dist/src/fallback/handler.test.js.map +1 -0
  72. package/dist/src/fallback/types.d.ts +14 -0
  73. package/dist/src/fallback/types.js +7 -0
  74. package/dist/src/fallback/types.js.map +1 -0
  75. package/dist/src/generated/git-commit.d.ts +2 -2
  76. package/dist/src/generated/git-commit.js +2 -2
  77. package/dist/src/generated/git-commit.js.map +1 -1
  78. package/dist/src/ide/constants.d.ts +2 -0
  79. package/dist/src/ide/constants.js +2 -0
  80. package/dist/src/ide/constants.js.map +1 -1
  81. package/dist/src/ide/ide-client.d.ts +1 -1
  82. package/dist/src/ide/ide-client.js +61 -2
  83. package/dist/src/ide/ide-client.js.map +1 -1
  84. package/dist/src/ide/ide-client.test.js +165 -0
  85. package/dist/src/ide/ide-client.test.js.map +1 -1
  86. package/dist/src/ide/ideContext.d.ts +1 -264
  87. package/dist/src/ide/ideContext.js +42 -31
  88. package/dist/src/ide/ideContext.js.map +1 -1
  89. package/dist/src/ide/ideContext.test.js +154 -24
  90. package/dist/src/ide/ideContext.test.js.map +1 -1
  91. package/dist/src/ide/process-utils.js +8 -1
  92. package/dist/src/ide/process-utils.js.map +1 -1
  93. package/dist/src/ide/types.d.ts +345 -0
  94. package/dist/src/ide/types.js +65 -0
  95. package/dist/src/ide/types.js.map +1 -0
  96. package/dist/src/index.d.ts +3 -0
  97. package/dist/src/index.js +3 -0
  98. package/dist/src/index.js.map +1 -1
  99. package/dist/src/mcp/oauth-provider.js +3 -3
  100. package/dist/src/mcp/oauth-provider.js.map +1 -1
  101. package/dist/src/mcp/oauth-provider.test.js +12 -12
  102. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  103. package/dist/src/mcp/oauth-token-storage.d.ts +8 -6
  104. package/dist/src/mcp/oauth-token-storage.js +24 -17
  105. package/dist/src/mcp/oauth-token-storage.js.map +1 -1
  106. package/dist/src/mcp/oauth-token-storage.test.js +18 -18
  107. package/dist/src/mcp/oauth-token-storage.test.js.map +1 -1
  108. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +2 -0
  109. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +7 -0
  110. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  111. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +20 -1
  112. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  113. package/dist/src/telemetry/constants.d.ts +1 -0
  114. package/dist/src/telemetry/constants.js +1 -0
  115. package/dist/src/telemetry/constants.js.map +1 -1
  116. package/dist/src/telemetry/high-water-mark-tracker.d.ts +43 -0
  117. package/dist/src/telemetry/high-water-mark-tracker.js +88 -0
  118. package/dist/src/telemetry/high-water-mark-tracker.js.map +1 -0
  119. package/dist/src/telemetry/high-water-mark-tracker.test.d.ts +6 -0
  120. package/dist/src/telemetry/high-water-mark-tracker.test.js +152 -0
  121. package/dist/src/telemetry/high-water-mark-tracker.test.js.map +1 -0
  122. package/dist/src/telemetry/index.d.ts +2 -0
  123. package/dist/src/telemetry/index.js +2 -0
  124. package/dist/src/telemetry/index.js.map +1 -1
  125. package/dist/src/telemetry/loggers.d.ts +2 -1
  126. package/dist/src/telemetry/loggers.js +18 -1
  127. package/dist/src/telemetry/loggers.js.map +1 -1
  128. package/dist/src/telemetry/loggers.test.js +64 -5
  129. package/dist/src/telemetry/loggers.test.js.map +1 -1
  130. package/dist/src/telemetry/rate-limiter.d.ts +48 -0
  131. package/dist/src/telemetry/rate-limiter.js +100 -0
  132. package/dist/src/telemetry/rate-limiter.js.map +1 -0
  133. package/dist/src/telemetry/rate-limiter.test.d.ts +6 -0
  134. package/dist/src/telemetry/rate-limiter.test.js +207 -0
  135. package/dist/src/telemetry/rate-limiter.test.js.map +1 -0
  136. package/dist/src/telemetry/types.d.ts +6 -0
  137. package/dist/src/telemetry/types.js +14 -0
  138. package/dist/src/telemetry/types.js.map +1 -1
  139. package/dist/src/tools/mcp-client-manager.js +5 -21
  140. package/dist/src/tools/mcp-client-manager.js.map +1 -1
  141. package/dist/src/tools/mcp-client.js +5 -5
  142. package/dist/src/tools/mcp-client.js.map +1 -1
  143. package/dist/src/tools/read-file.js +7 -2
  144. package/dist/src/tools/read-file.js.map +1 -1
  145. package/dist/src/tools/read-file.test.js +29 -0
  146. package/dist/src/tools/read-file.test.js.map +1 -1
  147. package/dist/src/tools/ripGrep.d.ts +4 -0
  148. package/dist/src/tools/ripGrep.js +17 -2
  149. package/dist/src/tools/ripGrep.js.map +1 -1
  150. package/dist/src/tools/ripGrep.test.js +57 -5
  151. package/dist/src/tools/ripGrep.test.js.map +1 -1
  152. package/dist/src/tools/smart-edit.js +1 -1
  153. package/dist/src/tools/smart-edit.js.map +1 -1
  154. package/dist/src/tools/smart-edit.test.js +5 -0
  155. package/dist/src/tools/smart-edit.test.js.map +1 -1
  156. package/dist/src/utils/fileUtils.d.ts +1 -0
  157. package/dist/src/utils/fileUtils.js +10 -0
  158. package/dist/src/utils/fileUtils.js.map +1 -1
  159. package/dist/src/utils/fileUtils.test.js +17 -1
  160. package/dist/src/utils/fileUtils.test.js.map +1 -1
  161. package/dist/src/utils/filesearch/crawler.test.js +1 -1
  162. package/dist/src/utils/filesearch/crawler.test.js.map +1 -1
  163. package/dist/src/utils/filesearch/fileSearch.test.js +1 -1
  164. package/dist/src/utils/filesearch/fileSearch.test.js.map +1 -1
  165. package/dist/src/utils/filesearch/ignore.test.js +1 -1
  166. package/dist/src/utils/filesearch/ignore.test.js.map +1 -1
  167. package/dist/src/utils/flashFallback.test.d.ts +6 -0
  168. package/dist/src/utils/{flashFallback.integration.test.js → flashFallback.test.js} +31 -27
  169. package/dist/src/utils/flashFallback.test.js.map +1 -0
  170. package/dist/src/utils/gitIgnoreParser.d.ts +1 -0
  171. package/dist/src/utils/gitIgnoreParser.js +33 -24
  172. package/dist/src/utils/gitIgnoreParser.js.map +1 -1
  173. package/dist/src/utils/llm-edit-fixer.d.ts +4 -3
  174. package/dist/src/utils/llm-edit-fixer.js +19 -10
  175. package/dist/src/utils/llm-edit-fixer.js.map +1 -1
  176. package/dist/src/utils/llm-edit-fixer.test.d.ts +6 -0
  177. package/dist/src/utils/llm-edit-fixer.test.js +105 -0
  178. package/dist/src/utils/llm-edit-fixer.test.js.map +1 -0
  179. package/dist/src/utils/nextSpeakerChecker.test.js +13 -42
  180. package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
  181. package/dist/src/utils/promptIdContext.d.ts +7 -0
  182. package/dist/src/utils/promptIdContext.js +8 -0
  183. package/dist/src/utils/promptIdContext.js.map +1 -0
  184. package/dist/tsconfig.tsbuildinfo +1 -1
  185. package/package.json +3 -2
  186. package/dist/src/utils/flashFallback.integration.test.js.map +0 -1
  187. /package/dist/src/{utils/flashFallback.integration.test.d.ts → code_assist/oauth-credential-storage.test.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"geminiChat.js","sourceRoot":"","sources":["../../../src/core/geminiChat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"geminiChat.js","sourceRoot":"","sources":["../../../src/core/geminiChat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGrD,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,eAAe,GAChB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,CAAN,IAAY,eAMX;AAND,WAAY,eAAe;IACzB,4CAA4C;IAC5C,kCAAe,CAAA;IACf;oDACgD;IAChD,kCAAe,CAAA;AACjB,CAAC,EANW,eAAe,KAAf,eAAe,QAM1B;AAgBD,MAAM,6BAA6B,GAAwB;IACzD,WAAW,EAAE,CAAC,EAAE,6BAA6B;IAC7C,cAAc,EAAE,GAAG;CACpB,CAAC;AAEF;;GAEG;AACH,SAAS,eAAe,CAAC,QAAiC;IACxD,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1E,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;IAChD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,cAAc,CAAC,OAAgB;IACtC,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9D,OAAO,KAAK,CAAC;IACf,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;YACjE,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CAAC,OAAkB;IACzC,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;QAC9B,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,uCAAuC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,qBAAqB,CAAC,oBAA+B;IAC5D,IAAI,oBAAoB,KAAK,SAAS,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5E,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,cAAc,GAAc,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC;IAC3C,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,MAAM,EAAE,CAAC;QAClB,IAAI,oBAAoB,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC5C,cAAc,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,CAAC;YACN,MAAM,WAAW,GAAc,EAAE,CAAC;YAClC,IAAI,OAAO,GAAG,IAAI,CAAC;YACnB,OAAO,CAAC,GAAG,MAAM,IAAI,oBAAoB,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC9D,WAAW,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1C,IAAI,OAAO,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxD,OAAO,GAAG,KAAK,CAAC;gBAClB,CAAC;gBACD,CAAC,EAAE,CAAC;YACN,CAAC;YACD,IAAI,OAAO,EAAE,CAAC;gBACZ,cAAc,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,OAAO,UAAU;IAOF;IACA;IACT;IARV,4EAA4E;IAC5E,SAAS;IACD,WAAW,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IACtC,oBAAoB,CAAuB;IAE5D,YACmB,MAAc,EACd,mBAA0C,EAAE,EACrD,UAAqB,EAAE;QAFd,WAAM,GAAN,MAAM,CAAQ;QACd,qBAAgB,GAAhB,gBAAgB,CAA4B;QACrD,YAAO,GAAP,OAAO,CAAgB;QAE/B,eAAe,CAAC,OAAO,CAAC,CAAC;QACzB,IAAI,CAAC,oBAAoB,GAAG,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,CAAC;IACzC,CAAC;IAED,oBAAoB,CAAC,QAAgB;QACnC,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,GAAG,QAAQ,CAAC;IACrD,CAAC;IACD;;;;;;;;;;;;;;;;;;;OAmBG;IACH,KAAK,CAAC,WAAW,CACf,MAA6B,EAC7B,SAAiB;QAEjB,MAAM,IAAI,CAAC,WAAW,CAAC;QACvB,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEtD,0FAA0F;QAC1F,0GAA0G;QAC1G,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;YACrC,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;gBAC/C,CAAC,CAAC,MAAM,CAAC,OAAO;gBAChB,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACrB,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC;gBACtC,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,WAAW;aACrB,CAAC,CAAC;QACL,CAAC;QACD,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAElE,IAAI,QAAiC,CAAC;QAEtC,IAAI,CAAC;YACH,IAAI,mBAAuC,CAAC;YAE5C,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;oBAC/C,CAAC,CAAC,0BAA0B;oBAC5B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC3B,mBAAmB,GAAG,UAAU,CAAC;gBAEjC,0DAA0D;gBAC1D,IACE,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE;oBACnC,UAAU,KAAK,0BAA0B,EACzC,CAAC;oBACD,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAC;gBACJ,CAAC;gBAED,OAAO,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC,eAAe,CACtD;oBACE,KAAK,EAAE,UAAU;oBACjB,QAAQ,EAAE,eAAe;oBACzB,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE;iBACvD,EACD,SAAS,CACV,CAAC;YACJ,CAAC,CAAC;YAEF,MAAM,uBAAuB,GAAG,KAAK,EACnC,QAAiB,EACjB,KAAe,EACf,EAAE;gBACF,IAAI,CAAC,mBAAmB;oBAAE,OAAO,IAAI,CAAC;gBACtC,OAAO,MAAM,cAAc,CACzB,IAAI,CAAC,MAAM,EACX,mBAAmB,EACnB,QAAQ,EACR,KAAK,CACN,CAAC;YACJ,CAAC,CAAC;YAEF,QAAQ,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE;gBACzC,WAAW,EAAE,CAAC,KAAc,EAAE,EAAE;oBAC9B,4CAA4C;oBAC5C,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;wBAC5C,IAAI,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC;4BAAE,OAAO,KAAK,CAAC;wBACpD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;4BAAE,OAAO,IAAI,CAAC;wBAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;4BAAE,OAAO,IAAI,CAAC;oBACjD,CAAC;oBACD,OAAO,KAAK,CAAC,CAAC,sCAAsC;gBACtD,CAAC;gBACD,eAAe,EAAE,uBAAuB;gBACxC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,yBAAyB,EAAE,EAAE,QAAQ;aAC5D,CAAC,CAAC;YAEH,IAAI,CAAC,WAAW,GAAG,CAAC,KAAK,IAAI,EAAE;gBAC7B,MAAM,aAAa,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;gBACxD,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAEzD,oEAAoE;gBACpE,sEAAsE;gBACtE,4CAA4C;gBAC5C,MAAM,mCAAmC,GACvC,QAAQ,CAAC,+BAA+B,CAAC;gBAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;gBAC3C,IAAI,+BAA+B,GAAc,EAAE,CAAC;gBACpD,IAAI,mCAAmC,IAAI,IAAI,EAAE,CAAC;oBAChD,+BAA+B;wBAC7B,mCAAmC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC3D,CAAC;gBAED,IAAI,CAAC,aAAa,CAChB,WAAW,EACX,WAAW,EACX,+BAA+B,CAChC,CAAC;YACJ,CAAC,CAAC,EAAE,CAAC;YACL,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACrC,uDAAuD;gBACvD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;gBACrC,+DAA+D;gBAC/D,MAAM,KAAK,CAAC;YACd,CAAC,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YACrC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,KAAK,CAAC,iBAAiB,CACrB,MAA6B,EAC7B,SAAiB;QAEjB,MAAM,IAAI,CAAC,WAAW,CAAC;QAEvB,IAAI,kBAA8B,CAAC;QACnC,MAAM,iBAAiB,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACtD,kBAAkB,GAAG,OAAO,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAAC;QAErC,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEtD,0FAA0F;QAC1F,0GAA0G;QAC1G,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;YACrC,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;gBAC/C,CAAC,CAAC,MAAM,CAAC,OAAO;gBAChB,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACrB,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;YACvE,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC;gBACtC,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,kBAAkB;aAC5B,CAAC,CAAC;QACL,CAAC;QAED,wDAAwD;QACxD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/B,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAE9C,4DAA4D;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,OAAO,CAAC,KAAK,SAAS,CAAC;YACrB,IAAI,CAAC;gBACH,IAAI,SAAS,GAAY,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;gBAExE,KACE,IAAI,OAAO,GAAG,CAAC,EACf,OAAO,GAAG,6BAA6B,CAAC,WAAW,EACnD,OAAO,EAAE,EACT,CAAC;oBACD,IAAI,CAAC;wBACH,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;4BAChB,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,KAAK,EAAE,CAAC;wBACxC,CAAC;wBAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,2BAA2B,CACnD,eAAe,EACf,MAAM,EACN,SAAS,EACT,WAAW,CACZ,CAAC;wBAEF,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;4BACjC,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;wBACtD,CAAC;wBAED,SAAS,GAAG,IAAI,CAAC;wBACjB,MAAM;oBACR,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,SAAS,GAAG,KAAK,CAAC;wBAClB,MAAM,cAAc,GAAG,KAAK,YAAY,gBAAgB,CAAC;wBAEzD,IAAI,cAAc,EAAE,CAAC;4BACnB,uCAAuC;4BACvC,IAAI,OAAO,GAAG,6BAA6B,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;gCAC5D,eAAe,CACb,IAAI,CAAC,MAAM,EACX,IAAI,iBAAiB,CACnB,OAAO,EACP,kBAAkB,EAClB,6BAA6B,CAAC,cAAc,CAC7C,CACF,CAAC;gCACF,MAAM,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CACxB,UAAU,CACR,GAAG,EACH,6BAA6B,CAAC,cAAc;oCAC1C,CAAC,OAAO,GAAG,CAAC,CAAC,CAChB,CACF,CAAC;gCACF,SAAS;4BACX,CAAC;wBACH,CAAC;wBACD,MAAM;oBACR,CAAC;gBACH,CAAC;gBAED,IAAI,SAAS,EAAE,CAAC;oBACd,IAAI,SAAS,YAAY,gBAAgB,EAAE,CAAC;wBAC1C,sBAAsB,CACpB,IAAI,CAAC,MAAM,EACX,IAAI,wBAAwB,CAC1B,6BAA6B,CAAC,WAAW,EACzC,kBAAkB,CACnB,CACF,CAAC;oBACJ,CAAC;oBACD,+DAA+D;oBAC/D,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,WAAW,EAAE,CAAC;wBAC1D,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;oBACrB,CAAC;oBACD,MAAM,SAAS,CAAC;gBAClB,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,kBAAmB,EAAE,CAAC;YACxB,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IAEO,KAAK,CAAC,2BAA2B,CACvC,eAA0B,EAC1B,MAA6B,EAC7B,SAAiB,EACjB,WAAoB;QAEpB,IAAI,mBAAuC,CAAC;QAE5C,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;gBAC/C,CAAC,CAAC,0BAA0B;gBAC5B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC3B,mBAAmB,GAAG,UAAU,CAAC;YAEjC,IACE,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE;gBACnC,UAAU,KAAK,0BAA0B,EACzC,CAAC;gBACD,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAC;YACJ,CAAC;YAED,OAAO,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC,qBAAqB,CAC5D;gBACE,KAAK,EAAE,UAAU;gBACjB,QAAQ,EAAE,eAAe;gBACzB,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE;aACvD,EACD,SAAS,CACV,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,uBAAuB,GAAG,KAAK,EACnC,QAAiB,EACjB,KAAe,EACf,EAAE;YACF,IAAI,CAAC,mBAAmB;gBAAE,OAAO,IAAI,CAAC;YACtC,OAAO,MAAM,cAAc,CACzB,IAAI,CAAC,MAAM,EACX,mBAAmB,EACnB,QAAQ,EACR,KAAK,CACN,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,cAAc,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE;YACrD,WAAW,EAAE,CAAC,KAAc,EAAE,EAAE;gBAC9B,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAC5C,IAAI,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC;wBAAE,OAAO,KAAK,CAAC;oBACpD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;wBAAE,OAAO,IAAI,CAAC;oBAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;wBAAE,OAAO,IAAI,CAAC;gBACjD,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,eAAe,EAAE,uBAAuB;YACxC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,yBAAyB,EAAE,EAAE,QAAQ;SAC5D,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IACjE,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,UAAU,CAAC,UAAmB,KAAK;QACjC,MAAM,OAAO,GAAG,OAAO;YACrB,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC;YACrC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;QACjB,qEAAqE;QACrE,gBAAgB;QAChB,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,YAAY;QACV,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,OAAgB;QACzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,UAAU,CAAC,OAAkB;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,wBAAwB;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAC1C,MAAM,UAAU,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;YAClC,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;gBACrB,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oBAC/C,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,kBAAkB,IAAI,IAAI,EAAE,CAAC;wBACnE,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;wBAC5B,OAAQ,OAAyC,CAAC,gBAAgB,CAAC;wBACnE,OAAO,OAAO,CAAC;oBACjB,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC,CAAC;YACL,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,KAAa;QACpB,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,KAAK,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,8BAA8B,CAAC,KAAsB;QACzD,qEAAqE;QACrE,wEAAwE;QACxE,IACE,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC;YACjC,sBAAsB,CAAC,KAAK,CAAC,OAAO,CAAC,EACrC,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,WAAW,EAAE,CAAC;YAC1D,MAAM,iBAAiB,GAAa,EAAE,CAAC;YACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IACE,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB;oBAC/B,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;oBACrD,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EACpE,CAAC;oBACD,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;YACD,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjC,MAAM,YAAY,GAChB,4IAA4I;oBAC5I,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;oBAC/B,IAAI,CAAC;gBACP,KAAK,CAAC,OAAO,IAAI,YAAY,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,CAAC,qBAAqB,CAClC,cAAuD,EACvD,SAAkB;QAElB,MAAM,kBAAkB,GAAW,EAAE,CAAC;QACtC,IAAI,mBAAmB,GAAG,KAAK,CAAC;QAChC,IAAI,qBAAqB,GAAG,KAAK,CAAC;QAClC,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,SAAS,GAAmC,IAAI,CAAC;QACrD,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAE/B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACzC,mBAAmB,GAAG,IAAI,CAAC;YAC3B,SAAS,GAAG,KAAK,CAAC;YAElB,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3B,qBAAqB,GAAG,IAAI,CAAC;gBAC7B,kBAAkB,GAAG,KAAK,CAAC;gBAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;gBAC/C,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;oBACnB,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC/C,kBAAkB;wBAClB,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;oBACzC,CAAC;oBACD,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;wBACpD,WAAW,GAAG,IAAI,CAAC;oBACrB,CAAC;oBACD,0EAA0E;oBAC1E,kBAAkB,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC1C,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;wBACpD,WAAW,GAAG,IAAI,CAAC;oBACrB,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,eAAe,CACb,IAAI,CAAC,MAAM,EACX,IAAI,iBAAiB,CAAC,qCAAqC,CAAC,CAC7D,CAAC;gBACF,kBAAkB,GAAG,IAAI,CAAC;YAC5B,CAAC;YAED,qDAAqD;YACrD,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;gBACxB,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACrE,CAAC;YAED,MAAM,KAAK,CAAC,CAAC,2CAA2C;QAC1D,CAAC;QAED,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzB,MAAM,IAAI,gBAAgB,CAAC,4CAA4C,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,eAAe,GAAG,SAAS,EAAE,UAAU,EAAE,IAAI,CACjD,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,YAAY,CACtC,CAAC;QAEF,iEAAiE;QACjE,kFAAkF;QAClF,mGAAmG;QACnG,EAAE;QACF,wDAAwD;QACxD,yBAAyB;QACzB,wDAAwD;QACxD,IACE,CAAC,WAAW;YACZ,CAAC,CAAC,eAAe,IAAI,CAAC,kBAAkB,IAAI,CAAC,qBAAqB,CAAC,CAAC,EACpE,CAAC;YACD,MAAM,IAAI,gBAAgB,CACxB,oEAAoE,CACrE,CAAC;QACJ,CAAC;QAED,sDAAsD;QACtD,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,YAAY,GAAG,kBAAkB;iBACpC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;iBAC5C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;iBACxB,IAAI,CAAC,EAAE,CAAC,CAAC;YAEZ,IAAI,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;gBACxB,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC;oBACtC,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,YAAY;iBACtB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,yDAAyD;QACzD,MAAM,WAAW,GACf,kBAAkB,CAAC,MAAM,GAAG,CAAC;YAC3B,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;YAChD,CAAC,CAAC,EAAE,CAAC;QAET,8DAA8D;QAC9D,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC7C,CAAC;IAEO,aAAa,CACnB,SAAkB,EAClB,WAAsB,EACtB,+BAA2C;QAE3C,kCAAkC;QAClC,IACE,+BAA+B;YAC/B,+BAA+B,CAAC,MAAM,GAAG,CAAC,EAC1C,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,IAAI,CACf,GAAG,qBAAqB,CAAC,+BAA+B,CAAC,CAC1D,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IACE,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;gBACzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,SAAS,EACnD,CAAC;gBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACvD,kEAAkE;gBAClE,2DAA2D;gBAC3D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;oBAC3B,IAAI,QAAQ,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;wBAC9B,+BAA+B;wBAC/B,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;oBACrE,CAAC;oBACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC;QAED,6EAA6E;QAC7E,MAAM,eAAe,GAAc,EAAE,CAAC;QACtC,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;YAClC,2DAA2D;YAC3D,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnB,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC9B,SAAS;YACX,CAAC;YAED,iCAAiC;YACjC,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAEnE,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;YACpD,MAAM,eAAe,GAAG,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAEpE,qFAAqF;YACrF,IACE,eAAe;gBACf,eAAe,CAAC,IAAI,KAAK,OAAO;gBAChC,OAAO,CAAC,IAAI,KAAK,OAAO;gBACxB,eAAe,CAAC,KAAK,IAAI,0DAA0D;gBACnF,OAAO,CAAC,KAAK,EACb,CAAC;gBACD,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,2FAA2F;QAC3F,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,+EAA+E;YAC/E,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;gBACnC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxC,MAAM,iBAAiB,GAAW,EAAE,CAAC;oBACrC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;wBAC9B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBACjE,IACE,QAAQ;4BACR,sCAAsC;4BACtC,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ;4BACjC,CAAC,QAAQ,CAAC,YAAY;4BACtB,CAAC,QAAQ,CAAC,gBAAgB;4BAC1B,CAAC,QAAQ,CAAC,UAAU;4BACpB,CAAC,QAAQ,CAAC,QAAQ;4BAClB,CAAC,QAAQ,CAAC,OAAO;4BACjB,0CAA0C;4BAC1C,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;4BAC7B,CAAC,IAAI,CAAC,YAAY;4BAClB,CAAC,IAAI,CAAC,gBAAgB;4BACtB,CAAC,IAAI,CAAC,UAAU;4BAChB,CAAC,IAAI,CAAC,QAAQ;4BACd,CAAC,IAAI,CAAC,OAAO,EACb,CAAC;4BACD,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;wBAC7B,CAAC;6BAAM,CAAC;4BACN,iBAAiB,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;wBACtC,CAAC;oBACH,CAAC;oBACD,IAAI,CAAC,KAAK,GAAG,iBAAiB,CAAC;gBACjC,CAAC;YACH,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,0EAA0E;YAC1E,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,uBAAuB;QACrB,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACnC,CAAC;IAED;;;OAGG;IACH,wBAAwB,CAAC,SAA8B;QACrD,MAAM,eAAe,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC7C,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC;YACtD,MAAM,aAAa,GACjB,OAAO,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;YAEtE,OAAO;gBACL,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;gBACvB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;gBACvB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;gBACvB,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,aAAa,IAAI,IAAI;gBAC5C,MAAM,EAAE,IAAI,CAAC,MAA2C;gBACxD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,aAAa;aACd,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACK,wBAAwB,CAAC,OAAgB;QAC/C,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjD,OAAO;QACT,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrC,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;YACrB,kEAAkE;YAClE,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC;YACjC,MAAM,oBAAoB,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,oBAAoB;gBAClC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;gBAChC,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAEjE,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC;gBACtC,OAAO;gBACP,WAAW;aACZ,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF;AAED,0BAA0B;AAC1B,MAAM,UAAU,kBAAkB,CAAC,YAAoB;IACrD,OAAO,YAAY,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,YAAoB;IACzD,OAAO,YAAY,CAAC,QAAQ,CAAC,sCAAsC,CAAC,CAAC;AACvE,CAAC"}
@@ -6,6 +6,9 @@
6
6
  import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
7
7
  import { GeminiChat, EmptyStreamError, StreamEventType, } from './geminiChat.js';
8
8
  import { setSimulate429 } from '../utils/testUtils.js';
9
+ import { DEFAULT_GEMINI_FLASH_MODEL } from '../config/models.js';
10
+ import { AuthType } from './contentGenerator.js';
11
+ import {} from '../utils/retry.js';
9
12
  // Mock fs module to prevent actual file system operations during tests
10
13
  const mockFileSystem = new Map();
11
14
  vi.mock('node:fs', () => {
@@ -29,14 +32,19 @@ vi.mock('node:fs', () => {
29
32
  ...fsModule,
30
33
  };
31
34
  });
32
- // Mocks
33
- const mockModelsModule = {
34
- generateContent: vi.fn(),
35
- generateContentStream: vi.fn(),
36
- countTokens: vi.fn(),
37
- embedContent: vi.fn(),
38
- batchEmbedContents: vi.fn(),
39
- };
35
+ const { mockHandleFallback } = vi.hoisted(() => ({
36
+ mockHandleFallback: vi.fn(),
37
+ }));
38
+ // Add mock for the retry utility
39
+ const { mockRetryWithBackoff } = vi.hoisted(() => ({
40
+ mockRetryWithBackoff: vi.fn(),
41
+ }));
42
+ vi.mock('../utils/retry.js', () => ({
43
+ retryWithBackoff: mockRetryWithBackoff,
44
+ }));
45
+ vi.mock('../fallback/handler.js', () => ({
46
+ handleFallback: mockHandleFallback,
47
+ }));
40
48
  const { mockLogInvalidChunk, mockLogContentRetry, mockLogContentRetryFailure } = vi.hoisted(() => ({
41
49
  mockLogInvalidChunk: vi.fn(),
42
50
  mockLogContentRetry: vi.fn(),
@@ -48,22 +56,34 @@ vi.mock('../telemetry/loggers.js', () => ({
48
56
  logContentRetryFailure: mockLogContentRetryFailure,
49
57
  }));
50
58
  describe('GeminiChat', () => {
59
+ let mockContentGenerator;
51
60
  let chat;
52
61
  let mockConfig;
53
62
  const config = {};
54
63
  beforeEach(() => {
55
64
  vi.clearAllMocks();
65
+ mockContentGenerator = {
66
+ generateContent: vi.fn(),
67
+ generateContentStream: vi.fn(),
68
+ countTokens: vi.fn(),
69
+ embedContent: vi.fn(),
70
+ batchEmbedContents: vi.fn(),
71
+ };
72
+ mockHandleFallback.mockClear();
73
+ // Default mock implementation for tests that don't care about retry logic
74
+ mockRetryWithBackoff.mockImplementation(async (apiCall) => apiCall());
56
75
  mockConfig = {
57
76
  getSessionId: () => 'test-session-id',
58
77
  getTelemetryLogPromptsEnabled: () => true,
59
78
  getUsageStatisticsEnabled: () => true,
60
79
  getDebugMode: () => false,
61
- getContentGeneratorConfig: () => ({
62
- authType: 'oauth-personal',
80
+ getContentGeneratorConfig: vi.fn().mockReturnValue({
81
+ authType: 'oauth-personal', // Ensure this is set for fallback tests
63
82
  model: 'test-model',
64
83
  }),
65
84
  getModel: vi.fn().mockReturnValue('gemini-pro'),
66
85
  setModel: vi.fn(),
86
+ isInFallbackMode: vi.fn().mockReturnValue(false),
67
87
  getQuotaErrorOccurred: vi.fn().mockReturnValue(false),
68
88
  setQuotaErrorOccurred: vi.fn(),
69
89
  flashFallbackHandler: undefined,
@@ -74,11 +94,12 @@ describe('GeminiChat', () => {
74
94
  getToolRegistry: vi.fn().mockReturnValue({
75
95
  getTool: vi.fn(),
76
96
  }),
97
+ getContentGenerator: vi.fn().mockReturnValue(mockContentGenerator),
77
98
  };
78
99
  // Disable 429 simulation for tests
79
100
  setSimulate429(false);
80
101
  // Reset history for each test by creating a new instance
81
- chat = new GeminiChat(mockConfig, mockModelsModule, config, []);
102
+ chat = new GeminiChat(mockConfig, config, []);
82
103
  });
83
104
  afterEach(() => {
84
105
  vi.restoreAllMocks();
@@ -132,7 +153,7 @@ describe('GeminiChat', () => {
132
153
  },
133
154
  ],
134
155
  };
135
- vi.mocked(mockModelsModule.generateContent).mockResolvedValue(mockAfcResponse);
156
+ vi.mocked(mockContentGenerator.generateContent).mockResolvedValue(mockAfcResponse);
136
157
  // 3. Action: Send the initial message.
137
158
  await chat.sendMessage({ message: 'How is the weather in Boston?' }, 'prompt-id-afc-bug');
138
159
  // 4. Assert: Check the final state of the history.
@@ -176,7 +197,7 @@ describe('GeminiChat', () => {
176
197
  { content: { role: 'model', parts: [{ text: 'some response' }] } },
177
198
  ],
178
199
  };
179
- vi.mocked(mockModelsModule.generateContent).mockResolvedValue(mockResponse);
200
+ vi.mocked(mockContentGenerator.generateContent).mockResolvedValue(mockResponse);
180
201
  // 3. Action & Assert: Expect that sending another user message immediately
181
202
  // after a user-role turn throws the specific error.
182
203
  await expect(chat.sendMessage({ message: 'This is an invalid consecutive user message' }, 'prompt-id-1')).rejects.toThrow('Cannot add a user turn after another user turn.');
@@ -196,7 +217,7 @@ describe('GeminiChat', () => {
196
217
  },
197
218
  ],
198
219
  };
199
- vi.mocked(mockModelsModule.generateContent).mockResolvedValue(mixedContentResponse);
220
+ vi.mocked(mockContentGenerator.generateContent).mockResolvedValue(mixedContentResponse);
200
221
  // 2. Action: Send a standard, non-streaming message.
201
222
  await chat.sendMessage({ message: 'test message' }, 'prompt-id-mixed-response');
202
223
  // 3. Assert: Check the final state of the history.
@@ -238,7 +259,7 @@ describe('GeminiChat', () => {
238
259
  { content: { role: 'model', parts: [{ thought: true }] } },
239
260
  ],
240
261
  };
241
- vi.mocked(mockModelsModule.generateContent).mockResolvedValue(emptyModelResponse);
262
+ vi.mocked(mockContentGenerator.generateContent).mockResolvedValue(emptyModelResponse);
242
263
  // 3. Action: Send the function response back to the model.
243
264
  await chat.sendMessage({
244
265
  message: {
@@ -275,9 +296,9 @@ describe('GeminiChat', () => {
275
296
  ],
276
297
  text: () => 'response',
277
298
  };
278
- vi.mocked(mockModelsModule.generateContent).mockResolvedValue(response);
299
+ vi.mocked(mockContentGenerator.generateContent).mockResolvedValue(response);
279
300
  await chat.sendMessage({ message: 'hello' }, 'prompt-id-1');
280
- expect(mockModelsModule.generateContent).toHaveBeenCalledWith({
301
+ expect(mockContentGenerator.generateContent).toHaveBeenCalledWith({
281
302
  model: 'gemini-pro',
282
303
  contents: [{ role: 'user', parts: [{ text: 'hello' }] }],
283
304
  config: {},
@@ -310,7 +331,7 @@ describe('GeminiChat', () => {
310
331
  ],
311
332
  };
312
333
  })();
313
- vi.mocked(mockModelsModule.generateContentStream).mockResolvedValue(streamWithToolCall);
334
+ vi.mocked(mockContentGenerator.generateContentStream).mockResolvedValue(streamWithToolCall);
314
335
  // 2. Action & Assert: The stream processing should complete without throwing an error
315
336
  // because the presence of a tool call makes the empty final chunk acceptable.
316
337
  const stream = await chat.sendMessageStream({ message: 'test message' }, 'prompt-id-tool-call-empty-end');
@@ -351,7 +372,7 @@ describe('GeminiChat', () => {
351
372
  ],
352
373
  };
353
374
  })();
354
- vi.mocked(mockModelsModule.generateContentStream).mockResolvedValue(streamWithNoFinish);
375
+ vi.mocked(mockContentGenerator.generateContentStream).mockResolvedValue(streamWithNoFinish);
355
376
  // 2. Action & Assert: The stream should fail because there's no finish reason.
356
377
  const stream = await chat.sendMessageStream({ message: 'test message' }, 'prompt-id-no-finish-empty-end');
357
378
  await expect((async () => {
@@ -386,7 +407,7 @@ describe('GeminiChat', () => {
386
407
  ],
387
408
  };
388
409
  })();
389
- vi.mocked(mockModelsModule.generateContentStream).mockResolvedValue(streamWithInvalidEnd);
410
+ vi.mocked(mockContentGenerator.generateContentStream).mockResolvedValue(streamWithInvalidEnd);
390
411
  // 2. Action & Assert: The stream should complete without throwing an error.
391
412
  const stream = await chat.sendMessageStream({ message: 'test message' }, 'prompt-id-valid-then-invalid-end');
392
413
  await expect((async () => {
@@ -432,7 +453,7 @@ describe('GeminiChat', () => {
432
453
  ],
433
454
  };
434
455
  })();
435
- vi.mocked(mockModelsModule.generateContentStream).mockResolvedValue(multiChunkStream);
456
+ vi.mocked(mockContentGenerator.generateContentStream).mockResolvedValue(multiChunkStream);
436
457
  // 2. Action: Send a message and consume the stream.
437
458
  const stream = await chat.sendMessageStream({ message: 'test message' }, 'prompt-id-malformed-chunk');
438
459
  for await (const _ of stream) {
@@ -470,7 +491,7 @@ describe('GeminiChat', () => {
470
491
  ],
471
492
  };
472
493
  })();
473
- vi.mocked(mockModelsModule.generateContentStream).mockResolvedValue(multiChunkStream);
494
+ vi.mocked(mockContentGenerator.generateContentStream).mockResolvedValue(multiChunkStream);
474
495
  // 2. Action: Send a message and consume the stream.
475
496
  const stream = await chat.sendMessageStream({ message: 'test message' }, 'prompt-id-empty-chunk-consolidation');
476
497
  for await (const _ of stream) {
@@ -518,7 +539,7 @@ describe('GeminiChat', () => {
518
539
  ],
519
540
  };
520
541
  })();
521
- vi.mocked(mockModelsModule.generateContentStream).mockResolvedValue(multiChunkStream);
542
+ vi.mocked(mockContentGenerator.generateContentStream).mockResolvedValue(multiChunkStream);
522
543
  // 2. Action: Send a message and consume the stream.
523
544
  const stream = await chat.sendMessageStream({ message: 'test message' }, 'prompt-id-multi-chunk');
524
545
  for await (const _ of stream) {
@@ -554,7 +575,7 @@ describe('GeminiChat', () => {
554
575
  ],
555
576
  };
556
577
  })();
557
- vi.mocked(mockModelsModule.generateContentStream).mockResolvedValue(mixedContentStream);
578
+ vi.mocked(mockContentGenerator.generateContentStream).mockResolvedValue(mixedContentStream);
558
579
  // 2. Action: Send a message and fully consume the stream to trigger history recording.
559
580
  const stream = await chat.sendMessageStream({ message: 'test message' }, 'prompt-id-mixed-chunk');
560
581
  for await (const _ of stream) {
@@ -603,7 +624,7 @@ describe('GeminiChat', () => {
603
624
  ],
604
625
  };
605
626
  })();
606
- vi.mocked(mockModelsModule.generateContentStream).mockResolvedValue(emptyStreamResponse);
627
+ vi.mocked(mockContentGenerator.generateContentStream).mockResolvedValue(emptyStreamResponse);
607
628
  // 3. Action: Send the function response back to the model and consume the stream.
608
629
  const stream = await chat.sendMessageStream({
609
630
  message: {
@@ -645,12 +666,12 @@ describe('GeminiChat', () => {
645
666
  text: () => 'response',
646
667
  };
647
668
  })();
648
- vi.mocked(mockModelsModule.generateContentStream).mockResolvedValue(response);
669
+ vi.mocked(mockContentGenerator.generateContentStream).mockResolvedValue(response);
649
670
  const stream = await chat.sendMessageStream({ message: 'hello' }, 'prompt-id-1');
650
671
  for await (const _ of stream) {
651
672
  // consume stream to trigger internal logic
652
673
  }
653
- expect(mockModelsModule.generateContentStream).toHaveBeenCalledWith({
674
+ expect(mockContentGenerator.generateContentStream).toHaveBeenCalledWith({
654
675
  model: 'gemini-pro',
655
676
  contents: [{ role: 'user', parts: [{ text: 'hello' }] }],
656
677
  config: {},
@@ -817,7 +838,7 @@ describe('GeminiChat', () => {
817
838
  describe('sendMessageStream with retries', () => {
818
839
  it('should yield a RETRY event when an invalid stream is encountered', async () => {
819
840
  // ARRANGE: Mock the stream to fail once, then succeed.
820
- vi.mocked(mockModelsModule.generateContentStream)
841
+ vi.mocked(mockContentGenerator.generateContentStream)
821
842
  .mockImplementationOnce(async () =>
822
843
  // First attempt: An invalid stream with an empty text part.
823
844
  (async function* () {
@@ -850,7 +871,7 @@ describe('GeminiChat', () => {
850
871
  });
851
872
  it('should retry on invalid content, succeed, and report metrics', async () => {
852
873
  // Use mockImplementationOnce to provide a fresh, promise-wrapped generator for each attempt.
853
- vi.mocked(mockModelsModule.generateContentStream)
874
+ vi.mocked(mockContentGenerator.generateContentStream)
854
875
  .mockImplementationOnce(async () =>
855
876
  // First call returns an invalid stream
856
877
  (async function* () {
@@ -879,7 +900,7 @@ describe('GeminiChat', () => {
879
900
  expect(mockLogInvalidChunk).toHaveBeenCalledTimes(1);
880
901
  expect(mockLogContentRetry).toHaveBeenCalledTimes(1);
881
902
  expect(mockLogContentRetryFailure).not.toHaveBeenCalled();
882
- expect(mockModelsModule.generateContentStream).toHaveBeenCalledTimes(2);
903
+ expect(mockContentGenerator.generateContentStream).toHaveBeenCalledTimes(2);
883
904
  // Check for a retry event
884
905
  expect(chunks.some((c) => c.type === StreamEventType.RETRY)).toBe(true);
885
906
  // Check for the successful content chunk
@@ -899,7 +920,7 @@ describe('GeminiChat', () => {
899
920
  });
900
921
  });
901
922
  it('should fail after all retries on persistent invalid content and report metrics', async () => {
902
- vi.mocked(mockModelsModule.generateContentStream).mockImplementation(async () => (async function* () {
923
+ vi.mocked(mockContentGenerator.generateContentStream).mockImplementation(async () => (async function* () {
903
924
  yield {
904
925
  candidates: [
905
926
  {
@@ -920,7 +941,7 @@ describe('GeminiChat', () => {
920
941
  }
921
942
  await expect(consumeStreamAndExpectError()).rejects.toThrow(EmptyStreamError);
922
943
  // Should be called 3 times (initial + 2 retries)
923
- expect(mockModelsModule.generateContentStream).toHaveBeenCalledTimes(3);
944
+ expect(mockContentGenerator.generateContentStream).toHaveBeenCalledTimes(3);
924
945
  expect(mockLogInvalidChunk).toHaveBeenCalledTimes(3);
925
946
  expect(mockLogContentRetry).toHaveBeenCalledTimes(2);
926
947
  expect(mockLogContentRetryFailure).toHaveBeenCalledTimes(1);
@@ -937,7 +958,7 @@ describe('GeminiChat', () => {
937
958
  ];
938
959
  chat.setHistory(initialHistory);
939
960
  // 2. Mock the API to fail once with an empty stream, then succeed.
940
- vi.mocked(mockModelsModule.generateContentStream)
961
+ vi.mocked(mockContentGenerator.generateContentStream)
941
962
  .mockImplementationOnce(async () => (async function* () {
942
963
  yield {
943
964
  candidates: [{ content: { parts: [{ text: '' }] } }],
@@ -1007,7 +1028,7 @@ describe('GeminiChat', () => {
1007
1028
  ],
1008
1029
  };
1009
1030
  // 2. Mock the API to return our controllable promises in order
1010
- vi.mocked(mockModelsModule.generateContent)
1031
+ vi.mocked(mockContentGenerator.generateContent)
1011
1032
  .mockReturnValueOnce(firstCallPromise)
1012
1033
  .mockReturnValueOnce(secondCallPromise);
1013
1034
  // 3. Start the first message call. Do not await it yet.
@@ -1018,8 +1039,8 @@ describe('GeminiChat', () => {
1018
1039
  const secondMessagePromise = chat.sendMessage({ message: 'second' }, 'prompt-2');
1019
1040
  // 5. CRUCIAL CHECK: At this point, only the first API call should have been made.
1020
1041
  // The second call should be waiting on `sendPromise`.
1021
- expect(mockModelsModule.generateContent).toHaveBeenCalledTimes(1);
1022
- expect(mockModelsModule.generateContent).toHaveBeenCalledWith(expect.objectContaining({
1042
+ expect(mockContentGenerator.generateContent).toHaveBeenCalledTimes(1);
1043
+ expect(mockContentGenerator.generateContent).toHaveBeenCalledWith(expect.objectContaining({
1023
1044
  contents: expect.arrayContaining([
1024
1045
  expect.objectContaining({ parts: [{ text: 'first' }] }),
1025
1046
  ]),
@@ -1030,8 +1051,8 @@ describe('GeminiChat', () => {
1030
1051
  // Give the event loop a chance to unblock and run the second call.
1031
1052
  await new Promise(process.nextTick);
1032
1053
  // 7. CRUCIAL CHECK: Now, the second API call should have been made.
1033
- expect(mockModelsModule.generateContent).toHaveBeenCalledTimes(2);
1034
- expect(mockModelsModule.generateContent).toHaveBeenCalledWith(expect.objectContaining({
1054
+ expect(mockContentGenerator.generateContent).toHaveBeenCalledTimes(2);
1055
+ expect(mockContentGenerator.generateContent).toHaveBeenCalledWith(expect.objectContaining({
1035
1056
  contents: expect.arrayContaining([
1036
1057
  expect.objectContaining({ parts: [{ text: 'second' }] }),
1037
1058
  ]),
@@ -1043,7 +1064,7 @@ describe('GeminiChat', () => {
1043
1064
  });
1044
1065
  it('should retry if the model returns a completely empty stream (no chunks)', async () => {
1045
1066
  // 1. Mock the API to return an empty stream first, then a valid one.
1046
- vi.mocked(mockModelsModule.generateContentStream)
1067
+ vi.mocked(mockContentGenerator.generateContentStream)
1047
1068
  .mockImplementationOnce(
1048
1069
  // First call resolves to an async generator that yields nothing.
1049
1070
  async () => (async function* () { })())
@@ -1068,7 +1089,7 @@ describe('GeminiChat', () => {
1068
1089
  chunks.push(chunk);
1069
1090
  }
1070
1091
  // 3. Assert the results.
1071
- expect(mockModelsModule.generateContentStream).toHaveBeenCalledTimes(2);
1092
+ expect(mockContentGenerator.generateContentStream).toHaveBeenCalledTimes(2);
1072
1093
  expect(chunks.some((c) => c.type === StreamEventType.CHUNK &&
1073
1094
  c.value.candidates?.[0]?.content?.parts?.[0]?.text ===
1074
1095
  'Successful response after empty')).toBe(true);
@@ -1119,7 +1140,7 @@ describe('GeminiChat', () => {
1119
1140
  ],
1120
1141
  };
1121
1142
  })();
1122
- vi.mocked(mockModelsModule.generateContentStream)
1143
+ vi.mocked(mockContentGenerator.generateContentStream)
1123
1144
  .mockResolvedValueOnce(firstStreamGenerator)
1124
1145
  .mockResolvedValueOnce(secondStreamGenerator);
1125
1146
  // 3. Start the first stream and consume only the first chunk to pause it
@@ -1129,7 +1150,7 @@ describe('GeminiChat', () => {
1129
1150
  // 4. While the first stream is paused, start the second call. It will block.
1130
1151
  const secondStreamPromise = chat.sendMessageStream({ message: 'second' }, 'prompt-2');
1131
1152
  // 5. Assert that only one API call has been made so far.
1132
- expect(mockModelsModule.generateContentStream).toHaveBeenCalledTimes(1);
1153
+ expect(mockContentGenerator.generateContentStream).toHaveBeenCalledTimes(1);
1133
1154
  // 6. Unblock and fully consume the first stream to completion.
1134
1155
  continueFirstStream();
1135
1156
  await firstStreamIterator.next(); // Consume the rest of the stream
@@ -1140,7 +1161,7 @@ describe('GeminiChat', () => {
1140
1161
  const secondStreamIterator = secondStream[Symbol.asyncIterator]();
1141
1162
  await secondStreamIterator.next();
1142
1163
  // 9. The second API call should now have been made.
1143
- expect(mockModelsModule.generateContentStream).toHaveBeenCalledTimes(2);
1164
+ expect(mockContentGenerator.generateContentStream).toHaveBeenCalledTimes(2);
1144
1165
  // 10. FIX: Fully consume the second stream to ensure recordHistory is called.
1145
1166
  await secondStreamIterator.next(); // This finishes the iterator.
1146
1167
  // 11. Final check on history.
@@ -1152,9 +1173,114 @@ describe('GeminiChat', () => {
1152
1173
  }
1153
1174
  expect(turn4.parts[0].text).toBe('second response');
1154
1175
  });
1176
+ describe('Model Resolution', () => {
1177
+ const mockResponse = {
1178
+ candidates: [
1179
+ {
1180
+ content: { parts: [{ text: 'response' }], role: 'model' },
1181
+ finishReason: 'STOP',
1182
+ },
1183
+ ],
1184
+ };
1185
+ it('should use the configured model when not in fallback mode (sendMessage)', async () => {
1186
+ vi.mocked(mockConfig.getModel).mockReturnValue('gemini-2.5-pro');
1187
+ vi.mocked(mockConfig.isInFallbackMode).mockReturnValue(false);
1188
+ vi.mocked(mockContentGenerator.generateContent).mockResolvedValue(mockResponse);
1189
+ await chat.sendMessage({ message: 'test' }, 'prompt-id-res1');
1190
+ expect(mockContentGenerator.generateContent).toHaveBeenCalledWith(expect.objectContaining({
1191
+ model: 'gemini-2.5-pro',
1192
+ }), 'prompt-id-res1');
1193
+ });
1194
+ it('should use the FLASH model when in fallback mode (sendMessage)', async () => {
1195
+ vi.mocked(mockConfig.getModel).mockReturnValue('gemini-2.5-pro');
1196
+ vi.mocked(mockConfig.isInFallbackMode).mockReturnValue(true);
1197
+ vi.mocked(mockContentGenerator.generateContent).mockResolvedValue(mockResponse);
1198
+ await chat.sendMessage({ message: 'test' }, 'prompt-id-res2');
1199
+ expect(mockContentGenerator.generateContent).toHaveBeenCalledWith(expect.objectContaining({
1200
+ model: DEFAULT_GEMINI_FLASH_MODEL,
1201
+ }), 'prompt-id-res2');
1202
+ });
1203
+ it('should use the FLASH model when in fallback mode (sendMessageStream)', async () => {
1204
+ vi.mocked(mockConfig.getModel).mockReturnValue('gemini-pro');
1205
+ vi.mocked(mockConfig.isInFallbackMode).mockReturnValue(true);
1206
+ vi.mocked(mockContentGenerator.generateContentStream).mockImplementation(async () => (async function* () {
1207
+ yield mockResponse;
1208
+ })());
1209
+ const stream = await chat.sendMessageStream({ message: 'test' }, 'prompt-id-res3');
1210
+ for await (const _ of stream) {
1211
+ // consume stream
1212
+ }
1213
+ expect(mockContentGenerator.generateContentStream).toHaveBeenCalledWith(expect.objectContaining({
1214
+ model: DEFAULT_GEMINI_FLASH_MODEL,
1215
+ }), 'prompt-id-res3');
1216
+ });
1217
+ });
1218
+ describe('Fallback Integration (Retries)', () => {
1219
+ const error429 = Object.assign(new Error('API Error 429: Quota exceeded'), {
1220
+ status: 429,
1221
+ });
1222
+ // Define the simulated behavior for retryWithBackoff for these tests.
1223
+ // This simulation tries the apiCall, if it fails, it calls the callback,
1224
+ // and then tries the apiCall again if the callback returns true.
1225
+ const simulateRetryBehavior = async (apiCall, options) => {
1226
+ try {
1227
+ return await apiCall();
1228
+ }
1229
+ catch (error) {
1230
+ if (options.onPersistent429) {
1231
+ // We simulate the "persistent" trigger here for simplicity.
1232
+ const shouldRetry = await options.onPersistent429(options.authType, error);
1233
+ if (shouldRetry) {
1234
+ return await apiCall();
1235
+ }
1236
+ }
1237
+ throw error; // Stop if callback returns false/null or doesn't exist
1238
+ }
1239
+ };
1240
+ beforeEach(() => {
1241
+ mockRetryWithBackoff.mockImplementation(simulateRetryBehavior);
1242
+ });
1243
+ afterEach(() => {
1244
+ mockRetryWithBackoff.mockImplementation(async (apiCall) => apiCall());
1245
+ });
1246
+ it('should call handleFallback with the specific failed model and retry if handler returns true', async () => {
1247
+ const FAILED_MODEL = 'gemini-2.5-pro';
1248
+ vi.mocked(mockConfig.getModel).mockReturnValue(FAILED_MODEL);
1249
+ const authType = AuthType.LOGIN_WITH_GOOGLE;
1250
+ vi.mocked(mockConfig.getContentGeneratorConfig).mockReturnValue({
1251
+ authType,
1252
+ model: FAILED_MODEL,
1253
+ });
1254
+ const isInFallbackModeSpy = vi.spyOn(mockConfig, 'isInFallbackMode');
1255
+ isInFallbackModeSpy.mockReturnValue(false);
1256
+ vi.mocked(mockContentGenerator.generateContent)
1257
+ .mockRejectedValueOnce(error429) // Attempt 1 fails
1258
+ .mockResolvedValueOnce({
1259
+ candidates: [{ content: { parts: [{ text: 'Success on retry' }] } }],
1260
+ }); // Attempt 2 succeeds
1261
+ mockHandleFallback.mockImplementation(async () => {
1262
+ isInFallbackModeSpy.mockReturnValue(true);
1263
+ return true; // Signal retry
1264
+ });
1265
+ const result = await chat.sendMessage({ message: 'trigger 429' }, 'prompt-id-fb1');
1266
+ expect(mockRetryWithBackoff).toHaveBeenCalledTimes(1);
1267
+ expect(mockContentGenerator.generateContent).toHaveBeenCalledTimes(2);
1268
+ expect(mockHandleFallback).toHaveBeenCalledTimes(1);
1269
+ expect(mockHandleFallback).toHaveBeenCalledWith(mockConfig, FAILED_MODEL, authType, error429);
1270
+ expect(result.candidates?.[0]?.content?.parts?.[0]?.text).toBe('Success on retry');
1271
+ });
1272
+ it('should stop retrying if handleFallback returns false (e.g., auth intent)', async () => {
1273
+ vi.mocked(mockConfig.getModel).mockReturnValue('gemini-pro');
1274
+ vi.mocked(mockContentGenerator.generateContent).mockRejectedValue(error429);
1275
+ mockHandleFallback.mockResolvedValue(false);
1276
+ await expect(chat.sendMessage({ message: 'test stop' }, 'prompt-id-fb2')).rejects.toThrow(error429);
1277
+ expect(mockContentGenerator.generateContent).toHaveBeenCalledTimes(1);
1278
+ expect(mockHandleFallback).toHaveBeenCalledTimes(1);
1279
+ });
1280
+ });
1155
1281
  it('should discard valid partial content from a failed attempt upon retry', async () => {
1156
- // ARRANGE: Mock the stream to fail on the first attempt after yielding some valid content.
1157
- vi.mocked(mockModelsModule.generateContentStream)
1282
+ // Mock the stream to fail on the first attempt after yielding some valid content.
1283
+ vi.mocked(mockContentGenerator.generateContentStream)
1158
1284
  .mockImplementationOnce(async () =>
1159
1285
  // First attempt: yields one valid chunk, then one invalid chunk
1160
1286
  (async function* () {
@@ -1185,15 +1311,14 @@ describe('GeminiChat', () => {
1185
1311
  ],
1186
1312
  };
1187
1313
  })());
1188
- // ACT: Send a message and consume the stream
1314
+ // Send a message and consume the stream
1189
1315
  const stream = await chat.sendMessageStream({ message: 'test' }, 'prompt-id-discard-test');
1190
1316
  const events = [];
1191
1317
  for await (const event of stream) {
1192
1318
  events.push(event);
1193
1319
  }
1194
- // ASSERT
1195
1320
  // Check that a retry happened
1196
- expect(mockModelsModule.generateContentStream).toHaveBeenCalledTimes(2);
1321
+ expect(mockContentGenerator.generateContentStream).toHaveBeenCalledTimes(2);
1197
1322
  expect(events.some((e) => e.type === StreamEventType.RETRY)).toBe(true);
1198
1323
  // Check the final recorded history
1199
1324
  const history = chat.getHistory();
@@ -1204,5 +1329,39 @@ describe('GeminiChat', () => {
1204
1329
  // It should NOT contain any text from the failed attempt
1205
1330
  expect(modelTurn.parts[0].text).not.toContain('This valid part should be discarded');
1206
1331
  });
1332
+ describe('stripThoughtsFromHistory', () => {
1333
+ it('should strip thought signatures', () => {
1334
+ chat.setHistory([
1335
+ {
1336
+ role: 'user',
1337
+ parts: [{ text: 'hello' }],
1338
+ },
1339
+ {
1340
+ role: 'model',
1341
+ parts: [
1342
+ { text: 'thinking...', thoughtSignature: 'thought-123' },
1343
+ {
1344
+ functionCall: { name: 'test', args: {} },
1345
+ thoughtSignature: 'thought-456',
1346
+ },
1347
+ ],
1348
+ },
1349
+ ]);
1350
+ chat.stripThoughtsFromHistory();
1351
+ expect(chat.getHistory()).toEqual([
1352
+ {
1353
+ role: 'user',
1354
+ parts: [{ text: 'hello' }],
1355
+ },
1356
+ {
1357
+ role: 'model',
1358
+ parts: [
1359
+ { text: 'thinking...' },
1360
+ { functionCall: { name: 'test', args: {} } },
1361
+ ],
1362
+ },
1363
+ ]);
1364
+ });
1365
+ });
1207
1366
  });
1208
1367
  //# sourceMappingURL=geminiChat.test.js.map