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 OpenAI models.
13
13
  */
14
+
14
15
  import { randomUUID } from "node:crypto";
15
16
  import OpenAI from "openai";
16
17
  import { sanitizeError } from "../../shared/agent-core.js";
@@ -21,18 +22,21 @@ import { jsonResponse, writeSSEHeaders, emitError, resolveProviderCredentials }
21
22
  // ============================================================================
22
23
  // CONSTANTS — OpenAI-specific model config
23
24
  // ============================================================================
25
+
24
26
  const DEFAULT_OUTPUT_TOKENS = 16384;
25
27
  const MODEL_MAX_OUTPUT_TOKENS = {
26
- "gpt-5": 128000,
27
- "gpt-5-mini": 128000,
28
- "gpt-5-nano": 128000,
29
- "o3": 100000,
30
- "o4-mini": 100000,
31
- "gpt-4o": 16384,
28
+ "gpt-5": 128000,
29
+ "gpt-5-mini": 128000,
30
+ "gpt-5-nano": 128000,
31
+ "o3": 100000,
32
+ "o4-mini": 100000,
33
+ "gpt-4o": 16384
32
34
  };
35
+
33
36
  // ============================================================================
34
37
  // MESSAGE CONVERSION
35
38
  // ============================================================================
39
+
36
40
  /**
37
41
  * Convert Anthropic messages to OpenAI Responses API input format.
38
42
  *
@@ -44,479 +48,609 @@ const MODEL_MAX_OUTPUT_TOKENS = {
44
48
  * - call_id is used directly (no ID mapping needed)
45
49
  */
46
50
  function anthropicToResponsesInput(messages) {
47
- // Pass 1: collect all tool_use call_ids so we can match function_call_output items
48
- const knownCallIds = new Set();
49
- for (const msg of messages) {
50
- if (msg.role === "assistant" && Array.isArray(msg.content)) {
51
- for (const block of msg.content) {
52
- if (block.type === "tool_use" && block.id && block.name) {
53
- knownCallIds.add(block.id);
54
- }
55
- }
51
+ // Pass 1: collect all tool_use call_ids so we can match function_call_output items
52
+ const knownCallIds = new Set();
53
+ for (const msg of messages) {
54
+ if (msg.role === "assistant" && Array.isArray(msg.content)) {
55
+ for (const block of msg.content) {
56
+ if (block.type === "tool_use" && block.id && block.name) {
57
+ knownCallIds.add(block.id);
56
58
  }
59
+ }
57
60
  }
58
- // Pass 2: build input array
59
- const input = [];
60
- for (const msg of messages) {
61
- if (msg.role === "user") {
62
- if (typeof msg.content === "string") {
63
- input.push({ role: "user", content: msg.content });
64
- }
65
- else if (Array.isArray(msg.content)) {
66
- const contentParts = [];
67
- for (const block of msg.content) {
68
- if (block.type === "tool_result" && block.tool_use_id) {
69
- // Only emit if there's a matching function_call (prevents orphaned outputs after compaction)
70
- if (knownCallIds.has(block.tool_use_id)) {
71
- let output = "";
72
- if (typeof block.content === "string") {
73
- output = block.content;
74
- }
75
- else if (Array.isArray(block.content)) {
76
- output = block.content
77
- .filter((c) => c.type === "text")
78
- .map((c) => c.text)
79
- .join("\n");
80
- }
81
- input.push({
82
- type: "function_call_output",
83
- call_id: block.tool_use_id,
84
- output: output || "(no output)",
85
- });
86
- }
87
- }
88
- else if (block.type === "text" && block.text) {
89
- contentParts.push({ type: "input_text", text: block.text });
90
- }
91
- else if (block.type === "image" && block.source?.data) {
92
- contentParts.push({
93
- type: "input_image",
94
- image_url: `data:${block.source.media_type};base64,${block.source.data}`,
95
- });
96
- }
97
- }
98
- // Emit content parts as user message
99
- if (contentParts.length === 1 && contentParts[0].type === "input_text") {
100
- input.push({ role: "user", content: contentParts[0].text });
101
- }
102
- else if (contentParts.length > 0) {
103
- input.push({ role: "user", content: contentParts });
104
- }
61
+ }
62
+
63
+ // Pass 2: build input array
64
+ const input = [];
65
+ for (const msg of messages) {
66
+ if (msg.role === "user") {
67
+ if (typeof msg.content === "string") {
68
+ input.push({
69
+ role: "user",
70
+ content: msg.content
71
+ });
72
+ } else if (Array.isArray(msg.content)) {
73
+ const contentParts = [];
74
+ for (const block of msg.content) {
75
+ if (block.type === "tool_result" && block.tool_use_id) {
76
+ // Only emit if there's a matching function_call (prevents orphaned outputs after compaction)
77
+ if (knownCallIds.has(block.tool_use_id)) {
78
+ let output = "";
79
+ if (typeof block.content === "string") {
80
+ output = block.content;
81
+ } else if (Array.isArray(block.content)) {
82
+ output = block.content.filter(c => c.type === "text").map(c => c.text).join("\n");
83
+ }
84
+ input.push({
85
+ type: "function_call_output",
86
+ call_id: block.tool_use_id,
87
+ output: output || "(no output)"
88
+ });
105
89
  }
90
+ } else if (block.type === "text" && block.text) {
91
+ contentParts.push({
92
+ type: "input_text",
93
+ text: block.text
94
+ });
95
+ } else if (block.type === "image" && block.source?.data) {
96
+ contentParts.push({
97
+ type: "input_image",
98
+ image_url: `data:${block.source.media_type};base64,${block.source.data}`
99
+ });
100
+ }
106
101
  }
107
- else if (msg.role === "assistant") {
108
- if (typeof msg.content === "string") {
109
- input.push({ role: "assistant", content: msg.content });
110
- }
111
- else if (Array.isArray(msg.content)) {
112
- let textContent = "";
113
- for (const block of msg.content) {
114
- if (block.type === "text" && block.text) {
115
- textContent += block.text;
116
- }
117
- else if (block.type === "tool_use" && block.name) {
118
- // Emit accumulated text as assistant message first
119
- if (textContent) {
120
- input.push({ role: "assistant", content: textContent });
121
- textContent = "";
122
- }
123
- // Emit function_call as top-level input item
124
- input.push({
125
- type: "function_call",
126
- call_id: block.id || `call_${randomUUID().slice(0, 12)}`,
127
- name: block.name,
128
- arguments: JSON.stringify(block.input || {}),
129
- });
130
- }
131
- // Skip thinking/compaction blocks — not relevant for OpenAI
132
- }
133
- if (textContent) {
134
- input.push({ role: "assistant", content: textContent });
135
- }
102
+
103
+ // Emit content parts as user message
104
+ if (contentParts.length === 1 && contentParts[0].type === "input_text") {
105
+ input.push({
106
+ role: "user",
107
+ content: contentParts[0].text
108
+ });
109
+ } else if (contentParts.length > 0) {
110
+ input.push({
111
+ role: "user",
112
+ content: contentParts
113
+ });
114
+ }
115
+ }
116
+ } else if (msg.role === "assistant") {
117
+ if (typeof msg.content === "string") {
118
+ input.push({
119
+ role: "assistant",
120
+ content: msg.content
121
+ });
122
+ } else if (Array.isArray(msg.content)) {
123
+ let textContent = "";
124
+ for (const block of msg.content) {
125
+ if (block.type === "text" && block.text) {
126
+ textContent += block.text;
127
+ } else if (block.type === "tool_use" && block.name) {
128
+ // Emit accumulated text as assistant message first
129
+ if (textContent) {
130
+ input.push({
131
+ role: "assistant",
132
+ content: textContent
133
+ });
134
+ textContent = "";
136
135
  }
136
+ // Emit function_call as top-level input item
137
+ input.push({
138
+ type: "function_call",
139
+ call_id: block.id || `call_${randomUUID().slice(0, 12)}`,
140
+ name: block.name,
141
+ arguments: JSON.stringify(block.input || {})
142
+ });
143
+ }
144
+ // Skip thinking/compaction blocks — not relevant for OpenAI
137
145
  }
146
+ if (textContent) {
147
+ input.push({
148
+ role: "assistant",
149
+ content: textContent
150
+ });
151
+ }
152
+ }
138
153
  }
139
- return input;
154
+ }
155
+ return input;
140
156
  }
157
+
141
158
  // ============================================================================
142
159
  // SCHEMA SANITIZATION
143
160
  // ============================================================================
161
+
144
162
  /** Sanitize JSON Schema for OpenAI — ensure arrays have items, objects have properties */
145
163
  function sanitizeSchemaForOpenAI(schema) {
146
- if (!schema || typeof schema !== "object")
147
- return schema;
148
- if (Array.isArray(schema))
149
- return schema.map(sanitizeSchemaForOpenAI);
150
- const result = {};
151
- for (const [key, value] of Object.entries(schema)) {
152
- if (key === "properties" && typeof value === "object" && value !== null && !Array.isArray(value)) {
153
- const props = {};
154
- for (const [propName, propSchema] of Object.entries(value)) {
155
- props[propName] = sanitizeSchemaForOpenAI(propSchema);
156
- }
157
- result[key] = props;
158
- }
159
- else {
160
- result[key] = sanitizeSchemaForOpenAI(value);
161
- }
164
+ if (!schema || typeof schema !== "object") return schema;
165
+ if (Array.isArray(schema)) return schema.map(sanitizeSchemaForOpenAI);
166
+ const result = {};
167
+ for (const [key, value] of Object.entries(schema)) {
168
+ if (key === "properties" && typeof value === "object" && value !== null && !Array.isArray(value)) {
169
+ const props = {};
170
+ for (const [propName, propSchema] of Object.entries(value)) {
171
+ props[propName] = sanitizeSchemaForOpenAI(propSchema);
172
+ }
173
+ result[key] = props;
174
+ } else {
175
+ result[key] = sanitizeSchemaForOpenAI(value);
162
176
  }
163
- // OpenAI requires arrays to have items
164
- if (result.type === "array" && !result.items) {
165
- result.items = { type: "string" };
166
- }
167
- // Filter required to only include defined properties
168
- if (result.required && Array.isArray(result.required) && result.properties) {
169
- const validProps = new Set(Object.keys(result.properties));
170
- result.required = result.required.filter((r) => validProps.has(r));
171
- if (result.required.length === 0)
172
- delete result.required;
173
- }
174
- return result;
177
+ }
178
+
179
+ // OpenAI requires arrays to have items
180
+ if (result.type === "array" && !result.items) {
181
+ result.items = {
182
+ type: "string"
183
+ };
184
+ }
185
+
186
+ // Filter required to only include defined properties
187
+ if (result.required && Array.isArray(result.required) && result.properties) {
188
+ const validProps = new Set(Object.keys(result.properties));
189
+ result.required = result.required.filter(r => validProps.has(r));
190
+ if (result.required.length === 0) delete result.required;
191
+ }
192
+ return result;
175
193
  }
194
+
176
195
  /** Convert Anthropic tools to OpenAI Responses API FunctionTool format */
177
196
  function anthropicToResponsesTools(tools) {
178
- return tools.map((t) => ({
179
- type: "function",
180
- name: t.name,
181
- description: typeof t.description === "string" ? t.description.slice(0, 4096) : "",
182
- parameters: sanitizeSchemaForOpenAI(t.input_schema || {}),
183
- strict: false,
184
- }));
197
+ return tools.map(t => ({
198
+ type: "function",
199
+ name: t.name,
200
+ description: typeof t.description === "string" ? t.description.slice(0, 4096) : "",
201
+ parameters: sanitizeSchemaForOpenAI(t.input_schema || {}),
202
+ strict: false
203
+ }));
185
204
  }
205
+
186
206
  // ============================================================================
187
207
  // ADAPTER
188
208
  // ============================================================================
209
+
189
210
  export class OpenAIAdapter {
190
- name = "openai";
191
- async handleStream(res, config, corsHeaders) {
192
- const { model, messages, system, tools, max_tokens, temperature, storeId, tool_choice } = config;
193
- const creds = await resolveProviderCredentials("openai", storeId);
194
- if (!creds.openai) {
195
- jsonResponse(res, 422, { error: "OpenAI credentials not configured. Add OPENAI_API_KEY to user_tool_secrets." }, corsHeaders);
196
- return;
197
- }
198
- const client = new OpenAI({ apiKey: creds.openai.apiKey });
199
- const isReasoning = isOpenAIReasoningModel(model);
200
- // Convert Anthropic format → Responses API format
201
- const openaiInput = anthropicToResponsesInput(messages);
202
- const openaiTools = tools?.length ? anthropicToResponsesTools(tools) : undefined;
203
- // Extract system prompt → instructions parameter
204
- let instructions = "";
205
- if (typeof system === "string") {
206
- instructions = system;
207
- }
208
- else if (Array.isArray(system)) {
209
- instructions = system.map((s) => s.text || "").join("\n");
210
- }
211
- // Build Responses API request
212
- const params = {
213
- model,
214
- input: openaiInput,
215
- stream: true,
216
- store: false,
217
- max_output_tokens: max_tokens,
218
- parallel_tool_calls: true,
219
- truncation: "auto",
211
+ name = "openai";
212
+ async handleStream(res, config, corsHeaders) {
213
+ const {
214
+ model,
215
+ messages,
216
+ system,
217
+ tools,
218
+ max_tokens,
219
+ temperature,
220
+ storeId,
221
+ tool_choice
222
+ } = config;
223
+ const creds = await resolveProviderCredentials("openai", storeId);
224
+ if (!creds.openai) {
225
+ jsonResponse(res, 422, {
226
+ error: "OpenAI credentials not configured. Add OPENAI_API_KEY to user_tool_secrets."
227
+ }, corsHeaders);
228
+ return;
229
+ }
230
+ const client = new OpenAI({
231
+ apiKey: creds.openai.apiKey
232
+ });
233
+ const isReasoning = isOpenAIReasoningModel(model);
234
+
235
+ // Convert Anthropic format → Responses API format
236
+ const openaiInput = anthropicToResponsesInput(messages);
237
+ const openaiTools = tools?.length ? anthropicToResponsesTools(tools) : undefined;
238
+
239
+ // Extract system prompt → instructions parameter
240
+ let instructions = "";
241
+ if (typeof system === "string") {
242
+ instructions = system;
243
+ } else if (Array.isArray(system)) {
244
+ instructions = system.map(s => s.text || "").join("\n");
245
+ }
246
+
247
+ // Build Responses API request
248
+ const params = {
249
+ model,
250
+ input: openaiInput,
251
+ stream: true,
252
+ store: false,
253
+ max_output_tokens: max_tokens,
254
+ parallel_tool_calls: true,
255
+ truncation: "auto"
256
+ };
257
+ if (instructions) params.instructions = instructions;
258
+ if (openaiTools?.length) params.tools = openaiTools;
259
+ if (isReasoning) {
260
+ params.reasoning = {
261
+ effort: "high",
262
+ summary: "detailed"
263
+ };
264
+ } else {
265
+ if (temperature !== undefined) params.temperature = temperature;
266
+ }
267
+
268
+ // Map tool_choice to OpenAI Responses API format
269
+ if (tool_choice) {
270
+ if (tool_choice === "auto") {
271
+ // "auto" is default for OpenAI — no-op
272
+ } else if (tool_choice === "any") {
273
+ params.tool_choice = "required";
274
+ } else if (tool_choice === "none") {
275
+ params.tool_choice = "none";
276
+ delete params.tools;
277
+ } else if (typeof tool_choice === "object" && tool_choice.type === "tool") {
278
+ params.tool_choice = {
279
+ type: "function",
280
+ function: {
281
+ name: tool_choice.name
282
+ }
220
283
  };
221
- if (instructions)
222
- params.instructions = instructions;
223
- if (openaiTools?.length)
224
- params.tools = openaiTools;
225
- if (isReasoning) {
226
- params.reasoning = { effort: "high", summary: "detailed" };
284
+ }
285
+ }
286
+
287
+ // Defer SSE headers until stream is successfully created
288
+ // so we can return proper HTTP errors if the initial API call fails.
289
+ let totalInputTokens = 0;
290
+ let totalOutputTokens = 0;
291
+ let totalReasoningTokens = 0;
292
+ let totalCacheReadTokens = 0;
293
+ let heartbeat;
294
+ try {
295
+ const stream = await client.responses.create(params);
296
+
297
+ // Stream created successfully — now safe to commit to SSE
298
+ writeSSEHeaders(res, corsHeaders);
299
+
300
+ // Heartbeat keeps the connection alive and helps detect dead clients
301
+ heartbeat = setInterval(() => {
302
+ if (!res.writableEnded) res.write(":ping\n\n");
303
+ }, 15_000);
304
+
305
+ // Emit Anthropic-format message_start
306
+ res.write(`data: ${JSON.stringify({
307
+ type: "message_start",
308
+ message: {
309
+ id: `msg_openai_${randomUUID().slice(0, 8)}`,
310
+ type: "message",
311
+ role: "assistant",
312
+ content: [],
313
+ model,
314
+ stop_reason: null,
315
+ usage: {
316
+ input_tokens: 0,
317
+ output_tokens: 0
318
+ }
227
319
  }
228
- else {
229
- if (temperature !== undefined)
230
- params.temperature = temperature;
320
+ })}\n\n`);
321
+ let blockIndex = 0;
322
+ let hasOpenTextBlock = false;
323
+ let hasOpenThinkingBlock = false;
324
+ let hasToolUse = false;
325
+ let hasEmittedContent = false;
326
+ // Per-request function call tracking (not shared between concurrent requests)
327
+ const pendingFunctionCalls = new Map();
328
+
329
+ // Helper to close any open content blocks
330
+ const closeOpenBlocks = () => {
331
+ if (hasOpenThinkingBlock) {
332
+ res.write(`data: ${JSON.stringify({
333
+ type: "content_block_stop",
334
+ index: blockIndex
335
+ })}\n\n`);
336
+ blockIndex++;
337
+ hasOpenThinkingBlock = false;
231
338
  }
232
- // Map tool_choice to OpenAI Responses API format
233
- if (tool_choice) {
234
- if (tool_choice === "auto") {
235
- // "auto" is default for OpenAI — no-op
339
+ if (hasOpenTextBlock) {
340
+ res.write(`data: ${JSON.stringify({
341
+ type: "content_block_stop",
342
+ index: blockIndex
343
+ })}\n\n`);
344
+ blockIndex++;
345
+ hasOpenTextBlock = false;
346
+ }
347
+ };
348
+ for await (const event of stream) {
349
+ switch (event.type) {
350
+ // ---- Reasoning summary → Anthropic thinking block ----
351
+ case "response.reasoning_summary_text.delta":
352
+ {
353
+ const text = event.delta;
354
+ if (!text) break;
355
+ if (hasOpenTextBlock) {
356
+ res.write(`data: ${JSON.stringify({
357
+ type: "content_block_stop",
358
+ index: blockIndex
359
+ })}\n\n`);
360
+ blockIndex++;
361
+ hasOpenTextBlock = false;
362
+ }
363
+ if (!hasOpenThinkingBlock) {
364
+ res.write(`data: ${JSON.stringify({
365
+ type: "content_block_start",
366
+ index: blockIndex,
367
+ content_block: {
368
+ type: "thinking",
369
+ thinking: ""
370
+ }
371
+ })}\n\n`);
372
+ hasOpenThinkingBlock = true;
373
+ hasEmittedContent = true;
374
+ }
375
+ res.write(`data: ${JSON.stringify({
376
+ type: "content_block_delta",
377
+ index: blockIndex,
378
+ delta: {
379
+ type: "thinking_delta",
380
+ thinking: text
381
+ }
382
+ })}\n\n`);
383
+ break;
236
384
  }
237
- else if (tool_choice === "any") {
238
- params.tool_choice = "required";
385
+ case "response.reasoning_summary_text.done":
386
+ {
387
+ break;
239
388
  }
240
- else if (tool_choice === "none") {
241
- params.tool_choice = "none";
242
- delete params.tools;
389
+
390
+ // ---- Text content → Anthropic text block ----
391
+ case "response.output_text.delta":
392
+ {
393
+ const text = event.delta;
394
+ if (!text) break;
395
+ if (hasOpenThinkingBlock) {
396
+ res.write(`data: ${JSON.stringify({
397
+ type: "content_block_stop",
398
+ index: blockIndex
399
+ })}\n\n`);
400
+ blockIndex++;
401
+ hasOpenThinkingBlock = false;
402
+ }
403
+ if (!hasOpenTextBlock) {
404
+ res.write(`data: ${JSON.stringify({
405
+ type: "content_block_start",
406
+ index: blockIndex,
407
+ content_block: {
408
+ type: "text",
409
+ text: ""
410
+ }
411
+ })}\n\n`);
412
+ hasOpenTextBlock = true;
413
+ hasEmittedContent = true;
414
+ }
415
+ res.write(`data: ${JSON.stringify({
416
+ type: "content_block_delta",
417
+ index: blockIndex,
418
+ delta: {
419
+ type: "text_delta",
420
+ text
421
+ }
422
+ })}\n\n`);
423
+ break;
243
424
  }
244
- else if (typeof tool_choice === "object" && tool_choice.type === "tool") {
245
- params.tool_choice = { type: "function", function: { name: tool_choice.name } };
425
+ case "response.output_text.done":
426
+ {
427
+ break;
246
428
  }
247
- }
248
- // Defer SSE headers until stream is successfully created
249
- // so we can return proper HTTP errors if the initial API call fails.
250
- let totalInputTokens = 0;
251
- let totalOutputTokens = 0;
252
- let totalReasoningTokens = 0;
253
- let totalCacheReadTokens = 0;
254
- let heartbeat;
255
- try {
256
- const stream = await client.responses.create(params);
257
- // Stream created successfully — now safe to commit to SSE
258
- writeSSEHeaders(res, corsHeaders);
259
- // Heartbeat keeps the connection alive and helps detect dead clients
260
- heartbeat = setInterval(() => {
261
- if (!res.writableEnded)
262
- res.write(":ping\n\n");
263
- }, 15_000);
264
- // Emit Anthropic-format message_start
265
- res.write(`data: ${JSON.stringify({
266
- type: "message_start",
267
- message: {
268
- id: `msg_openai_${randomUUID().slice(0, 8)}`,
269
- type: "message",
270
- role: "assistant",
271
- content: [],
272
- model,
273
- stop_reason: null,
274
- usage: { input_tokens: 0, output_tokens: 0 },
275
- },
276
- })}\n\n`);
277
- let blockIndex = 0;
278
- let hasOpenTextBlock = false;
279
- let hasOpenThinkingBlock = false;
280
- let hasToolUse = false;
281
- let hasEmittedContent = false;
282
- // Per-request function call tracking (not shared between concurrent requests)
283
- const pendingFunctionCalls = new Map();
284
- // Helper to close any open content blocks
285
- const closeOpenBlocks = () => {
286
- if (hasOpenThinkingBlock) {
287
- res.write(`data: ${JSON.stringify({ type: "content_block_stop", index: blockIndex })}\n\n`);
288
- blockIndex++;
289
- hasOpenThinkingBlock = false;
429
+
430
+ // ---- Function calls Anthropic tool_use blocks ----
431
+ case "response.output_item.added":
432
+ {
433
+ const item = event.item;
434
+ if (item?.type === "function_call" && item.id && item.name) {
435
+ pendingFunctionCalls.set(item.id, {
436
+ name: item.name,
437
+ callId: item.call_id || item.id
438
+ });
439
+ }
440
+ break;
441
+ }
442
+ case "response.function_call_arguments.done":
443
+ {
444
+ closeOpenBlocks();
445
+ hasToolUse = true;
446
+ hasEmittedContent = true;
447
+ const pending = pendingFunctionCalls.get(event.item_id);
448
+ const name = pending?.name || event.name || "unknown_tool";
449
+ const callId = pending?.callId || event.call_id || event.item_id;
450
+ if (pending) pendingFunctionCalls.delete(event.item_id);
451
+ const args = event.arguments;
452
+ let parsedInput = {};
453
+ try {
454
+ parsedInput = JSON.parse(args || "{}");
455
+ } catch {/* use empty */}
456
+ const toolUseId = callId || `toolu_openai_${randomUUID().slice(0, 12)}`;
457
+ res.write(`data: ${JSON.stringify({
458
+ type: "content_block_start",
459
+ index: blockIndex,
460
+ content_block: {
461
+ type: "tool_use",
462
+ id: toolUseId,
463
+ name,
464
+ input: {}
290
465
  }
291
- if (hasOpenTextBlock) {
292
- res.write(`data: ${JSON.stringify({ type: "content_block_stop", index: blockIndex })}\n\n`);
293
- blockIndex++;
294
- hasOpenTextBlock = false;
466
+ })}\n\n`);
467
+ res.write(`data: ${JSON.stringify({
468
+ type: "content_block_delta",
469
+ index: blockIndex,
470
+ delta: {
471
+ type: "input_json_delta",
472
+ partial_json: JSON.stringify(parsedInput)
295
473
  }
296
- };
297
- for await (const event of stream) {
298
- switch (event.type) {
299
- // ---- Reasoning summary → Anthropic thinking block ----
300
- case "response.reasoning_summary_text.delta": {
301
- const text = event.delta;
302
- if (!text)
303
- break;
304
- if (hasOpenTextBlock) {
305
- res.write(`data: ${JSON.stringify({ type: "content_block_stop", index: blockIndex })}\n\n`);
306
- blockIndex++;
307
- hasOpenTextBlock = false;
308
- }
309
- if (!hasOpenThinkingBlock) {
310
- res.write(`data: ${JSON.stringify({
311
- type: "content_block_start",
312
- index: blockIndex,
313
- content_block: { type: "thinking", thinking: "" },
314
- })}\n\n`);
315
- hasOpenThinkingBlock = true;
316
- hasEmittedContent = true;
317
- }
318
- res.write(`data: ${JSON.stringify({
319
- type: "content_block_delta",
320
- index: blockIndex,
321
- delta: { type: "thinking_delta", thinking: text },
322
- })}\n\n`);
323
- break;
324
- }
325
- case "response.reasoning_summary_text.done": {
326
- break;
327
- }
328
- // ---- Text content → Anthropic text block ----
329
- case "response.output_text.delta": {
330
- const text = event.delta;
331
- if (!text)
332
- break;
333
- if (hasOpenThinkingBlock) {
334
- res.write(`data: ${JSON.stringify({ type: "content_block_stop", index: blockIndex })}\n\n`);
335
- blockIndex++;
336
- hasOpenThinkingBlock = false;
337
- }
338
- if (!hasOpenTextBlock) {
339
- res.write(`data: ${JSON.stringify({
340
- type: "content_block_start",
341
- index: blockIndex,
342
- content_block: { type: "text", text: "" },
343
- })}\n\n`);
344
- hasOpenTextBlock = true;
345
- hasEmittedContent = true;
346
- }
347
- res.write(`data: ${JSON.stringify({
348
- type: "content_block_delta",
349
- index: blockIndex,
350
- delta: { type: "text_delta", text },
351
- })}\n\n`);
352
- break;
353
- }
354
- case "response.output_text.done": {
355
- break;
356
- }
357
- // ---- Function calls → Anthropic tool_use blocks ----
358
- case "response.output_item.added": {
359
- const item = event.item;
360
- if (item?.type === "function_call" && item.id && item.name) {
361
- pendingFunctionCalls.set(item.id, { name: item.name, callId: item.call_id || item.id });
362
- }
363
- break;
364
- }
365
- case "response.function_call_arguments.done": {
366
- closeOpenBlocks();
367
- hasToolUse = true;
368
- hasEmittedContent = true;
369
- const pending = pendingFunctionCalls.get(event.item_id);
370
- const name = pending?.name || event.name || "unknown_tool";
371
- const callId = pending?.callId || event.call_id || event.item_id;
372
- if (pending)
373
- pendingFunctionCalls.delete(event.item_id);
374
- const args = event.arguments;
375
- let parsedInput = {};
376
- try {
377
- parsedInput = JSON.parse(args || "{}");
378
- }
379
- catch { /* use empty */ }
380
- const toolUseId = callId || `toolu_openai_${randomUUID().slice(0, 12)}`;
381
- res.write(`data: ${JSON.stringify({
382
- type: "content_block_start",
383
- index: blockIndex,
384
- content_block: {
385
- type: "tool_use",
386
- id: toolUseId,
387
- name,
388
- input: {},
389
- },
390
- })}\n\n`);
391
- res.write(`data: ${JSON.stringify({
392
- type: "content_block_delta",
393
- index: blockIndex,
394
- delta: {
395
- type: "input_json_delta",
396
- partial_json: JSON.stringify(parsedInput),
397
- },
398
- })}\n\n`);
399
- res.write(`data: ${JSON.stringify({ type: "content_block_stop", index: blockIndex })}\n\n`);
400
- blockIndex++;
401
- break;
402
- }
403
- // ---- Completion → usage + stop ----
404
- case "response.completed": {
405
- const response = event.response;
406
- if (response?.usage) {
407
- totalInputTokens = response.usage.input_tokens || 0;
408
- totalOutputTokens = response.usage.output_tokens || 0;
409
- if (response.usage.output_tokens_details?.reasoning_tokens) {
410
- totalReasoningTokens = response.usage.output_tokens_details.reasoning_tokens;
411
- }
412
- if (response.usage.input_tokens_details?.cached_tokens) {
413
- totalCacheReadTokens = response.usage.input_tokens_details.cached_tokens;
414
- }
415
- }
416
- break;
417
- }
418
- // ---- Error during streaming ----
419
- case "response.failed": {
420
- const error = event.response?.error;
421
- const errMsg = error?.message || "Unknown OpenAI error";
422
- console.error("[openai-proxy] Response failed:", errMsg);
423
- closeOpenBlocks();
424
- if (!hasEmittedContent) {
425
- res.write(`data: ${JSON.stringify({
426
- type: "content_block_start",
427
- index: blockIndex,
428
- content_block: { type: "text", text: "" },
429
- })}\n\n`);
430
- res.write(`data: ${JSON.stringify({
431
- type: "content_block_delta",
432
- index: blockIndex,
433
- delta: { type: "text_delta", text: `[OpenAI error: ${errMsg}]` },
434
- })}\n\n`);
435
- res.write(`data: ${JSON.stringify({ type: "content_block_stop", index: blockIndex })}\n\n`);
436
- hasEmittedContent = true;
437
- }
438
- break;
439
- }
440
- case "response.incomplete": {
441
- console.warn("[openai-proxy] Response incomplete:", event.response?.incomplete_details);
442
- break;
443
- }
444
- default:
445
- break;
474
+ })}\n\n`);
475
+ res.write(`data: ${JSON.stringify({
476
+ type: "content_block_stop",
477
+ index: blockIndex
478
+ })}\n\n`);
479
+ blockIndex++;
480
+ break;
481
+ }
482
+
483
+ // ---- Completion usage + stop ----
484
+ case "response.completed":
485
+ {
486
+ const response = event.response;
487
+ if (response?.usage) {
488
+ totalInputTokens = response.usage.input_tokens || 0;
489
+ totalOutputTokens = response.usage.output_tokens || 0;
490
+ if (response.usage.output_tokens_details?.reasoning_tokens) {
491
+ totalReasoningTokens = response.usage.output_tokens_details.reasoning_tokens;
492
+ }
493
+ if (response.usage.input_tokens_details?.cached_tokens) {
494
+ totalCacheReadTokens = response.usage.input_tokens_details.cached_tokens;
446
495
  }
496
+ }
497
+ break;
447
498
  }
448
- // Close any remaining open blocks
449
- closeOpenBlocks();
450
- // Handle empty response
451
- if (!hasEmittedContent) {
499
+
500
+ // ---- Error during streaming ----
501
+ case "response.failed":
502
+ {
503
+ const error = event.response?.error;
504
+ const errMsg = error?.message || "Unknown OpenAI error";
505
+ console.error("[openai-proxy] Response failed:", errMsg);
506
+ closeOpenBlocks();
507
+ if (!hasEmittedContent) {
508
+ res.write(`data: ${JSON.stringify({
509
+ type: "content_block_start",
510
+ index: blockIndex,
511
+ content_block: {
512
+ type: "text",
513
+ text: ""
514
+ }
515
+ })}\n\n`);
452
516
  res.write(`data: ${JSON.stringify({
453
- type: "content_block_start",
454
- index: 0,
455
- content_block: { type: "text", text: "" },
517
+ type: "content_block_delta",
518
+ index: blockIndex,
519
+ delta: {
520
+ type: "text_delta",
521
+ text: `[OpenAI error: ${errMsg}]`
522
+ }
456
523
  })}\n\n`);
457
524
  res.write(`data: ${JSON.stringify({
458
- type: "content_block_delta",
459
- index: 0,
460
- delta: { type: "text_delta", text: "[OpenAI returned an empty response. Please try again.]" },
525
+ type: "content_block_stop",
526
+ index: blockIndex
461
527
  })}\n\n`);
462
- res.write(`data: ${JSON.stringify({ type: "content_block_stop", index: 0 })}\n\n`);
528
+ hasEmittedContent = true;
529
+ }
530
+ break;
463
531
  }
464
- // Determine stop reason
465
- const stopReason = hasToolUse ? "tool_use" : "end_turn";
466
- // Emit message_delta with usage
467
- res.write(`data: ${JSON.stringify({
468
- type: "message_delta",
469
- delta: { stop_reason: stopReason, stop_sequence: null },
470
- usage: {
471
- input_tokens: totalInputTokens,
472
- output_tokens: totalOutputTokens,
473
- ...(totalReasoningTokens > 0 ? { thinking_tokens: totalReasoningTokens } : {}),
474
- ...(totalCacheReadTokens > 0 ? { cache_read_input_tokens: totalCacheReadTokens } : {}),
475
- },
476
- })}\n\n`);
477
- res.write(`data: ${JSON.stringify({ type: "message_stop" })}\n\n`);
478
- res.write("data: [DONE]\n\n");
479
- }
480
- catch (err) {
481
- emitError(res, err, corsHeaders, sanitizeError, {
482
- provider: "openai",
483
- inputTokens: totalInputTokens,
484
- outputTokens: totalOutputTokens,
485
- thinkingTokens: totalReasoningTokens,
486
- cacheReadTokens: totalCacheReadTokens,
487
- });
488
- }
489
- finally {
490
- if (heartbeat)
491
- clearInterval(heartbeat);
532
+ case "response.incomplete":
533
+ {
534
+ console.warn("[openai-proxy] Response incomplete:", event.response?.incomplete_details);
535
+ break;
536
+ }
537
+ default:
538
+ break;
492
539
  }
493
- res.end();
494
- }
495
- // ---- Provider-specific config methods ----
496
- getThinkingConfig(model, enabled) {
497
- if (!enabled) {
498
- return { thinking: { type: "disabled" }, beta: "" };
540
+ }
541
+
542
+ // Close any remaining open blocks
543
+ closeOpenBlocks();
544
+
545
+ // Handle empty response
546
+ if (!hasEmittedContent) {
547
+ res.write(`data: ${JSON.stringify({
548
+ type: "content_block_start",
549
+ index: 0,
550
+ content_block: {
551
+ type: "text",
552
+ text: ""
553
+ }
554
+ })}\n\n`);
555
+ res.write(`data: ${JSON.stringify({
556
+ type: "content_block_delta",
557
+ index: 0,
558
+ delta: {
559
+ type: "text_delta",
560
+ text: "[OpenAI returned an empty response. Please try again.]"
561
+ }
562
+ })}\n\n`);
563
+ res.write(`data: ${JSON.stringify({
564
+ type: "content_block_stop",
565
+ index: 0
566
+ })}\n\n`);
567
+ }
568
+
569
+ // Determine stop reason
570
+ const stopReason = hasToolUse ? "tool_use" : "end_turn";
571
+
572
+ // Emit message_delta with usage
573
+ res.write(`data: ${JSON.stringify({
574
+ type: "message_delta",
575
+ delta: {
576
+ stop_reason: stopReason,
577
+ stop_sequence: null
578
+ },
579
+ usage: {
580
+ input_tokens: totalInputTokens,
581
+ output_tokens: totalOutputTokens,
582
+ ...(totalReasoningTokens > 0 ? {
583
+ thinking_tokens: totalReasoningTokens
584
+ } : {}),
585
+ ...(totalCacheReadTokens > 0 ? {
586
+ cache_read_input_tokens: totalCacheReadTokens
587
+ } : {})
499
588
  }
500
- // OpenAI reasoning models (o-series) have built-in reasoning, GPT models don't support thinking
501
- const isReasoning = /^o\d/.test(model);
502
- return { thinking: { type: isReasoning ? "enabled" : "disabled" }, beta: "" };
503
- }
504
- getMaxOutputTokens(model, agentMax) {
505
- const modelMax = MODEL_MAX_OUTPUT_TOKENS[model] ?? DEFAULT_OUTPUT_TOKENS;
506
- if (agentMax)
507
- return Math.min(agentMax, modelMax);
508
- return Math.min(DEFAULT_OUTPUT_TOKENS, modelMax);
509
- }
510
- getContextManagement(_model) {
511
- // OpenAI doesn't use Anthropic betas or context management
512
- return { betas: [], config: { edits: [] } };
513
- }
514
- getCompactionConfig(_model) {
515
- return { triggerTokens: 120_000, totalBudget: 2_000_000, isNative: false };
589
+ })}\n\n`);
590
+ res.write(`data: ${JSON.stringify({
591
+ type: "message_stop"
592
+ })}\n\n`);
593
+ res.write("data: [DONE]\n\n");
594
+ } catch (err) {
595
+ emitError(res, err, corsHeaders, sanitizeError, {
596
+ provider: "openai",
597
+ inputTokens: totalInputTokens,
598
+ outputTokens: totalOutputTokens,
599
+ thinkingTokens: totalReasoningTokens,
600
+ cacheReadTokens: totalCacheReadTokens
601
+ });
602
+ } finally {
603
+ if (heartbeat) clearInterval(heartbeat);
516
604
  }
517
- getCapabilities() {
518
- return getCapabilities("openai");
605
+ res.end();
606
+ }
607
+
608
+ // ---- Provider-specific config methods ----
609
+
610
+ getThinkingConfig(model, enabled) {
611
+ if (!enabled) {
612
+ return {
613
+ thinking: {
614
+ type: "disabled"
615
+ },
616
+ beta: ""
617
+ };
519
618
  }
619
+ // OpenAI reasoning models (o-series) have built-in reasoning, GPT models don't support thinking
620
+ const isReasoning = /^o\d/.test(model);
621
+ return {
622
+ thinking: {
623
+ type: isReasoning ? "enabled" : "disabled"
624
+ },
625
+ beta: ""
626
+ };
627
+ }
628
+ getMaxOutputTokens(model, agentMax) {
629
+ const modelMax = MODEL_MAX_OUTPUT_TOKENS[model] ?? DEFAULT_OUTPUT_TOKENS;
630
+ if (agentMax) return Math.min(agentMax, modelMax);
631
+ return Math.min(DEFAULT_OUTPUT_TOKENS, modelMax);
632
+ }
633
+ getContextManagement(_model) {
634
+ // OpenAI doesn't use Anthropic betas or context management
635
+ return {
636
+ betas: [],
637
+ config: {
638
+ edits: []
639
+ }
640
+ };
641
+ }
642
+ getCompactionConfig(_model) {
643
+ return {
644
+ triggerTokens: 120_000,
645
+ totalBudget: 2_000_000,
646
+ isNative: false
647
+ };
648
+ }
649
+ getCapabilities() {
650
+ return getCapabilities("openai");
651
+ }
520
652
  }
653
+
521
654
  // Auto-register on import
522
655
  registerProvider("openai", new OpenAIAdapter());
656
+ //# sourceMappingURL=openai.js.map