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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-client.js","names":["createLogger","log","ANTHROPIC_BASE_URL","OPENAI_BASE_URL","POLL_INTERVAL_MS","MAX_POLL_DURATION_MS","ANTHROPIC_API_VERSION","ANTHROPIC_BATCH_BETA","BatchClient","queue","queueRequest","id","provider","model","messages","config","push","system","tools","max_tokens","temperature","info","queueSize","length","submitBatch","Error","mixedProvider","find","r","requests","submitAnthropicBatch","submitOpenAIBatch","pollBatch","batchId","pollAnthropicBatch","pollOpenAIBatch","processSingle","results","get","success","error","apiKey","process","env","ANTHROPIC_API_KEY","batchRequests","map","params","t","name","description","slice","input_schema","undefined","custom_id","resp","fetch","method","headers","body","JSON","stringify","ok","errText","text","status","substring","data","json","count","startTime","Date","now","batch","processing_status","counts","request_counts","elapsed","fetchAnthropicResults","sleep","Map","line","split","trim","item","parse","result","type","message","textBlocks","content","filter","b","set","join","usage","resultCount","size","OPENAI_API_KEY","lines","buildOpenAIMessages","function","parameters","url","jsonlContent","formData","FormData","blob","Blob","append","uploadResp","Authorization","fileData","batchResp","input_file_id","endpoint","completion_window","fileId","output_file_id","fetchOpenAIResults","outputFileId","response","status_code","choice","choices","input_tokens","prompt_tokens","output_tokens","completion_tokens","out","role","Array","isArray","systemText","s","Boolean","msg","parts","block","output","c","tool_call_id","tool_use_id","textContent","toolCalls","arguments","input","assistantMsg","tool_calls","ms","Promise","resolve","setTimeout","batchClient"],"sources":["../../../src/server/lib/batch-client.ts"],"sourcesContent":["/**\n * Batch API Client — queues non-streaming LLM requests and submits them as batch jobs.\n *\n * Supports:\n * - Anthropic Message Batches API (POST /v1/messages/batches)\n * - OpenAI Batch API (POST /v1/batches via file upload)\n *\n * Batch API typically saves ~50% cost for non-latency-sensitive operations\n * like workflow steps, bulk classification, and background processing.\n */\n\nimport { createLogger } from \"./logger.js\";\n\nconst log = createLogger(\"batch-client\");\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface BatchRequest {\n id: string;\n provider: \"anthropic\" | \"openai\";\n model: string;\n messages: unknown[];\n system?: unknown;\n tools?: unknown[];\n max_tokens: number;\n temperature?: number;\n}\n\nexport interface BatchResult {\n id: string;\n success: boolean;\n content?: unknown; // Full response content array (Anthropic) or choices (OpenAI)\n text?: string; // Extracted text for convenience\n error?: string;\n usage?: {\n input_tokens: number;\n output_tokens: number;\n };\n}\n\ninterface AnthropicBatchRequestItem {\n custom_id: string;\n params: {\n model: string;\n messages: unknown[];\n max_tokens: number;\n system?: unknown;\n tools?: unknown[];\n temperature?: number;\n };\n}\n\ninterface OpenAIBatchRequestItem {\n custom_id: string;\n method: \"POST\";\n url: \"/v1/chat/completions\";\n body: {\n model: string;\n messages: unknown[];\n max_tokens?: number;\n tools?: unknown[];\n temperature?: number;\n };\n}\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\nconst ANTHROPIC_BASE_URL = \"https://api.anthropic.com\";\nconst OPENAI_BASE_URL = \"https://api.openai.com\";\nconst POLL_INTERVAL_MS = 5_000;\nconst MAX_POLL_DURATION_MS = 10 * 60 * 1000; // 10 minutes\nconst ANTHROPIC_API_VERSION = \"2023-06-01\";\nconst ANTHROPIC_BATCH_BETA = \"message-batches-2024-09-24\";\n\n// ============================================================================\n// BATCH CLIENT\n// ============================================================================\n\nexport class BatchClient {\n private queue: BatchRequest[] = [];\n\n /**\n * Add a request to the queue. Call submitBatch() to send them all.\n */\n queueRequest(\n id: string,\n provider: \"anthropic\" | \"openai\",\n model: string,\n messages: unknown[],\n config: {\n system?: unknown;\n tools?: unknown[];\n max_tokens?: number;\n temperature?: number;\n } = {},\n ): void {\n this.queue.push({\n id,\n provider,\n model,\n messages,\n system: config.system,\n tools: config.tools,\n max_tokens: config.max_tokens ?? 4096,\n temperature: config.temperature,\n });\n log.info({ id, provider, model, queueSize: this.queue.length }, \"queued batch request\");\n }\n\n /**\n * Submit all queued requests as a batch job. Returns the batch ID.\n * Clears the queue after submission.\n */\n async submitBatch(): Promise<{ batchId: string; provider: \"anthropic\" | \"openai\"; count: number }> {\n if (this.queue.length === 0) {\n throw new Error(\"No requests queued for batch submission\");\n }\n\n // All requests in a batch must use the same provider\n const provider = this.queue[0].provider;\n const mixedProvider = this.queue.find(r => r.provider !== provider);\n if (mixedProvider) {\n throw new Error(`Mixed providers in batch: ${provider} and ${mixedProvider.provider}. Submit separate batches per provider.`);\n }\n\n const requests = [...this.queue];\n this.queue = [];\n\n if (provider === \"anthropic\") {\n return this.submitAnthropicBatch(requests);\n } else {\n return this.submitOpenAIBatch(requests);\n }\n }\n\n /**\n * Poll a batch until it completes. Returns a map of custom_id → result.\n */\n async pollBatch(\n batchId: string,\n provider: \"anthropic\" | \"openai\",\n ): Promise<Map<string, BatchResult>> {\n if (provider === \"anthropic\") {\n return this.pollAnthropicBatch(batchId);\n } else {\n return this.pollOpenAIBatch(batchId);\n }\n }\n\n /**\n * Convenience: queue a single request, submit it as a batch, poll until done, return result.\n * Best for workflow steps where you want batch pricing but only have one request.\n */\n async processSingle(\n id: string,\n provider: \"anthropic\" | \"openai\",\n model: string,\n messages: unknown[],\n config: {\n system?: unknown;\n tools?: unknown[];\n max_tokens?: number;\n temperature?: number;\n } = {},\n ): Promise<BatchResult> {\n this.queueRequest(id, provider, model, messages, config);\n const { batchId } = await this.submitBatch();\n const results = await this.pollBatch(batchId, provider);\n return results.get(id) || { id, success: false, error: \"Result not found in batch response\" };\n }\n\n /** Return the current queue size (for diagnostics). */\n get queueSize(): number {\n return this.queue.length;\n }\n\n // ==========================================================================\n // ANTHROPIC BATCH API\n // ==========================================================================\n\n private async submitAnthropicBatch(\n requests: BatchRequest[],\n ): Promise<{ batchId: string; provider: \"anthropic\"; count: number }> {\n const apiKey = process.env.ANTHROPIC_API_KEY;\n if (!apiKey) throw new Error(\"ANTHROPIC_API_KEY not set\");\n\n const batchRequests: AnthropicBatchRequestItem[] = requests.map(r => {\n const params: AnthropicBatchRequestItem[\"params\"] = {\n model: r.model,\n messages: r.messages,\n max_tokens: r.max_tokens,\n };\n if (r.system) params.system = r.system;\n if (r.tools?.length) {\n params.tools = r.tools.map((t: any) => ({\n name: t.name,\n description: typeof t.description === \"string\" ? t.description.slice(0, 4096) : \"\",\n input_schema: t.input_schema,\n }));\n }\n if (r.temperature !== undefined) params.temperature = r.temperature;\n return { custom_id: r.id, params };\n });\n\n const resp = await fetch(`${ANTHROPIC_BASE_URL}/v1/messages/batches`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-api-key\": apiKey,\n \"anthropic-version\": ANTHROPIC_API_VERSION,\n \"anthropic-beta\": ANTHROPIC_BATCH_BETA,\n },\n body: JSON.stringify({ requests: batchRequests }),\n });\n\n if (!resp.ok) {\n const errText = await resp.text();\n throw new Error(`Anthropic batch submit failed (${resp.status}): ${errText.substring(0, 500)}`);\n }\n\n const data = await resp.json() as { id: string; processing_status: string };\n log.info({ batchId: data.id, count: requests.length }, \"anthropic batch submitted\");\n return { batchId: data.id, provider: \"anthropic\", count: requests.length };\n }\n\n private async pollAnthropicBatch(batchId: string): Promise<Map<string, BatchResult>> {\n const apiKey = process.env.ANTHROPIC_API_KEY;\n if (!apiKey) throw new Error(\"ANTHROPIC_API_KEY not set\");\n\n const startTime = Date.now();\n\n while (Date.now() - startTime < MAX_POLL_DURATION_MS) {\n const resp = await fetch(`${ANTHROPIC_BASE_URL}/v1/messages/batches/${batchId}`, {\n headers: {\n \"x-api-key\": apiKey,\n \"anthropic-version\": ANTHROPIC_API_VERSION,\n \"anthropic-beta\": ANTHROPIC_BATCH_BETA,\n },\n });\n\n if (!resp.ok) {\n const errText = await resp.text();\n throw new Error(`Anthropic batch poll failed (${resp.status}): ${errText.substring(0, 500)}`);\n }\n\n const batch = await resp.json() as {\n id: string;\n processing_status: string;\n results_url?: string;\n request_counts: {\n processing: number;\n succeeded: number;\n errored: number;\n canceled: number;\n expired: number;\n };\n };\n\n log.info({\n batchId,\n status: batch.processing_status,\n counts: batch.request_counts,\n elapsed: Date.now() - startTime,\n }, \"anthropic batch poll\");\n\n if (batch.processing_status === \"ended\") {\n return this.fetchAnthropicResults(batchId);\n }\n\n if (batch.processing_status === \"canceling\" || batch.processing_status === \"canceled\") {\n throw new Error(`Anthropic batch ${batchId} was canceled`);\n }\n\n await sleep(POLL_INTERVAL_MS);\n }\n\n throw new Error(`Anthropic batch ${batchId} timed out after ${MAX_POLL_DURATION_MS / 1000}s`);\n }\n\n private async fetchAnthropicResults(batchId: string): Promise<Map<string, BatchResult>> {\n const apiKey = process.env.ANTHROPIC_API_KEY;\n if (!apiKey) throw new Error(\"ANTHROPIC_API_KEY not set\");\n\n const resp = await fetch(`${ANTHROPIC_BASE_URL}/v1/messages/batches/${batchId}/results`, {\n headers: {\n \"x-api-key\": apiKey,\n \"anthropic-version\": ANTHROPIC_API_VERSION,\n \"anthropic-beta\": ANTHROPIC_BATCH_BETA,\n },\n });\n\n if (!resp.ok) {\n const errText = await resp.text();\n throw new Error(`Anthropic batch results fetch failed (${resp.status}): ${errText.substring(0, 500)}`);\n }\n\n // Results come as JSONL (one JSON object per line)\n const text = await resp.text();\n const results = new Map<string, BatchResult>();\n\n for (const line of text.split(\"\\n\")) {\n if (!line.trim()) continue;\n try {\n const item = JSON.parse(line) as {\n custom_id: string;\n result: {\n type: \"succeeded\" | \"errored\" | \"canceled\" | \"expired\";\n message?: {\n content: Array<{ type: string; text?: string }>;\n usage: { input_tokens: number; output_tokens: number };\n };\n error?: { type: string; message: string };\n };\n };\n\n if (item.result.type === \"succeeded\" && item.result.message) {\n const textBlocks = item.result.message.content\n .filter((b: any) => b.type === \"text\" && b.text)\n .map((b: any) => b.text);\n results.set(item.custom_id, {\n id: item.custom_id,\n success: true,\n content: item.result.message.content,\n text: textBlocks.join(\"\\n\"),\n usage: item.result.message.usage,\n });\n } else {\n results.set(item.custom_id, {\n id: item.custom_id,\n success: false,\n error: item.result.error?.message || `Batch item ${item.result.type}`,\n });\n }\n } catch {\n // Skip malformed lines\n }\n }\n\n log.info({ batchId, resultCount: results.size }, \"anthropic batch results fetched\");\n return results;\n }\n\n // ==========================================================================\n // OPENAI BATCH API\n // ==========================================================================\n\n private async submitOpenAIBatch(\n requests: BatchRequest[],\n ): Promise<{ batchId: string; provider: \"openai\"; count: number }> {\n const apiKey = process.env.OPENAI_API_KEY;\n if (!apiKey) throw new Error(\"OPENAI_API_KEY not set\");\n\n // Step 1: Build JSONL content\n const lines = requests.map(r => {\n const body: OpenAIBatchRequestItem[\"body\"] = {\n model: r.model,\n messages: this.buildOpenAIMessages(r),\n max_tokens: r.max_tokens,\n };\n if (r.tools?.length) {\n body.tools = r.tools.map((t: any) => ({\n type: \"function\",\n function: {\n name: t.name,\n description: typeof t.description === \"string\" ? t.description.slice(0, 4096) : \"\",\n parameters: t.input_schema || {},\n },\n }));\n }\n if (r.temperature !== undefined) body.temperature = r.temperature;\n\n const item: OpenAIBatchRequestItem = {\n custom_id: r.id,\n method: \"POST\",\n url: \"/v1/chat/completions\",\n body,\n };\n return JSON.stringify(item);\n });\n const jsonlContent = lines.join(\"\\n\");\n\n // Step 2: Upload JSONL as a file\n const formData = new FormData();\n const blob = new Blob([jsonlContent], { type: \"application/jsonl\" });\n formData.append(\"file\", blob, \"batch_requests.jsonl\");\n formData.append(\"purpose\", \"batch\");\n\n const uploadResp = await fetch(`${OPENAI_BASE_URL}/v1/files`, {\n method: \"POST\",\n headers: { Authorization: `Bearer ${apiKey}` },\n body: formData,\n });\n\n if (!uploadResp.ok) {\n const errText = await uploadResp.text();\n throw new Error(`OpenAI file upload failed (${uploadResp.status}): ${errText.substring(0, 500)}`);\n }\n\n const fileData = await uploadResp.json() as { id: string };\n\n // Step 3: Create batch\n const batchResp = await fetch(`${OPENAI_BASE_URL}/v1/batches`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${apiKey}`,\n },\n body: JSON.stringify({\n input_file_id: fileData.id,\n endpoint: \"/v1/chat/completions\",\n completion_window: \"24h\",\n }),\n });\n\n if (!batchResp.ok) {\n const errText = await batchResp.text();\n throw new Error(`OpenAI batch create failed (${batchResp.status}): ${errText.substring(0, 500)}`);\n }\n\n const batch = await batchResp.json() as { id: string };\n log.info({ batchId: batch.id, fileId: fileData.id, count: requests.length }, \"openai batch submitted\");\n return { batchId: batch.id, provider: \"openai\", count: requests.length };\n }\n\n private async pollOpenAIBatch(batchId: string): Promise<Map<string, BatchResult>> {\n const apiKey = process.env.OPENAI_API_KEY;\n if (!apiKey) throw new Error(\"OPENAI_API_KEY not set\");\n\n const startTime = Date.now();\n\n while (Date.now() - startTime < MAX_POLL_DURATION_MS) {\n const resp = await fetch(`${OPENAI_BASE_URL}/v1/batches/${batchId}`, {\n headers: { Authorization: `Bearer ${apiKey}` },\n });\n\n if (!resp.ok) {\n const errText = await resp.text();\n throw new Error(`OpenAI batch poll failed (${resp.status}): ${errText.substring(0, 500)}`);\n }\n\n const batch = await resp.json() as {\n id: string;\n status: string;\n output_file_id?: string;\n error_file_id?: string;\n request_counts?: {\n total: number;\n completed: number;\n failed: number;\n };\n };\n\n log.info({\n batchId,\n status: batch.status,\n counts: batch.request_counts,\n elapsed: Date.now() - startTime,\n }, \"openai batch poll\");\n\n if (batch.status === \"completed\" && batch.output_file_id) {\n return this.fetchOpenAIResults(batch.output_file_id);\n }\n\n if (batch.status === \"failed\" || batch.status === \"cancelled\" || batch.status === \"expired\") {\n throw new Error(`OpenAI batch ${batchId} ended with status: ${batch.status}`);\n }\n\n await sleep(POLL_INTERVAL_MS);\n }\n\n throw new Error(`OpenAI batch ${batchId} timed out after ${MAX_POLL_DURATION_MS / 1000}s`);\n }\n\n private async fetchOpenAIResults(outputFileId: string): Promise<Map<string, BatchResult>> {\n const apiKey = process.env.OPENAI_API_KEY;\n if (!apiKey) throw new Error(\"OPENAI_API_KEY not set\");\n\n const resp = await fetch(`${OPENAI_BASE_URL}/v1/files/${outputFileId}/content`, {\n headers: { Authorization: `Bearer ${apiKey}` },\n });\n\n if (!resp.ok) {\n const errText = await resp.text();\n throw new Error(`OpenAI results fetch failed (${resp.status}): ${errText.substring(0, 500)}`);\n }\n\n const text = await resp.text();\n const results = new Map<string, BatchResult>();\n\n for (const line of text.split(\"\\n\")) {\n if (!line.trim()) continue;\n try {\n const item = JSON.parse(line) as {\n custom_id: string;\n response?: {\n status_code: number;\n body: {\n choices: Array<{\n message: { role: string; content: string | null; tool_calls?: unknown[] };\n }>;\n usage: { prompt_tokens: number; completion_tokens: number };\n };\n };\n error?: { message: string };\n };\n\n if (item.response && item.response.status_code === 200) {\n const choice = item.response.body.choices[0];\n results.set(item.custom_id, {\n id: item.custom_id,\n success: true,\n content: item.response.body.choices,\n text: choice?.message?.content || \"\",\n usage: {\n input_tokens: item.response.body.usage.prompt_tokens,\n output_tokens: item.response.body.usage.completion_tokens,\n },\n });\n } else {\n results.set(item.custom_id, {\n id: item.custom_id,\n success: false,\n error: item.error?.message || `HTTP ${item.response?.status_code || \"unknown\"}`,\n });\n }\n } catch {\n // Skip malformed lines\n }\n }\n\n log.info({ outputFileId, resultCount: results.size }, \"openai batch results fetched\");\n return results;\n }\n\n /**\n * Convert Anthropic-format messages to OpenAI chat format for batch requests.\n * Simplified conversion — handles the common patterns (text, system, tool_use/tool_result).\n */\n private buildOpenAIMessages(r: BatchRequest): unknown[] {\n const out: unknown[] = [];\n\n // System prompt → system message\n if (r.system) {\n if (typeof r.system === \"string\") {\n out.push({ role: \"system\", content: r.system });\n } else if (Array.isArray(r.system)) {\n const systemText = (r.system as Array<{ text?: string }>)\n .map(s => s.text || \"\")\n .filter(Boolean)\n .join(\"\\n\");\n if (systemText) out.push({ role: \"system\", content: systemText });\n }\n }\n\n // Convert messages\n for (const msg of r.messages as Array<{ role: string; content: unknown }>) {\n if (msg.role === \"user\") {\n if (typeof msg.content === \"string\") {\n out.push({ role: \"user\", content: msg.content });\n } else if (Array.isArray(msg.content)) {\n const parts: unknown[] = [];\n for (const block of msg.content as Array<Record<string, unknown>>) {\n if (block.type === \"text\" && block.text) {\n parts.push({ type: \"text\", text: block.text });\n } else if (block.type === \"tool_result\") {\n // OpenAI tool results are separate messages\n let output = \"\";\n if (typeof block.content === \"string\") output = block.content;\n else if (Array.isArray(block.content)) {\n output = (block.content as Array<{ type: string; text?: string }>)\n .filter(c => c.type === \"text\")\n .map(c => c.text)\n .join(\"\\n\");\n }\n out.push({\n role: \"tool\",\n tool_call_id: block.tool_use_id,\n content: output || \"(no output)\",\n });\n }\n }\n if (parts.length === 1 && (parts[0] as any).type === \"text\") {\n out.push({ role: \"user\", content: (parts[0] as any).text });\n } else if (parts.length > 0) {\n out.push({ role: \"user\", content: parts });\n }\n }\n } else if (msg.role === \"assistant\") {\n if (typeof msg.content === \"string\") {\n out.push({ role: \"assistant\", content: msg.content });\n } else if (Array.isArray(msg.content)) {\n let textContent = \"\";\n const toolCalls: unknown[] = [];\n\n for (const block of msg.content as Array<Record<string, unknown>>) {\n if (block.type === \"text\" && block.text) {\n textContent += block.text;\n } else if (block.type === \"tool_use\") {\n toolCalls.push({\n id: block.id,\n type: \"function\",\n function: {\n name: block.name,\n arguments: JSON.stringify(block.input || {}),\n },\n });\n }\n }\n\n const assistantMsg: Record<string, unknown> = { role: \"assistant\" };\n if (textContent) assistantMsg.content = textContent;\n if (toolCalls.length) assistantMsg.tool_calls = toolCalls;\n out.push(assistantMsg);\n }\n }\n }\n\n return out;\n }\n}\n\n// ============================================================================\n// HELPERS\n// ============================================================================\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\n// ============================================================================\n// SINGLETON EXPORT\n// ============================================================================\n\nexport const batchClient = new BatchClient();\n"],"mappings":"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","ignoreList":[]}
@@ -4,51 +4,58 @@
4
4
  * Same batching semantics (500ms / 100 records).
5
5
  * Also provides auditRowToSpan() to convert legacy row shapes to ClickHouseSpan.
6
6
  */
7
+
7
8
  import { randomUUID } from "node:crypto";
8
9
  import { getClickHouseClient } from "./clickhouse-client.js";
10
+
9
11
  // ============================================================================
10
12
  // Buffer config
11
13
  // ============================================================================
14
+
12
15
  const spanBuffer = [];
13
16
  const FLUSH_INTERVAL = 500; // ms
14
17
  const FLUSH_MAX = 100; // max records before force flush
15
18
  let flushTimer = null;
19
+
16
20
  // ============================================================================
17
21
  // Public API
18
22
  // ============================================================================
23
+
19
24
  /**
20
25
  * Queue a span for batch insert to ClickHouse.
21
26
  */
22
27
  export function queueSpan(span) {
23
- spanBuffer.push(span);
24
- if (spanBuffer.length >= FLUSH_MAX) {
25
- flushSpans();
26
- }
27
- else if (!flushTimer) {
28
- flushTimer = setTimeout(() => {
29
- flushTimer = null;
30
- flushSpans();
31
- }, FLUSH_INTERVAL);
32
- }
28
+ spanBuffer.push(span);
29
+ if (spanBuffer.length >= FLUSH_MAX) {
30
+ flushSpans();
31
+ } else if (!flushTimer) {
32
+ flushTimer = setTimeout(() => {
33
+ flushTimer = null;
34
+ flushSpans();
35
+ }, FLUSH_INTERVAL);
36
+ }
33
37
  }
38
+
34
39
  /**
35
40
  * Flush all buffered spans to ClickHouse.
36
41
  * Call this on server shutdown or at end of request processing.
37
42
  */
38
43
  export async function flushSpans() {
39
- if (flushTimer) {
40
- clearTimeout(flushTimer);
41
- flushTimer = null;
42
- }
43
- if (spanBuffer.length > 0) {
44
- const batch = spanBuffer.splice(0, spanBuffer.length);
45
- const client = getClickHouseClient();
46
- await client.insert("ai_spans", batch);
47
- }
44
+ if (flushTimer) {
45
+ clearTimeout(flushTimer);
46
+ flushTimer = null;
47
+ }
48
+ if (spanBuffer.length > 0) {
49
+ const batch = spanBuffer.splice(0, spanBuffer.length);
50
+ const client = getClickHouseClient();
51
+ await client.insert("ai_spans", batch);
52
+ }
48
53
  }
54
+
49
55
  // ============================================================================
50
56
  // Mapper: audit_log row → ClickHouseSpan
51
57
  // ============================================================================
58
+
52
59
  /**
53
60
  * Convert an existing audit_log row to a ClickHouseSpan.
54
61
  *
@@ -76,100 +83,107 @@ export async function flushSpans() {
76
83
  * ai_spans.details (remaining) → attributes (JSON string)
77
84
  */
78
85
  export function auditRowToSpan(row) {
79
- const details = (row.details || {});
80
- const now = new Date().toISOString();
81
- // Extract known fields from details that map to top-level ClickHouse columns
82
- const { input_tokens: detailInputTokens, output_tokens: detailOutputTokens, total_cost: detailCost, model: detailModel, "gen_ai.request.model": genAiModel, "gen_ai.usage.input_tokens": genAiInput, "gen_ai.usage.output_tokens": genAiOutput, "gen_ai.usage.cost": genAiCost, "gen_ai.usage.cache_read_tokens": genAiCacheRead, "gen_ai.usage.cache_creation_tokens": genAiCacheCreation, cache_read_tokens: detailCacheRead, cache_creation_tokens: detailCacheCreation, stop_reason: detailStopReason, turn_number: detailTurnNumber, turn_count: detailTurnCount, parent_conversation_id: detailParentConvId, input_bytes: detailInputBytes, output_bytes: detailOutputBytes, error_type: detailErrorType, retryable: detailRetryable, ...remainingDetails } = details;
83
- // Determine tool_name from resource_id when it's an mcp_tool
84
- const toolName = row.resource_type === "mcp_tool"
85
- ? row.resource_id || undefined
86
- : details.tool_name || undefined;
87
- // Compute token fields — prefer top-level, fall back to details
88
- const promptTokens = row.input_tokens
89
- || genAiInput
90
- || detailInputTokens
91
- || undefined;
92
- const completionTokens = row.output_tokens
93
- || genAiOutput
94
- || detailOutputTokens
95
- || undefined;
96
- const tokenCostUsd = row.total_cost
97
- || genAiCost
98
- || detailCost
99
- || undefined;
100
- const modelName = row.model
101
- || genAiModel
102
- || detailModel
103
- || undefined;
104
- return {
105
- span_id: row.span_id || randomHexId(),
106
- trace_id: row.trace_id || row.request_id || randomUUID(),
107
- store_id: row.store_id || undefined,
108
- service_name: row.service_name || "agent-server",
109
- operation_name: row.action || undefined,
110
- span_kind: row.span_kind || "INTERNAL",
111
- source: row.source || undefined,
112
- started_at: row.start_time || now,
113
- ended_at: row.end_time || now,
114
- duration_ms: row.duration_ms || 0,
115
- status_code: row.status_code || "OK",
116
- severity: row.severity || "info",
117
- model_name: modelName,
118
- prompt_tokens: promptTokens,
119
- completion_tokens: completionTokens,
120
- total_tokens: promptTokens && completionTokens ? promptTokens + completionTokens : undefined,
121
- token_cost_usd: tokenCostUsd,
122
- agent_id: row.resource_id || details.agent_id || undefined,
123
- conversation_id: row.conversation_id || undefined,
124
- tool_name: toolName,
125
- error_message: row.error_message || undefined,
126
- attributes: Object.keys(remainingDetails).length > 0 ? JSON.stringify(remainingDetails) : undefined,
127
- request_id: row.request_id || undefined,
128
- user_id: row.user_id || undefined,
129
- environment: "production",
130
- // Enriched columns (003_enrich_spans)
131
- user_email: row.user_email || undefined,
132
- error_type: row.error_type || detailErrorType || undefined,
133
- retryable: detailRetryable ? 1 : (row.severity === "error" ? 0 : undefined),
134
- resource_type: row.resource_type || undefined,
135
- cache_read_tokens: genAiCacheRead || detailCacheRead || undefined,
136
- cache_creation_tokens: genAiCacheCreation || detailCacheCreation || undefined,
137
- input_bytes: row.input_bytes || detailInputBytes || undefined,
138
- output_bytes: row.output_bytes || detailOutputBytes || undefined,
139
- stop_reason: row.stop_reason || detailStopReason || undefined,
140
- turn_number: row.turn_number || detailTurnNumber || detailTurnCount || undefined,
141
- parent_conversation_id: row.parent_conversation_id || detailParentConvId || undefined,
142
- };
86
+ const details = row.details || {};
87
+ const now = new Date().toISOString();
88
+
89
+ // Extract known fields from details that map to top-level ClickHouse columns
90
+ const {
91
+ input_tokens: detailInputTokens,
92
+ output_tokens: detailOutputTokens,
93
+ total_cost: detailCost,
94
+ model: detailModel,
95
+ "gen_ai.request.model": genAiModel,
96
+ "gen_ai.usage.input_tokens": genAiInput,
97
+ "gen_ai.usage.output_tokens": genAiOutput,
98
+ "gen_ai.usage.cost": genAiCost,
99
+ "gen_ai.usage.cache_read_tokens": genAiCacheRead,
100
+ "gen_ai.usage.cache_creation_tokens": genAiCacheCreation,
101
+ cache_read_tokens: detailCacheRead,
102
+ cache_creation_tokens: detailCacheCreation,
103
+ stop_reason: detailStopReason,
104
+ turn_number: detailTurnNumber,
105
+ turn_count: detailTurnCount,
106
+ parent_conversation_id: detailParentConvId,
107
+ input_bytes: detailInputBytes,
108
+ output_bytes: detailOutputBytes,
109
+ error_type: detailErrorType,
110
+ retryable: detailRetryable,
111
+ ...remainingDetails
112
+ } = details;
113
+
114
+ // Determine tool_name from resource_id when it's an mcp_tool
115
+ const toolName = row.resource_type === "mcp_tool" ? row.resource_id || undefined : details.tool_name || undefined;
116
+
117
+ // Compute token fields — prefer top-level, fall back to details.
118
+ // Use ?? (not ||) for numeric fields so that 0 is not treated as falsy.
119
+ const promptTokens = row.input_tokens ?? genAiInput ?? detailInputTokens ?? undefined;
120
+ const completionTokens = row.output_tokens ?? genAiOutput ?? detailOutputTokens ?? undefined;
121
+ const tokenCostUsd = row.total_cost ?? genAiCost ?? detailCost ?? undefined;
122
+ const modelName = row.model || genAiModel || detailModel || undefined;
123
+ return {
124
+ span_id: row.span_id || randomHexId(),
125
+ trace_id: row.trace_id || row.request_id || randomUUID(),
126
+ store_id: row.store_id || undefined,
127
+ service_name: row.service_name || "agent-server",
128
+ operation_name: row.action || undefined,
129
+ span_kind: row.span_kind || "INTERNAL",
130
+ source: row.source || undefined,
131
+ started_at: row.start_time || now,
132
+ ended_at: row.end_time || now,
133
+ duration_ms: row.duration_ms ?? 0,
134
+ status_code: row.status_code || "OK",
135
+ severity: row.severity || "info",
136
+ model_name: modelName,
137
+ prompt_tokens: promptTokens,
138
+ completion_tokens: completionTokens,
139
+ total_tokens: promptTokens && completionTokens ? promptTokens + completionTokens : undefined,
140
+ token_cost_usd: tokenCostUsd,
141
+ agent_id: row.resource_id || details.agent_id || undefined,
142
+ conversation_id: row.conversation_id || undefined,
143
+ tool_name: toolName,
144
+ error_message: row.error_message || undefined,
145
+ attributes: Object.keys(remainingDetails).length > 0 ? JSON.stringify(remainingDetails) : undefined,
146
+ request_id: row.request_id || undefined,
147
+ user_id: row.user_id || undefined,
148
+ environment: "production",
149
+ // Enriched columns (003_enrich_spans)
150
+ user_email: row.user_email || undefined,
151
+ error_type: row.error_type || detailErrorType || undefined,
152
+ retryable: detailRetryable ? 1 : row.severity === "error" ? 0 : undefined,
153
+ resource_type: row.resource_type || undefined,
154
+ cache_read_tokens: genAiCacheRead ?? detailCacheRead ?? undefined,
155
+ cache_creation_tokens: genAiCacheCreation ?? detailCacheCreation ?? undefined,
156
+ input_bytes: row.input_bytes ?? detailInputBytes ?? undefined,
157
+ output_bytes: row.output_bytes ?? detailOutputBytes ?? undefined,
158
+ stop_reason: row.stop_reason || detailStopReason || undefined,
159
+ turn_number: row.turn_number ?? detailTurnNumber ?? detailTurnCount ?? undefined,
160
+ parent_conversation_id: row.parent_conversation_id || detailParentConvId || undefined
161
+ };
143
162
  }
163
+
144
164
  // ============================================================================
145
165
  // Helpers
146
166
  // ============================================================================
167
+
147
168
  /**
148
169
  * Classify an error message into a standard error_type category.
149
170
  * Used by auditRowToSpan and callers to populate the error_type column.
150
171
  */
151
172
  export function classifyErrorType(errorMessage) {
152
- if (!errorMessage)
153
- return undefined;
154
- const lower = errorMessage.toLowerCase();
155
- if (lower.includes("rate limit") || lower.includes("429"))
156
- return "rate_limit";
157
- if (lower.includes("auth") || lower.includes("401") || lower.includes("403"))
158
- return "auth";
159
- if (lower.includes("timeout") || lower.includes("timed out"))
160
- return "timeout";
161
- if (lower.includes("validation") || lower.includes("invalid"))
162
- return "validation";
163
- if (lower.includes("not found") || lower.includes("404"))
164
- return "not_found";
165
- if (lower.includes("overloaded") || lower.includes("529"))
166
- return "overloaded";
167
- if (lower.includes("circuit breaker"))
168
- return "circuit_breaker";
169
- return undefined;
173
+ if (!errorMessage) return undefined;
174
+ const lower = errorMessage.toLowerCase();
175
+ if (lower.includes("rate limit") || lower.includes("429")) return "rate_limit";
176
+ if (lower.includes("auth") || lower.includes("401") || lower.includes("403")) return "auth";
177
+ if (lower.includes("timeout") || lower.includes("timed out")) return "timeout";
178
+ if (lower.includes("validation") || lower.includes("invalid")) return "validation";
179
+ if (lower.includes("not found") || lower.includes("404")) return "not_found";
180
+ if (lower.includes("overloaded") || lower.includes("529")) return "overloaded";
181
+ if (lower.includes("circuit breaker")) return "circuit_breaker";
182
+ return undefined;
170
183
  }
171
184
  function randomHexId() {
172
- const bytes = new Uint8Array(8);
173
- crypto.getRandomValues(bytes);
174
- return Array.from(bytes).map(b => b.toString(16).padStart(2, "0")).join("");
185
+ const bytes = new Uint8Array(8);
186
+ crypto.getRandomValues(bytes);
187
+ return Array.from(bytes).map(b => b.toString(16).padStart(2, "0")).join("");
175
188
  }
189
+ //# sourceMappingURL=clickhouse-buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clickhouse-buffer.js","names":["randomUUID","getClickHouseClient","spanBuffer","FLUSH_INTERVAL","FLUSH_MAX","flushTimer","queueSpan","span","push","length","flushSpans","setTimeout","clearTimeout","batch","splice","client","insert","auditRowToSpan","row","details","now","Date","toISOString","input_tokens","detailInputTokens","output_tokens","detailOutputTokens","total_cost","detailCost","model","detailModel","genAiModel","genAiInput","genAiOutput","genAiCost","genAiCacheRead","genAiCacheCreation","cache_read_tokens","detailCacheRead","cache_creation_tokens","detailCacheCreation","stop_reason","detailStopReason","turn_number","detailTurnNumber","turn_count","detailTurnCount","parent_conversation_id","detailParentConvId","input_bytes","detailInputBytes","output_bytes","detailOutputBytes","error_type","detailErrorType","retryable","detailRetryable","remainingDetails","toolName","resource_type","resource_id","undefined","tool_name","promptTokens","completionTokens","tokenCostUsd","modelName","span_id","randomHexId","trace_id","request_id","store_id","service_name","operation_name","action","span_kind","source","started_at","start_time","ended_at","end_time","duration_ms","status_code","severity","model_name","prompt_tokens","completion_tokens","total_tokens","token_cost_usd","agent_id","conversation_id","error_message","attributes","Object","keys","JSON","stringify","user_id","environment","user_email","classifyErrorType","errorMessage","lower","toLowerCase","includes","bytes","Uint8Array","crypto","getRandomValues","Array","from","map","b","toString","padStart","join"],"sources":["../../../src/server/lib/clickhouse-buffer.ts"],"sourcesContent":["/**\n * ClickHouse Span Buffer — batches spans for bulk insert to ClickHouse ai_spans.\n *\n * Same batching semantics (500ms / 100 records).\n * Also provides auditRowToSpan() to convert legacy row shapes to ClickHouseSpan.\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport { type ClickHouseSpan, getClickHouseClient } from \"./clickhouse-client.js\";\n\n// ============================================================================\n// Buffer config\n// ============================================================================\n\nconst spanBuffer: ClickHouseSpan[] = [];\nconst FLUSH_INTERVAL = 500; // ms\nconst FLUSH_MAX = 100; // max records before force flush\nlet flushTimer: ReturnType<typeof setTimeout> | null = null;\n\n// ============================================================================\n// Public API\n// ============================================================================\n\n/**\n * Queue a span for batch insert to ClickHouse.\n */\nexport function queueSpan(span: ClickHouseSpan): void {\n spanBuffer.push(span);\n\n if (spanBuffer.length >= FLUSH_MAX) {\n flushSpans();\n } else if (!flushTimer) {\n flushTimer = setTimeout(() => {\n flushTimer = null;\n flushSpans();\n }, FLUSH_INTERVAL);\n }\n}\n\n/**\n * Flush all buffered spans to ClickHouse.\n * Call this on server shutdown or at end of request processing.\n */\nexport async function flushSpans(): Promise<void> {\n if (flushTimer) {\n clearTimeout(flushTimer);\n flushTimer = null;\n }\n\n if (spanBuffer.length > 0) {\n const batch = spanBuffer.splice(0, spanBuffer.length);\n const client = getClickHouseClient();\n await client.insert(\"ai_spans\", batch as unknown as Record<string, unknown>[]);\n }\n}\n\n// ============================================================================\n// Mapper: audit_log row → ClickHouseSpan\n// ============================================================================\n\n/**\n * Convert an existing audit_log row to a ClickHouseSpan.\n *\n * Field mapping:\n * ai_spans.action → operation_name\n * ai_spans.source → source\n * ai_spans.severity → severity\n * ai_spans.store_id → store_id\n * ai_spans.duration_ms → duration_ms\n * ai_spans.error_message → error_message\n * ai_spans.trace_id → trace_id\n * ai_spans.span_id → span_id\n * ai_spans.span_kind → span_kind\n * ai_spans.service_name → service_name\n * ai_spans.status_code → status_code\n * ai_spans.start_time → started_at\n * ai_spans.end_time → ended_at\n * ai_spans.conversation_id → conversation_id\n * ai_spans.user_id → user_id\n * ai_spans.input_tokens → prompt_tokens\n * ai_spans.output_tokens → completion_tokens\n * ai_spans.total_cost → token_cost_usd\n * ai_spans.model → model_name\n * ai_spans.resource_id (mcp_tool) → tool_name\n * ai_spans.details (remaining) → attributes (JSON string)\n */\nexport function auditRowToSpan(row: Record<string, unknown>): ClickHouseSpan {\n const details = (row.details || {}) as Record<string, unknown>;\n const now = new Date().toISOString();\n\n // Extract known fields from details that map to top-level ClickHouse columns\n const {\n input_tokens: detailInputTokens,\n output_tokens: detailOutputTokens,\n total_cost: detailCost,\n model: detailModel,\n \"gen_ai.request.model\": genAiModel,\n \"gen_ai.usage.input_tokens\": genAiInput,\n \"gen_ai.usage.output_tokens\": genAiOutput,\n \"gen_ai.usage.cost\": genAiCost,\n \"gen_ai.usage.cache_read_tokens\": genAiCacheRead,\n \"gen_ai.usage.cache_creation_tokens\": genAiCacheCreation,\n cache_read_tokens: detailCacheRead,\n cache_creation_tokens: detailCacheCreation,\n stop_reason: detailStopReason,\n turn_number: detailTurnNumber,\n turn_count: detailTurnCount,\n parent_conversation_id: detailParentConvId,\n input_bytes: detailInputBytes,\n output_bytes: detailOutputBytes,\n error_type: detailErrorType,\n retryable: detailRetryable,\n ...remainingDetails\n } = details;\n\n // Determine tool_name from resource_id when it's an mcp_tool\n const toolName = row.resource_type === \"mcp_tool\"\n ? (row.resource_id as string) || undefined\n : (details.tool_name as string) || undefined;\n\n // Compute token fields — prefer top-level, fall back to details.\n // Use ?? (not ||) for numeric fields so that 0 is not treated as falsy.\n const promptTokens = (row.input_tokens as number)\n ?? (genAiInput as number)\n ?? (detailInputTokens as number)\n ?? undefined;\n const completionTokens = (row.output_tokens as number)\n ?? (genAiOutput as number)\n ?? (detailOutputTokens as number)\n ?? undefined;\n const tokenCostUsd = (row.total_cost as number)\n ?? (genAiCost as number)\n ?? (detailCost as number)\n ?? undefined;\n const modelName = (row.model as string)\n || (genAiModel as string)\n || (detailModel as string)\n || undefined;\n\n return {\n span_id: (row.span_id as string) || randomHexId(),\n trace_id: (row.trace_id as string) || (row.request_id as string) || randomUUID(),\n store_id: (row.store_id as string) || undefined,\n service_name: (row.service_name as string) || \"agent-server\",\n operation_name: (row.action as string) || undefined,\n span_kind: (row.span_kind as string) || \"INTERNAL\",\n source: (row.source as string) || undefined,\n started_at: (row.start_time as string) || now,\n ended_at: (row.end_time as string) || now,\n duration_ms: (row.duration_ms as number) ?? 0,\n status_code: (row.status_code as string) || \"OK\",\n severity: (row.severity as string) || \"info\",\n model_name: modelName,\n prompt_tokens: promptTokens,\n completion_tokens: completionTokens,\n total_tokens: promptTokens && completionTokens ? promptTokens + completionTokens : undefined,\n token_cost_usd: tokenCostUsd,\n agent_id: (row.resource_id as string) || (details.agent_id as string) || undefined,\n conversation_id: (row.conversation_id as string) || undefined,\n tool_name: toolName,\n error_message: (row.error_message as string) || undefined,\n attributes: Object.keys(remainingDetails).length > 0 ? JSON.stringify(remainingDetails) : undefined,\n request_id: (row.request_id as string) || undefined,\n user_id: (row.user_id as string) || undefined,\n environment: \"production\",\n // Enriched columns (003_enrich_spans)\n user_email: (row.user_email as string) || undefined,\n error_type: (row.error_type as string) || (detailErrorType as string) || undefined,\n retryable: (detailRetryable as boolean) ? 1 : (row.severity === \"error\" ? 0 : undefined),\n resource_type: (row.resource_type as string) || undefined,\n cache_read_tokens: (genAiCacheRead as number) ?? (detailCacheRead as number) ?? undefined,\n cache_creation_tokens: (genAiCacheCreation as number) ?? (detailCacheCreation as number) ?? undefined,\n input_bytes: (row.input_bytes as number) ?? (detailInputBytes as number) ?? undefined,\n output_bytes: (row.output_bytes as number) ?? (detailOutputBytes as number) ?? undefined,\n stop_reason: (row.stop_reason as string) || (detailStopReason as string) || undefined,\n turn_number: (row.turn_number as number) ?? (detailTurnNumber as number) ?? (detailTurnCount as number) ?? undefined,\n parent_conversation_id: (row.parent_conversation_id as string) || (detailParentConvId as string) || undefined,\n };\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/**\n * Classify an error message into a standard error_type category.\n * Used by auditRowToSpan and callers to populate the error_type column.\n */\nexport function classifyErrorType(errorMessage: string | null | undefined): string | undefined {\n if (!errorMessage) return undefined;\n const lower = errorMessage.toLowerCase();\n if (lower.includes(\"rate limit\") || lower.includes(\"429\")) return \"rate_limit\";\n if (lower.includes(\"auth\") || lower.includes(\"401\") || lower.includes(\"403\")) return \"auth\";\n if (lower.includes(\"timeout\") || lower.includes(\"timed out\")) return \"timeout\";\n if (lower.includes(\"validation\") || lower.includes(\"invalid\")) return \"validation\";\n if (lower.includes(\"not found\") || lower.includes(\"404\")) return \"not_found\";\n if (lower.includes(\"overloaded\") || lower.includes(\"529\")) return \"overloaded\";\n if (lower.includes(\"circuit breaker\")) return \"circuit_breaker\";\n return undefined;\n}\n\nfunction randomHexId(): string {\n const bytes = new Uint8Array(8);\n crypto.getRandomValues(bytes);\n return Array.from(bytes).map(b => b.toString(16).padStart(2, \"0\")).join(\"\");\n}\n"],"mappings":"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","ignoreList":[]}