whale-code 6.5.5 → 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 (847) 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 +5 -1
  73. package/dist/cli/services/agent-config.js +66 -36
  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 +976 -688
  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.js +187 -169
  107. package/dist/cli/services/error-logger.js.map +1 -0
  108. package/dist/cli/services/file-history.d.ts +1 -1
  109. package/dist/cli/services/file-history.js +50 -54
  110. package/dist/cli/services/file-history.js.map +1 -0
  111. package/dist/cli/services/format-server-response.js +332 -372
  112. package/dist/cli/services/format-server-response.js.map +1 -0
  113. package/dist/cli/services/git-context.js +61 -45
  114. package/dist/cli/services/git-context.js.map +1 -0
  115. package/dist/cli/services/hooks.d.ts +2 -2
  116. package/dist/cli/services/hooks.js +195 -180
  117. package/dist/cli/services/hooks.js.map +1 -0
  118. package/dist/cli/services/ink-incremental.d.ts +19 -0
  119. package/dist/cli/services/ink-incremental.js +59 -0
  120. package/dist/cli/services/ink-incremental.js.map +1 -0
  121. package/dist/cli/services/ink-resize-fix.js +54 -44
  122. package/dist/cli/services/ink-resize-fix.js.map +1 -0
  123. package/dist/cli/services/ink-sync-output.d.ts +12 -0
  124. package/dist/cli/services/ink-sync-output.js +16 -0
  125. package/dist/cli/services/ink-sync-output.js.map +1 -0
  126. package/dist/cli/services/interactive-tools.js +268 -212
  127. package/dist/cli/services/interactive-tools.js.map +1 -0
  128. package/dist/cli/services/keybinding-manager.d.ts +11 -1
  129. package/dist/cli/services/keybinding-manager.js +126 -63
  130. package/dist/cli/services/keybinding-manager.js.map +1 -0
  131. package/dist/cli/services/local-tools.d.ts +1 -1
  132. package/dist/cli/services/local-tools.js +939 -656
  133. package/dist/cli/services/local-tools.js.map +1 -0
  134. package/dist/cli/services/lsp-manager.js +757 -594
  135. package/dist/cli/services/lsp-manager.js.map +1 -0
  136. package/dist/cli/services/mcp-client.d.ts +1 -1
  137. package/dist/cli/services/mcp-client.js +173 -134
  138. package/dist/cli/services/mcp-client.js.map +1 -0
  139. package/dist/cli/services/memory-manager.js +53 -40
  140. package/dist/cli/services/memory-manager.js.map +1 -0
  141. package/dist/cli/services/model-manager.js +55 -40
  142. package/dist/cli/services/model-manager.js.map +1 -0
  143. package/dist/cli/services/model-router.js +115 -85
  144. package/dist/cli/services/model-router.js.map +1 -0
  145. package/dist/cli/services/paths.d.ts +30 -0
  146. package/dist/cli/services/paths.js +81 -0
  147. package/dist/cli/services/paths.js.map +1 -0
  148. package/dist/cli/services/permission-modes.js +32 -25
  149. package/dist/cli/services/permission-modes.js.map +1 -0
  150. package/dist/cli/services/rewind.js +182 -168
  151. package/dist/cli/services/rewind.js.map +1 -0
  152. package/dist/cli/services/ripgrep.js +115 -115
  153. package/dist/cli/services/ripgrep.js.map +1 -0
  154. package/dist/cli/services/sandbox.d.ts +1 -1
  155. package/dist/cli/services/sandbox.js +58 -37
  156. package/dist/cli/services/sandbox.js.map +1 -0
  157. package/dist/cli/services/server-tools.js +738 -565
  158. package/dist/cli/services/server-tools.js.map +1 -0
  159. package/dist/cli/services/session-persistence.js +69 -74
  160. package/dist/cli/services/session-persistence.js.map +1 -0
  161. package/dist/cli/services/subagent-worker.js +42 -27
  162. package/dist/cli/services/subagent-worker.js.map +1 -0
  163. package/dist/cli/services/subagent.d.ts +2 -0
  164. package/dist/cli/services/subagent.js +605 -433
  165. package/dist/cli/services/subagent.js.map +1 -0
  166. package/dist/cli/services/system-prompt.js +86 -78
  167. package/dist/cli/services/system-prompt.js.map +1 -0
  168. package/dist/cli/services/task-decomposer.d.ts +1 -1
  169. package/dist/cli/services/task-decomposer.js +172 -139
  170. package/dist/cli/services/task-decomposer.js.map +1 -0
  171. package/dist/cli/services/team-lead.d.ts +2 -2
  172. package/dist/cli/services/team-lead.js +727 -529
  173. package/dist/cli/services/team-lead.js.map +1 -0
  174. package/dist/cli/services/team-state.js +319 -319
  175. package/dist/cli/services/team-state.js.map +1 -0
  176. package/dist/cli/services/teammate.d.ts +8 -2
  177. package/dist/cli/services/teammate.js +857 -569
  178. package/dist/cli/services/teammate.js.map +1 -0
  179. package/dist/cli/services/telemetry.d.ts +6 -1
  180. package/dist/cli/services/telemetry.js +180 -157
  181. package/dist/cli/services/telemetry.js.map +1 -0
  182. package/dist/cli/services/tools/agent-tools.d.ts +3 -3
  183. package/dist/cli/services/tools/agent-tools.js +480 -322
  184. package/dist/cli/services/tools/agent-tools.js.map +1 -0
  185. package/dist/cli/services/tools/file-ops.js +563 -450
  186. package/dist/cli/services/tools/file-ops.js.map +1 -0
  187. package/dist/cli/services/tools/search-tools.js +231 -162
  188. package/dist/cli/services/tools/search-tools.js.map +1 -0
  189. package/dist/cli/services/tools/shell-exec.js +197 -151
  190. package/dist/cli/services/tools/shell-exec.js.map +1 -0
  191. package/dist/cli/services/tools/task-manager.js +206 -173
  192. package/dist/cli/services/tools/task-manager.js.map +1 -0
  193. package/dist/cli/services/tools/web-tools.js +388 -341
  194. package/dist/cli/services/tools/web-tools.js.map +1 -0
  195. package/dist/cli/setup/SetupApp.d.ts +2 -2
  196. package/dist/cli/setup/SetupApp.js +608 -160
  197. package/dist/cli/setup/SetupApp.js.map +1 -0
  198. package/dist/cli/shared/ErrorBoundary.d.ts +22 -0
  199. package/dist/cli/shared/ErrorBoundary.js +73 -0
  200. package/dist/cli/shared/ErrorBoundary.js.map +1 -0
  201. package/dist/cli/shared/MatrixIntro.js +66 -69
  202. package/dist/cli/shared/MatrixIntro.js.map +1 -0
  203. package/dist/cli/shared/SpinnerSlot.d.ts +14 -0
  204. package/dist/cli/shared/SpinnerSlot.js +63 -0
  205. package/dist/cli/shared/SpinnerSlot.js.map +1 -0
  206. package/dist/cli/shared/Theme.d.ts +1 -1
  207. package/dist/cli/shared/Theme.js +136 -92
  208. package/dist/cli/shared/Theme.js.map +1 -0
  209. package/dist/cli/shared/WhaleBanner.js +99 -11
  210. package/dist/cli/shared/WhaleBanner.js.map +1 -0
  211. package/dist/cli/shared/markdown.d.ts +3 -1
  212. package/dist/cli/shared/markdown.js +736 -674
  213. package/dist/cli/shared/markdown.js.map +1 -0
  214. package/dist/cli/shared/marked-terminal.d.js +2 -0
  215. package/dist/cli/shared/marked-terminal.d.js.map +1 -0
  216. package/dist/cli/shared/theme-manager.js +99 -90
  217. package/dist/cli/shared/theme-manager.js.map +1 -0
  218. package/dist/cli/shared/theme-presets.js +256 -254
  219. package/dist/cli/shared/theme-presets.js.map +1 -0
  220. package/dist/cli/status/StatusApp.js +235 -86
  221. package/dist/cli/status/StatusApp.js.map +1 -0
  222. package/dist/cli/stores/StoreApp.js +275 -65
  223. package/dist/cli/stores/StoreApp.js.map +1 -0
  224. package/dist/index.d.ts +2 -2
  225. package/dist/index.js +509 -396
  226. package/dist/index.js.map +1 -0
  227. package/dist/local-agent/connection.d.ts +2 -2
  228. package/dist/local-agent/connection.js +352 -293
  229. package/dist/local-agent/connection.js.map +1 -0
  230. package/dist/local-agent/discovery.js +259 -122
  231. package/dist/local-agent/discovery.js.map +1 -0
  232. package/dist/local-agent/executor.js +216 -193
  233. package/dist/local-agent/executor.js.map +1 -0
  234. package/dist/local-agent/index.d.ts +2 -2
  235. package/dist/local-agent/index.js +156 -156
  236. package/dist/local-agent/index.js.map +1 -0
  237. package/dist/node/adapters/base.js +18 -8
  238. package/dist/node/adapters/base.js.map +1 -0
  239. package/dist/node/adapters/discord.js +286 -275
  240. package/dist/node/adapters/discord.js.map +1 -0
  241. package/dist/node/adapters/email.js +189 -202
  242. package/dist/node/adapters/email.js.map +1 -0
  243. package/dist/node/adapters/imessage.js +145 -142
  244. package/dist/node/adapters/imessage.js.map +1 -0
  245. package/dist/node/adapters/slack.js +237 -236
  246. package/dist/node/adapters/slack.js.map +1 -0
  247. package/dist/node/adapters/sms.js +149 -151
  248. package/dist/node/adapters/sms.js.map +1 -0
  249. package/dist/node/adapters/telegram.js +88 -92
  250. package/dist/node/adapters/telegram.js.map +1 -0
  251. package/dist/node/adapters/webchat.js +160 -136
  252. package/dist/node/adapters/webchat.js.map +1 -0
  253. package/dist/node/adapters/whatsapp.js +212 -215
  254. package/dist/node/adapters/whatsapp.js.map +1 -0
  255. package/dist/node/cli.js +884 -653
  256. package/dist/node/cli.js.map +1 -0
  257. package/dist/node/config.js +20 -18
  258. package/dist/node/config.js.map +1 -0
  259. package/dist/node/gateway-client.js +191 -181
  260. package/dist/node/gateway-client.js.map +1 -0
  261. package/dist/node/portal/clipboard.js +161 -130
  262. package/dist/node/portal/clipboard.js.map +1 -0
  263. package/dist/node/portal/discovery.js +51 -45
  264. package/dist/node/portal/discovery.js.map +1 -0
  265. package/dist/node/portal/forward.js +64 -58
  266. package/dist/node/portal/forward.js.map +1 -0
  267. package/dist/node/portal/index.js +246 -221
  268. package/dist/node/portal/index.js.map +1 -0
  269. package/dist/node/portal/multiplexer.js +192 -182
  270. package/dist/node/portal/multiplexer.js.map +1 -0
  271. package/dist/node/portal/permissions.js +102 -70
  272. package/dist/node/portal/permissions.js.map +1 -0
  273. package/dist/node/portal/protocol.js +153 -116
  274. package/dist/node/portal/protocol.js.map +1 -0
  275. package/dist/node/portal/screen.js +80 -69
  276. package/dist/node/portal/screen.js.map +1 -0
  277. package/dist/node/portal/session.js +124 -117
  278. package/dist/node/portal/session.js.map +1 -0
  279. package/dist/node/portal/shell.js +140 -113
  280. package/dist/node/portal/shell.js.map +1 -0
  281. package/dist/node/portal/stream.js +77 -75
  282. package/dist/node/portal/stream.js.map +1 -0
  283. package/dist/node/portal/transfer.js +190 -167
  284. package/dist/node/portal/transfer.js.map +1 -0
  285. package/dist/node/portal/ui.js +124 -99
  286. package/dist/node/portal/ui.js.map +1 -0
  287. package/dist/node/remote-desktop/compile-helper.js +50 -45
  288. package/dist/node/remote-desktop/compile-helper.js.map +1 -0
  289. package/dist/node/remote-desktop/index.js +215 -187
  290. package/dist/node/remote-desktop/index.js.map +1 -0
  291. package/dist/node/remote-desktop/protocol.js +45 -29
  292. package/dist/node/remote-desktop/protocol.js.map +1 -0
  293. package/dist/node/runtime.js +493 -410
  294. package/dist/node/runtime.js.map +1 -0
  295. package/dist/server/handlers/__test-utils__/test-db.js +39 -89
  296. package/dist/server/handlers/__test-utils__/test-db.js.map +1 -0
  297. package/dist/server/handlers/analytics.js +467 -261
  298. package/dist/server/handlers/analytics.js.map +1 -0
  299. package/dist/server/handlers/api-docs.js +1030 -895
  300. package/dist/server/handlers/api-docs.js.map +1 -0
  301. package/dist/server/handlers/api-keys.js +291 -242
  302. package/dist/server/handlers/api-keys.js.map +1 -0
  303. package/dist/server/handlers/billing.js +330 -239
  304. package/dist/server/handlers/billing.js.map +1 -0
  305. package/dist/server/handlers/browser.js +468 -395
  306. package/dist/server/handlers/browser.js.map +1 -0
  307. package/dist/server/handlers/catalog.js +1377 -978
  308. package/dist/server/handlers/catalog.js.map +1 -0
  309. package/dist/server/handlers/clickhouse.js +157 -109
  310. package/dist/server/handlers/clickhouse.js.map +1 -0
  311. package/dist/server/handlers/comms.js +1439 -984
  312. package/dist/server/handlers/comms.js.map +1 -0
  313. package/dist/server/handlers/creations.js +461 -394
  314. package/dist/server/handlers/creations.js.map +1 -0
  315. package/dist/server/handlers/crm.js +1082 -791
  316. package/dist/server/handlers/crm.js.map +1 -0
  317. package/dist/server/handlers/discovery.js +251 -232
  318. package/dist/server/handlers/discovery.js.map +1 -0
  319. package/dist/server/handlers/embeddings.js +241 -164
  320. package/dist/server/handlers/embeddings.js.map +1 -0
  321. package/dist/server/handlers/enrichment.js +887 -718
  322. package/dist/server/handlers/enrichment.js.map +1 -0
  323. package/dist/server/handlers/image-gen.js +467 -376
  324. package/dist/server/handlers/image-gen.js.map +1 -0
  325. package/dist/server/handlers/inventory.js +797 -424
  326. package/dist/server/handlers/inventory.js.map +1 -0
  327. package/dist/server/handlers/kali.js +272 -230
  328. package/dist/server/handlers/kali.js.map +1 -0
  329. package/dist/server/handlers/llm-providers.js +803 -580
  330. package/dist/server/handlers/llm-providers.js.map +1 -0
  331. package/dist/server/handlers/local-agent.js +133 -105
  332. package/dist/server/handlers/local-agent.js.map +1 -0
  333. package/dist/server/handlers/media.js +1179 -857
  334. package/dist/server/handlers/media.js.map +1 -0
  335. package/dist/server/handlers/meta-ads.js +2669 -2093
  336. package/dist/server/handlers/meta-ads.js.map +1 -0
  337. package/dist/server/handlers/nodes.js +1321 -913
  338. package/dist/server/handlers/nodes.js.map +1 -0
  339. package/dist/server/handlers/operations.js +183 -157
  340. package/dist/server/handlers/operations.js.map +1 -0
  341. package/dist/server/handlers/platform.js +346 -210
  342. package/dist/server/handlers/platform.js.map +1 -0
  343. package/dist/server/handlers/remove-bg.js +118 -86
  344. package/dist/server/handlers/remove-bg.js.map +1 -0
  345. package/dist/server/handlers/storefront.js +586 -446
  346. package/dist/server/handlers/storefront.js.map +1 -0
  347. package/dist/server/handlers/supply-chain.js +546 -326
  348. package/dist/server/handlers/supply-chain.js.map +1 -0
  349. package/dist/server/handlers/transcription.js +106 -97
  350. package/dist/server/handlers/transcription.js.map +1 -0
  351. package/dist/server/handlers/video-gen.js +593 -424
  352. package/dist/server/handlers/video-gen.js.map +1 -0
  353. package/dist/server/handlers/voice.js +1458 -1039
  354. package/dist/server/handlers/voice.js.map +1 -0
  355. package/dist/server/handlers/workflow-steps.js +2837 -2116
  356. package/dist/server/handlers/workflow-steps.js.map +1 -0
  357. package/dist/server/handlers/workflows.js +1630 -933
  358. package/dist/server/handlers/workflows.js.map +1 -0
  359. package/dist/server/index.js +3167 -2422
  360. package/dist/server/index.js.map +1 -0
  361. package/dist/server/lib/batch-client.js +471 -409
  362. package/dist/server/lib/batch-client.js.map +1 -0
  363. package/dist/server/lib/clickhouse-buffer.js +118 -104
  364. package/dist/server/lib/clickhouse-buffer.js.map +1 -0
  365. package/dist/server/lib/clickhouse-client.js +107 -107
  366. package/dist/server/lib/clickhouse-client.js.map +1 -0
  367. package/dist/server/lib/coa-renderer.js +1786 -356
  368. package/dist/server/lib/coa-renderer.js.map +1 -0
  369. package/dist/server/lib/code-worker-pool.js +227 -177
  370. package/dist/server/lib/code-worker-pool.js.map +1 -0
  371. package/dist/server/lib/code-worker.js +174 -164
  372. package/dist/server/lib/code-worker.js.map +1 -0
  373. package/dist/server/lib/compaction-service.d.ts +2 -12
  374. package/dist/server/lib/compaction-service.js +74 -184
  375. package/dist/server/lib/compaction-service.js.map +1 -0
  376. package/dist/server/lib/logger.js +36 -24
  377. package/dist/server/lib/logger.js.map +1 -0
  378. package/dist/server/lib/otel.js +101 -80
  379. package/dist/server/lib/otel.js.map +1 -0
  380. package/dist/server/lib/pdf-renderer.js +952 -788
  381. package/dist/server/lib/pdf-renderer.js.map +1 -0
  382. package/dist/server/lib/prompt-sanitizer.js +188 -108
  383. package/dist/server/lib/prompt-sanitizer.js.map +1 -0
  384. package/dist/server/lib/provider-capabilities.js +136 -138
  385. package/dist/server/lib/provider-capabilities.js.map +1 -0
  386. package/dist/server/lib/provider-failover.js +190 -168
  387. package/dist/server/lib/provider-failover.js.map +1 -0
  388. package/dist/server/lib/rate-limiter.js +186 -117
  389. package/dist/server/lib/rate-limiter.js.map +1 -0
  390. package/dist/server/lib/react-pdf-layout.js +551 -382
  391. package/dist/server/lib/react-pdf-layout.js.map +1 -0
  392. package/dist/server/lib/server-agent-loop.d.ts +4 -1
  393. package/dist/server/lib/server-agent-loop.js +906 -634
  394. package/dist/server/lib/server-agent-loop.js.map +1 -0
  395. package/dist/server/lib/server-subagent.js +260 -164
  396. package/dist/server/lib/server-subagent.js.map +1 -0
  397. package/dist/server/lib/session-checkpoint.js +105 -96
  398. package/dist/server/lib/session-checkpoint.js.map +1 -0
  399. package/dist/server/lib/ssrf-guard.js +193 -184
  400. package/dist/server/lib/ssrf-guard.js.map +1 -0
  401. package/dist/server/lib/supabase-client.js +94 -82
  402. package/dist/server/lib/supabase-client.js.map +1 -0
  403. package/dist/server/lib/template-resolver.js +154 -176
  404. package/dist/server/lib/template-resolver.js.map +1 -0
  405. package/dist/server/lib/utils.js +242 -133
  406. package/dist/server/lib/utils.js.map +1 -0
  407. package/dist/server/local-agent-gateway.d.ts +2 -2
  408. package/dist/server/local-agent-gateway.js +785 -627
  409. package/dist/server/local-agent-gateway.js.map +1 -0
  410. package/dist/server/providers/anthropic.js +250 -172
  411. package/dist/server/providers/anthropic.js.map +1 -0
  412. package/dist/server/providers/bedrock.js +217 -158
  413. package/dist/server/providers/bedrock.js.map +1 -0
  414. package/dist/server/providers/gemini.js +548 -418
  415. package/dist/server/providers/gemini.js.map +1 -0
  416. package/dist/server/providers/openai.js +571 -437
  417. package/dist/server/providers/openai.js.map +1 -0
  418. package/dist/server/providers/registry.js +23 -18
  419. package/dist/server/providers/registry.js.map +1 -0
  420. package/dist/server/providers/shared.js +123 -95
  421. package/dist/server/providers/shared.js.map +1 -0
  422. package/dist/server/providers/types.js +1 -11
  423. package/dist/server/providers/types.js.map +1 -0
  424. package/dist/server/proxy-handlers.js +209 -165
  425. package/dist/server/proxy-handlers.js.map +1 -0
  426. package/dist/server/tool-router.js +959 -599
  427. package/dist/server/tool-router.js.map +1 -0
  428. package/dist/server/validation.js +248 -188
  429. package/dist/server/validation.js.map +1 -0
  430. package/dist/server/worker.js +202 -133
  431. package/dist/server/worker.js.map +1 -0
  432. package/dist/setup.d.ts +2 -2
  433. package/dist/setup.js +151 -147
  434. package/dist/setup.js.map +1 -0
  435. package/dist/shared/agent-core.d.ts +115 -26
  436. package/dist/shared/agent-core.js +956 -522
  437. package/dist/shared/agent-core.js.map +1 -0
  438. package/dist/shared/anthropic-types.js +1 -6
  439. package/dist/shared/anthropic-types.js.map +1 -0
  440. package/dist/shared/api-client.d.ts +16 -9
  441. package/dist/shared/api-client.js +419 -327
  442. package/dist/shared/api-client.js.map +1 -0
  443. package/dist/shared/compaction.d.ts +36 -0
  444. package/dist/shared/compaction.js +138 -0
  445. package/dist/shared/compaction.js.map +1 -0
  446. package/dist/shared/constants.js +67 -64
  447. package/dist/shared/constants.js.map +1 -0
  448. package/dist/shared/sse-parser.js +221 -219
  449. package/dist/shared/sse-parser.js.map +1 -0
  450. package/dist/shared/tool-dispatch.d.ts +4 -0
  451. package/dist/shared/tool-dispatch.js +226 -165
  452. package/dist/shared/tool-dispatch.js.map +1 -0
  453. package/dist/shared/types.js +1 -6
  454. package/dist/shared/types.js.map +1 -0
  455. package/dist/types/cli-highlight.d.js +2 -0
  456. package/dist/types/cli-highlight.d.js.map +1 -0
  457. package/dist/types/diff.d.js +2 -0
  458. package/dist/types/diff.d.js.map +1 -0
  459. package/dist/types/pdf-parse.d.js +2 -0
  460. package/dist/types/pdf-parse.d.js.map +1 -0
  461. package/dist/updater.d.ts +1 -1
  462. package/dist/updater.js +118 -92
  463. package/dist/updater.js.map +1 -0
  464. package/dist/webchat/widget.js +227 -380
  465. package/dist/webchat/widget.js.map +1 -0
  466. package/package.json +22 -10
  467. package/vendor/ink/build/ansi-tokenizer.d.ts +38 -0
  468. package/vendor/ink/build/ansi-tokenizer.js +316 -0
  469. package/vendor/ink/build/ansi-tokenizer.js.map +1 -0
  470. package/vendor/ink/build/apply-styles.js +175 -0
  471. package/vendor/ink/build/build-layout.js +77 -0
  472. package/vendor/ink/build/calculate-wrapped-text.js +53 -0
  473. package/vendor/ink/build/colorize.d.ts +3 -0
  474. package/vendor/ink/build/colorize.js +48 -0
  475. package/vendor/ink/build/colorize.js.map +1 -0
  476. package/vendor/ink/build/components/AccessibilityContext.d.ts +3 -0
  477. package/vendor/ink/build/components/AccessibilityContext.js +5 -0
  478. package/vendor/ink/build/components/AccessibilityContext.js.map +1 -0
  479. package/vendor/ink/build/components/App.d.ts +18 -0
  480. package/vendor/ink/build/components/App.js +351 -0
  481. package/vendor/ink/build/components/App.js.map +1 -0
  482. package/vendor/ink/build/components/AppContext.d.ts +15 -0
  483. package/vendor/ink/build/components/AppContext.js +11 -0
  484. package/vendor/ink/build/components/AppContext.js.map +1 -0
  485. package/vendor/ink/build/components/BackgroundContext.d.ts +4 -0
  486. package/vendor/ink/build/components/BackgroundContext.js +3 -0
  487. package/vendor/ink/build/components/BackgroundContext.js.map +1 -0
  488. package/vendor/ink/build/components/Box.d.ts +117 -0
  489. package/vendor/ink/build/components/Box.js +34 -0
  490. package/vendor/ink/build/components/Box.js.map +1 -0
  491. package/vendor/ink/build/components/Color.js +62 -0
  492. package/vendor/ink/build/components/Cursor.d.ts +83 -0
  493. package/vendor/ink/build/components/Cursor.js +53 -0
  494. package/vendor/ink/build/components/Cursor.js.map +1 -0
  495. package/vendor/ink/build/components/CursorContext.d.ts +11 -0
  496. package/vendor/ink/build/components/CursorContext.js +8 -0
  497. package/vendor/ink/build/components/CursorContext.js.map +1 -0
  498. package/vendor/ink/build/components/ErrorBoundary.d.ts +18 -0
  499. package/vendor/ink/build/components/ErrorBoundary.js +23 -0
  500. package/vendor/ink/build/components/ErrorBoundary.js.map +1 -0
  501. package/vendor/ink/build/components/ErrorOverview.d.ts +6 -0
  502. package/vendor/ink/build/components/ErrorOverview.js +84 -0
  503. package/vendor/ink/build/components/ErrorOverview.js.map +1 -0
  504. package/vendor/ink/build/components/FocusContext.d.ts +16 -0
  505. package/vendor/ink/build/components/FocusContext.js +17 -0
  506. package/vendor/ink/build/components/FocusContext.js.map +1 -0
  507. package/vendor/ink/build/components/Newline.d.ts +13 -0
  508. package/vendor/ink/build/components/Newline.js +8 -0
  509. package/vendor/ink/build/components/Newline.js.map +1 -0
  510. package/vendor/ink/build/components/Spacer.d.ts +7 -0
  511. package/vendor/ink/build/components/Spacer.js +11 -0
  512. package/vendor/ink/build/components/Spacer.js.map +1 -0
  513. package/vendor/ink/build/components/Static.d.ts +24 -0
  514. package/vendor/ink/build/components/Static.js +28 -0
  515. package/vendor/ink/build/components/Static.js.map +1 -0
  516. package/vendor/ink/build/components/StderrContext.d.ts +15 -0
  517. package/vendor/ink/build/components/StderrContext.js +13 -0
  518. package/vendor/ink/build/components/StderrContext.js.map +1 -0
  519. package/vendor/ink/build/components/StdinContext.d.ts +22 -0
  520. package/vendor/ink/build/components/StdinContext.js +19 -0
  521. package/vendor/ink/build/components/StdinContext.js.map +1 -0
  522. package/vendor/ink/build/components/StdoutContext.d.ts +15 -0
  523. package/vendor/ink/build/components/StdoutContext.js +13 -0
  524. package/vendor/ink/build/components/StdoutContext.js.map +1 -0
  525. package/vendor/ink/build/components/Text.d.ts +55 -0
  526. package/vendor/ink/build/components/Text.js +50 -0
  527. package/vendor/ink/build/components/Text.js.map +1 -0
  528. package/vendor/ink/build/components/Transform.d.ts +16 -0
  529. package/vendor/ink/build/components/Transform.js +15 -0
  530. package/vendor/ink/build/components/Transform.js.map +1 -0
  531. package/vendor/ink/build/cursor-helpers.d.ts +38 -0
  532. package/vendor/ink/build/cursor-helpers.js +56 -0
  533. package/vendor/ink/build/cursor-helpers.js.map +1 -0
  534. package/vendor/ink/build/devtools-window-polyfill.d.ts +1 -0
  535. package/vendor/ink/build/devtools-window-polyfill.js +65 -0
  536. package/vendor/ink/build/devtools-window-polyfill.js.map +1 -0
  537. package/vendor/ink/build/devtools.d.ts +1 -0
  538. package/vendor/ink/build/devtools.js +11 -0
  539. package/vendor/ink/build/devtools.js.map +1 -0
  540. package/vendor/ink/build/dom.d.ts +56 -0
  541. package/vendor/ink/build/dom.js +124 -0
  542. package/vendor/ink/build/dom.js.map +1 -0
  543. package/vendor/ink/build/experimental/apply-style.js +140 -0
  544. package/vendor/ink/build/experimental/dom.js +123 -0
  545. package/vendor/ink/build/experimental/output.js +91 -0
  546. package/vendor/ink/build/experimental/reconciler.js +141 -0
  547. package/vendor/ink/build/experimental/renderer.js +81 -0
  548. package/vendor/ink/build/get-max-width.d.ts +3 -0
  549. package/vendor/ink/build/get-max-width.js +10 -0
  550. package/vendor/ink/build/get-max-width.js.map +1 -0
  551. package/vendor/ink/build/hooks/use-app.d.ts +5 -0
  552. package/vendor/ink/build/hooks/use-app.js +8 -0
  553. package/vendor/ink/build/hooks/use-app.js.map +1 -0
  554. package/vendor/ink/build/hooks/use-cursor.d.ts +12 -0
  555. package/vendor/ink/build/hooks/use-cursor.js +29 -0
  556. package/vendor/ink/build/hooks/use-cursor.js.map +1 -0
  557. package/vendor/ink/build/hooks/use-focus-manager.d.ts +28 -0
  558. package/vendor/ink/build/hooks/use-focus-manager.js +17 -0
  559. package/vendor/ink/build/hooks/use-focus-manager.js.map +1 -0
  560. package/vendor/ink/build/hooks/use-focus.d.ts +29 -0
  561. package/vendor/ink/build/hooks/use-focus.js +42 -0
  562. package/vendor/ink/build/hooks/use-focus.js.map +1 -0
  563. package/vendor/ink/build/hooks/use-input.d.ts +131 -0
  564. package/vendor/ink/build/hooks/use-input.js +124 -0
  565. package/vendor/ink/build/hooks/use-input.js.map +1 -0
  566. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.d.ts +5 -0
  567. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js +11 -0
  568. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
  569. package/vendor/ink/build/hooks/use-stderr.d.ts +5 -0
  570. package/vendor/ink/build/hooks/use-stderr.js +8 -0
  571. package/vendor/ink/build/hooks/use-stderr.js.map +1 -0
  572. package/vendor/ink/build/hooks/use-stdin.d.ts +5 -0
  573. package/vendor/ink/build/hooks/use-stdin.js +8 -0
  574. package/vendor/ink/build/hooks/use-stdin.js.map +1 -0
  575. package/vendor/ink/build/hooks/use-stdout.d.ts +5 -0
  576. package/vendor/ink/build/hooks/use-stdout.js +8 -0
  577. package/vendor/ink/build/hooks/use-stdout.js.map +1 -0
  578. package/vendor/ink/build/hooks/useInput.js +38 -0
  579. package/vendor/ink/build/index.d.ts +34 -0
  580. package/vendor/ink/build/index.js +20 -0
  581. package/vendor/ink/build/index.js.map +1 -0
  582. package/vendor/ink/build/ink.d.ts +90 -0
  583. package/vendor/ink/build/ink.js +654 -0
  584. package/vendor/ink/build/ink.js.map +1 -0
  585. package/vendor/ink/build/input-parser.d.ts +7 -0
  586. package/vendor/ink/build/input-parser.js +154 -0
  587. package/vendor/ink/build/input-parser.js.map +1 -0
  588. package/vendor/ink/build/instance.js +205 -0
  589. package/vendor/ink/build/instances.d.ts +3 -0
  590. package/vendor/ink/build/instances.js +8 -0
  591. package/vendor/ink/build/instances.js.map +1 -0
  592. package/vendor/ink/build/kitty-keyboard.d.ts +23 -0
  593. package/vendor/ink/build/kitty-keyboard.js +32 -0
  594. package/vendor/ink/build/kitty-keyboard.js.map +1 -0
  595. package/vendor/ink/build/layout.d.ts +7 -0
  596. package/vendor/ink/build/layout.js +33 -0
  597. package/vendor/ink/build/layout.js.map +1 -0
  598. package/vendor/ink/build/log-update.d.ts +19 -0
  599. package/vendor/ink/build/log-update.js +243 -0
  600. package/vendor/ink/build/log-update.js.map +1 -0
  601. package/vendor/ink/build/measure-element.d.ts +16 -0
  602. package/vendor/ink/build/measure-element.js +9 -0
  603. package/vendor/ink/build/measure-element.js.map +1 -0
  604. package/vendor/ink/build/measure-text.d.ts +6 -0
  605. package/vendor/ink/build/measure-text.js +21 -0
  606. package/vendor/ink/build/measure-text.js.map +1 -0
  607. package/vendor/ink/build/options.d.ts +52 -0
  608. package/vendor/ink/build/options.js +2 -0
  609. package/vendor/ink/build/options.js.map +1 -0
  610. package/vendor/ink/build/output.d.ts +35 -0
  611. package/vendor/ink/build/output.js +183 -0
  612. package/vendor/ink/build/output.js.map +1 -0
  613. package/vendor/ink/build/parse-keypress.d.ts +22 -0
  614. package/vendor/ink/build/parse-keypress.js +493 -0
  615. package/vendor/ink/build/parse-keypress.js.map +1 -0
  616. package/vendor/ink/build/reconciler.d.ts +4 -0
  617. package/vendor/ink/build/reconciler.js +274 -0
  618. package/vendor/ink/build/reconciler.js.map +1 -0
  619. package/vendor/ink/build/render-background.d.ts +4 -0
  620. package/vendor/ink/build/render-background.js +25 -0
  621. package/vendor/ink/build/render-background.js.map +1 -0
  622. package/vendor/ink/build/render-border.d.ts +4 -0
  623. package/vendor/ink/build/render-border.js +73 -0
  624. package/vendor/ink/build/render-border.js.map +1 -0
  625. package/vendor/ink/build/render-node-to-output.d.ts +14 -0
  626. package/vendor/ink/build/render-node-to-output.js +147 -0
  627. package/vendor/ink/build/render-node-to-output.js.map +1 -0
  628. package/vendor/ink/build/render-to-string.d.ts +38 -0
  629. package/vendor/ink/build/render-to-string.js +115 -0
  630. package/vendor/ink/build/render-to-string.js.map +1 -0
  631. package/vendor/ink/build/render.d.ts +121 -0
  632. package/vendor/ink/build/render.js +55 -0
  633. package/vendor/ink/build/render.js.map +1 -0
  634. package/vendor/ink/build/renderer.d.ts +8 -0
  635. package/vendor/ink/build/renderer.js +55 -0
  636. package/vendor/ink/build/renderer.js.map +1 -0
  637. package/vendor/ink/build/sanitize-ansi.d.ts +2 -0
  638. package/vendor/ink/build/sanitize-ansi.js +27 -0
  639. package/vendor/ink/build/sanitize-ansi.js.map +1 -0
  640. package/vendor/ink/build/screen-reader-update.d.ts +13 -0
  641. package/vendor/ink/build/screen-reader-update.js +38 -0
  642. package/vendor/ink/build/screen-reader-update.js.map +1 -0
  643. package/vendor/ink/build/squash-text-nodes.d.ts +3 -0
  644. package/vendor/ink/build/squash-text-nodes.js +36 -0
  645. package/vendor/ink/build/squash-text-nodes.js.map +1 -0
  646. package/vendor/ink/build/styles.d.ts +240 -0
  647. package/vendor/ink/build/styles.js +232 -0
  648. package/vendor/ink/build/styles.js.map +1 -0
  649. package/vendor/ink/build/utils.d.ts +2 -0
  650. package/vendor/ink/build/utils.js +4 -0
  651. package/vendor/ink/build/utils.js.map +1 -0
  652. package/vendor/ink/build/wrap-text.d.ts +3 -0
  653. package/vendor/ink/build/wrap-text.js +31 -0
  654. package/vendor/ink/build/wrap-text.js.map +1 -0
  655. package/vendor/ink/build/write-synchronized.d.ts +4 -0
  656. package/vendor/ink/build/write-synchronized.js +7 -0
  657. package/vendor/ink/build/write-synchronized.js.map +1 -0
  658. package/vendor/ink/license +10 -0
  659. package/vendor/ink/node_modules/@types/node/LICENSE +21 -0
  660. package/vendor/ink/node_modules/@types/node/README.md +15 -0
  661. package/vendor/ink/node_modules/@types/node/assert/strict.d.ts +105 -0
  662. package/vendor/ink/node_modules/@types/node/assert.d.ts +955 -0
  663. package/vendor/ink/node_modules/@types/node/async_hooks.d.ts +623 -0
  664. package/vendor/ink/node_modules/@types/node/buffer.buffer.d.ts +466 -0
  665. package/vendor/ink/node_modules/@types/node/buffer.d.ts +1810 -0
  666. package/vendor/ink/node_modules/@types/node/child_process.d.ts +1428 -0
  667. package/vendor/ink/node_modules/@types/node/cluster.d.ts +486 -0
  668. package/vendor/ink/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
  669. package/vendor/ink/node_modules/@types/node/console.d.ts +151 -0
  670. package/vendor/ink/node_modules/@types/node/constants.d.ts +20 -0
  671. package/vendor/ink/node_modules/@types/node/crypto.d.ts +4065 -0
  672. package/vendor/ink/node_modules/@types/node/dgram.d.ts +564 -0
  673. package/vendor/ink/node_modules/@types/node/diagnostics_channel.d.ts +576 -0
  674. package/vendor/ink/node_modules/@types/node/dns/promises.d.ts +503 -0
  675. package/vendor/ink/node_modules/@types/node/dns.d.ts +922 -0
  676. package/vendor/ink/node_modules/@types/node/domain.d.ts +166 -0
  677. package/vendor/ink/node_modules/@types/node/events.d.ts +1054 -0
  678. package/vendor/ink/node_modules/@types/node/fs/promises.d.ts +1329 -0
  679. package/vendor/ink/node_modules/@types/node/fs.d.ts +4676 -0
  680. package/vendor/ink/node_modules/@types/node/globals.d.ts +150 -0
  681. package/vendor/ink/node_modules/@types/node/globals.typedarray.d.ts +101 -0
  682. package/vendor/ink/node_modules/@types/node/http.d.ts +2167 -0
  683. package/vendor/ink/node_modules/@types/node/http2.d.ts +2480 -0
  684. package/vendor/ink/node_modules/@types/node/https.d.ts +405 -0
  685. package/vendor/ink/node_modules/@types/node/index.d.ts +115 -0
  686. package/vendor/ink/node_modules/@types/node/inspector/promises.d.ts +41 -0
  687. package/vendor/ink/node_modules/@types/node/inspector.d.ts +224 -0
  688. package/vendor/ink/node_modules/@types/node/inspector.generated.d.ts +4226 -0
  689. package/vendor/ink/node_modules/@types/node/module.d.ts +819 -0
  690. package/vendor/ink/node_modules/@types/node/net.d.ts +933 -0
  691. package/vendor/ink/node_modules/@types/node/os.d.ts +507 -0
  692. package/vendor/ink/node_modules/@types/node/package.json +155 -0
  693. package/vendor/ink/node_modules/@types/node/path/posix.d.ts +8 -0
  694. package/vendor/ink/node_modules/@types/node/path/win32.d.ts +8 -0
  695. package/vendor/ink/node_modules/@types/node/path.d.ts +187 -0
  696. package/vendor/ink/node_modules/@types/node/perf_hooks.d.ts +643 -0
  697. package/vendor/ink/node_modules/@types/node/process.d.ts +2156 -0
  698. package/vendor/ink/node_modules/@types/node/punycode.d.ts +117 -0
  699. package/vendor/ink/node_modules/@types/node/querystring.d.ts +152 -0
  700. package/vendor/ink/node_modules/@types/node/quic.d.ts +910 -0
  701. package/vendor/ink/node_modules/@types/node/readline/promises.d.ts +161 -0
  702. package/vendor/ink/node_modules/@types/node/readline.d.ts +541 -0
  703. package/vendor/ink/node_modules/@types/node/repl.d.ts +415 -0
  704. package/vendor/ink/node_modules/@types/node/sea.d.ts +162 -0
  705. package/vendor/ink/node_modules/@types/node/sqlite.d.ts +955 -0
  706. package/vendor/ink/node_modules/@types/node/stream/consumers.d.ts +38 -0
  707. package/vendor/ink/node_modules/@types/node/stream/promises.d.ts +211 -0
  708. package/vendor/ink/node_modules/@types/node/stream/web.d.ts +296 -0
  709. package/vendor/ink/node_modules/@types/node/stream.d.ts +1760 -0
  710. package/vendor/ink/node_modules/@types/node/string_decoder.d.ts +67 -0
  711. package/vendor/ink/node_modules/@types/node/test/reporters.d.ts +96 -0
  712. package/vendor/ink/node_modules/@types/node/test.d.ts +2240 -0
  713. package/vendor/ink/node_modules/@types/node/timers/promises.d.ts +108 -0
  714. package/vendor/ink/node_modules/@types/node/timers.d.ts +159 -0
  715. package/vendor/ink/node_modules/@types/node/tls.d.ts +1198 -0
  716. package/vendor/ink/node_modules/@types/node/trace_events.d.ts +197 -0
  717. package/vendor/ink/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +462 -0
  718. package/vendor/ink/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
  719. package/vendor/ink/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +36 -0
  720. package/vendor/ink/node_modules/@types/node/ts5.6/index.d.ts +117 -0
  721. package/vendor/ink/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
  722. package/vendor/ink/node_modules/@types/node/ts5.7/index.d.ts +117 -0
  723. package/vendor/ink/node_modules/@types/node/tty.d.ts +250 -0
  724. package/vendor/ink/node_modules/@types/node/url.d.ts +519 -0
  725. package/vendor/ink/node_modules/@types/node/util/types.d.ts +558 -0
  726. package/vendor/ink/node_modules/@types/node/util.d.ts +1662 -0
  727. package/vendor/ink/node_modules/@types/node/v8.d.ts +983 -0
  728. package/vendor/ink/node_modules/@types/node/vm.d.ts +1208 -0
  729. package/vendor/ink/node_modules/@types/node/wasi.d.ts +202 -0
  730. package/vendor/ink/node_modules/@types/node/web-globals/abortcontroller.d.ts +59 -0
  731. package/vendor/ink/node_modules/@types/node/web-globals/blob.d.ts +23 -0
  732. package/vendor/ink/node_modules/@types/node/web-globals/console.d.ts +9 -0
  733. package/vendor/ink/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
  734. package/vendor/ink/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  735. package/vendor/ink/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
  736. package/vendor/ink/node_modules/@types/node/web-globals/events.d.ts +106 -0
  737. package/vendor/ink/node_modules/@types/node/web-globals/fetch.d.ts +69 -0
  738. package/vendor/ink/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
  739. package/vendor/ink/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
  740. package/vendor/ink/node_modules/@types/node/web-globals/navigator.d.ts +25 -0
  741. package/vendor/ink/node_modules/@types/node/web-globals/performance.d.ts +45 -0
  742. package/vendor/ink/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  743. package/vendor/ink/node_modules/@types/node/web-globals/streams.d.ts +115 -0
  744. package/vendor/ink/node_modules/@types/node/web-globals/timers.d.ts +44 -0
  745. package/vendor/ink/node_modules/@types/node/web-globals/url.d.ts +24 -0
  746. package/vendor/ink/node_modules/@types/node/worker_threads.d.ts +717 -0
  747. package/vendor/ink/node_modules/@types/node/zlib.d.ts +618 -0
  748. package/vendor/ink/node_modules/node-pty/LICENSE +69 -0
  749. package/vendor/ink/node_modules/node-pty/README.md +164 -0
  750. package/vendor/ink/node_modules/node-pty/binding.gyp +150 -0
  751. package/vendor/ink/node_modules/node-pty/lib/conpty_console_list_agent.js +25 -0
  752. package/vendor/ink/node_modules/node-pty/lib/eventEmitter2.js +47 -0
  753. package/vendor/ink/node_modules/node-pty/lib/index.js +52 -0
  754. package/vendor/ink/node_modules/node-pty/lib/interfaces.js +7 -0
  755. package/vendor/ink/node_modules/node-pty/lib/shared/conout.js +11 -0
  756. package/vendor/ink/node_modules/node-pty/lib/terminal.js +190 -0
  757. package/vendor/ink/node_modules/node-pty/lib/types.js +7 -0
  758. package/vendor/ink/node_modules/node-pty/lib/unixTerminal.js +349 -0
  759. package/vendor/ink/node_modules/node-pty/lib/utils.js +39 -0
  760. package/vendor/ink/node_modules/node-pty/lib/windowsConoutConnection.js +125 -0
  761. package/vendor/ink/node_modules/node-pty/lib/windowsPtyAgent.js +287 -0
  762. package/vendor/ink/node_modules/node-pty/lib/windowsTerminal.js +201 -0
  763. package/vendor/ink/node_modules/node-pty/lib/worker/conoutSocketWorker.js +22 -0
  764. package/vendor/ink/node_modules/node-pty/package.json +65 -0
  765. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/pty.node +0 -0
  766. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/spawn-helper +0 -0
  767. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/pty.node +0 -0
  768. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/spawn-helper +0 -0
  769. package/vendor/ink/node_modules/node-pty/prebuilds/linux-arm64/pty.node +0 -0
  770. package/vendor/ink/node_modules/node-pty/prebuilds/linux-x64/pty.node +0 -0
  771. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
  772. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
  773. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
  774. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.pdb +0 -0
  775. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  776. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.pdb +0 -0
  777. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
  778. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
  779. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.node +0 -0
  780. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.pdb +0 -0
  781. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
  782. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.pdb +0 -0
  783. package/vendor/ink/node_modules/node-pty/scripts/post-install.js +76 -0
  784. package/vendor/ink/node_modules/node-pty/scripts/prebuild.js +34 -0
  785. package/vendor/ink/node_modules/node-pty/src/unix/pty.cc +875 -0
  786. package/vendor/ink/node_modules/node-pty/src/unix/spawn-helper.cc +23 -0
  787. package/vendor/ink/node_modules/node-pty/src/win/conpty.cc +582 -0
  788. package/vendor/ink/node_modules/node-pty/src/win/conpty.h +41 -0
  789. package/vendor/ink/node_modules/node-pty/src/win/conpty_console_list.cc +44 -0
  790. package/vendor/ink/node_modules/node-pty/src/win/path_util.cc +95 -0
  791. package/vendor/ink/node_modules/node-pty/src/win/path_util.h +26 -0
  792. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/OpenConsole.exe +0 -0
  793. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/conpty.dll +0 -0
  794. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/OpenConsole.exe +0 -0
  795. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/conpty.dll +0 -0
  796. package/vendor/ink/node_modules/node-pty/typings/node-pty.d.ts +215 -0
  797. package/vendor/ink/node_modules/undici-types/LICENSE +21 -0
  798. package/vendor/ink/node_modules/undici-types/README.md +6 -0
  799. package/vendor/ink/node_modules/undici-types/agent.d.ts +32 -0
  800. package/vendor/ink/node_modules/undici-types/api.d.ts +43 -0
  801. package/vendor/ink/node_modules/undici-types/balanced-pool.d.ts +30 -0
  802. package/vendor/ink/node_modules/undici-types/cache-interceptor.d.ts +173 -0
  803. package/vendor/ink/node_modules/undici-types/cache.d.ts +36 -0
  804. package/vendor/ink/node_modules/undici-types/client-stats.d.ts +15 -0
  805. package/vendor/ink/node_modules/undici-types/client.d.ts +108 -0
  806. package/vendor/ink/node_modules/undici-types/connector.d.ts +34 -0
  807. package/vendor/ink/node_modules/undici-types/content-type.d.ts +21 -0
  808. package/vendor/ink/node_modules/undici-types/cookies.d.ts +30 -0
  809. package/vendor/ink/node_modules/undici-types/diagnostics-channel.d.ts +74 -0
  810. package/vendor/ink/node_modules/undici-types/dispatcher.d.ts +276 -0
  811. package/vendor/ink/node_modules/undici-types/env-http-proxy-agent.d.ts +22 -0
  812. package/vendor/ink/node_modules/undici-types/errors.d.ts +161 -0
  813. package/vendor/ink/node_modules/undici-types/eventsource.d.ts +66 -0
  814. package/vendor/ink/node_modules/undici-types/fetch.d.ts +211 -0
  815. package/vendor/ink/node_modules/undici-types/formdata.d.ts +108 -0
  816. package/vendor/ink/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  817. package/vendor/ink/node_modules/undici-types/global-origin.d.ts +7 -0
  818. package/vendor/ink/node_modules/undici-types/h2c-client.d.ts +73 -0
  819. package/vendor/ink/node_modules/undici-types/handlers.d.ts +15 -0
  820. package/vendor/ink/node_modules/undici-types/header.d.ts +160 -0
  821. package/vendor/ink/node_modules/undici-types/index.d.ts +88 -0
  822. package/vendor/ink/node_modules/undici-types/interceptors.d.ts +73 -0
  823. package/vendor/ink/node_modules/undici-types/mock-agent.d.ts +68 -0
  824. package/vendor/ink/node_modules/undici-types/mock-call-history.d.ts +111 -0
  825. package/vendor/ink/node_modules/undici-types/mock-client.d.ts +27 -0
  826. package/vendor/ink/node_modules/undici-types/mock-errors.d.ts +12 -0
  827. package/vendor/ink/node_modules/undici-types/mock-interceptor.d.ts +94 -0
  828. package/vendor/ink/node_modules/undici-types/mock-pool.d.ts +27 -0
  829. package/vendor/ink/node_modules/undici-types/package.json +55 -0
  830. package/vendor/ink/node_modules/undici-types/patch.d.ts +29 -0
  831. package/vendor/ink/node_modules/undici-types/pool-stats.d.ts +19 -0
  832. package/vendor/ink/node_modules/undici-types/pool.d.ts +41 -0
  833. package/vendor/ink/node_modules/undici-types/proxy-agent.d.ts +29 -0
  834. package/vendor/ink/node_modules/undici-types/readable.d.ts +68 -0
  835. package/vendor/ink/node_modules/undici-types/retry-agent.d.ts +8 -0
  836. package/vendor/ink/node_modules/undici-types/retry-handler.d.ts +125 -0
  837. package/vendor/ink/node_modules/undici-types/round-robin-pool.d.ts +41 -0
  838. package/vendor/ink/node_modules/undici-types/snapshot-agent.d.ts +109 -0
  839. package/vendor/ink/node_modules/undici-types/util.d.ts +18 -0
  840. package/vendor/ink/node_modules/undici-types/utility.d.ts +7 -0
  841. package/vendor/ink/node_modules/undici-types/webidl.d.ts +341 -0
  842. package/vendor/ink/node_modules/undici-types/websocket.d.ts +186 -0
  843. package/vendor/ink/package.json +201 -0
  844. package/vendor/ink/readme.md +2636 -0
  845. package/bin/swag-agent.js +0 -9
  846. package/dist/server/lib/pg-rate-limiter.d.ts +0 -21
  847. 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