whale-code 6.5.4 → 6.5.6

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 (853) hide show
  1. package/README.md +39 -31
  2. package/bin/{swagmanager-mcp.js → whale-code.js} +17 -2
  3. package/dist/cli/app.js +148 -72
  4. package/dist/cli/app.js.map +1 -0
  5. package/dist/cli/chat/AgentSelector.js +105 -10
  6. package/dist/cli/chat/AgentSelector.js.map +1 -0
  7. package/dist/cli/chat/ChatApp.d.ts +31 -0
  8. package/dist/cli/chat/ChatApp.js +539 -286
  9. package/dist/cli/chat/ChatApp.js.map +1 -0
  10. package/dist/cli/chat/ChatInput.js +1088 -770
  11. package/dist/cli/chat/ChatInput.js.map +1 -0
  12. package/dist/cli/chat/MarkdownText.js +39 -14
  13. package/dist/cli/chat/MarkdownText.js.map +1 -0
  14. package/dist/cli/chat/MemoryManager.js +181 -46
  15. package/dist/cli/chat/MemoryManager.js.map +1 -0
  16. package/dist/cli/chat/MessageList.d.ts +2 -3
  17. package/dist/cli/chat/MessageList.js +186 -45
  18. package/dist/cli/chat/MessageList.js.map +1 -0
  19. package/dist/cli/chat/ModelSelector.js +282 -63
  20. package/dist/cli/chat/ModelSelector.js.map +1 -0
  21. package/dist/cli/chat/NodeManager.js +165 -75
  22. package/dist/cli/chat/NodeManager.js.map +1 -0
  23. package/dist/cli/chat/NodeSelector.js +171 -30
  24. package/dist/cli/chat/NodeSelector.js.map +1 -0
  25. package/dist/cli/chat/PlanApproval.js +281 -57
  26. package/dist/cli/chat/PlanApproval.js.map +1 -0
  27. package/dist/cli/chat/RewindViewer.js +559 -144
  28. package/dist/cli/chat/RewindViewer.js.map +1 -0
  29. package/dist/cli/chat/SessionManager.js +137 -30
  30. package/dist/cli/chat/SessionManager.js.map +1 -0
  31. package/dist/cli/chat/SlashMenu.js +293 -164
  32. package/dist/cli/chat/SlashMenu.js.map +1 -0
  33. package/dist/cli/chat/StatusBar.js +172 -9
  34. package/dist/cli/chat/StatusBar.js.map +1 -0
  35. package/dist/cli/chat/StoreSelector.js +147 -18
  36. package/dist/cli/chat/StoreSelector.js.map +1 -0
  37. package/dist/cli/chat/StreamingText.d.ts +1 -5
  38. package/dist/cli/chat/StreamingText.js +22 -7
  39. package/dist/cli/chat/StreamingText.js.map +1 -0
  40. package/dist/cli/chat/SubagentPanel.d.ts +1 -2
  41. package/dist/cli/chat/SubagentPanel.js +612 -72
  42. package/dist/cli/chat/SubagentPanel.js.map +1 -0
  43. package/dist/cli/chat/TeamPanel.d.ts +1 -0
  44. package/dist/cli/chat/TeamPanel.js +230 -30
  45. package/dist/cli/chat/TeamPanel.js.map +1 -0
  46. package/dist/cli/chat/ThemeSelector.js +84 -24
  47. package/dist/cli/chat/ThemeSelector.js.map +1 -0
  48. package/dist/cli/chat/ToolIndicator.js +1476 -371
  49. package/dist/cli/chat/ToolIndicator.js.map +1 -0
  50. package/dist/cli/chat/hooks/useAgentLoop.d.ts +1 -0
  51. package/dist/cli/chat/hooks/useAgentLoop.js +481 -367
  52. package/dist/cli/chat/hooks/useAgentLoop.js.map +1 -0
  53. package/dist/cli/chat/hooks/useSlashCommands.d.ts +3 -14
  54. package/dist/cli/chat/hooks/useSlashCommands.js +744 -572
  55. package/dist/cli/chat/hooks/useSlashCommands.js.map +1 -0
  56. package/dist/cli/commands/config-cmd.js +56 -57
  57. package/dist/cli/commands/config-cmd.js.map +1 -0
  58. package/dist/cli/commands/db.js +184 -169
  59. package/dist/cli/commands/db.js.map +1 -0
  60. package/dist/cli/commands/doctor.js +212 -122
  61. package/dist/cli/commands/doctor.js.map +1 -0
  62. package/dist/cli/commands/init.js +211 -244
  63. package/dist/cli/commands/init.js.map +1 -0
  64. package/dist/cli/commands/mcp.js +127 -122
  65. package/dist/cli/commands/mcp.js.map +1 -0
  66. package/dist/cli/login/LoginApp.js +355 -141
  67. package/dist/cli/login/LoginApp.js.map +1 -0
  68. package/dist/cli/print-mode.js +196 -177
  69. package/dist/cli/print-mode.js.map +1 -0
  70. package/dist/cli/serve-mode.js +615 -530
  71. package/dist/cli/serve-mode.js.map +1 -0
  72. package/dist/cli/services/agent-config.d.ts +29 -0
  73. package/dist/cli/services/agent-config.js +91 -0
  74. package/dist/cli/services/agent-config.js.map +1 -0
  75. package/dist/cli/services/agent-definitions.d.ts +4 -1
  76. package/dist/cli/services/agent-definitions.js +97 -56
  77. package/dist/cli/services/agent-definitions.js.map +1 -0
  78. package/dist/cli/services/agent-events.js +225 -162
  79. package/dist/cli/services/agent-events.js.map +1 -0
  80. package/dist/cli/services/agent-loop.js +978 -669
  81. package/dist/cli/services/agent-loop.js.map +1 -0
  82. package/dist/cli/services/agent-worker-base.d.ts +35 -5
  83. package/dist/cli/services/agent-worker-base.js +337 -153
  84. package/dist/cli/services/agent-worker-base.js.map +1 -0
  85. package/dist/cli/services/api-retry.js +69 -64
  86. package/dist/cli/services/api-retry.js.map +1 -0
  87. package/dist/cli/services/auth-service.d.ts +3 -3
  88. package/dist/cli/services/auth-service.js +209 -132
  89. package/dist/cli/services/auth-service.js.map +1 -0
  90. package/dist/cli/services/background-processes.js +343 -267
  91. package/dist/cli/services/background-processes.js.map +1 -0
  92. package/dist/cli/services/browser-auth.d.ts +2 -2
  93. package/dist/cli/services/browser-auth.js +159 -118
  94. package/dist/cli/services/browser-auth.js.map +1 -0
  95. package/dist/cli/services/claude-md-loader.js +40 -36
  96. package/dist/cli/services/claude-md-loader.js.map +1 -0
  97. package/dist/cli/services/config-store.d.ts +9 -4
  98. package/dist/cli/services/config-store.js +164 -117
  99. package/dist/cli/services/config-store.js.map +1 -0
  100. package/dist/cli/services/debug-log.d.ts +1 -1
  101. package/dist/cli/services/debug-log.js +34 -35
  102. package/dist/cli/services/debug-log.js.map +1 -0
  103. package/dist/cli/services/env-detect.d.ts +7 -0
  104. package/dist/cli/services/env-detect.js +9 -0
  105. package/dist/cli/services/env-detect.js.map +1 -0
  106. package/dist/cli/services/error-logger.d.ts +2 -3
  107. package/dist/cli/services/error-logger.js +189 -180
  108. package/dist/cli/services/error-logger.js.map +1 -0
  109. package/dist/cli/services/file-history.d.ts +1 -1
  110. package/dist/cli/services/file-history.js +50 -54
  111. package/dist/cli/services/file-history.js.map +1 -0
  112. package/dist/cli/services/format-server-response.js +332 -372
  113. package/dist/cli/services/format-server-response.js.map +1 -0
  114. package/dist/cli/services/git-context.js +61 -45
  115. package/dist/cli/services/git-context.js.map +1 -0
  116. package/dist/cli/services/hooks.d.ts +2 -2
  117. package/dist/cli/services/hooks.js +195 -180
  118. package/dist/cli/services/hooks.js.map +1 -0
  119. package/dist/cli/services/ink-incremental.d.ts +19 -0
  120. package/dist/cli/services/ink-incremental.js +59 -0
  121. package/dist/cli/services/ink-incremental.js.map +1 -0
  122. package/dist/cli/services/ink-resize-fix.js +54 -44
  123. package/dist/cli/services/ink-resize-fix.js.map +1 -0
  124. package/dist/cli/services/ink-sync-output.d.ts +12 -0
  125. package/dist/cli/services/ink-sync-output.js +16 -0
  126. package/dist/cli/services/ink-sync-output.js.map +1 -0
  127. package/dist/cli/services/interactive-tools.js +268 -212
  128. package/dist/cli/services/interactive-tools.js.map +1 -0
  129. package/dist/cli/services/keybinding-manager.d.ts +11 -1
  130. package/dist/cli/services/keybinding-manager.js +126 -63
  131. package/dist/cli/services/keybinding-manager.js.map +1 -0
  132. package/dist/cli/services/local-tools.d.ts +1 -1
  133. package/dist/cli/services/local-tools.js +939 -656
  134. package/dist/cli/services/local-tools.js.map +1 -0
  135. package/dist/cli/services/lsp-manager.js +757 -594
  136. package/dist/cli/services/lsp-manager.js.map +1 -0
  137. package/dist/cli/services/mcp-client.d.ts +1 -1
  138. package/dist/cli/services/mcp-client.js +173 -134
  139. package/dist/cli/services/mcp-client.js.map +1 -0
  140. package/dist/cli/services/memory-manager.js +53 -40
  141. package/dist/cli/services/memory-manager.js.map +1 -0
  142. package/dist/cli/services/model-manager.js +55 -40
  143. package/dist/cli/services/model-manager.js.map +1 -0
  144. package/dist/cli/services/model-router.js +115 -85
  145. package/dist/cli/services/model-router.js.map +1 -0
  146. package/dist/cli/services/paths.d.ts +30 -0
  147. package/dist/cli/services/paths.js +81 -0
  148. package/dist/cli/services/paths.js.map +1 -0
  149. package/dist/cli/services/permission-modes.js +32 -25
  150. package/dist/cli/services/permission-modes.js.map +1 -0
  151. package/dist/cli/services/rewind.js +182 -168
  152. package/dist/cli/services/rewind.js.map +1 -0
  153. package/dist/cli/services/ripgrep.js +115 -115
  154. package/dist/cli/services/ripgrep.js.map +1 -0
  155. package/dist/cli/services/sandbox.d.ts +1 -1
  156. package/dist/cli/services/sandbox.js +58 -37
  157. package/dist/cli/services/sandbox.js.map +1 -0
  158. package/dist/cli/services/server-tools.js +738 -565
  159. package/dist/cli/services/server-tools.js.map +1 -0
  160. package/dist/cli/services/session-persistence.js +69 -74
  161. package/dist/cli/services/session-persistence.js.map +1 -0
  162. package/dist/cli/services/subagent-worker.js +42 -27
  163. package/dist/cli/services/subagent-worker.js.map +1 -0
  164. package/dist/cli/services/subagent.d.ts +2 -0
  165. package/dist/cli/services/subagent.js +606 -430
  166. package/dist/cli/services/subagent.js.map +1 -0
  167. package/dist/cli/services/system-prompt.js +86 -78
  168. package/dist/cli/services/system-prompt.js.map +1 -0
  169. package/dist/cli/services/task-decomposer.d.ts +1 -1
  170. package/dist/cli/services/task-decomposer.js +172 -139
  171. package/dist/cli/services/task-decomposer.js.map +1 -0
  172. package/dist/cli/services/team-lead.d.ts +2 -2
  173. package/dist/cli/services/team-lead.js +727 -529
  174. package/dist/cli/services/team-lead.js.map +1 -0
  175. package/dist/cli/services/team-state.js +319 -319
  176. package/dist/cli/services/team-state.js.map +1 -0
  177. package/dist/cli/services/teammate.d.ts +8 -2
  178. package/dist/cli/services/teammate.js +862 -560
  179. package/dist/cli/services/teammate.js.map +1 -0
  180. package/dist/cli/services/telemetry.d.ts +6 -1
  181. package/dist/cli/services/telemetry.js +180 -157
  182. package/dist/cli/services/telemetry.js.map +1 -0
  183. package/dist/cli/services/tools/agent-tools.d.ts +3 -3
  184. package/dist/cli/services/tools/agent-tools.js +480 -322
  185. package/dist/cli/services/tools/agent-tools.js.map +1 -0
  186. package/dist/cli/services/tools/file-ops.js +563 -450
  187. package/dist/cli/services/tools/file-ops.js.map +1 -0
  188. package/dist/cli/services/tools/search-tools.js +231 -162
  189. package/dist/cli/services/tools/search-tools.js.map +1 -0
  190. package/dist/cli/services/tools/shell-exec.js +197 -151
  191. package/dist/cli/services/tools/shell-exec.js.map +1 -0
  192. package/dist/cli/services/tools/task-manager.js +206 -173
  193. package/dist/cli/services/tools/task-manager.js.map +1 -0
  194. package/dist/cli/services/tools/web-tools.js +388 -341
  195. package/dist/cli/services/tools/web-tools.js.map +1 -0
  196. package/dist/cli/setup/SetupApp.d.ts +2 -2
  197. package/dist/cli/setup/SetupApp.js +608 -160
  198. package/dist/cli/setup/SetupApp.js.map +1 -0
  199. package/dist/cli/shared/ErrorBoundary.d.ts +22 -0
  200. package/dist/cli/shared/ErrorBoundary.js +73 -0
  201. package/dist/cli/shared/ErrorBoundary.js.map +1 -0
  202. package/dist/cli/shared/MatrixIntro.js +66 -69
  203. package/dist/cli/shared/MatrixIntro.js.map +1 -0
  204. package/dist/cli/shared/SpinnerSlot.d.ts +14 -0
  205. package/dist/cli/shared/SpinnerSlot.js +63 -0
  206. package/dist/cli/shared/SpinnerSlot.js.map +1 -0
  207. package/dist/cli/shared/Theme.d.ts +1 -1
  208. package/dist/cli/shared/Theme.js +136 -92
  209. package/dist/cli/shared/Theme.js.map +1 -0
  210. package/dist/cli/shared/WhaleBanner.js +99 -11
  211. package/dist/cli/shared/WhaleBanner.js.map +1 -0
  212. package/dist/cli/shared/markdown.d.ts +3 -1
  213. package/dist/cli/shared/markdown.js +736 -674
  214. package/dist/cli/shared/markdown.js.map +1 -0
  215. package/dist/cli/shared/marked-terminal.d.js +2 -0
  216. package/dist/cli/shared/marked-terminal.d.js.map +1 -0
  217. package/dist/cli/shared/theme-manager.js +99 -90
  218. package/dist/cli/shared/theme-manager.js.map +1 -0
  219. package/dist/cli/shared/theme-presets.js +256 -254
  220. package/dist/cli/shared/theme-presets.js.map +1 -0
  221. package/dist/cli/status/StatusApp.js +235 -86
  222. package/dist/cli/status/StatusApp.js.map +1 -0
  223. package/dist/cli/stores/StoreApp.js +275 -65
  224. package/dist/cli/stores/StoreApp.js.map +1 -0
  225. package/dist/index.d.ts +2 -2
  226. package/dist/index.js +509 -396
  227. package/dist/index.js.map +1 -0
  228. package/dist/local-agent/connection.d.ts +2 -2
  229. package/dist/local-agent/connection.js +352 -293
  230. package/dist/local-agent/connection.js.map +1 -0
  231. package/dist/local-agent/discovery.js +259 -122
  232. package/dist/local-agent/discovery.js.map +1 -0
  233. package/dist/local-agent/executor.js +216 -193
  234. package/dist/local-agent/executor.js.map +1 -0
  235. package/dist/local-agent/index.d.ts +2 -2
  236. package/dist/local-agent/index.js +156 -156
  237. package/dist/local-agent/index.js.map +1 -0
  238. package/dist/node/adapters/base.js +18 -8
  239. package/dist/node/adapters/base.js.map +1 -0
  240. package/dist/node/adapters/discord.js +286 -275
  241. package/dist/node/adapters/discord.js.map +1 -0
  242. package/dist/node/adapters/email.js +189 -202
  243. package/dist/node/adapters/email.js.map +1 -0
  244. package/dist/node/adapters/imessage.js +145 -142
  245. package/dist/node/adapters/imessage.js.map +1 -0
  246. package/dist/node/adapters/slack.js +237 -236
  247. package/dist/node/adapters/slack.js.map +1 -0
  248. package/dist/node/adapters/sms.js +149 -151
  249. package/dist/node/adapters/sms.js.map +1 -0
  250. package/dist/node/adapters/telegram.js +88 -92
  251. package/dist/node/adapters/telegram.js.map +1 -0
  252. package/dist/node/adapters/webchat.js +160 -136
  253. package/dist/node/adapters/webchat.js.map +1 -0
  254. package/dist/node/adapters/whatsapp.js +212 -215
  255. package/dist/node/adapters/whatsapp.js.map +1 -0
  256. package/dist/node/cli.js +884 -653
  257. package/dist/node/cli.js.map +1 -0
  258. package/dist/node/config.js +20 -18
  259. package/dist/node/config.js.map +1 -0
  260. package/dist/node/gateway-client.js +191 -181
  261. package/dist/node/gateway-client.js.map +1 -0
  262. package/dist/node/portal/clipboard.js +161 -130
  263. package/dist/node/portal/clipboard.js.map +1 -0
  264. package/dist/node/portal/discovery.js +51 -45
  265. package/dist/node/portal/discovery.js.map +1 -0
  266. package/dist/node/portal/forward.js +64 -58
  267. package/dist/node/portal/forward.js.map +1 -0
  268. package/dist/node/portal/index.js +246 -221
  269. package/dist/node/portal/index.js.map +1 -0
  270. package/dist/node/portal/multiplexer.js +192 -182
  271. package/dist/node/portal/multiplexer.js.map +1 -0
  272. package/dist/node/portal/permissions.js +102 -70
  273. package/dist/node/portal/permissions.js.map +1 -0
  274. package/dist/node/portal/protocol.js +153 -116
  275. package/dist/node/portal/protocol.js.map +1 -0
  276. package/dist/node/portal/screen.js +80 -69
  277. package/dist/node/portal/screen.js.map +1 -0
  278. package/dist/node/portal/session.js +124 -117
  279. package/dist/node/portal/session.js.map +1 -0
  280. package/dist/node/portal/shell.js +140 -113
  281. package/dist/node/portal/shell.js.map +1 -0
  282. package/dist/node/portal/stream.js +77 -75
  283. package/dist/node/portal/stream.js.map +1 -0
  284. package/dist/node/portal/transfer.js +190 -167
  285. package/dist/node/portal/transfer.js.map +1 -0
  286. package/dist/node/portal/ui.js +124 -99
  287. package/dist/node/portal/ui.js.map +1 -0
  288. package/dist/node/remote-desktop/compile-helper.js +50 -45
  289. package/dist/node/remote-desktop/compile-helper.js.map +1 -0
  290. package/dist/node/remote-desktop/index.js +215 -187
  291. package/dist/node/remote-desktop/index.js.map +1 -0
  292. package/dist/node/remote-desktop/protocol.js +45 -29
  293. package/dist/node/remote-desktop/protocol.js.map +1 -0
  294. package/dist/node/runtime.js +493 -410
  295. package/dist/node/runtime.js.map +1 -0
  296. package/dist/server/handlers/__test-utils__/test-db.js +39 -89
  297. package/dist/server/handlers/__test-utils__/test-db.js.map +1 -0
  298. package/dist/server/handlers/analytics.js +467 -261
  299. package/dist/server/handlers/analytics.js.map +1 -0
  300. package/dist/server/handlers/api-docs.d.ts +6 -0
  301. package/dist/server/handlers/api-docs.js +1613 -0
  302. package/dist/server/handlers/api-docs.js.map +1 -0
  303. package/dist/server/handlers/api-keys.js +295 -232
  304. package/dist/server/handlers/api-keys.js.map +1 -0
  305. package/dist/server/handlers/billing.js +330 -239
  306. package/dist/server/handlers/billing.js.map +1 -0
  307. package/dist/server/handlers/browser.js +468 -395
  308. package/dist/server/handlers/browser.js.map +1 -0
  309. package/dist/server/handlers/catalog.js +1377 -978
  310. package/dist/server/handlers/catalog.js.map +1 -0
  311. package/dist/server/handlers/clickhouse.js +157 -109
  312. package/dist/server/handlers/clickhouse.js.map +1 -0
  313. package/dist/server/handlers/comms.d.ts +0 -53
  314. package/dist/server/handlers/comms.js +1443 -970
  315. package/dist/server/handlers/comms.js.map +1 -0
  316. package/dist/server/handlers/creations.js +461 -394
  317. package/dist/server/handlers/creations.js.map +1 -0
  318. package/dist/server/handlers/crm.js +1082 -791
  319. package/dist/server/handlers/crm.js.map +1 -0
  320. package/dist/server/handlers/discovery.js +251 -232
  321. package/dist/server/handlers/discovery.js.map +1 -0
  322. package/dist/server/handlers/embeddings.js +241 -164
  323. package/dist/server/handlers/embeddings.js.map +1 -0
  324. package/dist/server/handlers/enrichment.js +887 -718
  325. package/dist/server/handlers/enrichment.js.map +1 -0
  326. package/dist/server/handlers/image-gen.js +467 -376
  327. package/dist/server/handlers/image-gen.js.map +1 -0
  328. package/dist/server/handlers/inventory.js +797 -424
  329. package/dist/server/handlers/inventory.js.map +1 -0
  330. package/dist/server/handlers/kali.js +272 -230
  331. package/dist/server/handlers/kali.js.map +1 -0
  332. package/dist/server/handlers/llm-providers.js +803 -580
  333. package/dist/server/handlers/llm-providers.js.map +1 -0
  334. package/dist/server/handlers/local-agent.js +133 -105
  335. package/dist/server/handlers/local-agent.js.map +1 -0
  336. package/dist/server/handlers/media.js +1179 -857
  337. package/dist/server/handlers/media.js.map +1 -0
  338. package/dist/server/handlers/meta-ads.js +2669 -2093
  339. package/dist/server/handlers/meta-ads.js.map +1 -0
  340. package/dist/server/handlers/nodes.js +1321 -913
  341. package/dist/server/handlers/nodes.js.map +1 -0
  342. package/dist/server/handlers/operations.js +183 -157
  343. package/dist/server/handlers/operations.js.map +1 -0
  344. package/dist/server/handlers/platform.js +346 -210
  345. package/dist/server/handlers/platform.js.map +1 -0
  346. package/dist/server/handlers/remove-bg.js +118 -86
  347. package/dist/server/handlers/remove-bg.js.map +1 -0
  348. package/dist/server/handlers/storefront.js +586 -446
  349. package/dist/server/handlers/storefront.js.map +1 -0
  350. package/dist/server/handlers/supply-chain.js +546 -326
  351. package/dist/server/handlers/supply-chain.js.map +1 -0
  352. package/dist/server/handlers/transcription.js +106 -97
  353. package/dist/server/handlers/transcription.js.map +1 -0
  354. package/dist/server/handlers/video-gen.js +593 -424
  355. package/dist/server/handlers/video-gen.js.map +1 -0
  356. package/dist/server/handlers/voice.js +1458 -1017
  357. package/dist/server/handlers/voice.js.map +1 -0
  358. package/dist/server/handlers/workflow-steps.js +2837 -2116
  359. package/dist/server/handlers/workflow-steps.js.map +1 -0
  360. package/dist/server/handlers/workflows.js +1630 -933
  361. package/dist/server/handlers/workflows.js.map +1 -0
  362. package/dist/server/index.js +3166 -2390
  363. package/dist/server/index.js.map +1 -0
  364. package/dist/server/lib/batch-client.js +471 -409
  365. package/dist/server/lib/batch-client.js.map +1 -0
  366. package/dist/server/lib/clickhouse-buffer.js +118 -104
  367. package/dist/server/lib/clickhouse-buffer.js.map +1 -0
  368. package/dist/server/lib/clickhouse-client.js +107 -107
  369. package/dist/server/lib/clickhouse-client.js.map +1 -0
  370. package/dist/server/lib/coa-renderer.js +1786 -356
  371. package/dist/server/lib/coa-renderer.js.map +1 -0
  372. package/dist/server/lib/code-worker-pool.js +227 -177
  373. package/dist/server/lib/code-worker-pool.js.map +1 -0
  374. package/dist/server/lib/code-worker.js +174 -164
  375. package/dist/server/lib/code-worker.js.map +1 -0
  376. package/dist/server/lib/compaction-service.d.ts +2 -12
  377. package/dist/server/lib/compaction-service.js +74 -184
  378. package/dist/server/lib/compaction-service.js.map +1 -0
  379. package/dist/server/lib/logger.js +36 -24
  380. package/dist/server/lib/logger.js.map +1 -0
  381. package/dist/server/lib/otel.js +101 -80
  382. package/dist/server/lib/otel.js.map +1 -0
  383. package/dist/server/lib/pdf-renderer.d.ts +1 -1
  384. package/dist/server/lib/pdf-renderer.js +954 -776
  385. package/dist/server/lib/pdf-renderer.js.map +1 -0
  386. package/dist/server/lib/prompt-sanitizer.js +188 -108
  387. package/dist/server/lib/prompt-sanitizer.js.map +1 -0
  388. package/dist/server/lib/provider-capabilities.js +136 -138
  389. package/dist/server/lib/provider-capabilities.js.map +1 -0
  390. package/dist/server/lib/provider-failover.js +190 -168
  391. package/dist/server/lib/provider-failover.js.map +1 -0
  392. package/dist/server/lib/rate-limiter.js +186 -117
  393. package/dist/server/lib/rate-limiter.js.map +1 -0
  394. package/dist/server/lib/react-pdf-layout.js +551 -382
  395. package/dist/server/lib/react-pdf-layout.js.map +1 -0
  396. package/dist/server/lib/server-agent-loop.d.ts +9 -0
  397. package/dist/server/lib/server-agent-loop.js +906 -624
  398. package/dist/server/lib/server-agent-loop.js.map +1 -0
  399. package/dist/server/lib/server-subagent.d.ts +2 -0
  400. package/dist/server/lib/server-subagent.js +260 -162
  401. package/dist/server/lib/server-subagent.js.map +1 -0
  402. package/dist/server/lib/session-checkpoint.js +105 -96
  403. package/dist/server/lib/session-checkpoint.js.map +1 -0
  404. package/dist/server/lib/ssrf-guard.js +193 -184
  405. package/dist/server/lib/ssrf-guard.js.map +1 -0
  406. package/dist/server/lib/supabase-client.js +94 -82
  407. package/dist/server/lib/supabase-client.js.map +1 -0
  408. package/dist/server/lib/template-resolver.js +154 -176
  409. package/dist/server/lib/template-resolver.js.map +1 -0
  410. package/dist/server/lib/utils.js +242 -133
  411. package/dist/server/lib/utils.js.map +1 -0
  412. package/dist/server/local-agent-gateway.d.ts +2 -2
  413. package/dist/server/local-agent-gateway.js +785 -627
  414. package/dist/server/local-agent-gateway.js.map +1 -0
  415. package/dist/server/providers/anthropic.js +254 -176
  416. package/dist/server/providers/anthropic.js.map +1 -0
  417. package/dist/server/providers/bedrock.js +221 -162
  418. package/dist/server/providers/bedrock.js.map +1 -0
  419. package/dist/server/providers/gemini.js +548 -418
  420. package/dist/server/providers/gemini.js.map +1 -0
  421. package/dist/server/providers/openai.js +571 -437
  422. package/dist/server/providers/openai.js.map +1 -0
  423. package/dist/server/providers/registry.js +23 -18
  424. package/dist/server/providers/registry.js.map +1 -0
  425. package/dist/server/providers/shared.js +123 -95
  426. package/dist/server/providers/shared.js.map +1 -0
  427. package/dist/server/providers/types.js +1 -11
  428. package/dist/server/providers/types.js.map +1 -0
  429. package/dist/server/proxy-handlers.js +209 -165
  430. package/dist/server/proxy-handlers.js.map +1 -0
  431. package/dist/server/tool-router.d.ts +13 -0
  432. package/dist/server/tool-router.js +960 -598
  433. package/dist/server/tool-router.js.map +1 -0
  434. package/dist/server/validation.js +248 -188
  435. package/dist/server/validation.js.map +1 -0
  436. package/dist/server/worker.js +202 -133
  437. package/dist/server/worker.js.map +1 -0
  438. package/dist/setup.d.ts +2 -2
  439. package/dist/setup.js +151 -147
  440. package/dist/setup.js.map +1 -0
  441. package/dist/shared/agent-core.d.ts +191 -24
  442. package/dist/shared/agent-core.js +971 -462
  443. package/dist/shared/agent-core.js.map +1 -0
  444. package/dist/shared/anthropic-types.js +1 -6
  445. package/dist/shared/anthropic-types.js.map +1 -0
  446. package/dist/shared/api-client.d.ts +17 -9
  447. package/dist/shared/api-client.js +419 -327
  448. package/dist/shared/api-client.js.map +1 -0
  449. package/dist/shared/compaction.d.ts +36 -0
  450. package/dist/shared/compaction.js +138 -0
  451. package/dist/shared/compaction.js.map +1 -0
  452. package/dist/shared/constants.js +67 -64
  453. package/dist/shared/constants.js.map +1 -0
  454. package/dist/shared/sse-parser.js +221 -219
  455. package/dist/shared/sse-parser.js.map +1 -0
  456. package/dist/shared/tool-dispatch.d.ts +4 -2
  457. package/dist/shared/tool-dispatch.js +226 -165
  458. package/dist/shared/tool-dispatch.js.map +1 -0
  459. package/dist/shared/types.js +1 -6
  460. package/dist/shared/types.js.map +1 -0
  461. package/dist/types/cli-highlight.d.js +2 -0
  462. package/dist/types/cli-highlight.d.js.map +1 -0
  463. package/dist/types/diff.d.js +2 -0
  464. package/dist/types/diff.d.js.map +1 -0
  465. package/dist/types/pdf-parse.d.js +2 -0
  466. package/dist/types/pdf-parse.d.js.map +1 -0
  467. package/dist/updater.d.ts +1 -1
  468. package/dist/updater.js +118 -92
  469. package/dist/updater.js.map +1 -0
  470. package/dist/webchat/widget.js +227 -380
  471. package/dist/webchat/widget.js.map +1 -0
  472. package/package.json +22 -10
  473. package/vendor/ink/build/ansi-tokenizer.d.ts +38 -0
  474. package/vendor/ink/build/ansi-tokenizer.js +316 -0
  475. package/vendor/ink/build/ansi-tokenizer.js.map +1 -0
  476. package/vendor/ink/build/apply-styles.js +175 -0
  477. package/vendor/ink/build/build-layout.js +77 -0
  478. package/vendor/ink/build/calculate-wrapped-text.js +53 -0
  479. package/vendor/ink/build/colorize.d.ts +3 -0
  480. package/vendor/ink/build/colorize.js +48 -0
  481. package/vendor/ink/build/colorize.js.map +1 -0
  482. package/vendor/ink/build/components/AccessibilityContext.d.ts +3 -0
  483. package/vendor/ink/build/components/AccessibilityContext.js +5 -0
  484. package/vendor/ink/build/components/AccessibilityContext.js.map +1 -0
  485. package/vendor/ink/build/components/App.d.ts +18 -0
  486. package/vendor/ink/build/components/App.js +351 -0
  487. package/vendor/ink/build/components/App.js.map +1 -0
  488. package/vendor/ink/build/components/AppContext.d.ts +15 -0
  489. package/vendor/ink/build/components/AppContext.js +11 -0
  490. package/vendor/ink/build/components/AppContext.js.map +1 -0
  491. package/vendor/ink/build/components/BackgroundContext.d.ts +4 -0
  492. package/vendor/ink/build/components/BackgroundContext.js +3 -0
  493. package/vendor/ink/build/components/BackgroundContext.js.map +1 -0
  494. package/vendor/ink/build/components/Box.d.ts +117 -0
  495. package/vendor/ink/build/components/Box.js +34 -0
  496. package/vendor/ink/build/components/Box.js.map +1 -0
  497. package/vendor/ink/build/components/Color.js +62 -0
  498. package/vendor/ink/build/components/Cursor.d.ts +83 -0
  499. package/vendor/ink/build/components/Cursor.js +53 -0
  500. package/vendor/ink/build/components/Cursor.js.map +1 -0
  501. package/vendor/ink/build/components/CursorContext.d.ts +11 -0
  502. package/vendor/ink/build/components/CursorContext.js +8 -0
  503. package/vendor/ink/build/components/CursorContext.js.map +1 -0
  504. package/vendor/ink/build/components/ErrorBoundary.d.ts +18 -0
  505. package/vendor/ink/build/components/ErrorBoundary.js +23 -0
  506. package/vendor/ink/build/components/ErrorBoundary.js.map +1 -0
  507. package/vendor/ink/build/components/ErrorOverview.d.ts +6 -0
  508. package/vendor/ink/build/components/ErrorOverview.js +84 -0
  509. package/vendor/ink/build/components/ErrorOverview.js.map +1 -0
  510. package/vendor/ink/build/components/FocusContext.d.ts +16 -0
  511. package/vendor/ink/build/components/FocusContext.js +17 -0
  512. package/vendor/ink/build/components/FocusContext.js.map +1 -0
  513. package/vendor/ink/build/components/Newline.d.ts +13 -0
  514. package/vendor/ink/build/components/Newline.js +8 -0
  515. package/vendor/ink/build/components/Newline.js.map +1 -0
  516. package/vendor/ink/build/components/Spacer.d.ts +7 -0
  517. package/vendor/ink/build/components/Spacer.js +11 -0
  518. package/vendor/ink/build/components/Spacer.js.map +1 -0
  519. package/vendor/ink/build/components/Static.d.ts +24 -0
  520. package/vendor/ink/build/components/Static.js +28 -0
  521. package/vendor/ink/build/components/Static.js.map +1 -0
  522. package/vendor/ink/build/components/StderrContext.d.ts +15 -0
  523. package/vendor/ink/build/components/StderrContext.js +13 -0
  524. package/vendor/ink/build/components/StderrContext.js.map +1 -0
  525. package/vendor/ink/build/components/StdinContext.d.ts +22 -0
  526. package/vendor/ink/build/components/StdinContext.js +19 -0
  527. package/vendor/ink/build/components/StdinContext.js.map +1 -0
  528. package/vendor/ink/build/components/StdoutContext.d.ts +15 -0
  529. package/vendor/ink/build/components/StdoutContext.js +13 -0
  530. package/vendor/ink/build/components/StdoutContext.js.map +1 -0
  531. package/vendor/ink/build/components/Text.d.ts +55 -0
  532. package/vendor/ink/build/components/Text.js +50 -0
  533. package/vendor/ink/build/components/Text.js.map +1 -0
  534. package/vendor/ink/build/components/Transform.d.ts +16 -0
  535. package/vendor/ink/build/components/Transform.js +15 -0
  536. package/vendor/ink/build/components/Transform.js.map +1 -0
  537. package/vendor/ink/build/cursor-helpers.d.ts +38 -0
  538. package/vendor/ink/build/cursor-helpers.js +56 -0
  539. package/vendor/ink/build/cursor-helpers.js.map +1 -0
  540. package/vendor/ink/build/devtools-window-polyfill.d.ts +1 -0
  541. package/vendor/ink/build/devtools-window-polyfill.js +65 -0
  542. package/vendor/ink/build/devtools-window-polyfill.js.map +1 -0
  543. package/vendor/ink/build/devtools.d.ts +1 -0
  544. package/vendor/ink/build/devtools.js +11 -0
  545. package/vendor/ink/build/devtools.js.map +1 -0
  546. package/vendor/ink/build/dom.d.ts +56 -0
  547. package/vendor/ink/build/dom.js +124 -0
  548. package/vendor/ink/build/dom.js.map +1 -0
  549. package/vendor/ink/build/experimental/apply-style.js +140 -0
  550. package/vendor/ink/build/experimental/dom.js +123 -0
  551. package/vendor/ink/build/experimental/output.js +91 -0
  552. package/vendor/ink/build/experimental/reconciler.js +141 -0
  553. package/vendor/ink/build/experimental/renderer.js +81 -0
  554. package/vendor/ink/build/get-max-width.d.ts +3 -0
  555. package/vendor/ink/build/get-max-width.js +10 -0
  556. package/vendor/ink/build/get-max-width.js.map +1 -0
  557. package/vendor/ink/build/hooks/use-app.d.ts +5 -0
  558. package/vendor/ink/build/hooks/use-app.js +8 -0
  559. package/vendor/ink/build/hooks/use-app.js.map +1 -0
  560. package/vendor/ink/build/hooks/use-cursor.d.ts +12 -0
  561. package/vendor/ink/build/hooks/use-cursor.js +29 -0
  562. package/vendor/ink/build/hooks/use-cursor.js.map +1 -0
  563. package/vendor/ink/build/hooks/use-focus-manager.d.ts +28 -0
  564. package/vendor/ink/build/hooks/use-focus-manager.js +17 -0
  565. package/vendor/ink/build/hooks/use-focus-manager.js.map +1 -0
  566. package/vendor/ink/build/hooks/use-focus.d.ts +29 -0
  567. package/vendor/ink/build/hooks/use-focus.js +42 -0
  568. package/vendor/ink/build/hooks/use-focus.js.map +1 -0
  569. package/vendor/ink/build/hooks/use-input.d.ts +131 -0
  570. package/vendor/ink/build/hooks/use-input.js +124 -0
  571. package/vendor/ink/build/hooks/use-input.js.map +1 -0
  572. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.d.ts +5 -0
  573. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js +11 -0
  574. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
  575. package/vendor/ink/build/hooks/use-stderr.d.ts +5 -0
  576. package/vendor/ink/build/hooks/use-stderr.js +8 -0
  577. package/vendor/ink/build/hooks/use-stderr.js.map +1 -0
  578. package/vendor/ink/build/hooks/use-stdin.d.ts +5 -0
  579. package/vendor/ink/build/hooks/use-stdin.js +8 -0
  580. package/vendor/ink/build/hooks/use-stdin.js.map +1 -0
  581. package/vendor/ink/build/hooks/use-stdout.d.ts +5 -0
  582. package/vendor/ink/build/hooks/use-stdout.js +8 -0
  583. package/vendor/ink/build/hooks/use-stdout.js.map +1 -0
  584. package/vendor/ink/build/hooks/useInput.js +38 -0
  585. package/vendor/ink/build/index.d.ts +34 -0
  586. package/vendor/ink/build/index.js +20 -0
  587. package/vendor/ink/build/index.js.map +1 -0
  588. package/vendor/ink/build/ink.d.ts +90 -0
  589. package/vendor/ink/build/ink.js +654 -0
  590. package/vendor/ink/build/ink.js.map +1 -0
  591. package/vendor/ink/build/input-parser.d.ts +7 -0
  592. package/vendor/ink/build/input-parser.js +154 -0
  593. package/vendor/ink/build/input-parser.js.map +1 -0
  594. package/vendor/ink/build/instance.js +205 -0
  595. package/vendor/ink/build/instances.d.ts +3 -0
  596. package/vendor/ink/build/instances.js +8 -0
  597. package/vendor/ink/build/instances.js.map +1 -0
  598. package/vendor/ink/build/kitty-keyboard.d.ts +23 -0
  599. package/vendor/ink/build/kitty-keyboard.js +32 -0
  600. package/vendor/ink/build/kitty-keyboard.js.map +1 -0
  601. package/vendor/ink/build/layout.d.ts +7 -0
  602. package/vendor/ink/build/layout.js +33 -0
  603. package/vendor/ink/build/layout.js.map +1 -0
  604. package/vendor/ink/build/log-update.d.ts +19 -0
  605. package/vendor/ink/build/log-update.js +243 -0
  606. package/vendor/ink/build/log-update.js.map +1 -0
  607. package/vendor/ink/build/measure-element.d.ts +16 -0
  608. package/vendor/ink/build/measure-element.js +9 -0
  609. package/vendor/ink/build/measure-element.js.map +1 -0
  610. package/vendor/ink/build/measure-text.d.ts +6 -0
  611. package/vendor/ink/build/measure-text.js +21 -0
  612. package/vendor/ink/build/measure-text.js.map +1 -0
  613. package/vendor/ink/build/options.d.ts +52 -0
  614. package/vendor/ink/build/options.js +2 -0
  615. package/vendor/ink/build/options.js.map +1 -0
  616. package/vendor/ink/build/output.d.ts +35 -0
  617. package/vendor/ink/build/output.js +183 -0
  618. package/vendor/ink/build/output.js.map +1 -0
  619. package/vendor/ink/build/parse-keypress.d.ts +22 -0
  620. package/vendor/ink/build/parse-keypress.js +493 -0
  621. package/vendor/ink/build/parse-keypress.js.map +1 -0
  622. package/vendor/ink/build/reconciler.d.ts +4 -0
  623. package/vendor/ink/build/reconciler.js +274 -0
  624. package/vendor/ink/build/reconciler.js.map +1 -0
  625. package/vendor/ink/build/render-background.d.ts +4 -0
  626. package/vendor/ink/build/render-background.js +25 -0
  627. package/vendor/ink/build/render-background.js.map +1 -0
  628. package/vendor/ink/build/render-border.d.ts +4 -0
  629. package/vendor/ink/build/render-border.js +73 -0
  630. package/vendor/ink/build/render-border.js.map +1 -0
  631. package/vendor/ink/build/render-node-to-output.d.ts +14 -0
  632. package/vendor/ink/build/render-node-to-output.js +147 -0
  633. package/vendor/ink/build/render-node-to-output.js.map +1 -0
  634. package/vendor/ink/build/render-to-string.d.ts +38 -0
  635. package/vendor/ink/build/render-to-string.js +115 -0
  636. package/vendor/ink/build/render-to-string.js.map +1 -0
  637. package/vendor/ink/build/render.d.ts +121 -0
  638. package/vendor/ink/build/render.js +55 -0
  639. package/vendor/ink/build/render.js.map +1 -0
  640. package/vendor/ink/build/renderer.d.ts +8 -0
  641. package/vendor/ink/build/renderer.js +55 -0
  642. package/vendor/ink/build/renderer.js.map +1 -0
  643. package/vendor/ink/build/sanitize-ansi.d.ts +2 -0
  644. package/vendor/ink/build/sanitize-ansi.js +27 -0
  645. package/vendor/ink/build/sanitize-ansi.js.map +1 -0
  646. package/vendor/ink/build/screen-reader-update.d.ts +13 -0
  647. package/vendor/ink/build/screen-reader-update.js +38 -0
  648. package/vendor/ink/build/screen-reader-update.js.map +1 -0
  649. package/vendor/ink/build/squash-text-nodes.d.ts +3 -0
  650. package/vendor/ink/build/squash-text-nodes.js +36 -0
  651. package/vendor/ink/build/squash-text-nodes.js.map +1 -0
  652. package/vendor/ink/build/styles.d.ts +240 -0
  653. package/vendor/ink/build/styles.js +232 -0
  654. package/vendor/ink/build/styles.js.map +1 -0
  655. package/vendor/ink/build/utils.d.ts +2 -0
  656. package/vendor/ink/build/utils.js +4 -0
  657. package/vendor/ink/build/utils.js.map +1 -0
  658. package/vendor/ink/build/wrap-text.d.ts +3 -0
  659. package/vendor/ink/build/wrap-text.js +31 -0
  660. package/vendor/ink/build/wrap-text.js.map +1 -0
  661. package/vendor/ink/build/write-synchronized.d.ts +4 -0
  662. package/vendor/ink/build/write-synchronized.js +7 -0
  663. package/vendor/ink/build/write-synchronized.js.map +1 -0
  664. package/vendor/ink/license +10 -0
  665. package/vendor/ink/node_modules/@types/node/LICENSE +21 -0
  666. package/vendor/ink/node_modules/@types/node/README.md +15 -0
  667. package/vendor/ink/node_modules/@types/node/assert/strict.d.ts +105 -0
  668. package/vendor/ink/node_modules/@types/node/assert.d.ts +955 -0
  669. package/vendor/ink/node_modules/@types/node/async_hooks.d.ts +623 -0
  670. package/vendor/ink/node_modules/@types/node/buffer.buffer.d.ts +466 -0
  671. package/vendor/ink/node_modules/@types/node/buffer.d.ts +1810 -0
  672. package/vendor/ink/node_modules/@types/node/child_process.d.ts +1428 -0
  673. package/vendor/ink/node_modules/@types/node/cluster.d.ts +486 -0
  674. package/vendor/ink/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
  675. package/vendor/ink/node_modules/@types/node/console.d.ts +151 -0
  676. package/vendor/ink/node_modules/@types/node/constants.d.ts +20 -0
  677. package/vendor/ink/node_modules/@types/node/crypto.d.ts +4065 -0
  678. package/vendor/ink/node_modules/@types/node/dgram.d.ts +564 -0
  679. package/vendor/ink/node_modules/@types/node/diagnostics_channel.d.ts +576 -0
  680. package/vendor/ink/node_modules/@types/node/dns/promises.d.ts +503 -0
  681. package/vendor/ink/node_modules/@types/node/dns.d.ts +922 -0
  682. package/vendor/ink/node_modules/@types/node/domain.d.ts +166 -0
  683. package/vendor/ink/node_modules/@types/node/events.d.ts +1054 -0
  684. package/vendor/ink/node_modules/@types/node/fs/promises.d.ts +1329 -0
  685. package/vendor/ink/node_modules/@types/node/fs.d.ts +4676 -0
  686. package/vendor/ink/node_modules/@types/node/globals.d.ts +150 -0
  687. package/vendor/ink/node_modules/@types/node/globals.typedarray.d.ts +101 -0
  688. package/vendor/ink/node_modules/@types/node/http.d.ts +2167 -0
  689. package/vendor/ink/node_modules/@types/node/http2.d.ts +2480 -0
  690. package/vendor/ink/node_modules/@types/node/https.d.ts +405 -0
  691. package/vendor/ink/node_modules/@types/node/index.d.ts +115 -0
  692. package/vendor/ink/node_modules/@types/node/inspector/promises.d.ts +41 -0
  693. package/vendor/ink/node_modules/@types/node/inspector.d.ts +224 -0
  694. package/vendor/ink/node_modules/@types/node/inspector.generated.d.ts +4226 -0
  695. package/vendor/ink/node_modules/@types/node/module.d.ts +819 -0
  696. package/vendor/ink/node_modules/@types/node/net.d.ts +933 -0
  697. package/vendor/ink/node_modules/@types/node/os.d.ts +507 -0
  698. package/vendor/ink/node_modules/@types/node/package.json +155 -0
  699. package/vendor/ink/node_modules/@types/node/path/posix.d.ts +8 -0
  700. package/vendor/ink/node_modules/@types/node/path/win32.d.ts +8 -0
  701. package/vendor/ink/node_modules/@types/node/path.d.ts +187 -0
  702. package/vendor/ink/node_modules/@types/node/perf_hooks.d.ts +643 -0
  703. package/vendor/ink/node_modules/@types/node/process.d.ts +2156 -0
  704. package/vendor/ink/node_modules/@types/node/punycode.d.ts +117 -0
  705. package/vendor/ink/node_modules/@types/node/querystring.d.ts +152 -0
  706. package/vendor/ink/node_modules/@types/node/quic.d.ts +910 -0
  707. package/vendor/ink/node_modules/@types/node/readline/promises.d.ts +161 -0
  708. package/vendor/ink/node_modules/@types/node/readline.d.ts +541 -0
  709. package/vendor/ink/node_modules/@types/node/repl.d.ts +415 -0
  710. package/vendor/ink/node_modules/@types/node/sea.d.ts +162 -0
  711. package/vendor/ink/node_modules/@types/node/sqlite.d.ts +955 -0
  712. package/vendor/ink/node_modules/@types/node/stream/consumers.d.ts +38 -0
  713. package/vendor/ink/node_modules/@types/node/stream/promises.d.ts +211 -0
  714. package/vendor/ink/node_modules/@types/node/stream/web.d.ts +296 -0
  715. package/vendor/ink/node_modules/@types/node/stream.d.ts +1760 -0
  716. package/vendor/ink/node_modules/@types/node/string_decoder.d.ts +67 -0
  717. package/vendor/ink/node_modules/@types/node/test/reporters.d.ts +96 -0
  718. package/vendor/ink/node_modules/@types/node/test.d.ts +2240 -0
  719. package/vendor/ink/node_modules/@types/node/timers/promises.d.ts +108 -0
  720. package/vendor/ink/node_modules/@types/node/timers.d.ts +159 -0
  721. package/vendor/ink/node_modules/@types/node/tls.d.ts +1198 -0
  722. package/vendor/ink/node_modules/@types/node/trace_events.d.ts +197 -0
  723. package/vendor/ink/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +462 -0
  724. package/vendor/ink/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
  725. package/vendor/ink/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +36 -0
  726. package/vendor/ink/node_modules/@types/node/ts5.6/index.d.ts +117 -0
  727. package/vendor/ink/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
  728. package/vendor/ink/node_modules/@types/node/ts5.7/index.d.ts +117 -0
  729. package/vendor/ink/node_modules/@types/node/tty.d.ts +250 -0
  730. package/vendor/ink/node_modules/@types/node/url.d.ts +519 -0
  731. package/vendor/ink/node_modules/@types/node/util/types.d.ts +558 -0
  732. package/vendor/ink/node_modules/@types/node/util.d.ts +1662 -0
  733. package/vendor/ink/node_modules/@types/node/v8.d.ts +983 -0
  734. package/vendor/ink/node_modules/@types/node/vm.d.ts +1208 -0
  735. package/vendor/ink/node_modules/@types/node/wasi.d.ts +202 -0
  736. package/vendor/ink/node_modules/@types/node/web-globals/abortcontroller.d.ts +59 -0
  737. package/vendor/ink/node_modules/@types/node/web-globals/blob.d.ts +23 -0
  738. package/vendor/ink/node_modules/@types/node/web-globals/console.d.ts +9 -0
  739. package/vendor/ink/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
  740. package/vendor/ink/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  741. package/vendor/ink/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
  742. package/vendor/ink/node_modules/@types/node/web-globals/events.d.ts +106 -0
  743. package/vendor/ink/node_modules/@types/node/web-globals/fetch.d.ts +69 -0
  744. package/vendor/ink/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
  745. package/vendor/ink/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
  746. package/vendor/ink/node_modules/@types/node/web-globals/navigator.d.ts +25 -0
  747. package/vendor/ink/node_modules/@types/node/web-globals/performance.d.ts +45 -0
  748. package/vendor/ink/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  749. package/vendor/ink/node_modules/@types/node/web-globals/streams.d.ts +115 -0
  750. package/vendor/ink/node_modules/@types/node/web-globals/timers.d.ts +44 -0
  751. package/vendor/ink/node_modules/@types/node/web-globals/url.d.ts +24 -0
  752. package/vendor/ink/node_modules/@types/node/worker_threads.d.ts +717 -0
  753. package/vendor/ink/node_modules/@types/node/zlib.d.ts +618 -0
  754. package/vendor/ink/node_modules/node-pty/LICENSE +69 -0
  755. package/vendor/ink/node_modules/node-pty/README.md +164 -0
  756. package/vendor/ink/node_modules/node-pty/binding.gyp +150 -0
  757. package/vendor/ink/node_modules/node-pty/lib/conpty_console_list_agent.js +25 -0
  758. package/vendor/ink/node_modules/node-pty/lib/eventEmitter2.js +47 -0
  759. package/vendor/ink/node_modules/node-pty/lib/index.js +52 -0
  760. package/vendor/ink/node_modules/node-pty/lib/interfaces.js +7 -0
  761. package/vendor/ink/node_modules/node-pty/lib/shared/conout.js +11 -0
  762. package/vendor/ink/node_modules/node-pty/lib/terminal.js +190 -0
  763. package/vendor/ink/node_modules/node-pty/lib/types.js +7 -0
  764. package/vendor/ink/node_modules/node-pty/lib/unixTerminal.js +349 -0
  765. package/vendor/ink/node_modules/node-pty/lib/utils.js +39 -0
  766. package/vendor/ink/node_modules/node-pty/lib/windowsConoutConnection.js +125 -0
  767. package/vendor/ink/node_modules/node-pty/lib/windowsPtyAgent.js +287 -0
  768. package/vendor/ink/node_modules/node-pty/lib/windowsTerminal.js +201 -0
  769. package/vendor/ink/node_modules/node-pty/lib/worker/conoutSocketWorker.js +22 -0
  770. package/vendor/ink/node_modules/node-pty/package.json +65 -0
  771. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/pty.node +0 -0
  772. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/spawn-helper +0 -0
  773. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/pty.node +0 -0
  774. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/spawn-helper +0 -0
  775. package/vendor/ink/node_modules/node-pty/prebuilds/linux-arm64/pty.node +0 -0
  776. package/vendor/ink/node_modules/node-pty/prebuilds/linux-x64/pty.node +0 -0
  777. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
  778. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
  779. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
  780. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.pdb +0 -0
  781. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  782. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.pdb +0 -0
  783. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
  784. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
  785. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.node +0 -0
  786. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.pdb +0 -0
  787. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
  788. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.pdb +0 -0
  789. package/vendor/ink/node_modules/node-pty/scripts/post-install.js +76 -0
  790. package/vendor/ink/node_modules/node-pty/scripts/prebuild.js +34 -0
  791. package/vendor/ink/node_modules/node-pty/src/unix/pty.cc +875 -0
  792. package/vendor/ink/node_modules/node-pty/src/unix/spawn-helper.cc +23 -0
  793. package/vendor/ink/node_modules/node-pty/src/win/conpty.cc +582 -0
  794. package/vendor/ink/node_modules/node-pty/src/win/conpty.h +41 -0
  795. package/vendor/ink/node_modules/node-pty/src/win/conpty_console_list.cc +44 -0
  796. package/vendor/ink/node_modules/node-pty/src/win/path_util.cc +95 -0
  797. package/vendor/ink/node_modules/node-pty/src/win/path_util.h +26 -0
  798. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/OpenConsole.exe +0 -0
  799. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/conpty.dll +0 -0
  800. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/OpenConsole.exe +0 -0
  801. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/conpty.dll +0 -0
  802. package/vendor/ink/node_modules/node-pty/typings/node-pty.d.ts +215 -0
  803. package/vendor/ink/node_modules/undici-types/LICENSE +21 -0
  804. package/vendor/ink/node_modules/undici-types/README.md +6 -0
  805. package/vendor/ink/node_modules/undici-types/agent.d.ts +32 -0
  806. package/vendor/ink/node_modules/undici-types/api.d.ts +43 -0
  807. package/vendor/ink/node_modules/undici-types/balanced-pool.d.ts +30 -0
  808. package/vendor/ink/node_modules/undici-types/cache-interceptor.d.ts +173 -0
  809. package/vendor/ink/node_modules/undici-types/cache.d.ts +36 -0
  810. package/vendor/ink/node_modules/undici-types/client-stats.d.ts +15 -0
  811. package/vendor/ink/node_modules/undici-types/client.d.ts +108 -0
  812. package/vendor/ink/node_modules/undici-types/connector.d.ts +34 -0
  813. package/vendor/ink/node_modules/undici-types/content-type.d.ts +21 -0
  814. package/vendor/ink/node_modules/undici-types/cookies.d.ts +30 -0
  815. package/vendor/ink/node_modules/undici-types/diagnostics-channel.d.ts +74 -0
  816. package/vendor/ink/node_modules/undici-types/dispatcher.d.ts +276 -0
  817. package/vendor/ink/node_modules/undici-types/env-http-proxy-agent.d.ts +22 -0
  818. package/vendor/ink/node_modules/undici-types/errors.d.ts +161 -0
  819. package/vendor/ink/node_modules/undici-types/eventsource.d.ts +66 -0
  820. package/vendor/ink/node_modules/undici-types/fetch.d.ts +211 -0
  821. package/vendor/ink/node_modules/undici-types/formdata.d.ts +108 -0
  822. package/vendor/ink/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  823. package/vendor/ink/node_modules/undici-types/global-origin.d.ts +7 -0
  824. package/vendor/ink/node_modules/undici-types/h2c-client.d.ts +73 -0
  825. package/vendor/ink/node_modules/undici-types/handlers.d.ts +15 -0
  826. package/vendor/ink/node_modules/undici-types/header.d.ts +160 -0
  827. package/vendor/ink/node_modules/undici-types/index.d.ts +88 -0
  828. package/vendor/ink/node_modules/undici-types/interceptors.d.ts +73 -0
  829. package/vendor/ink/node_modules/undici-types/mock-agent.d.ts +68 -0
  830. package/vendor/ink/node_modules/undici-types/mock-call-history.d.ts +111 -0
  831. package/vendor/ink/node_modules/undici-types/mock-client.d.ts +27 -0
  832. package/vendor/ink/node_modules/undici-types/mock-errors.d.ts +12 -0
  833. package/vendor/ink/node_modules/undici-types/mock-interceptor.d.ts +94 -0
  834. package/vendor/ink/node_modules/undici-types/mock-pool.d.ts +27 -0
  835. package/vendor/ink/node_modules/undici-types/package.json +55 -0
  836. package/vendor/ink/node_modules/undici-types/patch.d.ts +29 -0
  837. package/vendor/ink/node_modules/undici-types/pool-stats.d.ts +19 -0
  838. package/vendor/ink/node_modules/undici-types/pool.d.ts +41 -0
  839. package/vendor/ink/node_modules/undici-types/proxy-agent.d.ts +29 -0
  840. package/vendor/ink/node_modules/undici-types/readable.d.ts +68 -0
  841. package/vendor/ink/node_modules/undici-types/retry-agent.d.ts +8 -0
  842. package/vendor/ink/node_modules/undici-types/retry-handler.d.ts +125 -0
  843. package/vendor/ink/node_modules/undici-types/round-robin-pool.d.ts +41 -0
  844. package/vendor/ink/node_modules/undici-types/snapshot-agent.d.ts +109 -0
  845. package/vendor/ink/node_modules/undici-types/util.d.ts +18 -0
  846. package/vendor/ink/node_modules/undici-types/utility.d.ts +7 -0
  847. package/vendor/ink/node_modules/undici-types/webidl.d.ts +341 -0
  848. package/vendor/ink/node_modules/undici-types/websocket.d.ts +186 -0
  849. package/vendor/ink/package.json +201 -0
  850. package/vendor/ink/readme.md +2636 -0
  851. package/bin/swag-agent.js +0 -9
  852. package/dist/server/lib/pg-rate-limiter.d.ts +0 -21
  853. package/dist/server/lib/pg-rate-limiter.js +0 -86
@@ -11,6 +11,7 @@
11
11
  * Phase 7.1: Also encapsulates thinking config, context management,
12
12
  * output token limits, and compaction config for Gemini models.
13
13
  */
14
+
14
15
  import { randomUUID } from "node:crypto";
15
16
  import { GoogleGenAI } from "@google/genai";
16
17
  import { sanitizeError } from "../../shared/agent-core.js";
@@ -20,120 +21,128 @@ import { jsonResponse, writeSSEHeaders, emitError, resolveProviderCredentials }
20
21
  // ============================================================================
21
22
  // CONSTANTS — Gemini-specific model config
22
23
  // ============================================================================
24
+
23
25
  const GEMINI_MAX_TOKENS = 65536;
24
26
  const DEFAULT_OUTPUT_TOKENS = 16384;
25
27
  const MODEL_MAX_OUTPUT_TOKENS = {
26
- "gemini-3-pro-preview": 65536,
27
- "gemini-3-flash-preview": 65536,
28
- "gemini-2.5-pro": 65536,
29
- "gemini-2.5-flash": 65536,
30
- "gemini-2.5-flash-lite": 65536,
28
+ "gemini-3-pro-preview": 65536,
29
+ "gemini-3-flash-preview": 65536,
30
+ "gemini-2.5-pro": 65536,
31
+ "gemini-2.5-flash": 65536,
32
+ "gemini-2.5-flash-lite": 65536
31
33
  };
34
+
32
35
  // ============================================================================
33
36
  // MESSAGE CONVERSION
34
37
  // ============================================================================
38
+
35
39
  /** Convert Anthropic messages to Gemini Content format */
36
40
  function anthropicToGeminiMessages(messages) {
37
- const raw = [];
38
- // Track tool_use_id → name for tool_result conversion
39
- const toolIdMap = new Map();
40
- for (const msg of messages) {
41
- const role = msg.role === "assistant" ? "model" : "user";
42
- const parts = [];
43
- if (typeof msg.content === "string") {
44
- parts.push({ text: msg.content });
45
- }
46
- else if (Array.isArray(msg.content)) {
47
- for (const block of msg.content) {
48
- if (block.type === "text" && block.text) {
49
- parts.push({ text: block.text });
50
- }
51
- else if (block.type === "tool_use") {
52
- toolIdMap.set(block.id, block.name);
53
- parts.push({
54
- functionCall: { name: block.name, args: block.input || {} },
55
- // Preserve Gemini thought signature for function call round-trips
56
- ...(block.thought_signature ? { thoughtSignature: block.thought_signature } : {}),
57
- });
58
- }
59
- else if (block.type === "image" && block.source?.data) {
60
- parts.push({
61
- inlineData: {
62
- mimeType: block.source.media_type,
63
- data: block.source.data,
64
- },
65
- });
66
- }
67
- else if (block.type === "tool_result") {
68
- const toolName = toolIdMap.get(block.tool_use_id) || block.tool_use_id;
69
- let resultContent = "";
70
- if (typeof block.content === "string") {
71
- resultContent = block.content;
72
- }
73
- else if (Array.isArray(block.content)) {
74
- resultContent = block.content
75
- .filter((c) => c.type === "text")
76
- .map((c) => c.text)
77
- .join("\n");
78
- }
79
- parts.push({
80
- functionResponse: {
81
- name: toolName,
82
- response: { result: resultContent },
83
- },
84
- });
85
- }
41
+ const raw = [];
42
+ // Track tool_use_id → name for tool_result conversion
43
+ const toolIdMap = new Map();
44
+ for (const msg of messages) {
45
+ const role = msg.role === "assistant" ? "model" : "user";
46
+ const parts = [];
47
+ if (typeof msg.content === "string") {
48
+ parts.push({
49
+ text: msg.content
50
+ });
51
+ } else if (Array.isArray(msg.content)) {
52
+ for (const block of msg.content) {
53
+ if (block.type === "text" && block.text) {
54
+ parts.push({
55
+ text: block.text
56
+ });
57
+ } else if (block.type === "tool_use") {
58
+ toolIdMap.set(block.id, block.name);
59
+ parts.push({
60
+ functionCall: {
61
+ name: block.name,
62
+ args: block.input || {}
63
+ },
64
+ // Preserve Gemini thought signature for function call round-trips
65
+ ...(block.thought_signature ? {
66
+ thoughtSignature: block.thought_signature
67
+ } : {})
68
+ });
69
+ } else if (block.type === "image" && block.source?.data) {
70
+ parts.push({
71
+ inlineData: {
72
+ mimeType: block.source.media_type,
73
+ data: block.source.data
86
74
  }
75
+ });
76
+ } else if (block.type === "tool_result") {
77
+ const toolName = toolIdMap.get(block.tool_use_id) || block.tool_use_id;
78
+ let resultContent = "";
79
+ if (typeof block.content === "string") {
80
+ resultContent = block.content;
81
+ } else if (Array.isArray(block.content)) {
82
+ resultContent = block.content.filter(c => c.type === "text").map(c => c.text).join("\n");
83
+ }
84
+ parts.push({
85
+ functionResponse: {
86
+ name: toolName,
87
+ response: {
88
+ result: resultContent
89
+ }
90
+ }
91
+ });
87
92
  }
88
- if (parts.length > 0) {
89
- raw.push({ role, parts });
90
- }
93
+ }
91
94
  }
92
- // Gemini requires strictly alternating user/model turns.
93
- // After context compaction or multi-step tool use, consecutive same-role turns
94
- // can appear — Gemini rejects these with INVALID_ARGUMENT.
95
- // Fix: merge consecutive same-role turns by concatenating their parts.
96
- const contents = [];
97
- for (const turn of raw) {
98
- const prev = contents[contents.length - 1];
99
- if (prev && prev.role === turn.role) {
100
- // Merge into the previous turn
101
- prev.parts = [...(prev.parts || []), ...(turn.parts || [])];
102
- }
103
- else {
104
- contents.push({ role: turn.role, parts: turn.parts });
105
- }
95
+ if (parts.length > 0) {
96
+ raw.push({
97
+ role,
98
+ parts
99
+ });
100
+ }
101
+ }
102
+
103
+ // Gemini requires strictly alternating user/model turns.
104
+ // After context compaction or multi-step tool use, consecutive same-role turns
105
+ // can appear — Gemini rejects these with INVALID_ARGUMENT.
106
+ // Fix: merge consecutive same-role turns by concatenating their parts.
107
+ const contents = [];
108
+ for (const turn of raw) {
109
+ const prev = contents[contents.length - 1];
110
+ if (prev && prev.role === turn.role) {
111
+ // Merge into the previous turn
112
+ prev.parts = [...(prev.parts || []), ...(turn.parts || [])];
113
+ } else {
114
+ contents.push({
115
+ role: turn.role,
116
+ parts: turn.parts
117
+ });
106
118
  }
107
- return contents;
119
+ }
120
+ return contents;
108
121
  }
122
+
109
123
  // ============================================================================
110
124
  // SCHEMA SANITIZATION
111
125
  // ============================================================================
126
+
112
127
  /** Gemini uses uppercase OpenAPI schema types, not lowercase JSON Schema types. */
113
128
  const GEMINI_TYPE_MAP = {
114
- string: "STRING",
115
- number: "NUMBER",
116
- integer: "INTEGER",
117
- boolean: "BOOLEAN",
118
- array: "ARRAY",
119
- object: "OBJECT",
129
+ string: "STRING",
130
+ number: "NUMBER",
131
+ integer: "INTEGER",
132
+ boolean: "BOOLEAN",
133
+ array: "ARRAY",
134
+ object: "OBJECT"
120
135
  };
136
+
121
137
  /**
122
138
  * Keys that are JSON Schema-only and not supported by Gemini's OpenAPI Schema.
123
139
  * IMPORTANT: Only strip keys that can't collide with property names in our tools.
124
140
  */
125
- const GEMINI_SCHEMA_ONLY_KEYS = new Set([
126
- "$schema", "additionalProperties", "propertyNames",
127
- "minProperties", "maxProperties",
128
- "anyOf", "oneOf", "allOf", "not", "const",
129
- ]);
141
+ const GEMINI_SCHEMA_ONLY_KEYS = new Set(["$schema", "additionalProperties", "propertyNames", "minProperties", "maxProperties", "anyOf", "oneOf", "allOf", "not", "const"]);
142
+
130
143
  /** Keys to strip only from schema definition objects (objects with a "type" field) */
131
- const GEMINI_SCHEMA_VALIDATION_KEYS = new Set([
132
- "exclusiveMinimum", "exclusiveMaximum",
133
- "minItems", "maxItems", "minLength", "maxLength",
134
- "minimum", "maximum", "pattern",
135
- "default",
136
- ]);
144
+ const GEMINI_SCHEMA_VALIDATION_KEYS = new Set(["exclusiveMinimum", "exclusiveMaximum", "minItems", "maxItems", "minLength", "maxLength", "minimum", "maximum", "pattern", "default"]);
145
+
137
146
  /**
138
147
  * Sanitize JSON Schema → Gemini OpenAPI Schema:
139
148
  * - Convert type values to uppercase (string → STRING)
@@ -143,359 +152,480 @@ const GEMINI_SCHEMA_VALIDATION_KEYS = new Set([
143
152
  * - Filter required to only include defined properties
144
153
  */
145
154
  function sanitizeSchemaForGemini(schema) {
146
- if (!schema || typeof schema !== "object")
147
- return schema;
148
- if (Array.isArray(schema))
149
- return schema.map((s) => sanitizeSchemaForGemini(s));
150
- const result = {};
151
- const isSchemaNode = "type" in schema;
152
- for (const [key, value] of Object.entries(schema)) {
153
- // Always strip structural JSON Schema keys
154
- if (GEMINI_SCHEMA_ONLY_KEYS.has(key))
155
- continue;
156
- // Strip validation keys only from schema nodes (not property name maps)
157
- if (isSchemaNode && GEMINI_SCHEMA_VALIDATION_KEYS.has(key))
158
- continue;
159
- if (key === "type" && typeof value === "string") {
160
- result[key] = GEMINI_TYPE_MAP[value] || value.toUpperCase();
161
- }
162
- else if (key === "enum" && Array.isArray(value)) {
163
- result[key] = value.map((v) => String(v));
164
- }
165
- else if (key === "properties" && typeof value === "object" && value !== null && !Array.isArray(value)) {
166
- // Properties map: keys are property names, values are schema definitions
167
- const props = {};
168
- for (const [propName, propSchema] of Object.entries(value)) {
169
- props[propName] = sanitizeSchemaForGemini(propSchema);
170
- }
171
- result[key] = props;
172
- }
173
- else {
174
- result[key] = sanitizeSchemaForGemini(value);
175
- }
176
- }
177
- // Gemini requires array items to have a type
178
- if (result.type === "ARRAY") {
179
- if (!result.items || (typeof result.items === "object" && Object.keys(result.items).length === 0)) {
180
- result.items = { type: "STRING" };
181
- }
155
+ if (!schema || typeof schema !== "object") return schema;
156
+ if (Array.isArray(schema)) return schema.map(s => sanitizeSchemaForGemini(s));
157
+ const result = {};
158
+ const isSchemaNode = "type" in schema;
159
+ for (const [key, value] of Object.entries(schema)) {
160
+ // Always strip structural JSON Schema keys
161
+ if (GEMINI_SCHEMA_ONLY_KEYS.has(key)) continue;
162
+ // Strip validation keys only from schema nodes (not property name maps)
163
+ if (isSchemaNode && GEMINI_SCHEMA_VALIDATION_KEYS.has(key)) continue;
164
+ if (key === "type" && typeof value === "string") {
165
+ result[key] = GEMINI_TYPE_MAP[value] || value.toUpperCase();
166
+ } else if (key === "enum" && Array.isArray(value)) {
167
+ result[key] = value.map(v => String(v));
168
+ } else if (key === "properties" && typeof value === "object" && value !== null && !Array.isArray(value)) {
169
+ // Properties map: keys are property names, values are schema definitions
170
+ const props = {};
171
+ for (const [propName, propSchema] of Object.entries(value)) {
172
+ props[propName] = sanitizeSchemaForGemini(propSchema);
173
+ }
174
+ result[key] = props;
175
+ } else {
176
+ result[key] = sanitizeSchemaForGemini(value);
182
177
  }
183
- // Gemini requires object types to have properties
184
- if (result.type === "OBJECT" && !result.properties) {
185
- result.properties = {};
178
+ }
179
+
180
+ // Gemini requires array items to have a type
181
+ if (result.type === "ARRAY") {
182
+ if (!result.items || typeof result.items === "object" && Object.keys(result.items).length === 0) {
183
+ result.items = {
184
+ type: "STRING"
185
+ };
186
186
  }
187
- // Gemini only allows enum on STRING type — force type to STRING if enum is present
188
- if (result.enum && Array.isArray(result.enum) && result.type && result.type !== "STRING") {
189
- result.type = "STRING";
190
- }
191
- // Filter required to only include properties that actually exist
192
- if (result.required && Array.isArray(result.required) && result.properties) {
193
- const validProps = new Set(Object.keys(result.properties));
194
- result.required = result.required.filter((r) => validProps.has(r));
195
- if (result.required.length === 0)
196
- delete result.required;
197
- }
198
- return result;
187
+ }
188
+
189
+ // Gemini requires object types to have properties
190
+ if (result.type === "OBJECT" && !result.properties) {
191
+ result.properties = {};
192
+ }
193
+
194
+ // Gemini only allows enum on STRING type — force type to STRING if enum is present
195
+ if (result.enum && Array.isArray(result.enum) && result.type && result.type !== "STRING") {
196
+ result.type = "STRING";
197
+ }
198
+
199
+ // Filter required to only include properties that actually exist
200
+ if (result.required && Array.isArray(result.required) && result.properties) {
201
+ const validProps = new Set(Object.keys(result.properties));
202
+ result.required = result.required.filter(r => validProps.has(r));
203
+ if (result.required.length === 0) delete result.required;
204
+ }
205
+ return result;
199
206
  }
200
207
  function anthropicToGeminiFunctions(tools) {
201
- return tools.map((t) => ({
202
- name: t.name,
203
- description: typeof t.description === "string" ? t.description.slice(0, 4096) : "",
204
- parameters: sanitizeSchemaForGemini(t.input_schema || {}),
205
- }));
208
+ return tools.map(t => ({
209
+ name: t.name,
210
+ description: typeof t.description === "string" ? t.description.slice(0, 4096) : "",
211
+ parameters: sanitizeSchemaForGemini(t.input_schema || {})
212
+ }));
206
213
  }
214
+
207
215
  // ============================================================================
208
216
  // ADAPTER
209
217
  // ============================================================================
218
+
210
219
  export class GeminiAdapter {
211
- name = "gemini";
212
- async handleStream(res, config, corsHeaders) {
213
- const { model, messages, system, tools, max_tokens, temperature, storeId, tool_choice } = config;
214
- const creds = await resolveProviderCredentials("google", storeId);
215
- if (!creds.google) {
216
- jsonResponse(res, 422, { error: "Google AI credentials not configured. Add google_ai_api_key to platform_secrets." }, corsHeaders);
217
- return;
218
- }
219
- const client = new GoogleGenAI({ apiKey: creds.google.apiKey });
220
- // Extract system prompt text
221
- let systemText = "";
222
- if (typeof system === "string") {
223
- systemText = system;
220
+ name = "gemini";
221
+ async handleStream(res, config, corsHeaders) {
222
+ const {
223
+ model,
224
+ messages,
225
+ system,
226
+ tools,
227
+ max_tokens,
228
+ temperature,
229
+ storeId,
230
+ tool_choice
231
+ } = config;
232
+ const creds = await resolveProviderCredentials("google", storeId);
233
+ if (!creds.google) {
234
+ jsonResponse(res, 422, {
235
+ error: "Google AI credentials not configured. Add google_ai_api_key to platform_secrets."
236
+ }, corsHeaders);
237
+ return;
238
+ }
239
+ const client = new GoogleGenAI({
240
+ apiKey: creds.google.apiKey
241
+ });
242
+
243
+ // Extract system prompt text
244
+ let systemText = "";
245
+ if (typeof system === "string") {
246
+ systemText = system;
247
+ } else if (Array.isArray(system)) {
248
+ systemText = system.map(s => s.text || "").join("\n");
249
+ }
250
+
251
+ // Build generation config
252
+ const genConfig = {
253
+ maxOutputTokens: max_tokens
254
+ };
255
+ if (temperature !== undefined) genConfig.temperature = temperature;
256
+
257
+ // Map tool_choice to Gemini functionCallingConfig
258
+ let geminiFunctionCallingConfig = {
259
+ mode: "AUTO"
260
+ };
261
+ let omitGeminiTools = false;
262
+ if (tool_choice) {
263
+ if (tool_choice === "auto") {
264
+ geminiFunctionCallingConfig = {
265
+ mode: "AUTO"
266
+ };
267
+ } else if (tool_choice === "any") {
268
+ geminiFunctionCallingConfig = {
269
+ mode: "ANY"
270
+ };
271
+ } else if (tool_choice === "none") {
272
+ geminiFunctionCallingConfig = {
273
+ mode: "NONE"
274
+ };
275
+ omitGeminiTools = true;
276
+ } else if (typeof tool_choice === "object" && tool_choice.type === "tool") {
277
+ geminiFunctionCallingConfig = {
278
+ mode: "ANY",
279
+ allowedFunctionNames: [tool_choice.name]
280
+ };
281
+ }
282
+ }
283
+
284
+ // Build request config for the new SDK — model is passed per-request
285
+ const requestConfig = {
286
+ model,
287
+ config: {
288
+ ...genConfig,
289
+ ...(systemText ? {
290
+ systemInstruction: systemText
291
+ } : {}),
292
+ ...(!omitGeminiTools && tools?.length ? {
293
+ tools: [{
294
+ functionDeclarations: anthropicToGeminiFunctions(tools)
295
+ }],
296
+ toolConfig: {
297
+ functionCallingConfig: geminiFunctionCallingConfig
298
+ }
299
+ } : {})
300
+ }
301
+ };
302
+ const genModel = client.models;
303
+
304
+ // Convert messages
305
+ const contents = anthropicToGeminiMessages(messages);
306
+
307
+ // Track tokens outside try so catch block can reference them
308
+ let totalOutputTokens = 0;
309
+ let totalInputTokens = 0;
310
+ let totalThinkingTokens = 0;
311
+ let totalCacheReadTokens = 0;
312
+
313
+ // Defer SSE headers until stream is successfully created
314
+ // so we can return proper HTTP errors if the initial API call fails.
315
+ let heartbeat;
316
+ try {
317
+ // Request with includeThoughts so we stream Gemini's thinking process
318
+ const streamResult = await genModel.generateContentStream({
319
+ ...requestConfig,
320
+ contents,
321
+ config: {
322
+ ...requestConfig.config,
323
+ thinkingConfig: {
324
+ includeThoughts: true
325
+ }
224
326
  }
225
- else if (Array.isArray(system)) {
226
- systemText = system.map((s) => s.text || "").join("\n");
327
+ });
328
+
329
+ // Stream created successfully — now safe to commit to SSE
330
+ writeSSEHeaders(res, corsHeaders);
331
+
332
+ // Heartbeat keeps the connection alive and helps detect dead clients
333
+ heartbeat = setInterval(() => {
334
+ if (!res.writableEnded) res.write(":ping\n\n");
335
+ }, 15_000);
336
+
337
+ // Emit Anthropic-format message_start
338
+ res.write(`data: ${JSON.stringify({
339
+ type: "message_start",
340
+ message: {
341
+ id: `msg_gemini_${randomUUID().slice(0, 8)}`,
342
+ type: "message",
343
+ role: "assistant",
344
+ content: [],
345
+ model,
346
+ stop_reason: null,
347
+ usage: {
348
+ input_tokens: 0,
349
+ output_tokens: 0
350
+ }
227
351
  }
228
- // Build generation config
229
- const genConfig = { maxOutputTokens: max_tokens };
230
- if (temperature !== undefined)
231
- genConfig.temperature = temperature;
232
- // Map tool_choice to Gemini functionCallingConfig
233
- let geminiFunctionCallingConfig = { mode: "AUTO" };
234
- let omitGeminiTools = false;
235
- if (tool_choice) {
236
- if (tool_choice === "auto") {
237
- geminiFunctionCallingConfig = { mode: "AUTO" };
238
- }
239
- else if (tool_choice === "any") {
240
- geminiFunctionCallingConfig = { mode: "ANY" };
241
- }
242
- else if (tool_choice === "none") {
243
- geminiFunctionCallingConfig = { mode: "NONE" };
244
- omitGeminiTools = true;
245
- }
246
- else if (typeof tool_choice === "object" && tool_choice.type === "tool") {
247
- geminiFunctionCallingConfig = { mode: "ANY", allowedFunctionNames: [tool_choice.name] };
248
- }
352
+ })}\n\n`);
353
+ let blockIndex = 0;
354
+ let hasOpenTextBlock = false;
355
+ let hasOpenThinkingBlock = false;
356
+ let hasToolUse = false;
357
+ let hasEmittedContent = false;
358
+ const seenFunctionCalls = new Set();
359
+ for await (const chunk of streamResult) {
360
+ const candidates = chunk.candidates || [];
361
+ const usage = chunk.usageMetadata;
362
+ if (usage) {
363
+ totalOutputTokens = usage.candidatesTokenCount || usage.totalTokenCount || 0;
364
+ totalInputTokens = usage.promptTokenCount || 0;
365
+ totalThinkingTokens = usage.thoughtsTokenCount || 0;
366
+ if (usage.cachedContentTokenCount) {
367
+ totalCacheReadTokens = usage.cachedContentTokenCount;
368
+ }
249
369
  }
250
- // Build request config for the new SDK model is passed per-request
251
- const requestConfig = {
252
- model,
253
- config: {
254
- ...genConfig,
255
- ...(systemText ? { systemInstruction: systemText } : {}),
256
- ...(!omitGeminiTools && tools?.length ? {
257
- tools: [{ functionDeclarations: anthropicToGeminiFunctions(tools) }],
258
- toolConfig: { functionCallingConfig: geminiFunctionCallingConfig },
259
- } : {}),
260
- },
261
- };
262
- const genModel = client.models;
263
- // Convert messages
264
- const contents = anthropicToGeminiMessages(messages);
265
- // Track tokens outside try so catch block can reference them
266
- let totalOutputTokens = 0;
267
- let totalInputTokens = 0;
268
- let totalThinkingTokens = 0;
269
- let totalCacheReadTokens = 0;
270
- // Defer SSE headers until stream is successfully created
271
- // so we can return proper HTTP errors if the initial API call fails.
272
- let heartbeat;
273
- try {
274
- // Request with includeThoughts so we stream Gemini's thinking process
275
- const streamResult = await genModel.generateContentStream({
276
- ...requestConfig,
277
- contents,
278
- config: {
279
- ...requestConfig.config,
280
- thinkingConfig: { includeThoughts: true },
281
- },
282
- });
283
- // Stream created successfully — now safe to commit to SSE
284
- writeSSEHeaders(res, corsHeaders);
285
- // Heartbeat keeps the connection alive and helps detect dead clients
286
- heartbeat = setInterval(() => {
287
- if (!res.writableEnded)
288
- res.write(":ping\n\n");
289
- }, 15_000);
290
- // Emit Anthropic-format message_start
291
- res.write(`data: ${JSON.stringify({
292
- type: "message_start",
293
- message: {
294
- id: `msg_gemini_${randomUUID().slice(0, 8)}`,
295
- type: "message",
296
- role: "assistant",
297
- content: [],
298
- model,
299
- stop_reason: null,
300
- usage: { input_tokens: 0, output_tokens: 0 },
301
- },
302
- })}\n\n`);
303
- let blockIndex = 0;
304
- let hasOpenTextBlock = false;
305
- let hasOpenThinkingBlock = false;
306
- let hasToolUse = false;
307
- let hasEmittedContent = false;
308
- const seenFunctionCalls = new Set();
309
- for await (const chunk of streamResult) {
310
- const candidates = chunk.candidates || [];
311
- const usage = chunk.usageMetadata;
312
- if (usage) {
313
- totalOutputTokens = usage.candidatesTokenCount || usage.totalTokenCount || 0;
314
- totalInputTokens = usage.promptTokenCount || 0;
315
- totalThinkingTokens = usage.thoughtsTokenCount || 0;
316
- if (usage.cachedContentTokenCount) {
317
- totalCacheReadTokens = usage.cachedContentTokenCount;
318
- }
319
- }
320
- for (const candidate of candidates) {
321
- const allParts = candidate.content?.parts || [];
322
- for (const part of allParts) {
323
- const isThought = !!part.thought;
324
- // Thinking text delta
325
- if (isThought && part.text) {
326
- if (hasOpenTextBlock) {
327
- res.write(`data: ${JSON.stringify({ type: "content_block_stop", index: blockIndex })}\n\n`);
328
- blockIndex++;
329
- hasOpenTextBlock = false;
330
- }
331
- if (!hasOpenThinkingBlock) {
332
- res.write(`data: ${JSON.stringify({
333
- type: "content_block_start",
334
- index: blockIndex,
335
- content_block: { type: "thinking", thinking: "" },
336
- })}\n\n`);
337
- hasOpenThinkingBlock = true;
338
- hasEmittedContent = true;
339
- }
340
- res.write(`data: ${JSON.stringify({
341
- type: "content_block_delta",
342
- index: blockIndex,
343
- delta: { type: "thinking_delta", thinking: part.text },
344
- })}\n\n`);
345
- continue;
346
- }
347
- // Response text delta
348
- if (part.text && !isThought) {
349
- if (hasOpenThinkingBlock) {
350
- res.write(`data: ${JSON.stringify({ type: "content_block_stop", index: blockIndex })}\n\n`);
351
- blockIndex++;
352
- hasOpenThinkingBlock = false;
353
- }
354
- if (!hasOpenTextBlock) {
355
- res.write(`data: ${JSON.stringify({
356
- type: "content_block_start",
357
- index: blockIndex,
358
- content_block: { type: "text", text: "" },
359
- })}\n\n`);
360
- hasOpenTextBlock = true;
361
- hasEmittedContent = true;
362
- }
363
- res.write(`data: ${JSON.stringify({
364
- type: "content_block_delta",
365
- index: blockIndex,
366
- delta: { type: "text_delta", text: part.text },
367
- })}\n\n`);
368
- continue;
369
- }
370
- // Function call
371
- if (part.functionCall) {
372
- const fc = {
373
- name: part.functionCall.name || "",
374
- args: part.functionCall.args || {},
375
- thoughtSignature: part.thoughtSignature,
376
- };
377
- const fcKey = `${fc.name}:${JSON.stringify(fc.args)}`;
378
- if (seenFunctionCalls.has(fcKey))
379
- continue;
380
- seenFunctionCalls.add(fcKey);
381
- // Close any open thinking block
382
- if (hasOpenThinkingBlock) {
383
- res.write(`data: ${JSON.stringify({ type: "content_block_stop", index: blockIndex })}\n\n`);
384
- blockIndex++;
385
- hasOpenThinkingBlock = false;
386
- }
387
- // Close any open text block
388
- if (hasOpenTextBlock) {
389
- res.write(`data: ${JSON.stringify({ type: "content_block_stop", index: blockIndex })}\n\n`);
390
- blockIndex++;
391
- hasOpenTextBlock = false;
392
- }
393
- hasToolUse = true;
394
- hasEmittedContent = true;
395
- const toolUseId = `toolu_gemini_${randomUUID().slice(0, 12)}`;
396
- res.write(`data: ${JSON.stringify({
397
- type: "content_block_start",
398
- index: blockIndex,
399
- content_block: {
400
- type: "tool_use",
401
- id: toolUseId,
402
- name: fc.name,
403
- input: {},
404
- // Preserve Gemini thought_signature — required for tool call round-trips with thinking
405
- ...(fc.thoughtSignature ? { thought_signature: fc.thoughtSignature } : {}),
406
- },
407
- })}\n\n`);
408
- res.write(`data: ${JSON.stringify({
409
- type: "content_block_delta",
410
- index: blockIndex,
411
- delta: {
412
- type: "input_json_delta",
413
- partial_json: JSON.stringify(fc.args || {}),
414
- },
415
- })}\n\n`);
416
- res.write(`data: ${JSON.stringify({ type: "content_block_stop", index: blockIndex })}\n\n`);
417
- blockIndex++;
418
- }
419
- }
370
+ for (const candidate of candidates) {
371
+ const allParts = candidate.content?.parts || [];
372
+ for (const part of allParts) {
373
+ const isThought = !!part.thought;
374
+
375
+ // Thinking text delta
376
+ if (isThought && part.text) {
377
+ if (hasOpenTextBlock) {
378
+ res.write(`data: ${JSON.stringify({
379
+ type: "content_block_stop",
380
+ index: blockIndex
381
+ })}\n\n`);
382
+ blockIndex++;
383
+ hasOpenTextBlock = false;
384
+ }
385
+ if (!hasOpenThinkingBlock) {
386
+ res.write(`data: ${JSON.stringify({
387
+ type: "content_block_start",
388
+ index: blockIndex,
389
+ content_block: {
390
+ type: "thinking",
391
+ thinking: ""
392
+ }
393
+ })}\n\n`);
394
+ hasOpenThinkingBlock = true;
395
+ hasEmittedContent = true;
396
+ }
397
+ res.write(`data: ${JSON.stringify({
398
+ type: "content_block_delta",
399
+ index: blockIndex,
400
+ delta: {
401
+ type: "thinking_delta",
402
+ thinking: part.text
420
403
  }
404
+ })}\n\n`);
405
+ continue;
421
406
  }
422
- // Close any open blocks — no signature_delta for Gemini thinking
423
- if (hasOpenThinkingBlock) {
424
- res.write(`data: ${JSON.stringify({ type: "content_block_stop", index: blockIndex })}\n\n`);
425
- }
426
- if (hasOpenTextBlock) {
427
- res.write(`data: ${JSON.stringify({ type: "content_block_stop", index: blockIndex })}\n\n`);
407
+
408
+ // Response text delta
409
+ if (part.text && !isThought) {
410
+ if (hasOpenThinkingBlock) {
411
+ res.write(`data: ${JSON.stringify({
412
+ type: "content_block_stop",
413
+ index: blockIndex
414
+ })}\n\n`);
415
+ blockIndex++;
416
+ hasOpenThinkingBlock = false;
417
+ }
418
+ if (!hasOpenTextBlock) {
419
+ res.write(`data: ${JSON.stringify({
420
+ type: "content_block_start",
421
+ index: blockIndex,
422
+ content_block: {
423
+ type: "text",
424
+ text: ""
425
+ }
426
+ })}\n\n`);
427
+ hasOpenTextBlock = true;
428
+ hasEmittedContent = true;
429
+ }
430
+ res.write(`data: ${JSON.stringify({
431
+ type: "content_block_delta",
432
+ index: blockIndex,
433
+ delta: {
434
+ type: "text_delta",
435
+ text: part.text
436
+ }
437
+ })}\n\n`);
438
+ continue;
428
439
  }
429
- // Handle empty response — Gemini sometimes returns finishReason: STOP with no content
430
- if (!hasEmittedContent) {
440
+
441
+ // Function call
442
+ if (part.functionCall) {
443
+ const fc = {
444
+ name: part.functionCall.name || "",
445
+ args: part.functionCall.args || {},
446
+ thoughtSignature: part.thoughtSignature
447
+ };
448
+ const fcKey = `${fc.name}:${JSON.stringify(fc.args)}`;
449
+ if (seenFunctionCalls.has(fcKey)) continue;
450
+ seenFunctionCalls.add(fcKey);
451
+
452
+ // Close any open thinking block
453
+ if (hasOpenThinkingBlock) {
431
454
  res.write(`data: ${JSON.stringify({
432
- type: "content_block_start",
433
- index: 0,
434
- content_block: { type: "text", text: "" },
455
+ type: "content_block_stop",
456
+ index: blockIndex
435
457
  })}\n\n`);
458
+ blockIndex++;
459
+ hasOpenThinkingBlock = false;
460
+ }
461
+ // Close any open text block
462
+ if (hasOpenTextBlock) {
436
463
  res.write(`data: ${JSON.stringify({
437
- type: "content_block_delta",
438
- index: 0,
439
- delta: { type: "text_delta", text: "[Gemini returned an empty response. Please try again.]" },
464
+ type: "content_block_stop",
465
+ index: blockIndex
440
466
  })}\n\n`);
441
- res.write(`data: ${JSON.stringify({ type: "content_block_stop", index: 0 })}\n\n`);
467
+ blockIndex++;
468
+ hasOpenTextBlock = false;
469
+ }
470
+ hasToolUse = true;
471
+ hasEmittedContent = true;
472
+ const toolUseId = `toolu_gemini_${randomUUID().slice(0, 12)}`;
473
+ res.write(`data: ${JSON.stringify({
474
+ type: "content_block_start",
475
+ index: blockIndex,
476
+ content_block: {
477
+ type: "tool_use",
478
+ id: toolUseId,
479
+ name: fc.name,
480
+ input: {},
481
+ // Preserve Gemini thought_signature — required for tool call round-trips with thinking
482
+ ...(fc.thoughtSignature ? {
483
+ thought_signature: fc.thoughtSignature
484
+ } : {})
485
+ }
486
+ })}\n\n`);
487
+ res.write(`data: ${JSON.stringify({
488
+ type: "content_block_delta",
489
+ index: blockIndex,
490
+ delta: {
491
+ type: "input_json_delta",
492
+ partial_json: JSON.stringify(fc.args || {})
493
+ }
494
+ })}\n\n`);
495
+ res.write(`data: ${JSON.stringify({
496
+ type: "content_block_stop",
497
+ index: blockIndex
498
+ })}\n\n`);
499
+ blockIndex++;
442
500
  }
443
- // Determine stop reason
444
- const stopReason = hasToolUse ? "tool_use" : "end_turn";
445
- // Emit message_delta with stop reason + full usage
446
- res.write(`data: ${JSON.stringify({
447
- type: "message_delta",
448
- delta: { stop_reason: stopReason, stop_sequence: null },
449
- usage: {
450
- input_tokens: totalInputTokens,
451
- output_tokens: totalOutputTokens,
452
- ...(totalThinkingTokens > 0 ? { thinking_tokens: totalThinkingTokens } : {}),
453
- ...(totalCacheReadTokens > 0 ? { cache_read_input_tokens: totalCacheReadTokens } : {}),
454
- },
455
- })}\n\n`);
456
- // Emit message_stop
457
- res.write(`data: ${JSON.stringify({ type: "message_stop" })}\n\n`);
458
- res.write("data: [DONE]\n\n");
501
+ }
459
502
  }
460
- catch (err) {
461
- emitError(res, err, corsHeaders, sanitizeError, {
462
- provider: "gemini",
463
- inputTokens: totalInputTokens,
464
- outputTokens: totalOutputTokens,
465
- thinkingTokens: totalThinkingTokens,
466
- cacheReadTokens: totalCacheReadTokens,
467
- });
503
+ }
504
+
505
+ // Close any open blocks — no signature_delta for Gemini thinking
506
+ if (hasOpenThinkingBlock) {
507
+ res.write(`data: ${JSON.stringify({
508
+ type: "content_block_stop",
509
+ index: blockIndex
510
+ })}\n\n`);
511
+ }
512
+ if (hasOpenTextBlock) {
513
+ res.write(`data: ${JSON.stringify({
514
+ type: "content_block_stop",
515
+ index: blockIndex
516
+ })}\n\n`);
517
+ }
518
+
519
+ // Handle empty response — Gemini sometimes returns finishReason: STOP with no content
520
+ if (!hasEmittedContent) {
521
+ res.write(`data: ${JSON.stringify({
522
+ type: "content_block_start",
523
+ index: 0,
524
+ content_block: {
525
+ type: "text",
526
+ text: ""
527
+ }
528
+ })}\n\n`);
529
+ res.write(`data: ${JSON.stringify({
530
+ type: "content_block_delta",
531
+ index: 0,
532
+ delta: {
533
+ type: "text_delta",
534
+ text: "[Gemini returned an empty response. Please try again.]"
535
+ }
536
+ })}\n\n`);
537
+ res.write(`data: ${JSON.stringify({
538
+ type: "content_block_stop",
539
+ index: 0
540
+ })}\n\n`);
541
+ }
542
+
543
+ // Determine stop reason
544
+ const stopReason = hasToolUse ? "tool_use" : "end_turn";
545
+
546
+ // Emit message_delta with stop reason + full usage
547
+ res.write(`data: ${JSON.stringify({
548
+ type: "message_delta",
549
+ delta: {
550
+ stop_reason: stopReason,
551
+ stop_sequence: null
552
+ },
553
+ usage: {
554
+ input_tokens: totalInputTokens,
555
+ output_tokens: totalOutputTokens,
556
+ ...(totalThinkingTokens > 0 ? {
557
+ thinking_tokens: totalThinkingTokens
558
+ } : {}),
559
+ ...(totalCacheReadTokens > 0 ? {
560
+ cache_read_input_tokens: totalCacheReadTokens
561
+ } : {})
468
562
  }
469
- finally {
470
- if (heartbeat)
471
- clearInterval(heartbeat);
472
- }
473
- res.end();
474
- }
475
- // ---- Provider-specific config methods ----
476
- getThinkingConfig(_model, enabled) {
477
- if (!enabled) {
478
- return { thinking: { type: "disabled" }, beta: "" };
479
- }
480
- // Gemini models: thinking is always-on for 2.5+/3.x — signal pass-through
481
- return { thinking: { type: "enabled" }, beta: "" };
482
- }
483
- getMaxOutputTokens(model, agentMax) {
484
- const modelMax = MODEL_MAX_OUTPUT_TOKENS[model] ?? DEFAULT_OUTPUT_TOKENS;
485
- if (agentMax)
486
- return Math.min(agentMax, modelMax);
487
- return Math.min(DEFAULT_OUTPUT_TOKENS, modelMax);
488
- }
489
- getContextManagement(_model) {
490
- // Gemini doesn't use Anthropic betas or context management
491
- return { betas: [], config: { edits: [] } };
492
- }
493
- getCompactionConfig(_model) {
494
- return { triggerTokens: 700_000, totalBudget: 4_000_000, isNative: false };
563
+ })}\n\n`);
564
+
565
+ // Emit message_stop
566
+ res.write(`data: ${JSON.stringify({
567
+ type: "message_stop"
568
+ })}\n\n`);
569
+ res.write("data: [DONE]\n\n");
570
+ } catch (err) {
571
+ emitError(res, err, corsHeaders, sanitizeError, {
572
+ provider: "gemini",
573
+ inputTokens: totalInputTokens,
574
+ outputTokens: totalOutputTokens,
575
+ thinkingTokens: totalThinkingTokens,
576
+ cacheReadTokens: totalCacheReadTokens
577
+ });
578
+ } finally {
579
+ if (heartbeat) clearInterval(heartbeat);
495
580
  }
496
- getCapabilities() {
497
- return getCapabilities("gemini");
581
+ res.end();
582
+ }
583
+
584
+ // ---- Provider-specific config methods ----
585
+
586
+ getThinkingConfig(_model, enabled) {
587
+ if (!enabled) {
588
+ return {
589
+ thinking: {
590
+ type: "disabled"
591
+ },
592
+ beta: ""
593
+ };
498
594
  }
595
+ // Gemini models: thinking is always-on for 2.5+/3.x — signal pass-through
596
+ return {
597
+ thinking: {
598
+ type: "enabled"
599
+ },
600
+ beta: ""
601
+ };
602
+ }
603
+ getMaxOutputTokens(model, agentMax) {
604
+ const modelMax = MODEL_MAX_OUTPUT_TOKENS[model] ?? DEFAULT_OUTPUT_TOKENS;
605
+ if (agentMax) return Math.min(agentMax, modelMax);
606
+ return Math.min(DEFAULT_OUTPUT_TOKENS, modelMax);
607
+ }
608
+ getContextManagement(_model) {
609
+ // Gemini doesn't use Anthropic betas or context management
610
+ return {
611
+ betas: [],
612
+ config: {
613
+ edits: []
614
+ }
615
+ };
616
+ }
617
+ getCompactionConfig(_model) {
618
+ return {
619
+ triggerTokens: 700_000,
620
+ totalBudget: 4_000_000,
621
+ isNative: false
622
+ };
623
+ }
624
+ getCapabilities() {
625
+ return getCapabilities("gemini");
626
+ }
499
627
  }
628
+
500
629
  // Auto-register on import
501
630
  registerProvider("gemini", new GeminiAdapter());
631
+ //# sourceMappingURL=gemini.js.map