whale-code 6.5.5 → 6.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (847) hide show
  1. package/README.md +39 -31
  2. package/bin/{swagmanager-mcp.js → whale-code.js} +17 -2
  3. package/dist/cli/app.js +148 -72
  4. package/dist/cli/app.js.map +1 -0
  5. package/dist/cli/chat/AgentSelector.js +105 -10
  6. package/dist/cli/chat/AgentSelector.js.map +1 -0
  7. package/dist/cli/chat/ChatApp.d.ts +31 -0
  8. package/dist/cli/chat/ChatApp.js +539 -286
  9. package/dist/cli/chat/ChatApp.js.map +1 -0
  10. package/dist/cli/chat/ChatInput.js +1088 -770
  11. package/dist/cli/chat/ChatInput.js.map +1 -0
  12. package/dist/cli/chat/MarkdownText.js +39 -14
  13. package/dist/cli/chat/MarkdownText.js.map +1 -0
  14. package/dist/cli/chat/MemoryManager.js +181 -46
  15. package/dist/cli/chat/MemoryManager.js.map +1 -0
  16. package/dist/cli/chat/MessageList.d.ts +2 -3
  17. package/dist/cli/chat/MessageList.js +186 -45
  18. package/dist/cli/chat/MessageList.js.map +1 -0
  19. package/dist/cli/chat/ModelSelector.js +282 -63
  20. package/dist/cli/chat/ModelSelector.js.map +1 -0
  21. package/dist/cli/chat/NodeManager.js +165 -75
  22. package/dist/cli/chat/NodeManager.js.map +1 -0
  23. package/dist/cli/chat/NodeSelector.js +171 -30
  24. package/dist/cli/chat/NodeSelector.js.map +1 -0
  25. package/dist/cli/chat/PlanApproval.js +281 -57
  26. package/dist/cli/chat/PlanApproval.js.map +1 -0
  27. package/dist/cli/chat/RewindViewer.js +559 -144
  28. package/dist/cli/chat/RewindViewer.js.map +1 -0
  29. package/dist/cli/chat/SessionManager.js +137 -30
  30. package/dist/cli/chat/SessionManager.js.map +1 -0
  31. package/dist/cli/chat/SlashMenu.js +293 -164
  32. package/dist/cli/chat/SlashMenu.js.map +1 -0
  33. package/dist/cli/chat/StatusBar.js +172 -9
  34. package/dist/cli/chat/StatusBar.js.map +1 -0
  35. package/dist/cli/chat/StoreSelector.js +147 -18
  36. package/dist/cli/chat/StoreSelector.js.map +1 -0
  37. package/dist/cli/chat/StreamingText.d.ts +1 -5
  38. package/dist/cli/chat/StreamingText.js +22 -7
  39. package/dist/cli/chat/StreamingText.js.map +1 -0
  40. package/dist/cli/chat/SubagentPanel.d.ts +1 -2
  41. package/dist/cli/chat/SubagentPanel.js +612 -72
  42. package/dist/cli/chat/SubagentPanel.js.map +1 -0
  43. package/dist/cli/chat/TeamPanel.d.ts +1 -0
  44. package/dist/cli/chat/TeamPanel.js +230 -30
  45. package/dist/cli/chat/TeamPanel.js.map +1 -0
  46. package/dist/cli/chat/ThemeSelector.js +84 -24
  47. package/dist/cli/chat/ThemeSelector.js.map +1 -0
  48. package/dist/cli/chat/ToolIndicator.js +1476 -371
  49. package/dist/cli/chat/ToolIndicator.js.map +1 -0
  50. package/dist/cli/chat/hooks/useAgentLoop.d.ts +1 -0
  51. package/dist/cli/chat/hooks/useAgentLoop.js +481 -367
  52. package/dist/cli/chat/hooks/useAgentLoop.js.map +1 -0
  53. package/dist/cli/chat/hooks/useSlashCommands.d.ts +3 -14
  54. package/dist/cli/chat/hooks/useSlashCommands.js +744 -572
  55. package/dist/cli/chat/hooks/useSlashCommands.js.map +1 -0
  56. package/dist/cli/commands/config-cmd.js +56 -57
  57. package/dist/cli/commands/config-cmd.js.map +1 -0
  58. package/dist/cli/commands/db.js +184 -169
  59. package/dist/cli/commands/db.js.map +1 -0
  60. package/dist/cli/commands/doctor.js +212 -122
  61. package/dist/cli/commands/doctor.js.map +1 -0
  62. package/dist/cli/commands/init.js +211 -244
  63. package/dist/cli/commands/init.js.map +1 -0
  64. package/dist/cli/commands/mcp.js +127 -122
  65. package/dist/cli/commands/mcp.js.map +1 -0
  66. package/dist/cli/login/LoginApp.js +355 -141
  67. package/dist/cli/login/LoginApp.js.map +1 -0
  68. package/dist/cli/print-mode.js +196 -177
  69. package/dist/cli/print-mode.js.map +1 -0
  70. package/dist/cli/serve-mode.js +615 -530
  71. package/dist/cli/serve-mode.js.map +1 -0
  72. package/dist/cli/services/agent-config.d.ts +5 -1
  73. package/dist/cli/services/agent-config.js +66 -36
  74. package/dist/cli/services/agent-config.js.map +1 -0
  75. package/dist/cli/services/agent-definitions.d.ts +4 -1
  76. package/dist/cli/services/agent-definitions.js +97 -56
  77. package/dist/cli/services/agent-definitions.js.map +1 -0
  78. package/dist/cli/services/agent-events.js +225 -162
  79. package/dist/cli/services/agent-events.js.map +1 -0
  80. package/dist/cli/services/agent-loop.js +976 -688
  81. package/dist/cli/services/agent-loop.js.map +1 -0
  82. package/dist/cli/services/agent-worker-base.d.ts +35 -5
  83. package/dist/cli/services/agent-worker-base.js +337 -153
  84. package/dist/cli/services/agent-worker-base.js.map +1 -0
  85. package/dist/cli/services/api-retry.js +69 -64
  86. package/dist/cli/services/api-retry.js.map +1 -0
  87. package/dist/cli/services/auth-service.d.ts +3 -3
  88. package/dist/cli/services/auth-service.js +209 -132
  89. package/dist/cli/services/auth-service.js.map +1 -0
  90. package/dist/cli/services/background-processes.js +343 -267
  91. package/dist/cli/services/background-processes.js.map +1 -0
  92. package/dist/cli/services/browser-auth.d.ts +2 -2
  93. package/dist/cli/services/browser-auth.js +159 -118
  94. package/dist/cli/services/browser-auth.js.map +1 -0
  95. package/dist/cli/services/claude-md-loader.js +40 -36
  96. package/dist/cli/services/claude-md-loader.js.map +1 -0
  97. package/dist/cli/services/config-store.d.ts +9 -4
  98. package/dist/cli/services/config-store.js +164 -117
  99. package/dist/cli/services/config-store.js.map +1 -0
  100. package/dist/cli/services/debug-log.d.ts +1 -1
  101. package/dist/cli/services/debug-log.js +34 -35
  102. package/dist/cli/services/debug-log.js.map +1 -0
  103. package/dist/cli/services/env-detect.d.ts +7 -0
  104. package/dist/cli/services/env-detect.js +9 -0
  105. package/dist/cli/services/env-detect.js.map +1 -0
  106. package/dist/cli/services/error-logger.js +187 -169
  107. package/dist/cli/services/error-logger.js.map +1 -0
  108. package/dist/cli/services/file-history.d.ts +1 -1
  109. package/dist/cli/services/file-history.js +50 -54
  110. package/dist/cli/services/file-history.js.map +1 -0
  111. package/dist/cli/services/format-server-response.js +332 -372
  112. package/dist/cli/services/format-server-response.js.map +1 -0
  113. package/dist/cli/services/git-context.js +61 -45
  114. package/dist/cli/services/git-context.js.map +1 -0
  115. package/dist/cli/services/hooks.d.ts +2 -2
  116. package/dist/cli/services/hooks.js +195 -180
  117. package/dist/cli/services/hooks.js.map +1 -0
  118. package/dist/cli/services/ink-incremental.d.ts +19 -0
  119. package/dist/cli/services/ink-incremental.js +59 -0
  120. package/dist/cli/services/ink-incremental.js.map +1 -0
  121. package/dist/cli/services/ink-resize-fix.js +54 -44
  122. package/dist/cli/services/ink-resize-fix.js.map +1 -0
  123. package/dist/cli/services/ink-sync-output.d.ts +12 -0
  124. package/dist/cli/services/ink-sync-output.js +16 -0
  125. package/dist/cli/services/ink-sync-output.js.map +1 -0
  126. package/dist/cli/services/interactive-tools.js +268 -212
  127. package/dist/cli/services/interactive-tools.js.map +1 -0
  128. package/dist/cli/services/keybinding-manager.d.ts +11 -1
  129. package/dist/cli/services/keybinding-manager.js +126 -63
  130. package/dist/cli/services/keybinding-manager.js.map +1 -0
  131. package/dist/cli/services/local-tools.d.ts +1 -1
  132. package/dist/cli/services/local-tools.js +939 -656
  133. package/dist/cli/services/local-tools.js.map +1 -0
  134. package/dist/cli/services/lsp-manager.js +757 -594
  135. package/dist/cli/services/lsp-manager.js.map +1 -0
  136. package/dist/cli/services/mcp-client.d.ts +1 -1
  137. package/dist/cli/services/mcp-client.js +173 -134
  138. package/dist/cli/services/mcp-client.js.map +1 -0
  139. package/dist/cli/services/memory-manager.js +53 -40
  140. package/dist/cli/services/memory-manager.js.map +1 -0
  141. package/dist/cli/services/model-manager.js +55 -40
  142. package/dist/cli/services/model-manager.js.map +1 -0
  143. package/dist/cli/services/model-router.js +115 -85
  144. package/dist/cli/services/model-router.js.map +1 -0
  145. package/dist/cli/services/paths.d.ts +30 -0
  146. package/dist/cli/services/paths.js +81 -0
  147. package/dist/cli/services/paths.js.map +1 -0
  148. package/dist/cli/services/permission-modes.js +32 -25
  149. package/dist/cli/services/permission-modes.js.map +1 -0
  150. package/dist/cli/services/rewind.js +182 -168
  151. package/dist/cli/services/rewind.js.map +1 -0
  152. package/dist/cli/services/ripgrep.js +115 -115
  153. package/dist/cli/services/ripgrep.js.map +1 -0
  154. package/dist/cli/services/sandbox.d.ts +1 -1
  155. package/dist/cli/services/sandbox.js +58 -37
  156. package/dist/cli/services/sandbox.js.map +1 -0
  157. package/dist/cli/services/server-tools.js +738 -565
  158. package/dist/cli/services/server-tools.js.map +1 -0
  159. package/dist/cli/services/session-persistence.js +69 -74
  160. package/dist/cli/services/session-persistence.js.map +1 -0
  161. package/dist/cli/services/subagent-worker.js +42 -27
  162. package/dist/cli/services/subagent-worker.js.map +1 -0
  163. package/dist/cli/services/subagent.d.ts +2 -0
  164. package/dist/cli/services/subagent.js +605 -433
  165. package/dist/cli/services/subagent.js.map +1 -0
  166. package/dist/cli/services/system-prompt.js +86 -78
  167. package/dist/cli/services/system-prompt.js.map +1 -0
  168. package/dist/cli/services/task-decomposer.d.ts +1 -1
  169. package/dist/cli/services/task-decomposer.js +172 -139
  170. package/dist/cli/services/task-decomposer.js.map +1 -0
  171. package/dist/cli/services/team-lead.d.ts +2 -2
  172. package/dist/cli/services/team-lead.js +727 -529
  173. package/dist/cli/services/team-lead.js.map +1 -0
  174. package/dist/cli/services/team-state.js +319 -319
  175. package/dist/cli/services/team-state.js.map +1 -0
  176. package/dist/cli/services/teammate.d.ts +8 -2
  177. package/dist/cli/services/teammate.js +857 -569
  178. package/dist/cli/services/teammate.js.map +1 -0
  179. package/dist/cli/services/telemetry.d.ts +6 -1
  180. package/dist/cli/services/telemetry.js +180 -157
  181. package/dist/cli/services/telemetry.js.map +1 -0
  182. package/dist/cli/services/tools/agent-tools.d.ts +3 -3
  183. package/dist/cli/services/tools/agent-tools.js +480 -322
  184. package/dist/cli/services/tools/agent-tools.js.map +1 -0
  185. package/dist/cli/services/tools/file-ops.js +563 -450
  186. package/dist/cli/services/tools/file-ops.js.map +1 -0
  187. package/dist/cli/services/tools/search-tools.js +231 -162
  188. package/dist/cli/services/tools/search-tools.js.map +1 -0
  189. package/dist/cli/services/tools/shell-exec.js +197 -151
  190. package/dist/cli/services/tools/shell-exec.js.map +1 -0
  191. package/dist/cli/services/tools/task-manager.js +206 -173
  192. package/dist/cli/services/tools/task-manager.js.map +1 -0
  193. package/dist/cli/services/tools/web-tools.js +388 -341
  194. package/dist/cli/services/tools/web-tools.js.map +1 -0
  195. package/dist/cli/setup/SetupApp.d.ts +2 -2
  196. package/dist/cli/setup/SetupApp.js +608 -160
  197. package/dist/cli/setup/SetupApp.js.map +1 -0
  198. package/dist/cli/shared/ErrorBoundary.d.ts +22 -0
  199. package/dist/cli/shared/ErrorBoundary.js +73 -0
  200. package/dist/cli/shared/ErrorBoundary.js.map +1 -0
  201. package/dist/cli/shared/MatrixIntro.js +66 -69
  202. package/dist/cli/shared/MatrixIntro.js.map +1 -0
  203. package/dist/cli/shared/SpinnerSlot.d.ts +14 -0
  204. package/dist/cli/shared/SpinnerSlot.js +63 -0
  205. package/dist/cli/shared/SpinnerSlot.js.map +1 -0
  206. package/dist/cli/shared/Theme.d.ts +1 -1
  207. package/dist/cli/shared/Theme.js +136 -92
  208. package/dist/cli/shared/Theme.js.map +1 -0
  209. package/dist/cli/shared/WhaleBanner.js +99 -11
  210. package/dist/cli/shared/WhaleBanner.js.map +1 -0
  211. package/dist/cli/shared/markdown.d.ts +3 -1
  212. package/dist/cli/shared/markdown.js +736 -674
  213. package/dist/cli/shared/markdown.js.map +1 -0
  214. package/dist/cli/shared/marked-terminal.d.js +2 -0
  215. package/dist/cli/shared/marked-terminal.d.js.map +1 -0
  216. package/dist/cli/shared/theme-manager.js +99 -90
  217. package/dist/cli/shared/theme-manager.js.map +1 -0
  218. package/dist/cli/shared/theme-presets.js +256 -254
  219. package/dist/cli/shared/theme-presets.js.map +1 -0
  220. package/dist/cli/status/StatusApp.js +235 -86
  221. package/dist/cli/status/StatusApp.js.map +1 -0
  222. package/dist/cli/stores/StoreApp.js +275 -65
  223. package/dist/cli/stores/StoreApp.js.map +1 -0
  224. package/dist/index.d.ts +2 -2
  225. package/dist/index.js +509 -396
  226. package/dist/index.js.map +1 -0
  227. package/dist/local-agent/connection.d.ts +2 -2
  228. package/dist/local-agent/connection.js +352 -293
  229. package/dist/local-agent/connection.js.map +1 -0
  230. package/dist/local-agent/discovery.js +259 -122
  231. package/dist/local-agent/discovery.js.map +1 -0
  232. package/dist/local-agent/executor.js +216 -193
  233. package/dist/local-agent/executor.js.map +1 -0
  234. package/dist/local-agent/index.d.ts +2 -2
  235. package/dist/local-agent/index.js +156 -156
  236. package/dist/local-agent/index.js.map +1 -0
  237. package/dist/node/adapters/base.js +18 -8
  238. package/dist/node/adapters/base.js.map +1 -0
  239. package/dist/node/adapters/discord.js +286 -275
  240. package/dist/node/adapters/discord.js.map +1 -0
  241. package/dist/node/adapters/email.js +189 -202
  242. package/dist/node/adapters/email.js.map +1 -0
  243. package/dist/node/adapters/imessage.js +145 -142
  244. package/dist/node/adapters/imessage.js.map +1 -0
  245. package/dist/node/adapters/slack.js +237 -236
  246. package/dist/node/adapters/slack.js.map +1 -0
  247. package/dist/node/adapters/sms.js +149 -151
  248. package/dist/node/adapters/sms.js.map +1 -0
  249. package/dist/node/adapters/telegram.js +88 -92
  250. package/dist/node/adapters/telegram.js.map +1 -0
  251. package/dist/node/adapters/webchat.js +160 -136
  252. package/dist/node/adapters/webchat.js.map +1 -0
  253. package/dist/node/adapters/whatsapp.js +212 -215
  254. package/dist/node/adapters/whatsapp.js.map +1 -0
  255. package/dist/node/cli.js +884 -653
  256. package/dist/node/cli.js.map +1 -0
  257. package/dist/node/config.js +20 -18
  258. package/dist/node/config.js.map +1 -0
  259. package/dist/node/gateway-client.js +191 -181
  260. package/dist/node/gateway-client.js.map +1 -0
  261. package/dist/node/portal/clipboard.js +161 -130
  262. package/dist/node/portal/clipboard.js.map +1 -0
  263. package/dist/node/portal/discovery.js +51 -45
  264. package/dist/node/portal/discovery.js.map +1 -0
  265. package/dist/node/portal/forward.js +64 -58
  266. package/dist/node/portal/forward.js.map +1 -0
  267. package/dist/node/portal/index.js +246 -221
  268. package/dist/node/portal/index.js.map +1 -0
  269. package/dist/node/portal/multiplexer.js +192 -182
  270. package/dist/node/portal/multiplexer.js.map +1 -0
  271. package/dist/node/portal/permissions.js +102 -70
  272. package/dist/node/portal/permissions.js.map +1 -0
  273. package/dist/node/portal/protocol.js +153 -116
  274. package/dist/node/portal/protocol.js.map +1 -0
  275. package/dist/node/portal/screen.js +80 -69
  276. package/dist/node/portal/screen.js.map +1 -0
  277. package/dist/node/portal/session.js +124 -117
  278. package/dist/node/portal/session.js.map +1 -0
  279. package/dist/node/portal/shell.js +140 -113
  280. package/dist/node/portal/shell.js.map +1 -0
  281. package/dist/node/portal/stream.js +77 -75
  282. package/dist/node/portal/stream.js.map +1 -0
  283. package/dist/node/portal/transfer.js +190 -167
  284. package/dist/node/portal/transfer.js.map +1 -0
  285. package/dist/node/portal/ui.js +124 -99
  286. package/dist/node/portal/ui.js.map +1 -0
  287. package/dist/node/remote-desktop/compile-helper.js +50 -45
  288. package/dist/node/remote-desktop/compile-helper.js.map +1 -0
  289. package/dist/node/remote-desktop/index.js +215 -187
  290. package/dist/node/remote-desktop/index.js.map +1 -0
  291. package/dist/node/remote-desktop/protocol.js +45 -29
  292. package/dist/node/remote-desktop/protocol.js.map +1 -0
  293. package/dist/node/runtime.js +493 -410
  294. package/dist/node/runtime.js.map +1 -0
  295. package/dist/server/handlers/__test-utils__/test-db.js +39 -89
  296. package/dist/server/handlers/__test-utils__/test-db.js.map +1 -0
  297. package/dist/server/handlers/analytics.js +467 -261
  298. package/dist/server/handlers/analytics.js.map +1 -0
  299. package/dist/server/handlers/api-docs.js +1030 -895
  300. package/dist/server/handlers/api-docs.js.map +1 -0
  301. package/dist/server/handlers/api-keys.js +291 -242
  302. package/dist/server/handlers/api-keys.js.map +1 -0
  303. package/dist/server/handlers/billing.js +330 -239
  304. package/dist/server/handlers/billing.js.map +1 -0
  305. package/dist/server/handlers/browser.js +468 -395
  306. package/dist/server/handlers/browser.js.map +1 -0
  307. package/dist/server/handlers/catalog.js +1377 -978
  308. package/dist/server/handlers/catalog.js.map +1 -0
  309. package/dist/server/handlers/clickhouse.js +157 -109
  310. package/dist/server/handlers/clickhouse.js.map +1 -0
  311. package/dist/server/handlers/comms.js +1439 -984
  312. package/dist/server/handlers/comms.js.map +1 -0
  313. package/dist/server/handlers/creations.js +461 -394
  314. package/dist/server/handlers/creations.js.map +1 -0
  315. package/dist/server/handlers/crm.js +1082 -791
  316. package/dist/server/handlers/crm.js.map +1 -0
  317. package/dist/server/handlers/discovery.js +251 -232
  318. package/dist/server/handlers/discovery.js.map +1 -0
  319. package/dist/server/handlers/embeddings.js +241 -164
  320. package/dist/server/handlers/embeddings.js.map +1 -0
  321. package/dist/server/handlers/enrichment.js +887 -718
  322. package/dist/server/handlers/enrichment.js.map +1 -0
  323. package/dist/server/handlers/image-gen.js +467 -376
  324. package/dist/server/handlers/image-gen.js.map +1 -0
  325. package/dist/server/handlers/inventory.js +797 -424
  326. package/dist/server/handlers/inventory.js.map +1 -0
  327. package/dist/server/handlers/kali.js +272 -230
  328. package/dist/server/handlers/kali.js.map +1 -0
  329. package/dist/server/handlers/llm-providers.js +803 -580
  330. package/dist/server/handlers/llm-providers.js.map +1 -0
  331. package/dist/server/handlers/local-agent.js +133 -105
  332. package/dist/server/handlers/local-agent.js.map +1 -0
  333. package/dist/server/handlers/media.js +1179 -857
  334. package/dist/server/handlers/media.js.map +1 -0
  335. package/dist/server/handlers/meta-ads.js +2669 -2093
  336. package/dist/server/handlers/meta-ads.js.map +1 -0
  337. package/dist/server/handlers/nodes.js +1321 -913
  338. package/dist/server/handlers/nodes.js.map +1 -0
  339. package/dist/server/handlers/operations.js +183 -157
  340. package/dist/server/handlers/operations.js.map +1 -0
  341. package/dist/server/handlers/platform.js +346 -210
  342. package/dist/server/handlers/platform.js.map +1 -0
  343. package/dist/server/handlers/remove-bg.js +118 -86
  344. package/dist/server/handlers/remove-bg.js.map +1 -0
  345. package/dist/server/handlers/storefront.js +586 -446
  346. package/dist/server/handlers/storefront.js.map +1 -0
  347. package/dist/server/handlers/supply-chain.js +546 -326
  348. package/dist/server/handlers/supply-chain.js.map +1 -0
  349. package/dist/server/handlers/transcription.js +106 -97
  350. package/dist/server/handlers/transcription.js.map +1 -0
  351. package/dist/server/handlers/video-gen.js +593 -424
  352. package/dist/server/handlers/video-gen.js.map +1 -0
  353. package/dist/server/handlers/voice.js +1458 -1039
  354. package/dist/server/handlers/voice.js.map +1 -0
  355. package/dist/server/handlers/workflow-steps.js +2837 -2116
  356. package/dist/server/handlers/workflow-steps.js.map +1 -0
  357. package/dist/server/handlers/workflows.js +1630 -933
  358. package/dist/server/handlers/workflows.js.map +1 -0
  359. package/dist/server/index.js +3167 -2422
  360. package/dist/server/index.js.map +1 -0
  361. package/dist/server/lib/batch-client.js +471 -409
  362. package/dist/server/lib/batch-client.js.map +1 -0
  363. package/dist/server/lib/clickhouse-buffer.js +118 -104
  364. package/dist/server/lib/clickhouse-buffer.js.map +1 -0
  365. package/dist/server/lib/clickhouse-client.js +107 -107
  366. package/dist/server/lib/clickhouse-client.js.map +1 -0
  367. package/dist/server/lib/coa-renderer.js +1786 -356
  368. package/dist/server/lib/coa-renderer.js.map +1 -0
  369. package/dist/server/lib/code-worker-pool.js +227 -177
  370. package/dist/server/lib/code-worker-pool.js.map +1 -0
  371. package/dist/server/lib/code-worker.js +174 -164
  372. package/dist/server/lib/code-worker.js.map +1 -0
  373. package/dist/server/lib/compaction-service.d.ts +2 -12
  374. package/dist/server/lib/compaction-service.js +74 -184
  375. package/dist/server/lib/compaction-service.js.map +1 -0
  376. package/dist/server/lib/logger.js +36 -24
  377. package/dist/server/lib/logger.js.map +1 -0
  378. package/dist/server/lib/otel.js +101 -80
  379. package/dist/server/lib/otel.js.map +1 -0
  380. package/dist/server/lib/pdf-renderer.js +952 -788
  381. package/dist/server/lib/pdf-renderer.js.map +1 -0
  382. package/dist/server/lib/prompt-sanitizer.js +188 -108
  383. package/dist/server/lib/prompt-sanitizer.js.map +1 -0
  384. package/dist/server/lib/provider-capabilities.js +136 -138
  385. package/dist/server/lib/provider-capabilities.js.map +1 -0
  386. package/dist/server/lib/provider-failover.js +190 -168
  387. package/dist/server/lib/provider-failover.js.map +1 -0
  388. package/dist/server/lib/rate-limiter.js +186 -117
  389. package/dist/server/lib/rate-limiter.js.map +1 -0
  390. package/dist/server/lib/react-pdf-layout.js +551 -382
  391. package/dist/server/lib/react-pdf-layout.js.map +1 -0
  392. package/dist/server/lib/server-agent-loop.d.ts +4 -1
  393. package/dist/server/lib/server-agent-loop.js +906 -634
  394. package/dist/server/lib/server-agent-loop.js.map +1 -0
  395. package/dist/server/lib/server-subagent.js +260 -164
  396. package/dist/server/lib/server-subagent.js.map +1 -0
  397. package/dist/server/lib/session-checkpoint.js +105 -96
  398. package/dist/server/lib/session-checkpoint.js.map +1 -0
  399. package/dist/server/lib/ssrf-guard.js +193 -184
  400. package/dist/server/lib/ssrf-guard.js.map +1 -0
  401. package/dist/server/lib/supabase-client.js +94 -82
  402. package/dist/server/lib/supabase-client.js.map +1 -0
  403. package/dist/server/lib/template-resolver.js +154 -176
  404. package/dist/server/lib/template-resolver.js.map +1 -0
  405. package/dist/server/lib/utils.js +242 -133
  406. package/dist/server/lib/utils.js.map +1 -0
  407. package/dist/server/local-agent-gateway.d.ts +2 -2
  408. package/dist/server/local-agent-gateway.js +785 -627
  409. package/dist/server/local-agent-gateway.js.map +1 -0
  410. package/dist/server/providers/anthropic.js +250 -172
  411. package/dist/server/providers/anthropic.js.map +1 -0
  412. package/dist/server/providers/bedrock.js +217 -158
  413. package/dist/server/providers/bedrock.js.map +1 -0
  414. package/dist/server/providers/gemini.js +548 -418
  415. package/dist/server/providers/gemini.js.map +1 -0
  416. package/dist/server/providers/openai.js +571 -437
  417. package/dist/server/providers/openai.js.map +1 -0
  418. package/dist/server/providers/registry.js +23 -18
  419. package/dist/server/providers/registry.js.map +1 -0
  420. package/dist/server/providers/shared.js +123 -95
  421. package/dist/server/providers/shared.js.map +1 -0
  422. package/dist/server/providers/types.js +1 -11
  423. package/dist/server/providers/types.js.map +1 -0
  424. package/dist/server/proxy-handlers.js +209 -165
  425. package/dist/server/proxy-handlers.js.map +1 -0
  426. package/dist/server/tool-router.js +959 -599
  427. package/dist/server/tool-router.js.map +1 -0
  428. package/dist/server/validation.js +248 -188
  429. package/dist/server/validation.js.map +1 -0
  430. package/dist/server/worker.js +202 -133
  431. package/dist/server/worker.js.map +1 -0
  432. package/dist/setup.d.ts +2 -2
  433. package/dist/setup.js +151 -147
  434. package/dist/setup.js.map +1 -0
  435. package/dist/shared/agent-core.d.ts +115 -26
  436. package/dist/shared/agent-core.js +956 -522
  437. package/dist/shared/agent-core.js.map +1 -0
  438. package/dist/shared/anthropic-types.js +1 -6
  439. package/dist/shared/anthropic-types.js.map +1 -0
  440. package/dist/shared/api-client.d.ts +16 -9
  441. package/dist/shared/api-client.js +419 -327
  442. package/dist/shared/api-client.js.map +1 -0
  443. package/dist/shared/compaction.d.ts +36 -0
  444. package/dist/shared/compaction.js +138 -0
  445. package/dist/shared/compaction.js.map +1 -0
  446. package/dist/shared/constants.js +67 -64
  447. package/dist/shared/constants.js.map +1 -0
  448. package/dist/shared/sse-parser.js +221 -219
  449. package/dist/shared/sse-parser.js.map +1 -0
  450. package/dist/shared/tool-dispatch.d.ts +4 -0
  451. package/dist/shared/tool-dispatch.js +226 -165
  452. package/dist/shared/tool-dispatch.js.map +1 -0
  453. package/dist/shared/types.js +1 -6
  454. package/dist/shared/types.js.map +1 -0
  455. package/dist/types/cli-highlight.d.js +2 -0
  456. package/dist/types/cli-highlight.d.js.map +1 -0
  457. package/dist/types/diff.d.js +2 -0
  458. package/dist/types/diff.d.js.map +1 -0
  459. package/dist/types/pdf-parse.d.js +2 -0
  460. package/dist/types/pdf-parse.d.js.map +1 -0
  461. package/dist/updater.d.ts +1 -1
  462. package/dist/updater.js +118 -92
  463. package/dist/updater.js.map +1 -0
  464. package/dist/webchat/widget.js +227 -380
  465. package/dist/webchat/widget.js.map +1 -0
  466. package/package.json +22 -10
  467. package/vendor/ink/build/ansi-tokenizer.d.ts +38 -0
  468. package/vendor/ink/build/ansi-tokenizer.js +316 -0
  469. package/vendor/ink/build/ansi-tokenizer.js.map +1 -0
  470. package/vendor/ink/build/apply-styles.js +175 -0
  471. package/vendor/ink/build/build-layout.js +77 -0
  472. package/vendor/ink/build/calculate-wrapped-text.js +53 -0
  473. package/vendor/ink/build/colorize.d.ts +3 -0
  474. package/vendor/ink/build/colorize.js +48 -0
  475. package/vendor/ink/build/colorize.js.map +1 -0
  476. package/vendor/ink/build/components/AccessibilityContext.d.ts +3 -0
  477. package/vendor/ink/build/components/AccessibilityContext.js +5 -0
  478. package/vendor/ink/build/components/AccessibilityContext.js.map +1 -0
  479. package/vendor/ink/build/components/App.d.ts +18 -0
  480. package/vendor/ink/build/components/App.js +351 -0
  481. package/vendor/ink/build/components/App.js.map +1 -0
  482. package/vendor/ink/build/components/AppContext.d.ts +15 -0
  483. package/vendor/ink/build/components/AppContext.js +11 -0
  484. package/vendor/ink/build/components/AppContext.js.map +1 -0
  485. package/vendor/ink/build/components/BackgroundContext.d.ts +4 -0
  486. package/vendor/ink/build/components/BackgroundContext.js +3 -0
  487. package/vendor/ink/build/components/BackgroundContext.js.map +1 -0
  488. package/vendor/ink/build/components/Box.d.ts +117 -0
  489. package/vendor/ink/build/components/Box.js +34 -0
  490. package/vendor/ink/build/components/Box.js.map +1 -0
  491. package/vendor/ink/build/components/Color.js +62 -0
  492. package/vendor/ink/build/components/Cursor.d.ts +83 -0
  493. package/vendor/ink/build/components/Cursor.js +53 -0
  494. package/vendor/ink/build/components/Cursor.js.map +1 -0
  495. package/vendor/ink/build/components/CursorContext.d.ts +11 -0
  496. package/vendor/ink/build/components/CursorContext.js +8 -0
  497. package/vendor/ink/build/components/CursorContext.js.map +1 -0
  498. package/vendor/ink/build/components/ErrorBoundary.d.ts +18 -0
  499. package/vendor/ink/build/components/ErrorBoundary.js +23 -0
  500. package/vendor/ink/build/components/ErrorBoundary.js.map +1 -0
  501. package/vendor/ink/build/components/ErrorOverview.d.ts +6 -0
  502. package/vendor/ink/build/components/ErrorOverview.js +84 -0
  503. package/vendor/ink/build/components/ErrorOverview.js.map +1 -0
  504. package/vendor/ink/build/components/FocusContext.d.ts +16 -0
  505. package/vendor/ink/build/components/FocusContext.js +17 -0
  506. package/vendor/ink/build/components/FocusContext.js.map +1 -0
  507. package/vendor/ink/build/components/Newline.d.ts +13 -0
  508. package/vendor/ink/build/components/Newline.js +8 -0
  509. package/vendor/ink/build/components/Newline.js.map +1 -0
  510. package/vendor/ink/build/components/Spacer.d.ts +7 -0
  511. package/vendor/ink/build/components/Spacer.js +11 -0
  512. package/vendor/ink/build/components/Spacer.js.map +1 -0
  513. package/vendor/ink/build/components/Static.d.ts +24 -0
  514. package/vendor/ink/build/components/Static.js +28 -0
  515. package/vendor/ink/build/components/Static.js.map +1 -0
  516. package/vendor/ink/build/components/StderrContext.d.ts +15 -0
  517. package/vendor/ink/build/components/StderrContext.js +13 -0
  518. package/vendor/ink/build/components/StderrContext.js.map +1 -0
  519. package/vendor/ink/build/components/StdinContext.d.ts +22 -0
  520. package/vendor/ink/build/components/StdinContext.js +19 -0
  521. package/vendor/ink/build/components/StdinContext.js.map +1 -0
  522. package/vendor/ink/build/components/StdoutContext.d.ts +15 -0
  523. package/vendor/ink/build/components/StdoutContext.js +13 -0
  524. package/vendor/ink/build/components/StdoutContext.js.map +1 -0
  525. package/vendor/ink/build/components/Text.d.ts +55 -0
  526. package/vendor/ink/build/components/Text.js +50 -0
  527. package/vendor/ink/build/components/Text.js.map +1 -0
  528. package/vendor/ink/build/components/Transform.d.ts +16 -0
  529. package/vendor/ink/build/components/Transform.js +15 -0
  530. package/vendor/ink/build/components/Transform.js.map +1 -0
  531. package/vendor/ink/build/cursor-helpers.d.ts +38 -0
  532. package/vendor/ink/build/cursor-helpers.js +56 -0
  533. package/vendor/ink/build/cursor-helpers.js.map +1 -0
  534. package/vendor/ink/build/devtools-window-polyfill.d.ts +1 -0
  535. package/vendor/ink/build/devtools-window-polyfill.js +65 -0
  536. package/vendor/ink/build/devtools-window-polyfill.js.map +1 -0
  537. package/vendor/ink/build/devtools.d.ts +1 -0
  538. package/vendor/ink/build/devtools.js +11 -0
  539. package/vendor/ink/build/devtools.js.map +1 -0
  540. package/vendor/ink/build/dom.d.ts +56 -0
  541. package/vendor/ink/build/dom.js +124 -0
  542. package/vendor/ink/build/dom.js.map +1 -0
  543. package/vendor/ink/build/experimental/apply-style.js +140 -0
  544. package/vendor/ink/build/experimental/dom.js +123 -0
  545. package/vendor/ink/build/experimental/output.js +91 -0
  546. package/vendor/ink/build/experimental/reconciler.js +141 -0
  547. package/vendor/ink/build/experimental/renderer.js +81 -0
  548. package/vendor/ink/build/get-max-width.d.ts +3 -0
  549. package/vendor/ink/build/get-max-width.js +10 -0
  550. package/vendor/ink/build/get-max-width.js.map +1 -0
  551. package/vendor/ink/build/hooks/use-app.d.ts +5 -0
  552. package/vendor/ink/build/hooks/use-app.js +8 -0
  553. package/vendor/ink/build/hooks/use-app.js.map +1 -0
  554. package/vendor/ink/build/hooks/use-cursor.d.ts +12 -0
  555. package/vendor/ink/build/hooks/use-cursor.js +29 -0
  556. package/vendor/ink/build/hooks/use-cursor.js.map +1 -0
  557. package/vendor/ink/build/hooks/use-focus-manager.d.ts +28 -0
  558. package/vendor/ink/build/hooks/use-focus-manager.js +17 -0
  559. package/vendor/ink/build/hooks/use-focus-manager.js.map +1 -0
  560. package/vendor/ink/build/hooks/use-focus.d.ts +29 -0
  561. package/vendor/ink/build/hooks/use-focus.js +42 -0
  562. package/vendor/ink/build/hooks/use-focus.js.map +1 -0
  563. package/vendor/ink/build/hooks/use-input.d.ts +131 -0
  564. package/vendor/ink/build/hooks/use-input.js +124 -0
  565. package/vendor/ink/build/hooks/use-input.js.map +1 -0
  566. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.d.ts +5 -0
  567. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js +11 -0
  568. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
  569. package/vendor/ink/build/hooks/use-stderr.d.ts +5 -0
  570. package/vendor/ink/build/hooks/use-stderr.js +8 -0
  571. package/vendor/ink/build/hooks/use-stderr.js.map +1 -0
  572. package/vendor/ink/build/hooks/use-stdin.d.ts +5 -0
  573. package/vendor/ink/build/hooks/use-stdin.js +8 -0
  574. package/vendor/ink/build/hooks/use-stdin.js.map +1 -0
  575. package/vendor/ink/build/hooks/use-stdout.d.ts +5 -0
  576. package/vendor/ink/build/hooks/use-stdout.js +8 -0
  577. package/vendor/ink/build/hooks/use-stdout.js.map +1 -0
  578. package/vendor/ink/build/hooks/useInput.js +38 -0
  579. package/vendor/ink/build/index.d.ts +34 -0
  580. package/vendor/ink/build/index.js +20 -0
  581. package/vendor/ink/build/index.js.map +1 -0
  582. package/vendor/ink/build/ink.d.ts +90 -0
  583. package/vendor/ink/build/ink.js +654 -0
  584. package/vendor/ink/build/ink.js.map +1 -0
  585. package/vendor/ink/build/input-parser.d.ts +7 -0
  586. package/vendor/ink/build/input-parser.js +154 -0
  587. package/vendor/ink/build/input-parser.js.map +1 -0
  588. package/vendor/ink/build/instance.js +205 -0
  589. package/vendor/ink/build/instances.d.ts +3 -0
  590. package/vendor/ink/build/instances.js +8 -0
  591. package/vendor/ink/build/instances.js.map +1 -0
  592. package/vendor/ink/build/kitty-keyboard.d.ts +23 -0
  593. package/vendor/ink/build/kitty-keyboard.js +32 -0
  594. package/vendor/ink/build/kitty-keyboard.js.map +1 -0
  595. package/vendor/ink/build/layout.d.ts +7 -0
  596. package/vendor/ink/build/layout.js +33 -0
  597. package/vendor/ink/build/layout.js.map +1 -0
  598. package/vendor/ink/build/log-update.d.ts +19 -0
  599. package/vendor/ink/build/log-update.js +243 -0
  600. package/vendor/ink/build/log-update.js.map +1 -0
  601. package/vendor/ink/build/measure-element.d.ts +16 -0
  602. package/vendor/ink/build/measure-element.js +9 -0
  603. package/vendor/ink/build/measure-element.js.map +1 -0
  604. package/vendor/ink/build/measure-text.d.ts +6 -0
  605. package/vendor/ink/build/measure-text.js +21 -0
  606. package/vendor/ink/build/measure-text.js.map +1 -0
  607. package/vendor/ink/build/options.d.ts +52 -0
  608. package/vendor/ink/build/options.js +2 -0
  609. package/vendor/ink/build/options.js.map +1 -0
  610. package/vendor/ink/build/output.d.ts +35 -0
  611. package/vendor/ink/build/output.js +183 -0
  612. package/vendor/ink/build/output.js.map +1 -0
  613. package/vendor/ink/build/parse-keypress.d.ts +22 -0
  614. package/vendor/ink/build/parse-keypress.js +493 -0
  615. package/vendor/ink/build/parse-keypress.js.map +1 -0
  616. package/vendor/ink/build/reconciler.d.ts +4 -0
  617. package/vendor/ink/build/reconciler.js +274 -0
  618. package/vendor/ink/build/reconciler.js.map +1 -0
  619. package/vendor/ink/build/render-background.d.ts +4 -0
  620. package/vendor/ink/build/render-background.js +25 -0
  621. package/vendor/ink/build/render-background.js.map +1 -0
  622. package/vendor/ink/build/render-border.d.ts +4 -0
  623. package/vendor/ink/build/render-border.js +73 -0
  624. package/vendor/ink/build/render-border.js.map +1 -0
  625. package/vendor/ink/build/render-node-to-output.d.ts +14 -0
  626. package/vendor/ink/build/render-node-to-output.js +147 -0
  627. package/vendor/ink/build/render-node-to-output.js.map +1 -0
  628. package/vendor/ink/build/render-to-string.d.ts +38 -0
  629. package/vendor/ink/build/render-to-string.js +115 -0
  630. package/vendor/ink/build/render-to-string.js.map +1 -0
  631. package/vendor/ink/build/render.d.ts +121 -0
  632. package/vendor/ink/build/render.js +55 -0
  633. package/vendor/ink/build/render.js.map +1 -0
  634. package/vendor/ink/build/renderer.d.ts +8 -0
  635. package/vendor/ink/build/renderer.js +55 -0
  636. package/vendor/ink/build/renderer.js.map +1 -0
  637. package/vendor/ink/build/sanitize-ansi.d.ts +2 -0
  638. package/vendor/ink/build/sanitize-ansi.js +27 -0
  639. package/vendor/ink/build/sanitize-ansi.js.map +1 -0
  640. package/vendor/ink/build/screen-reader-update.d.ts +13 -0
  641. package/vendor/ink/build/screen-reader-update.js +38 -0
  642. package/vendor/ink/build/screen-reader-update.js.map +1 -0
  643. package/vendor/ink/build/squash-text-nodes.d.ts +3 -0
  644. package/vendor/ink/build/squash-text-nodes.js +36 -0
  645. package/vendor/ink/build/squash-text-nodes.js.map +1 -0
  646. package/vendor/ink/build/styles.d.ts +240 -0
  647. package/vendor/ink/build/styles.js +232 -0
  648. package/vendor/ink/build/styles.js.map +1 -0
  649. package/vendor/ink/build/utils.d.ts +2 -0
  650. package/vendor/ink/build/utils.js +4 -0
  651. package/vendor/ink/build/utils.js.map +1 -0
  652. package/vendor/ink/build/wrap-text.d.ts +3 -0
  653. package/vendor/ink/build/wrap-text.js +31 -0
  654. package/vendor/ink/build/wrap-text.js.map +1 -0
  655. package/vendor/ink/build/write-synchronized.d.ts +4 -0
  656. package/vendor/ink/build/write-synchronized.js +7 -0
  657. package/vendor/ink/build/write-synchronized.js.map +1 -0
  658. package/vendor/ink/license +10 -0
  659. package/vendor/ink/node_modules/@types/node/LICENSE +21 -0
  660. package/vendor/ink/node_modules/@types/node/README.md +15 -0
  661. package/vendor/ink/node_modules/@types/node/assert/strict.d.ts +105 -0
  662. package/vendor/ink/node_modules/@types/node/assert.d.ts +955 -0
  663. package/vendor/ink/node_modules/@types/node/async_hooks.d.ts +623 -0
  664. package/vendor/ink/node_modules/@types/node/buffer.buffer.d.ts +466 -0
  665. package/vendor/ink/node_modules/@types/node/buffer.d.ts +1810 -0
  666. package/vendor/ink/node_modules/@types/node/child_process.d.ts +1428 -0
  667. package/vendor/ink/node_modules/@types/node/cluster.d.ts +486 -0
  668. package/vendor/ink/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
  669. package/vendor/ink/node_modules/@types/node/console.d.ts +151 -0
  670. package/vendor/ink/node_modules/@types/node/constants.d.ts +20 -0
  671. package/vendor/ink/node_modules/@types/node/crypto.d.ts +4065 -0
  672. package/vendor/ink/node_modules/@types/node/dgram.d.ts +564 -0
  673. package/vendor/ink/node_modules/@types/node/diagnostics_channel.d.ts +576 -0
  674. package/vendor/ink/node_modules/@types/node/dns/promises.d.ts +503 -0
  675. package/vendor/ink/node_modules/@types/node/dns.d.ts +922 -0
  676. package/vendor/ink/node_modules/@types/node/domain.d.ts +166 -0
  677. package/vendor/ink/node_modules/@types/node/events.d.ts +1054 -0
  678. package/vendor/ink/node_modules/@types/node/fs/promises.d.ts +1329 -0
  679. package/vendor/ink/node_modules/@types/node/fs.d.ts +4676 -0
  680. package/vendor/ink/node_modules/@types/node/globals.d.ts +150 -0
  681. package/vendor/ink/node_modules/@types/node/globals.typedarray.d.ts +101 -0
  682. package/vendor/ink/node_modules/@types/node/http.d.ts +2167 -0
  683. package/vendor/ink/node_modules/@types/node/http2.d.ts +2480 -0
  684. package/vendor/ink/node_modules/@types/node/https.d.ts +405 -0
  685. package/vendor/ink/node_modules/@types/node/index.d.ts +115 -0
  686. package/vendor/ink/node_modules/@types/node/inspector/promises.d.ts +41 -0
  687. package/vendor/ink/node_modules/@types/node/inspector.d.ts +224 -0
  688. package/vendor/ink/node_modules/@types/node/inspector.generated.d.ts +4226 -0
  689. package/vendor/ink/node_modules/@types/node/module.d.ts +819 -0
  690. package/vendor/ink/node_modules/@types/node/net.d.ts +933 -0
  691. package/vendor/ink/node_modules/@types/node/os.d.ts +507 -0
  692. package/vendor/ink/node_modules/@types/node/package.json +155 -0
  693. package/vendor/ink/node_modules/@types/node/path/posix.d.ts +8 -0
  694. package/vendor/ink/node_modules/@types/node/path/win32.d.ts +8 -0
  695. package/vendor/ink/node_modules/@types/node/path.d.ts +187 -0
  696. package/vendor/ink/node_modules/@types/node/perf_hooks.d.ts +643 -0
  697. package/vendor/ink/node_modules/@types/node/process.d.ts +2156 -0
  698. package/vendor/ink/node_modules/@types/node/punycode.d.ts +117 -0
  699. package/vendor/ink/node_modules/@types/node/querystring.d.ts +152 -0
  700. package/vendor/ink/node_modules/@types/node/quic.d.ts +910 -0
  701. package/vendor/ink/node_modules/@types/node/readline/promises.d.ts +161 -0
  702. package/vendor/ink/node_modules/@types/node/readline.d.ts +541 -0
  703. package/vendor/ink/node_modules/@types/node/repl.d.ts +415 -0
  704. package/vendor/ink/node_modules/@types/node/sea.d.ts +162 -0
  705. package/vendor/ink/node_modules/@types/node/sqlite.d.ts +955 -0
  706. package/vendor/ink/node_modules/@types/node/stream/consumers.d.ts +38 -0
  707. package/vendor/ink/node_modules/@types/node/stream/promises.d.ts +211 -0
  708. package/vendor/ink/node_modules/@types/node/stream/web.d.ts +296 -0
  709. package/vendor/ink/node_modules/@types/node/stream.d.ts +1760 -0
  710. package/vendor/ink/node_modules/@types/node/string_decoder.d.ts +67 -0
  711. package/vendor/ink/node_modules/@types/node/test/reporters.d.ts +96 -0
  712. package/vendor/ink/node_modules/@types/node/test.d.ts +2240 -0
  713. package/vendor/ink/node_modules/@types/node/timers/promises.d.ts +108 -0
  714. package/vendor/ink/node_modules/@types/node/timers.d.ts +159 -0
  715. package/vendor/ink/node_modules/@types/node/tls.d.ts +1198 -0
  716. package/vendor/ink/node_modules/@types/node/trace_events.d.ts +197 -0
  717. package/vendor/ink/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +462 -0
  718. package/vendor/ink/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
  719. package/vendor/ink/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +36 -0
  720. package/vendor/ink/node_modules/@types/node/ts5.6/index.d.ts +117 -0
  721. package/vendor/ink/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
  722. package/vendor/ink/node_modules/@types/node/ts5.7/index.d.ts +117 -0
  723. package/vendor/ink/node_modules/@types/node/tty.d.ts +250 -0
  724. package/vendor/ink/node_modules/@types/node/url.d.ts +519 -0
  725. package/vendor/ink/node_modules/@types/node/util/types.d.ts +558 -0
  726. package/vendor/ink/node_modules/@types/node/util.d.ts +1662 -0
  727. package/vendor/ink/node_modules/@types/node/v8.d.ts +983 -0
  728. package/vendor/ink/node_modules/@types/node/vm.d.ts +1208 -0
  729. package/vendor/ink/node_modules/@types/node/wasi.d.ts +202 -0
  730. package/vendor/ink/node_modules/@types/node/web-globals/abortcontroller.d.ts +59 -0
  731. package/vendor/ink/node_modules/@types/node/web-globals/blob.d.ts +23 -0
  732. package/vendor/ink/node_modules/@types/node/web-globals/console.d.ts +9 -0
  733. package/vendor/ink/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
  734. package/vendor/ink/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  735. package/vendor/ink/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
  736. package/vendor/ink/node_modules/@types/node/web-globals/events.d.ts +106 -0
  737. package/vendor/ink/node_modules/@types/node/web-globals/fetch.d.ts +69 -0
  738. package/vendor/ink/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
  739. package/vendor/ink/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
  740. package/vendor/ink/node_modules/@types/node/web-globals/navigator.d.ts +25 -0
  741. package/vendor/ink/node_modules/@types/node/web-globals/performance.d.ts +45 -0
  742. package/vendor/ink/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  743. package/vendor/ink/node_modules/@types/node/web-globals/streams.d.ts +115 -0
  744. package/vendor/ink/node_modules/@types/node/web-globals/timers.d.ts +44 -0
  745. package/vendor/ink/node_modules/@types/node/web-globals/url.d.ts +24 -0
  746. package/vendor/ink/node_modules/@types/node/worker_threads.d.ts +717 -0
  747. package/vendor/ink/node_modules/@types/node/zlib.d.ts +618 -0
  748. package/vendor/ink/node_modules/node-pty/LICENSE +69 -0
  749. package/vendor/ink/node_modules/node-pty/README.md +164 -0
  750. package/vendor/ink/node_modules/node-pty/binding.gyp +150 -0
  751. package/vendor/ink/node_modules/node-pty/lib/conpty_console_list_agent.js +25 -0
  752. package/vendor/ink/node_modules/node-pty/lib/eventEmitter2.js +47 -0
  753. package/vendor/ink/node_modules/node-pty/lib/index.js +52 -0
  754. package/vendor/ink/node_modules/node-pty/lib/interfaces.js +7 -0
  755. package/vendor/ink/node_modules/node-pty/lib/shared/conout.js +11 -0
  756. package/vendor/ink/node_modules/node-pty/lib/terminal.js +190 -0
  757. package/vendor/ink/node_modules/node-pty/lib/types.js +7 -0
  758. package/vendor/ink/node_modules/node-pty/lib/unixTerminal.js +349 -0
  759. package/vendor/ink/node_modules/node-pty/lib/utils.js +39 -0
  760. package/vendor/ink/node_modules/node-pty/lib/windowsConoutConnection.js +125 -0
  761. package/vendor/ink/node_modules/node-pty/lib/windowsPtyAgent.js +287 -0
  762. package/vendor/ink/node_modules/node-pty/lib/windowsTerminal.js +201 -0
  763. package/vendor/ink/node_modules/node-pty/lib/worker/conoutSocketWorker.js +22 -0
  764. package/vendor/ink/node_modules/node-pty/package.json +65 -0
  765. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/pty.node +0 -0
  766. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/spawn-helper +0 -0
  767. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/pty.node +0 -0
  768. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/spawn-helper +0 -0
  769. package/vendor/ink/node_modules/node-pty/prebuilds/linux-arm64/pty.node +0 -0
  770. package/vendor/ink/node_modules/node-pty/prebuilds/linux-x64/pty.node +0 -0
  771. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
  772. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
  773. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
  774. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.pdb +0 -0
  775. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  776. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.pdb +0 -0
  777. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
  778. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
  779. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.node +0 -0
  780. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.pdb +0 -0
  781. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
  782. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.pdb +0 -0
  783. package/vendor/ink/node_modules/node-pty/scripts/post-install.js +76 -0
  784. package/vendor/ink/node_modules/node-pty/scripts/prebuild.js +34 -0
  785. package/vendor/ink/node_modules/node-pty/src/unix/pty.cc +875 -0
  786. package/vendor/ink/node_modules/node-pty/src/unix/spawn-helper.cc +23 -0
  787. package/vendor/ink/node_modules/node-pty/src/win/conpty.cc +582 -0
  788. package/vendor/ink/node_modules/node-pty/src/win/conpty.h +41 -0
  789. package/vendor/ink/node_modules/node-pty/src/win/conpty_console_list.cc +44 -0
  790. package/vendor/ink/node_modules/node-pty/src/win/path_util.cc +95 -0
  791. package/vendor/ink/node_modules/node-pty/src/win/path_util.h +26 -0
  792. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/OpenConsole.exe +0 -0
  793. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/conpty.dll +0 -0
  794. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/OpenConsole.exe +0 -0
  795. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/conpty.dll +0 -0
  796. package/vendor/ink/node_modules/node-pty/typings/node-pty.d.ts +215 -0
  797. package/vendor/ink/node_modules/undici-types/LICENSE +21 -0
  798. package/vendor/ink/node_modules/undici-types/README.md +6 -0
  799. package/vendor/ink/node_modules/undici-types/agent.d.ts +32 -0
  800. package/vendor/ink/node_modules/undici-types/api.d.ts +43 -0
  801. package/vendor/ink/node_modules/undici-types/balanced-pool.d.ts +30 -0
  802. package/vendor/ink/node_modules/undici-types/cache-interceptor.d.ts +173 -0
  803. package/vendor/ink/node_modules/undici-types/cache.d.ts +36 -0
  804. package/vendor/ink/node_modules/undici-types/client-stats.d.ts +15 -0
  805. package/vendor/ink/node_modules/undici-types/client.d.ts +108 -0
  806. package/vendor/ink/node_modules/undici-types/connector.d.ts +34 -0
  807. package/vendor/ink/node_modules/undici-types/content-type.d.ts +21 -0
  808. package/vendor/ink/node_modules/undici-types/cookies.d.ts +30 -0
  809. package/vendor/ink/node_modules/undici-types/diagnostics-channel.d.ts +74 -0
  810. package/vendor/ink/node_modules/undici-types/dispatcher.d.ts +276 -0
  811. package/vendor/ink/node_modules/undici-types/env-http-proxy-agent.d.ts +22 -0
  812. package/vendor/ink/node_modules/undici-types/errors.d.ts +161 -0
  813. package/vendor/ink/node_modules/undici-types/eventsource.d.ts +66 -0
  814. package/vendor/ink/node_modules/undici-types/fetch.d.ts +211 -0
  815. package/vendor/ink/node_modules/undici-types/formdata.d.ts +108 -0
  816. package/vendor/ink/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  817. package/vendor/ink/node_modules/undici-types/global-origin.d.ts +7 -0
  818. package/vendor/ink/node_modules/undici-types/h2c-client.d.ts +73 -0
  819. package/vendor/ink/node_modules/undici-types/handlers.d.ts +15 -0
  820. package/vendor/ink/node_modules/undici-types/header.d.ts +160 -0
  821. package/vendor/ink/node_modules/undici-types/index.d.ts +88 -0
  822. package/vendor/ink/node_modules/undici-types/interceptors.d.ts +73 -0
  823. package/vendor/ink/node_modules/undici-types/mock-agent.d.ts +68 -0
  824. package/vendor/ink/node_modules/undici-types/mock-call-history.d.ts +111 -0
  825. package/vendor/ink/node_modules/undici-types/mock-client.d.ts +27 -0
  826. package/vendor/ink/node_modules/undici-types/mock-errors.d.ts +12 -0
  827. package/vendor/ink/node_modules/undici-types/mock-interceptor.d.ts +94 -0
  828. package/vendor/ink/node_modules/undici-types/mock-pool.d.ts +27 -0
  829. package/vendor/ink/node_modules/undici-types/package.json +55 -0
  830. package/vendor/ink/node_modules/undici-types/patch.d.ts +29 -0
  831. package/vendor/ink/node_modules/undici-types/pool-stats.d.ts +19 -0
  832. package/vendor/ink/node_modules/undici-types/pool.d.ts +41 -0
  833. package/vendor/ink/node_modules/undici-types/proxy-agent.d.ts +29 -0
  834. package/vendor/ink/node_modules/undici-types/readable.d.ts +68 -0
  835. package/vendor/ink/node_modules/undici-types/retry-agent.d.ts +8 -0
  836. package/vendor/ink/node_modules/undici-types/retry-handler.d.ts +125 -0
  837. package/vendor/ink/node_modules/undici-types/round-robin-pool.d.ts +41 -0
  838. package/vendor/ink/node_modules/undici-types/snapshot-agent.d.ts +109 -0
  839. package/vendor/ink/node_modules/undici-types/util.d.ts +18 -0
  840. package/vendor/ink/node_modules/undici-types/utility.d.ts +7 -0
  841. package/vendor/ink/node_modules/undici-types/webidl.d.ts +341 -0
  842. package/vendor/ink/node_modules/undici-types/websocket.d.ts +186 -0
  843. package/vendor/ink/package.json +201 -0
  844. package/vendor/ink/readme.md +2636 -0
  845. package/bin/swag-agent.js +0 -9
  846. package/dist/server/lib/pg-rate-limiter.d.ts +0 -21
  847. package/dist/server/lib/pg-rate-limiter.js +0 -86
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["http","randomUUID","timingSafeEqual","createHash","Anthropic","createLogger","log","sanitizeError","resolveAgentLoopConfig","MODELS","handleProxy","handleNodeRoutes","setNodeAgentInvoker","handleTranscribe","handleBillingRoutes","incrementUsage","checkPlanLimits","generateCompaction","initLocalAgentGateway","shutdownGateway","shutdownAgentGateway","getGatewayStats","initSupabase","getServiceClient","loadCheckpoint","markOrphaned","rateLimiter","sanitizeAndLog","processWorkflowSteps","processWaitingSteps","handleWebhookIngestion","executeInlineChain","setToolExecutor","setAgentExecutor","setTokenBroadcaster","setStepErrorBroadcaster","verifyGuestApprovalSignature","initWorkerPool","getPoolStats","shutdownPool","processScheduleTriggers","enforceWorkflowTimeouts","processEventTriggers","cleanupOrphanedSteps","processDlqRetries","runServerAgentLoop","loadTools","loadUserTools","getToolsForAgent","executeTool","loadAgentConfig","setExtendedToolsCache","getExtendedToolsIndex","flushSpans","queueSpan","auditRowToSpan","classifyErrorType","pg","process","on","reason","_promise","error","err","fatal","exit","PORT","parseInt","env","SUPABASE_URL","SUPABASE_SERVICE_ROLE_KEY","SERVICE_ROLE_JWT","ANTHROPIC_API_KEY","ALLOWED_ORIGINS","split","map","s","trim","FLY_INTERNAL_SECRET","console","warn","pgListenReady","workerPoolReady","isReady","webchatAgentInvoker","sendIpRateLimit","res","ip","headers","result","checkRequest","allowed","writeHead","String","Math","ceil","retryAfterMs","end","JSON","stringify","agentChatLimiter","Map","AGENT_CHAT_MAX_PER_MIN","AGENT_CHAT_MAX_CONCURRENT","agentChatConcurrent","setInterval","now","Date","key","entry","windowStart","delete","checkAgentChatRateLimit","storeId","get","count","set","safeCompare","a","b","hashA","update","digest","hashB","resolveAndValidateStoreId","supabase","clientStoreId","user","isServiceRole","_token","requestUserId","srUserId","id","data","membership","from","select","eq","limit","maybeSingle","userRow","userId","userStores","not","length","storeIds","r","store_id","includes","storeCount","getCorsHeaders","origin","sseClients","MAX_SSE_CLIENTS_PER_RUN","MAX_SSE_TOTAL_CLIENTS","safeSseWrite","cleanup","destroyed","writableEnded","write","sendWorkflowSSE","broadcastToRun","runId","clients","size","getTotalSseClients","total","values","sseCleanupInterval","rid","DATABASE_URL","pgClient","pgReconnectAttempts","MAX_PG_RECONNECT_DELAY","setupPgListen","info","cleanUrl","replace","Client","connectionString","ssl","rejectUnauthorized","connect","query","eventTriggerTimer","debouncedEventProcess","setTimeout","sb","message","msg","payload","parse","channel","run_id","type","event_type","catch","delay","min","pow","delayMs","attempt","getAnthropicClient","agent","api_key","apiKey","timeout","sendSSE","event","jsonResponse","status","corsHeaders","stripLargeBase64Fields","raw","keepFrom","MIN_DATA_LEN","DATA_MARKER","parts","pos","idx","indexOf","push","slice","join","IMG_MARKER","adjustedKeepFrom","readBody","req","MAX_BODY","Promise","resolve","reject","chunks","rejected","chunk","resume","Error","declaredLen","receivedLen","Buffer","concat","toString","max","originalBytes","prunedBytes","byteLength","compactHistory","history","maxHistoryChars","totalChars","compacted","i","msgChars","content","unshift","role","shift","buildAgentSystemPrompt","tools","opts","rawAgentPrompt","system_prompt","systemPrompt","agentId","can_modify","tone","verbosity","context_config","ctx","includeLocations","locationIds","includeCustomers","customerSegments","toolNames","t","name","extendedTools","shortDesc","description","dynamicParts","clientContext","context","ctxParts","storeName","locationName","loc","locationAddress","locationType","userName","userEmail","conversationType","conversationTitle","customerPromise","senderContext","customerId","single","then","memoryPromise","rpc","p_agent_id","p_query","substring","p_type","p_limit","cust","memories","all","first_name","last_name","email","phone","loyalty_tier","total_orders","total_spent","toFixed","sc","senderId","senderName","channelType","channelName","memBlock","m","memory_type","value","dynamicContext","persistAgentTurn","conversationId","agentModel","traceId","source","chatStartTime","chatEndTime","insert","conversation_id","text","token_count","finalText","is_tool_use","toolCallCount","tool_names","toolsUsed","tokens","input","output","metadata","agentName","model","lastTurnTokens","lastToolCalls","lastDurationMs","channel_type","channel_id","channelId","channel_name","sender_id","customer_id","customer_name","customerName","action","severity","resource_type","resource_id","request_id","user_id","user_email","service_name","span_kind","status_code","start_time","toISOString","end_time","duration_ms","input_bytes","details","message_preview","agent_id","input_tokens","output_tokens","total_cost","costUsd","trace_id","stop_reason","stopReason","undefined","turn_number","turnCount","response_preview","cacheCreation","cacheRead","turn_count","tool_calls","session_cost_usd","cache_creation_tokens","cache_read_tokens","cache_hit_rate","round","cache_cost_savings_pct","loop_detector_stats","loopDetectorStats","turns","extractAndStoreMemories","err1","err2","error_type","error_message","user_message_preview","updateCostBudgets","budget_sync_failed","failed_cost_usd","handleAgentChat","body","token","conversationHistory","attachments","resolvedStoreId","srStores","rateLimitStoreId","rateCheck","core","coreTools","extended","rows","userToolRows","defs","userToolDefs","SONNET","activeConversationId","conv","title","hint","fromDb","anthropic","resolved","defaultsUsed","defaults","MAX_HISTORY_CHARS","userContent","contentBlocks","att","media_type","contextPrefix","finalUserContent","messages","Connection","clientDisconnected","startedAt","maxTurns","temperature","maxTokens","maxConcurrentTools","enableDelegation","enableModelRouting","contextOverrides","subagentMaxTokens","subagentMaxTurns","subagentTemperature","loopDetectorConfig","identicalCallLimit","loopIdenticalCallLimit","consecutiveErrorLimit","loopConsecutiveErrorLimit","turnErrorLimit","loopTurnErrorLimit","window","loopWindow","sessionToolErrorLimit","loopSessionToolErrorLimit","consecutiveFailedTurnLimit","loopConsecutiveFailedTurnLimit","fileReadLimit","loopFileReadLimit","batchErrorLimit","loopBatchErrorLimit","toolName","args","sourceOverride","onToolProgress","toolArgs","progress","onText","onToolStart","onToolResult","success","onSubagentProgress","evt","subagentId","subagentEvent","maxDurationMs","usage","cost_usd","userMessage","assistantResponse","extraction","create","max_tokens","system","find","match","items","item","p_store_id","p_key","p_value","p_cost_usd","activeRequests","server","createServer","method","url","ready","agentStats","version","npm_package_version","uptime","floor","pg_listen","worker_pool","local_agents","total_agents","URL","host","pathname","authHeader","authorization","startsWith","isInternal","authUser","authError","auth","getUser","sseRun","existingClients","run","stepRuns","order","ascending","steps","has","Set","add","clearInterval","heartbeat","guestApprovalMatch","clientIp","socket","remoteAddress","stepRunId","urlParams","searchParams","expires","sig","guestSupabase","approval","isApprove","guestResult","guestErr","p_approval_id","p_response","p_response_data","guest","p_responded_by","webchatCors","webchatMsgMatch","rawBody","wcBody","planCheck","thirtyMinAgo","recent","gt","msgErr","direction","sender_name","content_type","widget_version","messages_in","p_channel_id","agentResponse","response","outMsg","auto_response","messages_out","agent_invocations","agent_response","webchatHistoryMatch","params","reqConvId","wcChannel","test","in","histErr","fs","path","possiblePaths","import","meta","dirname","__dirname","cwd","widgetJs","p","readFileSync","billingBody","billingUserId","sub","nodeBody","rawToken","resumeMatch","convId","checkpoint","parsedMessages","turn","tokens_used","cost_so_far","tools_used","checkpointed_at","created_at","approvalMatch","approvalId","approvalMembership","response_data","responded_by","waitpointMatch","authToken","wp","expires_at","completion_data","completed_at","waitpoint_completed","waitpoint_data","step_run_id","webhookMatch","whClientIp","slug","k","v","Object","entries","idempotency_key","existing","event_id","deduplicated","eventId","fireErr","p_event_type","p_event_payload","p_source","batch_size","workflow_id","wfOwner","wfOwnerErr","p_workflow_id","p_trigger_type","trigger_type","p_trigger_payload","trigger_payload","p_idempotency_key","wf","published_version_id","version_id","contentLength","authErr","tier","rateLimitKey","memResult","bucket","parseErr","errMsg","bodyLen","tail","detail","body_length","mode","audio_base64","sid","compactMessages","Array","isArray","sanitizedCompactPrompt","compactionResult","compaction_content","tool_name","resolvedToolStoreId","validToolStoreId","toolUserId","toolLimit","checkToolLimit","utRows","resolvedStreamStoreId","validStreamStoreId","streamToolUserId","streamToolLimit","_name","spans","batch","queued","convStoreId","upsert","conversation_title","hostname","onConflict","headersSent","prompt","onToken","allTools","callPath","enableStreaming","stepKey","step_key","invokeAgentForChannel","is","loadedHistory","finalMessage","senderUserId","senderUserLabel","enforceNodeOfflineStatus","threshold","lt","BASE_WORKER_INTERVAL_MS","MAX_WORKER_INTERVAL_MS","workerRunning","consecutiveErrors","currentWorkerInterval","workflowWorkerLoop","stepResult","waitingResolved","e","scheduled","timedOut","eventsProcessed","orphansCleaned","dlqRetried","nodesOfflined","processed","reclaimed","errors","waiting","events","orphans","dlqRetries","workerInterval","intervalMs","newInterval","listen","port","supabaseUrl","runtime","workerIntervalMs","stats","workers","serverBootTime","gracefulShutdown","signal","close","clear","shutdown","drainStart","drainInterval","unref"],"sources":["../../src/server/index.ts"],"sourcesContent":["// server/index.ts — Unified Node.js agent server for Fly.io\n// All CLI optimizations: prompt caching, retry, loop detection, parallel tools,\n// model-aware context management, cost tracking, compaction block handling\n//\n// Shares agent-core with CLI via src/shared/agent-core.ts\n\nimport http from \"node:http\";\nimport { randomUUID, timingSafeEqual, createHash } from \"node:crypto\";\nimport { type SupabaseClient } from \"@supabase/supabase-js\";\nimport Anthropic from \"@anthropic-ai/sdk\";\nimport { createLogger, withTrace } from \"./lib/logger.js\";\n\nconst log = createLogger(\"server\");\n\nimport {\n sanitizeError,\n resolveAgentLoopConfig,\n} from \"../shared/agent-core.js\";\nimport { MODELS } from \"../shared/constants.js\";\nimport { handleProxy } from \"./proxy-handlers.js\";\nimport { handleNodeRoutes, setNodeAgentInvoker, type SenderContext } from \"./handlers/nodes.js\";\nimport { handleTranscribe } from \"./handlers/transcription.js\";\nimport { handleBillingRoutes, incrementUsage, checkPlanLimits } from \"./handlers/billing.js\";\nimport { generateCompaction } from \"./lib/compaction-service.js\";\nimport { initLocalAgentGateway, shutdownGateway as shutdownAgentGateway, getGatewayStats } from \"./local-agent-gateway.js\";\nimport { initSupabase, getServiceClient } from \"./lib/supabase-client.js\";\nimport { loadCheckpoint, markOrphaned } from \"./lib/session-checkpoint.js\";\nimport { rateLimiter } from \"./lib/rate-limiter.js\";\nimport { sanitizeAndLog } from \"./lib/prompt-sanitizer.js\";\n\nimport { processWorkflowSteps, processWaitingSteps, handleWebhookIngestion, executeInlineChain, setToolExecutor, setAgentExecutor, setTokenBroadcaster, setStepErrorBroadcaster, verifyGuestApprovalSignature, initWorkerPool, getPoolStats, shutdownPool, processScheduleTriggers, enforceWorkflowTimeouts, processEventTriggers, cleanupOrphanedSteps, processDlqRetries } from \"./handlers/workflows.js\";\nimport { runServerAgentLoop } from \"./lib/server-agent-loop.js\";\nimport {\n loadTools,\n loadUserTools,\n getToolsForAgent,\n executeTool,\n loadAgentConfig,\n setExtendedToolsCache,\n getExtendedToolsIndex,\n type ToolDef,\n type UserToolRow,\n type AgentConfig,\n flushSpans,\n} from \"./tool-router.js\";\nimport { queueSpan, auditRowToSpan, classifyErrorType } from \"./lib/clickhouse-buffer.js\";\nimport pg from \"pg\";\n\n// ============================================================================\n// PROCESS ERROR HANDLERS\n// ============================================================================\n\nprocess.on(\"unhandledRejection\", (reason, _promise) => {\n log.error({ err: reason }, \"unhandled rejection\");\n});\n\nprocess.on(\"uncaughtException\", (err) => {\n log.fatal({ err }, \"uncaught exception\");\n process.exit(1);\n});\n\n// ============================================================================\n// ENV CONFIG\n// ============================================================================\n\nconst PORT = parseInt(process.env.PORT || \"8080\", 10);\nconst SUPABASE_URL = process.env.SUPABASE_URL!;\nconst SUPABASE_SERVICE_ROLE_KEY = process.env.SUPABASE_SERVICE_ROLE_KEY!;\nconst SERVICE_ROLE_JWT = process.env.SERVICE_ROLE_JWT || \"\";\nconst ANTHROPIC_API_KEY = process.env.ANTHROPIC_API_KEY!;\nconst ALLOWED_ORIGINS = (process.env.ALLOWED_ORIGINS || \"http://localhost:3000,http://127.0.0.1:3000\").split(\",\").map(s => s.trim());\nconst FLY_INTERNAL_SECRET = process.env.FLY_INTERNAL_SECRET || \"\";\nif (!FLY_INTERNAL_SECRET) {\n console.warn(\"[SECURITY] FLY_INTERNAL_SECRET is not set — internal endpoints are unprotected\");\n}\n\n// ============================================================================\n// READINESS STATE\n// ============================================================================\n\nlet pgListenReady = false;\nlet workerPoolReady = false;\n\nfunction isReady(): boolean {\n return workerPoolReady; // PG listen is optional (SSE only)\n}\n\n// Webchat agent invoker — set later to avoid circular deps (same as node agent invoker)\nlet webchatAgentInvoker: ((\n supabase: SupabaseClient,\n agentId: string,\n message: string,\n storeId: string,\n conversationId: string,\n senderContext?: SenderContext,\n) => Promise<{ success: boolean; response?: string; error?: string }>) | null = null;\n\n// ============================================================================\n// RATE LIMITING — Phase 7.2 token-bucket (see lib/rate-limiter.ts)\n// ============================================================================\n\n/** Check IP rate limit and send 429 with proper headers if exceeded */\nfunction sendIpRateLimit(res: http.ServerResponse, ip: string, headers: Record<string, string>): boolean {\n const result = rateLimiter.checkRequest(`ip:${ip}`, \"unauthenticated\");\n if (result.allowed) return false; // not rate-limited\n res.writeHead(429, {\n \"Retry-After\": String(Math.ceil(result.retryAfterMs / 1000) || 1),\n \"X-RateLimit-Remaining\": \"0\",\n \"Content-Type\": \"application/json\",\n ...headers,\n });\n res.end(JSON.stringify({ error: \"Too many requests\" }));\n return true; // was rate-limited\n}\n\n// Agent chat rate limiting — per-store + global concurrent cap\nconst agentChatLimiter = new Map<string, { count: number; windowStart: number }>();\nconst AGENT_CHAT_MAX_PER_MIN = 60;\nconst AGENT_CHAT_MAX_CONCURRENT = 10;\nlet agentChatConcurrent = 0;\n\n// Periodically clean up stale entries from agentChatLimiter to prevent unbounded Map growth\nsetInterval(() => {\n const now = Date.now();\n for (const [key, entry] of agentChatLimiter) {\n if (now - entry.windowStart > 120_000) {\n agentChatLimiter.delete(key);\n }\n }\n}, 60_000);\n\nfunction checkAgentChatRateLimit(storeId: string): { allowed: boolean; error?: string } {\n // Concurrent check\n if (agentChatConcurrent >= AGENT_CHAT_MAX_CONCURRENT) {\n return { allowed: false, error: \"Too many concurrent agent sessions. Please wait.\" };\n }\n\n // Per-store per-minute check\n const now = Date.now();\n let entry = agentChatLimiter.get(storeId);\n if (!entry || now - entry.windowStart > 60_000) {\n entry = { count: 0, windowStart: now };\n agentChatLimiter.set(storeId, entry);\n }\n entry.count++;\n if (entry.count > AGENT_CHAT_MAX_PER_MIN) {\n return { allowed: false, error: `Rate limit exceeded: ${AGENT_CHAT_MAX_PER_MIN}/min for agent chat` };\n }\n return { allowed: true };\n}\n\n// Timing-safe secret comparison to prevent timing attacks\n// Hash both values to fixed length before comparing — avoids leaking secret length\nfunction safeCompare(a: string, b: string): boolean {\n if (!a || !b) return false;\n const hashA = createHash(\"sha256\").update(a).digest();\n const hashB = createHash(\"sha256\").update(b).digest();\n return timingSafeEqual(hashA, hashB);\n}\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\ninterface StreamEvent {\n type: \"text\" | \"tool_start\" | \"tool_result\" | \"tool_progress\" | \"error\" | \"done\" | \"usage\" | \"subagent\";\n text?: string;\n name?: string;\n input?: Record<string, unknown>;\n result?: unknown;\n success?: boolean;\n error?: string;\n progress?: unknown;\n usage?: {\n input_tokens: number;\n output_tokens: number;\n cache_creation_tokens?: number;\n cache_read_tokens?: number;\n cost_usd?: number;\n };\n conversationId?: string;\n subagentId?: string;\n subagentEvent?: string;\n}\n\n\n// Tool registry, user tools, executor, and agent loader are in ./tool-router.ts\n\n// ============================================================================\n// STORE CONTEXT — Server-derived store resolution (Apple-style)\n// The server NEVER blindly trusts a client-supplied storeId. Instead it:\n// 1. Resolves the user's stores from the `users` table via auth.uid()\n// 2. Validates the client hint against the resolved set\n// 3. Falls back to the user's first store if no hint provided\n// 4. Returns null if no store can be resolved (caller must fail closed)\n// ============================================================================\n\nasync function resolveAndValidateStoreId(\n supabase: SupabaseClient,\n clientStoreId: string | undefined,\n user: { id: string; email?: string } | null,\n isServiceRole: boolean,\n _token?: string,\n requestUserId?: string | null,\n): Promise<string | null> {\n // Service-role callers: trusted ONLY for internal server-to-server calls\n // (workflows, cron jobs) that have NO associated user. When a userId is\n // present (e.g. MCP CLI using env-var service role key), we MUST still\n // validate store membership to prevent cross-tenant access.\n if (isServiceRole) {\n const srUserId = user?.id || requestUserId;\n if (!srUserId) return clientStoreId || null; // true internal call — pass through\n if (!clientStoreId) return null; // user-context call without store hint\n\n // Validate the user actually belongs to the requested store\n const { data: membership } = await supabase\n .from(\"store_members\")\n .select(\"id\")\n .eq(\"store_id\", clientStoreId)\n .eq(\"user_id\", srUserId)\n .limit(1)\n .maybeSingle();\n\n if (membership) return clientStoreId;\n\n // Fallback: check users table (legacy single-store pattern)\n const { data: userRow } = await supabase\n .from(\"users\")\n .select(\"store_id\")\n .eq(\"auth_user_id\", srUserId)\n .eq(\"store_id\", clientStoreId)\n .maybeSingle();\n\n if (userRow) return clientStoreId;\n\n log.warn({ userId: srUserId, clientStoreId }, \"resolveStoreId: service-role caller userId not authorized for store\");\n return null;\n }\n\n if (!user?.id) return null;\n\n // Resolve user's actual stores from the `users` table (auth_user_id = auth.uid())\n const { data: userStores, error } = await supabase\n .from(\"users\")\n .select(\"store_id\")\n .eq(\"auth_user_id\", user.id)\n .not(\"store_id\", \"is\", null);\n\n if (error || !userStores?.length) {\n log.warn({ userId: user.id, error }, \"resolveStoreId: user has no stores\");\n return null;\n }\n\n const storeIds = userStores.map((r: { store_id: string }) => r.store_id);\n\n // If client provided a hint, validate it's in the user's set\n if (clientStoreId) {\n if (storeIds.includes(clientStoreId)) {\n return clientStoreId;\n }\n log.warn({ userId: user.id, clientStoreId, userStores: storeIds }, \"resolveStoreId: client storeId not in user's stores\");\n return null; // Reject — don't silently fall back\n }\n\n // No client hint — use first store (single-store users), or require explicit selection\n if (storeIds.length === 1) {\n return storeIds[0];\n }\n\n // Multi-store user without a hint — can't guess\n log.warn({ userId: user.id, storeCount: storeIds.length }, \"resolveStoreId: multi-store user must specify storeId\");\n return null;\n}\n\n// ============================================================================\n// CORS\n// ============================================================================\n\nfunction getCorsHeaders(origin?: string): Record<string, string> {\n const headers: Record<string, string> = {\n \"X-Content-Type-Options\": \"nosniff\",\n \"X-Frame-Options\": \"DENY\",\n \"X-XSS-Protection\": \"0\",\n \"Referrer-Policy\": \"strict-origin-when-cross-origin\",\n };\n\n if (ALLOWED_ORIGINS.includes(\"*\")) {\n headers[\"Access-Control-Allow-Origin\"] = \"*\";\n } else if (origin && ALLOWED_ORIGINS.includes(origin)) {\n headers[\"Access-Control-Allow-Origin\"] = origin;\n headers[\"Vary\"] = \"Origin\";\n }\n // If origin doesn't match, no CORS header = browser blocks the request\n\n headers[\"Access-Control-Allow-Methods\"] = \"GET, POST, OPTIONS\";\n headers[\"Access-Control-Allow-Headers\"] = \"Content-Type, Authorization, X-Store-Id\";\n return headers;\n}\n\n// ============================================================================\n// PHASE 3: SSE STREAMING — real-time workflow run progress\n// ============================================================================\n\n// Map<runId, Set<ServerResponse>> for multiplexing SSE clients\nconst sseClients = new Map<string, Set<http.ServerResponse>>();\nconst MAX_SSE_CLIENTS_PER_RUN = 10;\nconst MAX_SSE_TOTAL_CLIENTS = 100;\n\n/** Safe SSE write — returns false and calls cleanup if the connection is dead */\nfunction safeSseWrite(res: http.ServerResponse, data: string, cleanup: () => void): boolean {\n try {\n if (res.destroyed || res.writableEnded) { cleanup(); return false; }\n res.write(data);\n return true;\n } catch {\n cleanup();\n return false;\n }\n}\n\nfunction sendWorkflowSSE(res: http.ServerResponse, data: unknown): void {\n try {\n if (res.destroyed || res.writableEnded) return;\n res.write(`data: ${JSON.stringify(data)}\\n\\n`);\n } catch { /* client disconnected — benign */ }\n}\n\nfunction broadcastToRun(runId: string, data: unknown): void {\n const clients = sseClients.get(runId);\n if (!clients?.size) return;\n // H6 FIX: Prune dead connections during broadcast\n for (const res of clients) {\n if (res.destroyed || res.writableEnded) {\n clients.delete(res);\n continue;\n }\n sendWorkflowSSE(res, data);\n }\n if (clients.size === 0) sseClients.delete(runId);\n}\n\nfunction getTotalSseClients(): number {\n let total = 0;\n for (const clients of sseClients.values()) total += clients.size;\n return total;\n}\n\n// H6 FIX: Periodic stale connection cleanup (every 60s)\nconst sseCleanupInterval = setInterval(() => {\n for (const [rid, clients] of sseClients) {\n for (const res of clients) {\n if (res.destroyed || res.writableEnded) {\n clients.delete(res);\n }\n }\n if (clients.size === 0) sseClients.delete(rid);\n }\n}, 60_000);\n\n// pg LISTEN for real-time notifications\nconst DATABASE_URL = process.env.DATABASE_URL || \"\";\nlet pgClient: pg.Client | null = null;\nlet pgReconnectAttempts = 0;\nconst MAX_PG_RECONNECT_DELAY = 10_000; // 10s max — keep SSE reconnect snappy\n\nasync function setupPgListen(): Promise<void> {\n if (!DATABASE_URL) {\n log.info(\"DATABASE_URL not set — SSE streaming disabled, using worker-only mode\");\n return;\n }\n\n try {\n // Strip sslmode from URL (pg v8 treats sslmode=require as verify-full) and set ssl manually\n const cleanUrl = DATABASE_URL.replace(/[?&]sslmode=[^&]*/g, \"\").replace(/\\?$/, \"\");\n pgClient = new pg.Client({ connectionString: cleanUrl, ssl: { rejectUnauthorized: false } });\n await pgClient.connect();\n await pgClient.query(\"LISTEN workflow_step_event\");\n await pgClient.query(\"LISTEN workflow_run_event\");\n await pgClient.query(\"LISTEN workflow_step_pending\");\n await pgClient.query(\"LISTEN workflow_event\");\n await pgClient.query(\"LISTEN automation_event\");\n\n // Reset reconnect counter on successful connection\n pgReconnectAttempts = 0;\n pgListenReady = true;\n\n // Debounced event trigger processing — fires at most once per 100ms\n let eventTriggerTimer: ReturnType<typeof setTimeout> | null = null;\n function debouncedEventProcess(): void {\n if (eventTriggerTimer) return;\n eventTriggerTimer = setTimeout(async () => {\n eventTriggerTimer = null;\n try {\n const sb = getServiceClient();\n const count = await processEventTriggers(sb);\n if (count > 0) log.info({ count }, \"instant event processing\");\n } catch (err) { log.error({ err: (err as Error).message }, \"event trigger processing error\"); }\n }, 100);\n }\n\n pgClient.on(\"notification\", (msg) => {\n if (!msg.payload) return;\n try {\n const data = JSON.parse(msg.payload);\n\n // Automation event — trigger immediate processing\n if (msg.channel === \"automation_event\") {\n debouncedEventProcess();\n return;\n }\n\n const runId = data.run_id;\n if (!runId) return;\n\n if (msg.channel === \"workflow_step_event\") {\n broadcastToRun(runId, { type: \"step_update\", ...data });\n } else if (msg.channel === \"workflow_run_event\") {\n broadcastToRun(runId, { type: \"run_update\", ...data });\n } else if (msg.channel === \"workflow_event\") {\n broadcastToRun(runId, { type: \"event\", event_type: data.event_type, ...data });\n } else if (msg.channel === \"workflow_step_pending\") {\n // Phase 3.1: NOTIFY-driven step execution — immediate pickup (~50ms vs 5s polling)\n const sb = getServiceClient();\n processWorkflowSteps(sb, 1).catch((err) => {\n log.error({ err: (err as Error).message, runId }, \"NOTIFY-driven step processing failed\");\n });\n }\n } catch (err) { log.error({ err: (err as Error).message }, \"failed to parse pg notification\"); }\n });\n\n pgClient.on(\"error\", (err) => {\n log.error({ err: err.message }, \"pg-listen connection error\");\n pgClient = null;\n // Reconnect with exponential backoff\n pgReconnectAttempts++;\n const delay = Math.min(1000 * Math.pow(2, pgReconnectAttempts - 1), MAX_PG_RECONNECT_DELAY);\n log.warn({ delayMs: delay, attempt: pgReconnectAttempts }, \"pg-listen reconnecting\");\n setTimeout(() => setupPgListen(), delay);\n });\n\n log.info(\"pg-listen active on workflow_step_event, workflow_run_event, workflow_step_pending, workflow_event, automation_event\");\n } catch (err) {\n log.error({ err: (err as Error).message }, \"pg-listen failed to connect\");\n pgClient = null;\n // Reconnect with exponential backoff on initial connection failure too\n pgReconnectAttempts++;\n const delay = Math.min(1000 * Math.pow(2, pgReconnectAttempts - 1), MAX_PG_RECONNECT_DELAY);\n log.warn({ delayMs: delay, attempt: pgReconnectAttempts }, \"pg-listen reconnecting\");\n setTimeout(() => setupPgListen(), delay);\n }\n}\n\n// ============================================================================\n// HELPERS\n// ============================================================================\n\nfunction getAnthropicClient(agent: AgentConfig): Anthropic {\n const key = agent.api_key || ANTHROPIC_API_KEY;\n return new Anthropic({ apiKey: key, timeout: 15 * 60 * 1000 }); // 15 min for tool-heavy requests\n}\n\nfunction sendSSE(res: http.ServerResponse, event: StreamEvent): void {\n try {\n if (res.destroyed || res.writableEnded) return;\n res.write(`data: ${JSON.stringify(event)}\\n\\n`);\n } catch { /* client disconnected — benign */ }\n}\n\nfunction jsonResponse(res: http.ServerResponse, status: number, data: unknown, corsHeaders: Record<string, string>): void {\n res.writeHead(status, { \"Content-Type\": \"application/json\", ...corsHeaders });\n res.end(JSON.stringify(data));\n}\n\n/**\n * Strip large base64 data fields from a JSON string up to `keepFrom` offset.\n * Uses a linear indexOf scan — safe on strings of any size (no regex stack overflow).\n * Handles both `\"data\":\"<base64>\"` (Anthropic image blocks) and\n * `\"__IMAGE__<mime>__<base64>\"` text values (Read tool marker format).\n */\nfunction stripLargeBase64Fields(raw: string, keepFrom: number): string {\n const MIN_DATA_LEN = 8_000;\n\n // ── Pass 1: Strip \"data\":\"<large base64>\" fields (Anthropic image source blocks) ──\n let result = raw;\n {\n const DATA_MARKER = '\"data\":\"';\n const parts: string[] = [];\n let pos = 0;\n\n while (pos < keepFrom) {\n const idx = result.indexOf(DATA_MARKER, pos);\n if (idx === -1 || idx >= keepFrom) {\n parts.push(result.slice(pos, keepFrom));\n pos = keepFrom;\n break;\n }\n\n parts.push(result.slice(pos, idx + DATA_MARKER.length));\n pos = idx + DATA_MARKER.length;\n\n // Find closing quote (base64 has no backslashes, so simple scan is safe)\n let end = pos;\n while (end < result.length && result[end] !== '\"') end++;\n\n if (end - pos >= MIN_DATA_LEN && end <= keepFrom) {\n // Large data field in the prune zone — replace with empty\n parts.push('\"');\n pos = end + 1; // skip past the original closing quote (already replaced)\n }\n // else: small field or near keepFrom boundary — leave intact\n }\n\n parts.push(result.slice(keepFrom)); // always keep tail intact\n result = parts.join(\"\");\n }\n\n // ── Pass 2: Strip __IMAGE__<mime>__<large base64> text markers ──\n // If the client-side tool-dispatch regex failed to convert these to image\n // content blocks, they stay as huge text strings in tool_result content.\n // They appear in JSON as: \"__IMAGE__image/png__iVBOR...very long...\"\n {\n const IMG_MARKER = \"__IMAGE__\";\n const adjustedKeepFrom = Math.min(keepFrom, result.length);\n const parts: string[] = [];\n let pos = 0;\n\n while (pos < adjustedKeepFrom) {\n const idx = result.indexOf(IMG_MARKER, pos);\n if (idx === -1 || idx >= adjustedKeepFrom) {\n parts.push(result.slice(pos, adjustedKeepFrom));\n pos = adjustedKeepFrom;\n break;\n }\n\n parts.push(result.slice(pos, idx));\n\n // Find the end of this text value (closing quote of the JSON string)\n let end = idx;\n while (end < result.length && result[end] !== '\"') end++;\n\n if (end - idx >= MIN_DATA_LEN && end <= adjustedKeepFrom) {\n // Large __IMAGE__ marker in the prune zone — replace with placeholder\n parts.push(\"[image pruned]\");\n pos = end; // land on closing quote; next iteration emits it\n } else {\n // Small or near boundary — keep intact\n parts.push(result.slice(idx, idx + IMG_MARKER.length));\n pos = idx + IMG_MARKER.length;\n }\n }\n\n parts.push(result.slice(adjustedKeepFrom));\n result = parts.join(\"\");\n }\n\n return result;\n}\n\nasync function readBody(req: http.IncomingMessage): Promise<string> {\n // 500MB hard limit — conversation history with many large images can be very large.\n // For bodies over 10MB we prune old base64 image data from the raw string before\n // JSON.parse, so subsequent requests in the same conversation stay bounded.\n const MAX_BODY = 524_288_000; // 500MB\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n let size = 0;\n let rejected = false;\n req.on(\"data\", (chunk: Buffer) => {\n size += chunk.length;\n if (size > MAX_BODY && !rejected) {\n rejected = true;\n req.resume(); // drain to avoid Fly proxy 502\n reject(new Error(\"Request body too large (max 500MB)\"));\n return;\n }\n if (!rejected) chunks.push(chunk);\n });\n req.on(\"end\", () => {\n if (rejected) return;\n\n // Detect body truncation: if Content-Length was sent and we received less\n const declaredLen = parseInt(req.headers[\"content-length\"] || \"0\", 10);\n if (declaredLen > 0 && size < declaredLen) {\n log.error({ declaredLen, receivedLen: size }, \"Request body truncated during transmission\");\n reject(new Error(`Body truncated: expected ${declaredLen} bytes, got ${size}`));\n return;\n }\n\n let raw = Buffer.concat(chunks).toString(\"utf8\");\n\n // Strip old base64 data from history when body is large.\n // Threshold lowered to 1MB — image-heavy conversations (e.g. reading\n // product photos) easily exceed 10MB with just a few images.\n // Keep the last 1MB intact (current user message with fresh images).\n // Uses a linear scan to avoid String.replace() stack overflow on huge strings.\n if (raw.length > 1_000_000) {\n const keepFrom = Math.max(0, raw.length - 1_048_576); // keep last 1MB\n raw = stripLargeBase64Fields(raw, keepFrom);\n log.info({ originalBytes: size, prunedBytes: Buffer.byteLength(raw) }, \"Pruned old base64 data from request body\");\n }\n\n resolve(raw);\n });\n req.on(\"error\", reject);\n });\n}\n\n// ============================================================================\n// HISTORY COMPACTION\n// ============================================================================\n\n/**\n * Compact conversation history to fit within a total character budget.\n *\n * Does NOT truncate individual messages or tool results — Anthropic's\n * context_management API handles clearing old tool uses (clear_tool_uses_20250919)\n * and compacting context (compact_20260112) when the context window grows.\n *\n * This function only enforces a total budget by walking newest→oldest and\n * dropping the oldest messages that don't fit.\n */\nfunction compactHistory(\n history: Anthropic.MessageParam[],\n maxHistoryChars: number,\n): Anthropic.MessageParam[] {\n if (!history?.length) return [];\n let totalChars = 0;\n const compacted: Anthropic.MessageParam[] = [];\n for (let i = history.length - 1; i >= 0; i--) {\n const msg = history[i];\n const msgChars = JSON.stringify(msg.content).length;\n if (totalChars + msgChars > maxHistoryChars) break;\n totalChars += msgChars;\n compacted.unshift(msg);\n }\n // Ensure starts with user message\n while (compacted.length > 0 && compacted[0].role !== \"user\") compacted.shift();\n return compacted;\n}\n\n// ============================================================================\n// SHARED AGENT HELPERS — used by both SSE chat and channel agent paths\n// ============================================================================\n\n/** Build the full system prompt for an agent. Both SSE chat and channel paths\n * call this so the prompt logic is never duplicated. */\nasync function buildAgentSystemPrompt(\n supabase: SupabaseClient,\n agent: AgentConfig,\n storeId: string | undefined,\n message: string,\n tools: ToolDef[],\n opts?: {\n senderContext?: SenderContext;\n clientContext?: Record<string, any>;\n userId?: string;\n userEmail?: string | null;\n extendedTools?: Array<{ name: string; description: string }>;\n },\n): Promise<{ systemPrompt: string; dynamicContext: string }> {\n // --- STATIC portion (cache-friendly, same across conversations) ---\n // Sanitize the DB-stored agent system prompt to prevent injection attacks\n const rawAgentPrompt = agent.system_prompt || \"You are a helpful assistant.\";\n let systemPrompt = sanitizeAndLog(rawAgentPrompt, \"buildAgentSystemPrompt\", { agentId: agent.id });\n if (storeId) systemPrompt += `\\n\\nYou are operating for store_id: ${storeId}. Always include this in tool calls that require it.`;\n if (!agent.can_modify) systemPrompt += \"\\n\\nIMPORTANT: You have read-only access. Do not attempt to modify any data.\";\n if (agent.tone && agent.tone !== \"professional\") systemPrompt += `\\n\\nTone: Respond in a ${agent.tone} tone.`;\n if (agent.verbosity === \"concise\") systemPrompt += \"\\n\\nBe concise — short answers, minimal explanation.\";\n else if (agent.verbosity === \"verbose\") systemPrompt += \"\\n\\nBe thorough — provide detailed answers with full context.\";\n\n if (agent.context_config) {\n const ctx = agent.context_config;\n if (ctx.includeLocations && ctx.locationIds?.length) systemPrompt += `\\n\\nFocus on these locations: ${ctx.locationIds.join(\", \")}`;\n if (ctx.includeCustomers && ctx.customerSegments?.length) systemPrompt += `\\n\\nFocus on these customer segments: ${ctx.customerSegments.join(\", \")}`;\n }\n\n // Tool manifest — core tools (full schemas already loaded)\n const toolNames = tools.map(t => t.name);\n systemPrompt += `\\n\\n## Available Tools\\nYou have ${toolNames.length} core tools available in this session:\\n${toolNames.join(\", \")}\\n\\nFor local machine operations, use the \\`local_agent\\` tool (exec, tools, discover actions). For cloud security tools, use \\`kali\\`. Do NOT reference CLI-local tools like read_file, write_file, edit_file, glob, grep, run_command — those are not available in this environment.`;\n\n // Extended tools index — names + one-line descriptions only (saves ~20K tokens)\n const extendedTools = opts?.extendedTools || [];\n if (extendedTools.length > 0) {\n systemPrompt += `\\n\\n## Extended Tools (call discover_tools to activate)\\nThese tools are available but not loaded yet. Call \\`discover_tools\\` with the tool name(s) before using them:\\n`;\n for (const t of extendedTools) {\n // First sentence only for compact display\n const shortDesc = t.description.split(\".\")[0];\n systemPrompt += `- **${t.name}**: ${shortDesc}\\n`;\n }\n }\n\n // --- DYNAMIC portion (changes per conversation, prepended to user message) ---\n const dynamicParts: string[] = [];\n\n // Client-provided session context (SSE chat sends this from SwiftUI/web)\n if (opts?.clientContext && typeof opts.clientContext === \"object\") {\n const context = opts.clientContext;\n const ctxParts: string[] = [];\n if (context.storeName) ctxParts.push(`Store: ${context.storeName}`);\n if (context.locationName) {\n let loc = `Location: ${context.locationName}`;\n if (context.locationAddress) loc += ` (${context.locationAddress})`;\n if (context.locationType) loc += ` [${context.locationType}]`;\n ctxParts.push(loc);\n }\n if (context.userName) {\n ctxParts.push(`User: ${context.userName}${opts.userEmail ? ` (${opts.userEmail})` : \"\"}`);\n } else if (opts.userEmail) {\n ctxParts.push(`User: ${opts.userEmail}`);\n }\n if (context.conversationType) {\n ctxParts.push(`Channel: ${context.conversationTitle || context.conversationType} (${context.conversationType})`);\n }\n if (ctxParts.length) {\n dynamicParts.push(`## Current Session Context\\n${ctxParts.join(\"\\n\")}`);\n }\n }\n\n // Parallel DB lookups: customer fetch + memory recall\n const customerPromise = (opts?.senderContext?.customerId && storeId)\n ? Promise.resolve(\n supabase.from(\"v_store_customers\")\n .select(\"first_name, last_name, email, phone, loyalty_tier, total_orders, total_spent, lifetime_value\")\n .eq(\"id\", opts.senderContext.customerId).eq(\"store_id\", storeId).single()\n ).then(({ data }) => data).catch(() => null)\n : Promise.resolve(null);\n\n const memoryPromise = storeId\n ? Promise.resolve(\n supabase.rpc(\"recall_memory\", {\n p_agent_id: agent.id,\n p_query: message.substring(0, 200),\n p_type: null,\n p_limit: 5,\n })\n ).then(({ data }) => data).catch((err: Error) => { log.warn({ err: err.message }, \"memory recall failed\"); return null; })\n : Promise.resolve(null);\n\n const [cust, memories] = await Promise.all([customerPromise, memoryPromise]);\n\n // Channel-specific customer context injection\n if (cust && opts?.senderContext?.customerId) {\n dynamicParts.push(`## Current Customer\\nName: ${cust.first_name} ${cust.last_name}\\nEmail: ${cust.email || \"N/A\"}\\nPhone: ${cust.phone || \"N/A\"}\\nLoyalty: ${cust.loyalty_tier || \"None\"}\\nOrders: ${cust.total_orders || 0}\\nSpent: $${(cust.total_spent || 0).toFixed(2)}\\nCustomer ID: ${opts.senderContext.customerId}`);\n } else if (opts?.senderContext) {\n const sc = opts.senderContext;\n dynamicParts.push(`## Sender\\nID: ${sc.senderId}\\nName: ${sc.senderName || \"Unknown\"}\\nChannel: ${sc.channelType || \"unknown\"}${sc.channelName ? ` (${sc.channelName})` : \"\"}\\n(No customer record matched — use CRM tools to look them up if needed)`);\n }\n\n // Memory recall — inject relevant memories (capped at 5, 100 chars each)\n if (memories?.length) {\n const memBlock = memories.map((m: any) =>\n `- [${m.memory_type}] ${m.key}: ${JSON.stringify(m.value).substring(0, 100)}`\n ).join(\"\\n\");\n dynamicParts.push(`## Agent Memory\\nRelevant memories from previous conversations:\\n${memBlock}`);\n }\n\n const dynamicContext = dynamicParts.join(\"\\n\\n\");\n\n return { systemPrompt, dynamicContext };\n}\n\n/** Persist everything after an agent turn — messages, audit, memory, cost.\n * Called by both SSE chat and channel paths so nothing is ever missed. */\nasync function persistAgentTurn(\n supabase: SupabaseClient,\n agent: AgentConfig,\n opts: {\n conversationId: string;\n storeId?: string;\n agentId: string;\n agentModel: string;\n traceId: string;\n message: string;\n result: { finalText: string; toolCallCount: number; toolsUsed: string[]; tokens: { input: number; output: number; cacheCreation?: number; cacheRead?: number }; costUsd: number; turnCount?: number; loopDetectorStats?: any; turns?: Array<{ turn: number; inputTokens: number; outputTokens: number; cacheRead: number; cacheCreation: number; toolsUsed: string[]; costUsd: number }>; stopReason?: string };\n source: string;\n chatStartTime: number;\n chatEndTime: number;\n // SSE chat fields\n userId?: string;\n userEmail?: string | null;\n // Channel fields\n senderContext?: SenderContext;\n },\n): Promise<void> {\n const { conversationId, storeId, agentId, agentModel, traceId, message, result, source, chatStartTime, chatEndTime, userId, userEmail, senderContext } = opts;\n\n // ── Persist user + assistant messages to ai_messages ──\n try {\n await supabase.from(\"ai_messages\").insert([\n {\n conversation_id: conversationId, role: \"user\",\n content: [{ type: \"text\", text: message }],\n token_count: Math.ceil(message.length / 4),\n },\n {\n conversation_id: conversationId, role: \"assistant\",\n content: [{ type: \"text\", text: result.finalText || \"\" }],\n is_tool_use: result.toolCallCount > 0,\n tool_names: result.toolsUsed?.length ? result.toolsUsed : null,\n token_count: result.tokens.input + result.tokens.output,\n },\n ]);\n } catch (err) {\n log.error({ err: (err as Error).message }, \"message persist failed\");\n }\n\n // ── Update conversation metadata ──\n try {\n await supabase.from(\"ai_conversations\").update({\n metadata: {\n agentName: agent.name,\n source,\n model: agentModel,\n lastTurnTokens: result.tokens.input + result.tokens.output,\n lastToolCalls: result.toolCallCount,\n lastDurationMs: chatEndTime - chatStartTime,\n // Channel-specific (null when SSE chat — that's fine, no clutter)\n ...(senderContext ? {\n channel_type: senderContext.channelType || null,\n channel_id: senderContext.channelId || null,\n channel_name: senderContext.channelName || null,\n sender_id: senderContext.senderId || null,\n customer_id: senderContext.customerId || null,\n customer_name: senderContext.customerName || null,\n } : {}),\n },\n }).eq(\"id\", conversationId);\n } catch (err) {\n log.error({ err: (err as Error).message }, \"conversation update failed\");\n }\n\n // ── Telemetry: user message → ClickHouse ──\n try {\n queueSpan(auditRowToSpan({\n action: \"chat.user_message\",\n severity: \"info\",\n store_id: storeId || null,\n resource_type: \"chat_message\",\n resource_id: agentId,\n request_id: traceId,\n conversation_id: conversationId,\n user_id: userId || null,\n user_email: userEmail || null,\n source,\n service_name: \"agent-server\",\n span_kind: \"INTERNAL\",\n status_code: \"OK\",\n start_time: new Date().toISOString(),\n end_time: new Date().toISOString(),\n duration_ms: 0,\n input_bytes: typeof message === \"string\" ? message.length : 0,\n details: {\n message_preview: message.substring(0, 200),\n agent_id: agentId,\n model: agentModel,\n conversation_id: conversationId,\n ...(senderContext ? {\n channel_type: senderContext.channelType || null,\n sender_id: senderContext.senderId || null,\n customer_id: senderContext.customerId || null,\n } : {}),\n },\n }));\n } catch (err) {\n log.error({ err: (err as Error).message }, \"audit user_message failed\");\n }\n\n // ── Telemetry: assistant response → ClickHouse ──\n try {\n queueSpan(auditRowToSpan({\n action: \"chat.assistant_response\",\n severity: \"info\",\n store_id: storeId || null,\n resource_type: \"chat_message\",\n resource_id: agentId,\n request_id: traceId,\n conversation_id: conversationId,\n duration_ms: chatEndTime - chatStartTime,\n user_id: userId || null,\n user_email: userEmail || null,\n source,\n input_tokens: result.tokens.input,\n output_tokens: result.tokens.output,\n total_cost: result.costUsd,\n model: agentModel,\n trace_id: traceId,\n span_kind: \"INTERNAL\",\n service_name: \"agent-server\",\n status_code: \"OK\",\n start_time: new Date(chatStartTime).toISOString(),\n end_time: new Date(chatEndTime).toISOString(),\n stop_reason: result.stopReason || undefined,\n turn_number: result.turnCount || 1,\n details: {\n response_preview: (result.finalText || \"\").substring(0, 500),\n agent_id: agentId,\n model: agentModel,\n \"gen_ai.request.model\": agentModel,\n \"gen_ai.usage.input_tokens\": result.tokens.input,\n \"gen_ai.usage.output_tokens\": result.tokens.output,\n \"gen_ai.usage.cache_creation_tokens\": result.tokens.cacheCreation || 0,\n \"gen_ai.usage.cache_read_tokens\": result.tokens.cacheRead || 0,\n \"gen_ai.usage.cost\": result.costUsd,\n turn_count: result.turnCount || 1,\n tool_calls: result.toolCallCount,\n tool_names: result.toolsUsed,\n conversation_id: conversationId,\n session_cost_usd: result.costUsd,\n cache_creation_tokens: result.tokens.cacheCreation || 0,\n cache_read_tokens: result.tokens.cacheRead || 0,\n cache_hit_rate: result.tokens.input > 0\n ? Math.round((result.tokens.cacheRead || 0) / ((result.tokens.cacheRead || 0) + result.tokens.input) * 10000) / 100\n : 0,\n cache_cost_savings_pct: result.tokens.input > 0 && (result.tokens.cacheRead || 0) > 0\n ? Math.round((result.tokens.cacheRead || 0) * 0.9 / ((result.tokens.cacheRead || 0) + result.tokens.input) * 10000) / 100\n : 0,\n loop_detector_stats: result.loopDetectorStats || null,\n turns: result.turns || [],\n ...(senderContext ? {\n channel_type: senderContext.channelType || null,\n channel_id: senderContext.channelId || null,\n channel_name: senderContext.channelName || null,\n sender_id: senderContext.senderId || null,\n customer_id: senderContext.customerId || null,\n customer_name: senderContext.customerName || null,\n } : {}),\n },\n }));\n } catch (err) {\n log.error({ err: (err as Error).message }, \"audit assistant_response failed\");\n }\n\n // ── Memory extraction — awaited with retry ──\n if (storeId && result.finalText && result.finalText.length > 50) {\n try {\n await extractAndStoreMemories(supabase, getAnthropicClient(agent), agentId, storeId, message, result.finalText);\n } catch (err1: any) {\n // Retry once after 2s\n try {\n await new Promise(r => setTimeout(r, 2000));\n await extractAndStoreMemories(supabase, getAnthropicClient(agent), agentId, storeId, message, result.finalText);\n } catch (err2: any) {\n log.error({ err: err2.message }, \"memory extract failed after retry\");\n queueSpan(auditRowToSpan({\n action: \"memory.extraction_failed\", severity: \"warning\",\n store_id: storeId || null, resource_type: \"agent_memory\",\n resource_id: agentId, conversation_id: conversationId,\n user_id: userId || null, user_email: userEmail || null,\n error_type: classifyErrorType(err2.message) || undefined,\n service_name: \"agent-server\", span_kind: \"INTERNAL\", status_code: \"ERROR\",\n start_time: new Date().toISOString(), end_time: new Date().toISOString(),\n error_message: err2.message,\n details: { error: err2.message, user_message_preview: message.substring(0, 100) },\n }));\n }\n }\n }\n\n // ── Cost budget tracking — awaited with retry ──\n if (storeId && result.costUsd > 0) {\n try {\n await updateCostBudgets(supabase, storeId, agentId, result.costUsd);\n } catch (err1: any) {\n try {\n await new Promise(r => setTimeout(r, 1000));\n await updateCostBudgets(supabase, storeId, agentId, result.costUsd);\n } catch (err2: any) {\n log.error({ err: err2.message }, \"cost budget update failed after retry\");\n // Flag conversation metadata so budget sync can be reconciled later\n await supabase.from(\"ai_conversations\").update({\n metadata: { budget_sync_failed: true, failed_cost_usd: result.costUsd },\n }).eq(\"id\", conversationId).then(() => {});\n }\n }\n }\n}\n\n// ============================================================================\n// AGENT CHAT HANDLER\n// ============================================================================\n\nasync function handleAgentChat(\n req: http.IncomingMessage,\n res: http.ServerResponse,\n supabase: SupabaseClient,\n body: any,\n user: { id: string; email?: string } | null,\n isServiceRole: boolean,\n token: string,\n corsHeaders: Record<string, string>\n): Promise<void> {\n const { agentId, message, conversationHistory, source, conversationId, context, attachments } = body;\n let storeId: string | undefined = body.storeId;\n\n if (!agentId || !message) {\n jsonResponse(res, 400, { error: \"agentId and message required\" }, corsHeaders);\n return;\n }\n\n if (typeof message === \"string\" && message.length > 100_000) {\n jsonResponse(res, 400, { error: \"Message too long (max 100K characters)\" }, corsHeaders);\n return;\n }\n\n // Server-derived store resolution — never trust client blindly\n const resolvedStoreId = await resolveAndValidateStoreId(\n supabase, storeId, user, isServiceRole, token, body.userId\n );\n\n // For service-role callers (workflows, internal), also try body.userId fallback\n if (!resolvedStoreId && isServiceRole && body.userId) {\n const { data: srStores } = await supabase\n .from(\"users\")\n .select(\"store_id\")\n .eq(\"auth_user_id\", body.userId)\n .not(\"store_id\", \"is\", null)\n .limit(1);\n if (srStores?.length) {\n storeId = srStores[0].store_id;\n }\n } else {\n storeId = resolvedStoreId || undefined;\n }\n\n // Fail closed: non-service-role requests MUST have a resolved store\n if (!storeId && !isServiceRole) {\n jsonResponse(res, 400, { error: \"storeId required for agent chat\" }, corsHeaders);\n return;\n }\n\n log.info({ storeId: storeId || \"NONE\", source: body.source || \"unknown\", isServiceRole, userId: user?.id || body.userId || \"NONE\" }, \"agent-chat request\");\n\n // Agent chat rate limiting — per-store + concurrent cap\n const rateLimitStoreId = storeId || agentId; // fallback to agentId if no store\n const rateCheck = checkAgentChatRateLimit(rateLimitStoreId);\n if (!rateCheck.allowed) {\n res.writeHead(429, { \"Content-Type\": \"application/json\", ...corsHeaders });\n res.end(JSON.stringify({ error: rateCheck.error }));\n return;\n }\n agentChatConcurrent++;\n try {\n\n const userId: string = user?.id || body.userId || \"\";\n const userEmail: string | null = user?.email || body.userEmail || null;\n\n const agent = await loadAgentConfig(supabase, agentId, storeId);\n if (!agent) {\n jsonResponse(res, 404, { error: \"Agent not found\" }, corsHeaders);\n return;\n }\n\n const { core: coreTools, extended: extendedTools } = await loadTools(supabase);\n setExtendedToolsCache(extendedTools); // Populate discover_tools handler cache\n const { rows: userToolRows, defs: userToolDefs } = storeId\n ? await loadUserTools(supabase, storeId)\n : { rows: [] as UserToolRow[], defs: [] as ToolDef[] };\n const tools = getToolsForAgent(agent, coreTools, userToolDefs);\n const traceId = randomUUID();\n const agentModel = agent.model || MODELS.SONNET;\n\n // Resolve or create conversation\n let activeConversationId: string;\n if (conversationId) {\n activeConversationId = conversationId;\n } else {\n let conv = await supabase\n .from(\"ai_conversations\")\n .insert({\n store_id: storeId || null,\n user_id: userId || null,\n agent_id: agentId,\n title: message.substring(0, 100),\n metadata: { agentName: agent.name, source: source || \"whale_chat\" },\n })\n .select(\"id\")\n .single();\n if (conv.error) {\n log.error({ err: conv.error.message, details: conv.error.details, hint: conv.error.hint, storeId, userId, agentId }, \"conversation create failed\");\n // Retry without user_id (may be FK constraint)\n conv = await supabase\n .from(\"ai_conversations\")\n .insert({\n store_id: storeId || null,\n agent_id: agentId,\n title: message.substring(0, 100),\n metadata: { agentName: agent.name, source: source || \"whale_chat\", userId, userEmail },\n })\n .select(\"id\")\n .single();\n if (conv.error) {\n log.error({ err: conv.error.message, details: conv.error.details, hint: conv.error.hint }, \"conversation retry create failed\");\n }\n }\n activeConversationId = conv.data?.id || randomUUID();\n log.info({ conversationId: activeConversationId, fromDb: !!conv.data?.id }, \"conversation resolved\");\n }\n\n // Build system prompt — shared helper ensures SSE chat + channel paths are identical\n const { systemPrompt, dynamicContext } = await buildAgentSystemPrompt(supabase, agent, storeId, message, tools, {\n clientContext: context, userId, userEmail, extendedTools: getExtendedToolsIndex(),\n });\n\n const anthropic = getAnthropicClient(agent);\n\n // Resolve all behavioral config from DB — single source of truth\n const resolved = resolveAgentLoopConfig(agent, \"sse\");\n if (resolved.defaultsUsed.length > 0) {\n log.info({ agentId, defaults: resolved.defaultsUsed }, \"agent config defaults applied\");\n }\n\n const MAX_HISTORY_CHARS = resolved.maxHistoryChars;\n\n // Build user message — multi-modal if image attachments present\n let userContent: Anthropic.MessageParam[\"content\"];\n if (attachments?.length) {\n const contentBlocks: any[] = [];\n for (const att of attachments) {\n if (att.type === \"image\" && att.media_type && att.data) {\n contentBlocks.push({\n type: \"image\",\n source: { type: \"base64\", media_type: att.media_type, data: att.data },\n });\n }\n }\n contentBlocks.push({ type: \"text\", text: message });\n userContent = contentBlocks;\n } else {\n userContent = message;\n }\n\n // Prepend dynamic context to user message to keep system prompt static (cache-friendly)\n const contextPrefix = dynamicContext ? `[Context]\\n${dynamicContext}\\n\\n[User Message]\\n` : \"\";\n const finalUserContent = typeof userContent === \"string\"\n ? contextPrefix + userContent\n : [...(contextPrefix ? [{ type: \"text\" as const, text: contextPrefix }] : []), ...userContent];\n const messages: Anthropic.MessageParam[] = [\n ...compactHistory(conversationHistory || [], MAX_HISTORY_CHARS),\n { role: \"user\", content: finalUserContent },\n ];\n\n // Start SSE stream\n res.writeHead(200, {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n ...corsHeaders,\n });\n\n // Client disconnect detection\n let clientDisconnected = false;\n req.on(\"close\", () => { clientDisconnected = true; });\n\n const startedAt = Date.now();\n const chatStartTime = Date.now();\n\n try {\n const result = await runServerAgentLoop({\n anthropic,\n supabase,\n model: agentModel,\n systemPrompt,\n messages,\n tools,\n extendedTools,\n // All behavioral knobs from resolved config — DB is single source of truth\n maxTurns: resolved.maxTurns,\n temperature: resolved.temperature,\n maxTokens: resolved.maxTokens,\n maxConcurrentTools: resolved.maxConcurrentTools,\n enableDelegation: resolved.enableDelegation,\n enableModelRouting: resolved.enableModelRouting,\n contextOverrides: resolved.contextOverrides,\n subagentMaxTokens: resolved.subagentMaxTokens,\n subagentMaxTurns: resolved.subagentMaxTurns,\n subagentTemperature: resolved.subagentTemperature,\n // Loop detector thresholds from DB config\n loopDetectorConfig: {\n identicalCallLimit: resolved.loopIdenticalCallLimit,\n consecutiveErrorLimit: resolved.loopConsecutiveErrorLimit,\n turnErrorLimit: resolved.loopTurnErrorLimit,\n window: resolved.loopWindow,\n sessionToolErrorLimit: resolved.loopSessionToolErrorLimit,\n consecutiveFailedTurnLimit: resolved.loopConsecutiveFailedTurnLimit,\n fileReadLimit: resolved.loopFileReadLimit,\n },\n batchErrorLimit: resolved.loopBatchErrorLimit,\n storeId,\n traceId,\n userId,\n userEmail,\n source,\n conversationId: activeConversationId,\n agentId,\n executeTool: async (toolName, args, sourceOverride, onToolProgress) => {\n const toolArgs = { ...args };\n if (!toolArgs.store_id && storeId) toolArgs.store_id = storeId;\n return executeTool(supabase, toolName, toolArgs, storeId, traceId,\n userId, userEmail, sourceOverride || source,\n activeConversationId, userToolRows, agentId, onToolProgress, true);\n },\n onToolProgress: (name, progress) =>\n sendSSE(res, { type: \"tool_progress\", name, progress }),\n onText: (text) => sendSSE(res, { type: \"text\", text }),\n onToolStart: (name, input?) => {\n // Only send when input is available — deduplicates streaming double-fire\n // (sse-parser fires onToolStart twice: once on content_block_start without input,\n // once on content_block_stop with parsed input)\n if (input !== undefined) {\n sendSSE(res, { type: \"tool_start\", name, input });\n }\n },\n onToolResult: (name, success, r) => sendSSE(res, { type: \"tool_result\", name, success, result: r }),\n onSubagentProgress: (evt) => {\n sendSSE(res, { type: \"subagent\", subagentId: evt.subagentId, subagentEvent: evt.event, name: evt.toolName });\n },\n clientDisconnected: { get value() { return clientDisconnected; } },\n startedAt,\n maxDurationMs: resolved.maxDurationMs,\n });\n\n // Send usage SSE\n sendSSE(res, {\n type: \"usage\",\n usage: {\n input_tokens: result.tokens.input,\n output_tokens: result.tokens.output,\n cache_creation_tokens: result.tokens.cacheCreation,\n cache_read_tokens: result.tokens.cacheRead,\n cost_usd: result.costUsd,\n },\n });\n\n // Persist everything — shared helper ensures SSE chat + channel paths are identical\n await persistAgentTurn(supabase, agent, {\n conversationId: activeConversationId,\n storeId, agentId, agentModel, traceId, message, result,\n source: source || \"whale_chat\",\n chatStartTime, chatEndTime: Date.now(),\n userId, userEmail,\n });\n\n sendSSE(res, { type: \"done\", conversationId: activeConversationId });\n } catch (err) {\n sendSSE(res, { type: \"error\", error: sanitizeError(err) });\n }\n\n res.end();\n\n } finally {\n agentChatConcurrent--;\n }\n}\n\n// ============================================================================\n// MEMORY EXTRACTION — extract key facts after agent conversation\n// ============================================================================\n\nasync function extractAndStoreMemories(\n supabase: SupabaseClient, anthropic: Anthropic,\n agentId: string, storeId: string,\n userMessage: string, assistantResponse: string\n): Promise<void> {\n const extraction = await anthropic.messages.create({\n model: \"claude-haiku-4-5-20251001\",\n max_tokens: 500,\n system: `Extract key facts worth remembering from this conversation turn.\nReturn JSON array: [{\"key\": \"short_key\", \"value\": {\"detail\": \"...\"}, \"type\": \"short_term|long_term|entity\"}]\nRules:\n- Only extract genuinely useful facts (preferences, decisions, corrections, entities)\n- \"entity\" for people/businesses/products mentioned\n- \"long_term\" for preferences, patterns, decisions\n- \"short_term\" for context that may expire\n- Return [] if nothing worth remembering\n- Max 3 items per turn`,\n messages: [{\n role: \"user\",\n content: `User: ${userMessage.substring(0, 500)}\\n\\nAssistant: ${assistantResponse.substring(0, 1000)}`\n }],\n });\n\n const text = extraction.content.find(b => b.type === \"text\")?.text || \"[]\";\n const match = text.match(/\\[[\\s\\S]*\\]/);\n if (!match) return;\n\n let items: any[];\n try {\n items = JSON.parse(match[0]);\n } catch {\n return; // Malformed JSON from extraction\n }\n\n for (const item of items.slice(0, 3)) {\n if (!item.key) continue;\n await supabase.rpc(\"store_memory\", {\n p_agent_id: agentId,\n p_store_id: storeId,\n p_type: item.type || \"short_term\",\n p_key: item.key,\n p_value: item.value || {},\n });\n }\n}\n\n// ============================================================================\n// COST BUDGET TRACKING — increment active budgets after each conversation\n// ============================================================================\n\n// P0 FIX: Atomic cost budget increment via RPC (fixes TOCTOU race on concurrent updates)\nasync function updateCostBudgets(\n supabase: SupabaseClient, storeId: string, agentId: string, costUsd: number\n): Promise<void> {\n const { error } = await supabase.rpc(\"increment_cost_budget\", {\n p_store_id: storeId,\n p_agent_id: agentId,\n p_cost_usd: costUsd,\n });\n if (error) {\n console.error(\"[cost-budget] increment_cost_budget RPC failed:\", error.message);\n }\n}\n\n\n// ============================================================================\n// HTTP SERVER\n// ============================================================================\n\n// Connection tracking for graceful shutdown draining\nlet activeRequests = 0;\n\nconst server = http.createServer(async (req, res) => {\n activeRequests++;\n res.on(\"close\", () => { activeRequests--; });\n\n const origin = req.headers.origin || \"\";\n const corsHeaders = getCorsHeaders(origin);\n\n // Health check — readiness-aware for Fly.io\n if (req.method === \"GET\" && (req.url === \"/\" || req.url === \"/health\")) {\n const ready = isReady();\n const status = ready ? 200 : 503;\n const agentStats = getGatewayStats();\n jsonResponse(res, status, {\n status: ready ? \"ok\" : \"starting\",\n version: process.env.npm_package_version || \"6.4.0\",\n uptime: Math.floor(process.uptime()),\n pg_listen: pgListenReady,\n worker_pool: workerPoolReady,\n local_agents: agentStats.total_agents,\n }, corsHeaders);\n return;\n }\n\n // CORS preflight\n if (req.method === \"OPTIONS\") {\n res.writeHead(204, corsHeaders);\n res.end();\n return;\n }\n\n const url = new URL(req.url || \"/\", `http://${req.headers.host || \"localhost\"}`);\n const pathname = url.pathname;\n\n // ================================================================\n // Phase 3: SSE stream for workflow run progress\n // GET /workflows/runs/:id/stream\n // ================================================================\n if (req.method === \"GET\" && pathname.match(/^\\/workflows\\/runs\\/[a-f0-9-]+\\/stream$/)) {\n const runId = pathname.split(\"/\")[3];\n\n // Auth check\n const authHeader = req.headers.authorization;\n const token = authHeader?.startsWith(\"Bearer \") ? authHeader.substring(7) : \"\";\n const isInternal = safeCompare(token, FLY_INTERNAL_SECRET) || safeCompare(token, SUPABASE_SERVICE_ROLE_KEY) || safeCompare(token, SERVICE_ROLE_JWT);\n\n if (!isInternal && !token) {\n jsonResponse(res, 401, { error: \"Missing authorization\" }, corsHeaders);\n return;\n }\n\n if (!isInternal) {\n const sb = getServiceClient();\n const { data: { user: authUser }, error: authError } = await sb.auth.getUser(token);\n if (authError || !authUser) {\n jsonResponse(res, 401, { error: \"Invalid or expired token\" }, corsHeaders);\n return;\n }\n // P1 FIX: Verify user belongs to the run's store (prevent cross-store SSE snooping)\n const { data: sseRun } = await sb.from(\"workflow_runs\")\n .select(\"store_id\").eq(\"id\", runId).single();\n if (sseRun) {\n const { data: membership } = await sb.from(\"store_members\")\n .select(\"id\").eq(\"store_id\", sseRun.store_id).eq(\"user_id\", authUser.id).single();\n if (!membership) {\n jsonResponse(res, 403, { error: \"Not authorized to view this run\" }, corsHeaders);\n return;\n }\n }\n }\n\n // H6 FIX: Enforce per-run and total client limits\n const existingClients = sseClients.get(runId)?.size || 0;\n if (existingClients >= MAX_SSE_CLIENTS_PER_RUN) {\n jsonResponse(res, 429, { error: \"Too many SSE clients for this run\" }, corsHeaders);\n return;\n }\n if (getTotalSseClients() >= MAX_SSE_TOTAL_CLIENTS) {\n jsonResponse(res, 429, { error: \"Too many total SSE connections\" }, corsHeaders);\n return;\n }\n\n // Start SSE stream\n res.writeHead(200, {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n ...corsHeaders,\n });\n\n // Send snapshot\n const sb = getServiceClient();\n const { data: run } = await sb.from(\"workflow_runs\")\n .select(\"id, workflow_id, status, trigger_type, current_step_key, error_message, error_step_key, started_at, completed_at, duration_ms\")\n .eq(\"id\", runId).single();\n const { data: stepRuns } = await sb.from(\"workflow_step_runs\")\n .select(\"id, step_key, step_type, status, error_message, duration_ms, started_at, completed_at\")\n .eq(\"run_id\", runId).order(\"created_at\", { ascending: true });\n\n sendWorkflowSSE(res, { type: \"snapshot\", run, steps: stepRuns || [] });\n\n // Register client\n if (!sseClients.has(runId)) sseClients.set(runId, new Set());\n sseClients.get(runId)!.add(res);\n\n // Cleanup on disconnect\n const cleanup = () => {\n clearInterval(heartbeat);\n const clients = sseClients.get(runId);\n if (clients) {\n clients.delete(res);\n if (clients.size === 0) sseClients.delete(runId);\n }\n };\n\n // Heartbeat — uses safeSseWrite so dead connections are cleaned up immediately\n const heartbeat = setInterval(() => {\n if (!safeSseWrite(res, `: heartbeat\\n\\n`, cleanup)) {\n clearInterval(heartbeat);\n }\n }, 15_000);\n\n req.on(\"close\", cleanup);\n req.on(\"error\", cleanup);\n return;\n }\n\n // ================================================================\n // Guest approval — signed URL, no auth required (GET)\n // GET /approvals/guest/:id?action=approve&expires=...&sig=...\n // ================================================================\n const guestApprovalMatch = pathname.match(/^\\/approvals\\/guest\\/([a-f0-9-]+)$/);\n if (guestApprovalMatch && req.method === \"GET\") {\n const clientIp = req.headers[\"x-forwarded-for\"]?.toString().split(\",\")[0]?.trim() || req.socket.remoteAddress || \"unknown\";\n if (sendIpRateLimit(res, clientIp, corsHeaders)) return;\n const stepRunId = guestApprovalMatch[1];\n const urlParams = new URL(req.url || \"\", `http://${req.headers.host}`).searchParams;\n const action = urlParams.get(\"action\") || \"\";\n const expires = urlParams.get(\"expires\") || \"\";\n const sig = urlParams.get(\"sig\") || \"\";\n\n if (!action || !expires || !sig) {\n jsonResponse(res, 400, { error: \"Missing action, expires, or sig parameter\" }, corsHeaders);\n return;\n }\n if (new Date(expires) < new Date()) {\n jsonResponse(res, 410, { error: \"This approval link has expired\" }, corsHeaders);\n return;\n }\n if (!verifyGuestApprovalSignature(stepRunId, action, expires, sig)) {\n jsonResponse(res, 403, { error: \"Invalid signature\" }, corsHeaders);\n return;\n }\n\n const guestSupabase = getServiceClient();\n\n const { data: approval } = await guestSupabase.from(\"workflow_approval_requests\")\n .select(\"id, store_id, run_id, status\").eq(\"step_run_id\", stepRunId).limit(1);\n if (!approval?.length) {\n jsonResponse(res, 404, { error: \"Approval not found\" }, corsHeaders);\n return;\n }\n if (approval[0].status !== \"pending\") {\n jsonResponse(res, 409, { error: `Approval already ${approval[0].status}` }, corsHeaders);\n return;\n }\n\n const isApprove = action === \"approve\" || action === \"approved\";\n const { data: guestResult, error: guestErr } = await guestSupabase.rpc(\"respond_to_approval\", {\n p_approval_id: approval[0].id,\n p_store_id: approval[0].store_id,\n p_response: isApprove ? \"approved\" : \"rejected\",\n p_response_data: { guest: true, action },\n p_responded_by: null,\n });\n\n if (guestErr) {\n jsonResponse(res, 500, { success: false, error: guestErr.message }, corsHeaders);\n return;\n }\n\n if (guestResult?.success && approval[0].run_id) {\n try { await executeInlineChain(guestSupabase, approval[0].run_id); } catch (err) { log.error({ err: (err as Error).message, runId: approval[0].run_id }, \"inline chain failed after guest approval\"); }\n }\n\n res.writeHead(200, { \"Content-Type\": \"text/html\", ...corsHeaders });\n res.end(`<!DOCTYPE html><html><body style=\"font-family:system-ui;text-align:center;padding:40px\">\n <h2>${isApprove ? \"Approved\" : \"Rejected\"}</h2>\n <p>Your response has been recorded. You can close this window.</p>\n </body></html>`);\n return;\n }\n\n // ================================================================\n // Webchat — anonymous access for embedded chat widgets\n // POST /webchat/channels/:id/messages — send message (+ agent auto-reply)\n // GET /webchat/channels/:id/history — load conversation history\n // GET /webchat/widget.js — serve compiled widget JS\n // ================================================================\n // Webchat CORS: allow any origin (widget is embedded on customer sites)\n const webchatCors = { ...corsHeaders, \"Access-Control-Allow-Origin\": \"*\" };\n\n const webchatMsgMatch = pathname.match(/^\\/webchat\\/channels\\/([a-f0-9-]+)\\/messages$/);\n if (webchatMsgMatch && req.method === \"POST\") {\n const clientIp = req.headers[\"x-forwarded-for\"]?.toString().split(\",\")[0]?.trim() || req.socket.remoteAddress || \"unknown\";\n if (sendIpRateLimit(res, clientIp, webchatCors)) return;\n\n let rawBody: string;\n try { rawBody = await readBody(req); } catch {\n jsonResponse(res, 413, { error: \"Request body too large\" }, webchatCors);\n return;\n }\n\n const channelId = webchatMsgMatch[1];\n let wcBody: any;\n try { wcBody = JSON.parse(rawBody); } catch {\n jsonResponse(res, 400, { error: \"Invalid JSON\" }, webchatCors);\n return;\n }\n\n if (!wcBody.content || typeof wcBody.content !== \"string\") {\n jsonResponse(res, 400, { error: \"content (string) is required\" }, webchatCors);\n return;\n }\n if (wcBody.content.length > 5000) {\n jsonResponse(res, 400, { error: \"Message too long (max 5000 characters)\" }, webchatCors);\n return;\n }\n\n const supabase = getServiceClient();\n\n // Verify channel exists and is a webchat channel\n const { data: channel } = await supabase\n .from(\"channels\")\n .select(\"id, store_id, node_id, agent_id, type, config\")\n .eq(\"id\", channelId)\n .eq(\"type\", \"webchat\")\n .single();\n if (!channel) {\n jsonResponse(res, 404, { error: \"Webchat channel not found\" }, webchatCors);\n return;\n }\n\n // Rate limit per store (best-effort)\n try {\n const planCheck = await checkPlanLimits(supabase, channel.store_id, \"message\");\n if (!planCheck.allowed) {\n jsonResponse(res, 429, { error: planCheck.reason || \"Plan limit reached\" }, webchatCors);\n return;\n }\n } catch { /* billing tables may not exist yet */ }\n\n const senderId = (wcBody.sender_id as string) || \"anonymous\";\n\n // Resolve conversation: reuse if sender had activity < 30 min ago, else new UUID\n let conversationId: string = (wcBody.conversation_id as string) || \"\";\n if (!conversationId) {\n const thirtyMinAgo = new Date(Date.now() - 30 * 60 * 1000).toISOString();\n const { data: recent } = await supabase\n .from(\"channel_messages\")\n .select(\"conversation_id\")\n .eq(\"channel_id\", channelId)\n .eq(\"sender_id\", senderId)\n .gt(\"created_at\", thirtyMinAgo)\n .not(\"conversation_id\", \"is\", null)\n .order(\"created_at\", { ascending: false })\n .limit(1);\n conversationId = (recent?.length && recent[0].conversation_id) || randomUUID();\n }\n\n // Insert inbound message\n const { data: message, error: msgErr } = await supabase\n .from(\"channel_messages\")\n .insert({\n store_id: channel.store_id,\n channel_id: channelId,\n direction: \"inbound\",\n sender_id: senderId,\n sender_name: wcBody.sender_name || \"Visitor\",\n content: wcBody.content,\n content_type: \"text\",\n metadata: { source: \"webchat\", ip: clientIp, widget_version: \"1.0.0\" },\n agent_id: channel.agent_id,\n conversation_id: conversationId,\n })\n .select(\"id, direction, content, conversation_id, created_at\")\n .single();\n\n if (msgErr) {\n jsonResponse(res, 500, { error: msgErr.message }, webchatCors);\n return;\n }\n\n // Track usage + channel stats (best-effort)\n incrementUsage(supabase, channel.store_id, { messages_in: 1 }).catch(() => {});\n try { await supabase.rpc(\"increment_channel_stats\", { p_channel_id: channelId }); } catch { /* ok */ }\n\n // Auto-invoke agent if assigned\n let agentResponse: any = null;\n if (channel.agent_id && webchatAgentInvoker) {\n try {\n const result = await webchatAgentInvoker(supabase, channel.agent_id, wcBody.content, channel.store_id, conversationId);\n if (result.success && result.response) {\n const { data: outMsg } = await supabase\n .from(\"channel_messages\")\n .insert({\n store_id: channel.store_id,\n channel_id: channelId,\n direction: \"outbound\",\n sender_id: \"agent\",\n sender_name: \"AI Agent\",\n content: result.response,\n content_type: \"text\",\n metadata: { agent_id: channel.agent_id, auto_response: true, source: \"webchat\" },\n agent_id: channel.agent_id,\n conversation_id: conversationId,\n })\n .select(\"id, direction, content, conversation_id, created_at\")\n .single();\n agentResponse = outMsg;\n incrementUsage(supabase, channel.store_id, { messages_out: 1, agent_invocations: 1 }).catch(() => {});\n }\n } catch (err) {\n log.error({ err: (err as Error).message }, \"webchat agent error\");\n }\n }\n\n jsonResponse(res, 201, { success: true, message, agent_response: agentResponse, conversation_id: conversationId }, webchatCors);\n return;\n }\n\n // GET /webchat/channels/:id/history — load conversation history for widget\n const webchatHistoryMatch = pathname.match(/^\\/webchat\\/channels\\/([a-f0-9-]+)\\/history$/);\n if (webchatHistoryMatch && req.method === \"GET\") {\n const clientIp = req.headers[\"x-forwarded-for\"]?.toString().split(\",\")[0]?.trim() || req.socket.remoteAddress || \"unknown\";\n if (sendIpRateLimit(res, clientIp, webchatCors)) return;\n\n const channelId = webchatHistoryMatch[1];\n const params = url.searchParams;\n const senderId = params.get(\"sender_id\") || \"\";\n const reqConvId = params.get(\"conversation_id\") || \"\";\n\n if (!senderId) {\n jsonResponse(res, 400, { error: \"sender_id query parameter required\" }, webchatCors);\n return;\n }\n\n const supabase = getServiceClient();\n\n // Verify channel is webchat type\n const { data: wcChannel } = await supabase\n .from(\"channels\")\n .select(\"id, type\")\n .eq(\"id\", channelId)\n .eq(\"type\", \"webchat\")\n .single();\n if (!wcChannel) {\n jsonResponse(res, 404, { error: \"Webchat channel not found\" }, webchatCors);\n return;\n }\n\n // Get messages — by conversation_id if available, or by sender\n // P0 FIX: Always filter by sender_id to prevent cross-sender data leak\n let query = supabase\n .from(\"channel_messages\")\n .select(\"id, direction, sender_id, sender_name, content, content_type, created_at\")\n .eq(\"channel_id\", channelId);\n\n // P0 FIX: Validate senderId against strict pattern to prevent PostgREST filter injection\n // Only allow alphanumeric characters, hyphens, and underscores (blocks .eq., .neq., dots, etc.)\n if (!/^[a-zA-Z0-9_-]+$/.test(senderId)) {\n jsonResponse(res, 400, { error: \"Invalid sender_id format\" }, webchatCors);\n return;\n }\n if (reqConvId) {\n // P0 FIX: Use parameterized .in() filter instead of string interpolation in .or()\n query = query.eq(\"conversation_id\", reqConvId)\n .in(\"sender_id\", [senderId, \"agent\"]);\n } else {\n query = query.in(\"sender_id\", [senderId, \"agent\"]);\n }\n\n const { data: messages, error: histErr } = await query\n .order(\"created_at\", { ascending: true })\n .limit(50);\n\n if (histErr) {\n jsonResponse(res, 500, { error: histErr.message }, webchatCors);\n return;\n }\n\n jsonResponse(res, 200, { success: true, messages: messages || [] }, webchatCors);\n return;\n }\n\n // GET /webchat/widget.js — serve compiled widget JavaScript\n if (pathname === \"/webchat/widget.js\" && req.method === \"GET\") {\n const fs = await import(\"node:fs\");\n const path = await import(\"node:path\");\n // Try multiple possible locations for the built widget file\n const possiblePaths = [\n path.join(import.meta.dirname || __dirname, \"../../dist/webchat/widget.js\"),\n path.join(import.meta.dirname || __dirname, \"../../../dist/webchat/widget.js\"),\n path.join(process.cwd(), \"dist/webchat/widget.js\"),\n ];\n\n let widgetJs: string | null = null;\n for (const p of possiblePaths) {\n try {\n widgetJs = fs.readFileSync(p, \"utf-8\");\n break;\n } catch { /* try next */ }\n }\n\n if (widgetJs) {\n res.writeHead(200, {\n \"Content-Type\": \"application/javascript\",\n \"Cache-Control\": \"public, max-age=3600\",\n ...webchatCors,\n });\n res.end(widgetJs);\n } else {\n res.writeHead(200, {\n \"Content-Type\": \"application/javascript\",\n ...webchatCors,\n });\n res.end('console.warn(\"[WhaleChat] Widget JS not built. Run: npx esbuild src/webchat/widget.ts --bundle --minify --outfile=dist/webchat/widget.js\");');\n }\n return;\n }\n\n // ================================================================\n // Billing & Usage routes\n // ================================================================\n if (pathname.startsWith(\"/usage\") || pathname.startsWith(\"/billing/\")) {\n const authHeader = req.headers.authorization;\n const token = authHeader?.startsWith(\"Bearer \") ? authHeader.substring(7) : \"\";\n if (!token) {\n req.resume();\n jsonResponse(res, 401, { error: \"Missing authorization\" }, corsHeaders);\n return;\n }\n\n let rawBody: string;\n try { rawBody = await readBody(req); } catch {\n jsonResponse(res, 413, { error: \"Request body too large\" }, corsHeaders);\n return;\n }\n\n let billingBody: any = null;\n try { if (rawBody) billingBody = JSON.parse(rawBody); } catch {\n jsonResponse(res, 400, { error: \"Invalid JSON\" }, corsHeaders);\n return;\n }\n const supabase = getServiceClient();\n // Extract userId from JWT for checkout/portal endpoints\n let billingUserId: string | undefined;\n try {\n const payload = JSON.parse(Buffer.from(token.split(\".\")[1], \"base64url\").toString());\n billingUserId = payload.sub;\n } catch { /* not a JWT — service role key */ }\n const result = await handleBillingRoutes(pathname, req.method || \"GET\", billingBody, supabase, {\n userId: billingUserId,\n isServiceRole: safeCompare(token, SUPABASE_SERVICE_ROLE_KEY) || safeCompare(token, SERVICE_ROLE_JWT),\n });\n\n if (result) {\n jsonResponse(res, result.status, result.body, corsHeaders);\n } else {\n jsonResponse(res, 404, { error: `No route: ${req.method} ${pathname}` }, corsHeaders);\n }\n return;\n }\n\n // ================================================================\n // Node & Channel management routes (supports GET, POST, PUT, DELETE)\n // Must be before the method gate since GET /channels/:id/messages is valid\n // ================================================================\n if (pathname.startsWith(\"/nodes\") || pathname.startsWith(\"/channels\")) {\n const authHeader = req.headers.authorization;\n const token = authHeader?.startsWith(\"Bearer \") ? authHeader.substring(7) : \"\";\n if (!token) {\n req.resume();\n jsonResponse(res, 401, { error: \"Missing authorization\" }, corsHeaders);\n return;\n }\n\n let rawBody: string;\n try {\n rawBody = await readBody(req);\n } catch {\n jsonResponse(res, 413, { error: \"Request body too large\" }, corsHeaders);\n return;\n }\n\n let nodeBody: any = null;\n try { if (rawBody) nodeBody = JSON.parse(rawBody); } catch {\n jsonResponse(res, 400, { error: \"Invalid JSON\" }, corsHeaders);\n return;\n }\n const supabase = getServiceClient();\n\n let userId: string | undefined;\n const isServiceRole = safeCompare(token, SUPABASE_SERVICE_ROLE_KEY) || safeCompare(token, SERVICE_ROLE_JWT);\n if (!isServiceRole) {\n const { data: { user: authUser } } = await supabase.auth.getUser(token);\n if (authUser) userId = authUser.id;\n }\n\n const result = await handleNodeRoutes(pathname, req.method || \"GET\", nodeBody, supabase, {\n userId,\n isServiceRole,\n rawToken: token,\n }, url.searchParams);\n\n if (result) {\n jsonResponse(res, result.status, result.body, corsHeaders);\n } else {\n jsonResponse(res, 404, { error: `No route: ${req.method} ${pathname}` }, corsHeaders);\n }\n return;\n }\n\n if (req.method !== \"POST\" && req.method !== \"DELETE\" && req.method !== \"PUT\") {\n jsonResponse(res, 405, { error: \"Method not allowed\" }, corsHeaders);\n return;\n }\n\n try {\n // ================================================================\n // Phase 4.2: Resume conversation from checkpoint\n // POST /conversations/:id/resume\n // ================================================================\n const resumeMatch = pathname.match(/^\\/conversations\\/([a-f0-9-]+)\\/resume$/);\n if (resumeMatch && req.method === \"POST\") {\n const convId = resumeMatch[1];\n const authHeader = req.headers.authorization;\n const token = authHeader?.startsWith(\"Bearer \") ? authHeader.substring(7) : \"\";\n const isInternal = safeCompare(token, FLY_INTERNAL_SECRET) || safeCompare(token, SUPABASE_SERVICE_ROLE_KEY) || safeCompare(token, SERVICE_ROLE_JWT);\n\n if (!isInternal && !token) {\n jsonResponse(res, 401, { error: \"Missing authorization\" }, corsHeaders);\n return;\n }\n\n const supabase = getServiceClient();\n\n if (!isInternal) {\n const { data: { user: authUser }, error: authError } = await supabase.auth.getUser(token);\n if (authError || !authUser) {\n jsonResponse(res, 401, { error: \"Invalid or expired token\" }, corsHeaders);\n return;\n }\n }\n\n // Drain the request body (even if we don't use it) to prevent Fly proxy stalls\n try { await readBody(req); } catch { /* body not needed */ }\n\n const checkpoint = await loadCheckpoint(supabase, convId);\n if (!checkpoint) {\n jsonResponse(res, 404, { error: \"No checkpoint found for this conversation\" }, corsHeaders);\n return;\n }\n\n // Parse messages back from serialized form\n let parsedMessages: unknown[];\n try {\n parsedMessages = JSON.parse(checkpoint.messages);\n } catch {\n jsonResponse(res, 422, { error: \"Checkpoint messages corrupted\" }, corsHeaders);\n return;\n }\n\n jsonResponse(res, 200, {\n success: true,\n conversation_id: checkpoint.conversation_id,\n turn: checkpoint.turn,\n messages: parsedMessages,\n tokens_used: checkpoint.tokens_used,\n cost_so_far: checkpoint.cost_so_far,\n tools_used: checkpoint.tools_used,\n checkpointed_at: checkpoint.created_at,\n }, corsHeaders);\n return;\n }\n\n // ================================================================\n // Phase 2: Approval response endpoint\n // POST /approvals/:id/respond\n // ================================================================\n const approvalMatch = pathname.match(/^\\/approvals\\/([a-f0-9-]+)\\/respond$/);\n if (approvalMatch) {\n const approvalId = approvalMatch[1];\n const authHeader = req.headers.authorization;\n const token = authHeader?.startsWith(\"Bearer \") ? authHeader.substring(7) : \"\";\n const isInternal = safeCompare(token, FLY_INTERNAL_SECRET) || safeCompare(token, SUPABASE_SERVICE_ROLE_KEY) || safeCompare(token, SERVICE_ROLE_JWT);\n\n if (!isInternal && !token) {\n jsonResponse(res, 401, { error: \"Missing authorization\" }, corsHeaders);\n return;\n }\n\n const supabase = getServiceClient();\n let userId: string | null = null;\n\n if (!isInternal) {\n const { data: { user: authUser }, error: authError } = await supabase.auth.getUser(token);\n if (authError || !authUser) {\n jsonResponse(res, 401, { error: \"Invalid or expired token\" }, corsHeaders);\n return;\n }\n userId = authUser.id;\n }\n\n let rawBody: string;\n try { rawBody = await readBody(req); } catch {\n jsonResponse(res, 413, { error: \"Request body too large\" }, corsHeaders);\n return;\n }\n\n let body: any;\n try { body = JSON.parse(rawBody); } catch {\n jsonResponse(res, 400, { error: \"Invalid JSON\" }, corsHeaders);\n return;\n }\n if (!body.status) {\n jsonResponse(res, 400, { error: \"status required (approved/rejected)\" }, corsHeaders);\n return;\n }\n\n // Get store_id from approval\n const { data: approval } = await supabase.from(\"workflow_approval_requests\")\n .select(\"store_id, run_id\").eq(\"id\", approvalId).single();\n if (!approval) {\n jsonResponse(res, 404, { error: \"Approval not found\" }, corsHeaders);\n return;\n }\n\n // P1 FIX: Verify user has access to the approval's store\n if (!isInternal && userId) {\n const { data: approvalMembership } = await supabase.from(\"store_members\")\n .select(\"id\").eq(\"store_id\", approval.store_id).eq(\"user_id\", userId).single();\n if (!approvalMembership) {\n jsonResponse(res, 403, { error: \"Not authorized to respond to this approval\" }, corsHeaders);\n return;\n }\n }\n\n const { data: result, error } = await supabase.rpc(\"respond_to_approval\", {\n p_approval_id: approvalId,\n p_store_id: approval.store_id,\n p_response: body.status,\n p_response_data: body.response_data || {},\n p_responded_by: userId || body.responded_by || null,\n });\n\n if (error) {\n jsonResponse(res, 500, { success: false, error: error.message }, corsHeaders);\n return;\n }\n\n // Inline resume — execute next step immediately\n if (result?.success && approval.run_id) {\n try {\n await executeInlineChain(supabase, approval.run_id);\n } catch (err) {\n log.error({ err: (err as Error).message }, \"inline chain failed after approval\");\n }\n }\n\n jsonResponse(res, result?.success ? 200 : 422, result, corsHeaders);\n return;\n }\n\n // ================================================================\n // Waitpoint completion — API endpoint\n // POST /waitpoints/:token/complete\n // ================================================================\n const waitpointMatch = pathname.match(/^\\/waitpoints\\/([a-f0-9-]+)\\/complete$/);\n if (waitpointMatch) {\n const token = waitpointMatch[1];\n const authHeader = req.headers.authorization;\n const authToken = authHeader?.startsWith(\"Bearer \") ? authHeader.substring(7) : \"\";\n const isInternal = safeCompare(authToken, FLY_INTERNAL_SECRET) || safeCompare(authToken, SUPABASE_SERVICE_ROLE_KEY) || safeCompare(authToken, SERVICE_ROLE_JWT);\n\n if (!isInternal && !authToken) {\n jsonResponse(res, 401, { error: \"Missing authorization\" }, corsHeaders);\n return;\n }\n\n const supabase = getServiceClient();\n\n let rawBody: string;\n try { rawBody = await readBody(req); } catch {\n jsonResponse(res, 413, { error: \"Request body too large\" }, corsHeaders);\n return;\n }\n let body: any;\n try { body = JSON.parse(rawBody || \"{}\"); } catch {\n jsonResponse(res, 400, { error: \"Invalid JSON\" }, corsHeaders);\n return;\n }\n\n // Find waitpoint\n const { data: wp } = await supabase.from(\"waitpoint_tokens\")\n .select(\"id, run_id, step_run_id, store_id, expires_at, status\")\n .eq(\"token\", token).single();\n if (!wp) {\n jsonResponse(res, 404, { error: \"Waitpoint token not found\" }, corsHeaders);\n return;\n }\n if (wp.status === \"completed\") {\n jsonResponse(res, 409, { error: \"Waitpoint already completed\" }, corsHeaders);\n return;\n }\n if (new Date(wp.expires_at) < new Date()) {\n jsonResponse(res, 410, { error: \"Waitpoint expired\" }, corsHeaders);\n return;\n }\n\n // Complete it\n await supabase.from(\"waitpoint_tokens\").update({\n status: \"completed\", completion_data: body.data || {}, completed_at: new Date().toISOString(),\n }).eq(\"id\", wp.id);\n\n await supabase.from(\"workflow_step_runs\").update({\n status: \"pending\", input: { waitpoint_completed: true, waitpoint_data: body.data || {} },\n }).eq(\"id\", wp.step_run_id).eq(\"status\", \"waiting\");\n\n // Inline resume\n try { await executeInlineChain(supabase, wp.run_id); } catch (err) { log.error({ err: (err as Error).message, runId: wp.run_id }, \"inline chain failed after waitpoint\"); }\n\n jsonResponse(res, 200, { success: true, run_id: wp.run_id }, corsHeaders);\n return;\n }\n\n // ================================================================\n // Webhook ingestion — no auth required (uses HMAC verification)\n // POST /webhooks/:slug\n // ================================================================\n const webhookMatch = pathname.match(/^\\/webhooks\\/([a-zA-Z0-9_-]+)$/);\n if (webhookMatch) {\n const whClientIp = req.headers[\"x-forwarded-for\"]?.toString().split(\",\")[0]?.trim() || req.socket.remoteAddress || \"unknown\";\n if (sendIpRateLimit(res, whClientIp, corsHeaders)) return;\n const slug = webhookMatch[1];\n let rawBody: string;\n try {\n rawBody = await readBody(req);\n } catch {\n jsonResponse(res, 413, { error: \"Request body too large\" }, corsHeaders);\n return;\n }\n\n const supabase = getServiceClient();\n const headers: Record<string, string> = {};\n for (const [k, v] of Object.entries(req.headers)) {\n if (typeof v === \"string\") headers[k] = v;\n }\n\n const result = await handleWebhookIngestion(supabase, slug, rawBody, headers);\n\n // Phase 1: Inline execution for webhook-triggered workflows\n if (result.body.run_id && result.status === 200) {\n try {\n await executeInlineChain(supabase, result.body.run_id as string);\n } catch (err) {\n log.error({ err: (err as Error).message }, \"webhook inline chain error\");\n }\n }\n\n jsonResponse(res, result.status, result.body, corsHeaders);\n return;\n }\n\n // ================================================================\n // Fire event — service-role or internal auth\n // POST /events\n // ================================================================\n if (pathname === \"/events\") {\n const authHeader = req.headers.authorization;\n const token = authHeader?.startsWith(\"Bearer \") ? authHeader.substring(7) : \"\";\n const isInternal = safeCompare(token, FLY_INTERNAL_SECRET) || safeCompare(token, SUPABASE_SERVICE_ROLE_KEY) || safeCompare(token, SERVICE_ROLE_JWT);\n\n if (!isInternal && !token) {\n jsonResponse(res, 401, { error: \"Missing authorization\" }, corsHeaders);\n return;\n }\n\n const supabase = getServiceClient();\n\n // Verify user auth if not internal\n if (!isInternal) {\n const { data: { user: authUser }, error: authError } = await supabase.auth.getUser(token);\n if (authError || !authUser) {\n jsonResponse(res, 401, { error: \"Invalid or expired token\" }, corsHeaders);\n return;\n }\n }\n\n let rawBody: string;\n try {\n rawBody = await readBody(req);\n } catch {\n jsonResponse(res, 413, { error: \"Request body too large\" }, corsHeaders);\n return;\n }\n\n let body: any;\n try { body = JSON.parse(rawBody || \"{}\"); } catch {\n jsonResponse(res, 400, { error: \"Invalid JSON\" }, corsHeaders);\n return;\n }\n if (!body.store_id || !body.event_type) {\n jsonResponse(res, 400, { error: \"store_id and event_type required\" }, corsHeaders);\n return;\n }\n\n // Idempotency: if client provides idempotency_key, check for duplicate\n if (body.idempotency_key) {\n const { data: existing } = await supabase.from(\"workflow_events\")\n .select(\"id\")\n .eq(\"idempotency_key\", body.idempotency_key)\n .limit(1);\n if (existing && existing.length > 0) {\n jsonResponse(res, 200, { success: true, event_id: existing[0].id, deduplicated: true }, corsHeaders);\n return;\n }\n }\n\n const { data: eventId, error: fireErr } = await supabase.rpc(\"fire_event\", {\n p_store_id: body.store_id,\n p_event_type: body.event_type,\n p_event_payload: body.payload || {},\n p_source: body.source || \"api\",\n });\n\n if (fireErr) {\n jsonResponse(res, 500, { success: false, error: fireErr.message }, corsHeaders);\n } else {\n jsonResponse(res, 200, { success: true, event_id: eventId }, corsHeaders);\n }\n return;\n }\n\n // ================================================================\n // Internal workflow processing — verified by internal secret\n // POST /workflows/process\n // ================================================================\n if (pathname === \"/workflows/process\") {\n const authHeader = req.headers.authorization;\n const token = authHeader?.startsWith(\"Bearer \") ? authHeader.substring(7) : \"\";\n if (!FLY_INTERNAL_SECRET || (!safeCompare(token, FLY_INTERNAL_SECRET) && !safeCompare(token, SUPABASE_SERVICE_ROLE_KEY) && !safeCompare(token, SERVICE_ROLE_JWT))) {\n jsonResponse(res, 401, { error: \"Unauthorized\" }, corsHeaders);\n return;\n }\n\n let rawBody: string;\n try {\n rawBody = await readBody(req);\n } catch {\n rawBody = \"{}\";\n }\n\n let body: any;\n try { body = JSON.parse(rawBody || \"{}\"); } catch {\n jsonResponse(res, 400, { error: \"Invalid JSON\" }, corsHeaders);\n return;\n }\n const supabase = getServiceClient();\n const result = await processWorkflowSteps(supabase, body.batch_size || 10);\n jsonResponse(res, 200, { success: true, ...result }, corsHeaders);\n return;\n }\n\n // ================================================================\n // Start workflow run — service-role or user auth\n // POST /workflows/start\n // ================================================================\n if (pathname === \"/workflows/start\") {\n const authHeader = req.headers.authorization;\n const token = authHeader?.startsWith(\"Bearer \") ? authHeader.substring(7) : \"\";\n const isInternal = safeCompare(token, FLY_INTERNAL_SECRET) || safeCompare(token, SUPABASE_SERVICE_ROLE_KEY) || safeCompare(token, SERVICE_ROLE_JWT);\n\n if (!isInternal && !token) {\n jsonResponse(res, 401, { error: \"Missing authorization\" }, corsHeaders);\n return;\n }\n\n const supabase = getServiceClient();\n\n // Verify user auth if not internal\n if (!isInternal) {\n const { data: { user: authUser }, error: authError } = await supabase.auth.getUser(token);\n if (authError || !authUser) {\n jsonResponse(res, 401, { error: \"Invalid or expired token\" }, corsHeaders);\n return;\n }\n }\n\n let rawBody: string;\n try {\n rawBody = await readBody(req);\n } catch {\n jsonResponse(res, 413, { error: \"Request body too large\" }, corsHeaders);\n return;\n }\n\n let body: any;\n try { body = JSON.parse(rawBody); } catch {\n jsonResponse(res, 400, { error: \"Invalid JSON\" }, corsHeaders);\n return;\n }\n\n // P0 FIX: Verify the workflow belongs to the requesting store before starting a run\n if (body.workflow_id && body.store_id) {\n const { data: wfOwner, error: wfOwnerErr } = await supabase\n .from(\"workflows\")\n .select(\"id\")\n .eq(\"id\", body.workflow_id)\n .eq(\"store_id\", body.store_id)\n .single();\n if (wfOwnerErr || !wfOwner) {\n jsonResponse(res, 403, { error: \"Workflow does not belong to this store\" }, corsHeaders);\n return;\n }\n }\n\n const { data, error } = await supabase.rpc(\"start_workflow_run\", {\n p_workflow_id: body.workflow_id,\n p_store_id: body.store_id,\n p_trigger_type: body.trigger_type || \"api\",\n p_trigger_payload: body.trigger_payload || {},\n p_idempotency_key: body.idempotency_key || null,\n });\n\n if (error) {\n jsonResponse(res, 500, { success: false, error: error.message }, corsHeaders);\n } else {\n // Phase 4: Set version_id if workflow has a published version\n // Phase 1: Inline execution for API-triggered workflows\n if (data?.success && data.run_id && !data.deduplicated) {\n try {\n const { data: wf } = await supabase.from(\"workflows\")\n .select(\"published_version_id\").eq(\"id\", body.workflow_id).single();\n if (wf?.published_version_id) {\n await supabase.from(\"workflow_runs\").update({ version_id: wf.published_version_id }).eq(\"id\", data.run_id);\n }\n await executeInlineChain(supabase, data.run_id);\n } catch (err) {\n log.error({ err: (err as Error).message }, \"start-inline chain error\");\n }\n }\n jsonResponse(res, data?.success ? 200 : 422, data, corsHeaders);\n }\n return;\n }\n\n // ================================================================\n // Standard auth gate for all other POST routes\n // ================================================================\n log.info({ method: req.method, path: pathname, contentLength: req.headers[\"content-length\"] || \"?\" }, \"request\");\n const authHeader = req.headers.authorization;\n if (!authHeader?.startsWith(\"Bearer \")) {\n req.resume(); // drain body to avoid Fly proxy stall\n jsonResponse(res, 401, { error: \"Missing authorization\" }, corsHeaders);\n return;\n }\n\n // Read body FIRST — before async auth calls (getUser, rate_limit).\n // Node.js request streams are paused until consumed. If we do async network\n // calls before reading, the TCP receive buffer fills up and Fly's proxy\n // stalls with \"error writing a body to connection\" on large requests.\n let rawBody: string;\n try {\n rawBody = await readBody(req);\n } catch {\n jsonResponse(res, 413, { error: \"Request body too large (max 500MB)\" }, corsHeaders);\n return;\n }\n\n const token = authHeader.substring(7);\n const supabase = getServiceClient();\n\n // Check service-role key\n let user: { id: string; email?: string } | null = null;\n const isServiceRole = safeCompare(token, SUPABASE_SERVICE_ROLE_KEY) || safeCompare(token, SERVICE_ROLE_JWT);\n\n if (!isServiceRole) {\n try {\n const {\n data: { user: authUser },\n error: authError,\n } = await supabase.auth.getUser(token);\n if (authError || !authUser) {\n jsonResponse(res, 401, { error: \"Invalid or expired token\" }, corsHeaders);\n return;\n }\n user = authUser;\n } catch (authErr) {\n log.error({ err: (authErr as Error).message }, \"auth getUser failed\");\n jsonResponse(res, 502, { error: \"Auth service unavailable, please retry\" }, corsHeaders);\n return;\n }\n }\n\n // In-memory token-bucket rate limiting (sole rate check — no DB round-trip)\n {\n const tier = isServiceRole ? \"serviceRole\" as const : user ? \"authenticated\" as const : \"unauthenticated\" as const;\n const rateLimitKey = user ? `user:${user.id}` : `ip:${req.socket.remoteAddress || \"unknown\"}`;\n const memResult = rateLimiter.checkRequest(rateLimitKey, tier);\n if (!memResult.allowed) {\n res.writeHead(429, {\n \"Retry-After\": String(Math.ceil(memResult.retryAfterMs / 1000)),\n \"X-RateLimit-Remaining\": \"0\",\n \"X-RateLimit-Bucket\": memResult.bucket,\n \"Content-Type\": \"application/json\",\n ...corsHeaders,\n });\n res.end(JSON.stringify({ error: \"Rate limit exceeded\" }));\n return;\n }\n }\n\n let body: any;\n try {\n body = JSON.parse(rawBody);\n } catch (parseErr) {\n const errMsg = parseErr instanceof Error ? parseErr.message : String(parseErr);\n const bodyLen = rawBody.length;\n const tail = bodyLen > 200 ? rawBody.slice(bodyLen - 200) : rawBody;\n log.error({ bodyLen, errMsg, tail }, \"JSON parse failed on request body\");\n jsonResponse(res, 400, {\n error: \"Invalid JSON in request body\",\n detail: errMsg,\n body_length: bodyLen,\n }, corsHeaders);\n return;\n }\n\n // Anthropic API proxy mode\n if (body.mode === \"proxy\") {\n await handleProxy(res, body, corsHeaders);\n return;\n }\n\n // Audio transcription mode (OpenAI Whisper)\n if (body.mode === \"transcribe\") {\n const { audio_base64, media_type, store_id } = body;\n if (!audio_base64 || !media_type) {\n jsonResponse(res, 400, { error: \"audio_base64 and media_type required\" }, corsHeaders);\n return;\n }\n const sid = store_id || body.storeId;\n if (!sid) {\n jsonResponse(res, 400, { error: \"store_id required for transcription (needed to resolve OpenAI API key)\" }, corsHeaders);\n return;\n }\n const result = await handleTranscribe(supabase, sid, audio_base64, media_type);\n jsonResponse(res, result.success ? 200 : 422, result, corsHeaders);\n return;\n }\n\n // Conversation compaction mode (Haiku summarization for non-Anthropic providers)\n if (body.mode === \"compact\") {\n const { messages: compactMessages, system_prompt } = body;\n if (!compactMessages || !Array.isArray(compactMessages) || !system_prompt) {\n jsonResponse(res, 400, { error: \"messages (array) and system_prompt required\" }, corsHeaders);\n return;\n }\n const anthropic = new Anthropic({ apiKey: ANTHROPIC_API_KEY });\n // Sanitize user-provided system prompt before passing to compaction\n const sanitizedCompactPrompt = sanitizeAndLog(system_prompt, \"compactionEndpoint\");\n const compactionResult = await generateCompaction({\n anthropic,\n messages: compactMessages,\n systemPrompt: sanitizedCompactPrompt,\n });\n jsonResponse(\n res,\n compactionResult.success ? 200 : 422,\n {\n success: compactionResult.success,\n compaction_content: compactionResult.content,\n error: compactionResult.error,\n },\n corsHeaders,\n );\n return;\n }\n\n // Direct tool execution mode\n if (body.mode === \"tool\") {\n const { tool_name, args, store_id, conversation_id, trace_id } = body;\n if (!tool_name) {\n jsonResponse(res, 400, { error: \"tool_name required\" }, corsHeaders);\n return;\n }\n\n // Resolve and validate store_id (server-derived, not blindly trusted)\n const resolvedToolStoreId = await resolveAndValidateStoreId(\n supabase, store_id || body.storeId, user, isServiceRole, token, body.userId\n );\n if (!resolvedToolStoreId && !isServiceRole) {\n jsonResponse(res, 400, { error: \"store_id required for tool execution\" }, corsHeaders);\n return;\n }\n const validToolStoreId = resolvedToolStoreId || store_id;\n\n // Phase 7.2: Per-tool rate limiting\n const toolUserId = user?.id || body.userId || \"anon\";\n const toolLimit = rateLimiter.checkToolLimit(toolUserId, tool_name);\n if (!toolLimit.allowed) {\n res.writeHead(429, {\n \"Retry-After\": String(Math.ceil(toolLimit.retryAfterMs / 1000)),\n \"X-RateLimit-Remaining\": \"0\",\n \"X-RateLimit-Bucket\": toolLimit.bucket,\n \"Content-Type\": \"application/json\",\n ...corsHeaders,\n });\n res.end(JSON.stringify({ error: `Tool rate limit exceeded for ${tool_name}` }));\n return;\n }\n // Load user tools if this is a user_tool__ prefixed call\n let utRows: UserToolRow[] | undefined;\n if (tool_name.startsWith(\"user_tool__\") && validToolStoreId) {\n const { rows } = await loadUserTools(supabase, validToolStoreId);\n utRows = rows;\n }\n const result = await executeTool(\n supabase,\n tool_name,\n (args || {}) as Record<string, unknown>,\n validToolStoreId || undefined,\n trace_id || undefined,\n user?.id || body.userId || null,\n user?.email || body.userEmail || null,\n body.source || \"whale-code\",\n conversation_id || undefined,\n utRows,\n );\n // Always 200 for tool results — success/failure is in the JSON body.\n // HTTP 500 causes MCP clients to throw before reading the error message.\n jsonResponse(res, 200, result, corsHeaders);\n return;\n }\n\n // Streaming tool execution mode (NDJSON) — for tools with live progress (kali, etc.)\n if (body.mode === \"tool_stream\") {\n const { tool_name, args, store_id } = body;\n if (!tool_name) {\n jsonResponse(res, 400, { error: \"tool_name required\" }, corsHeaders);\n return;\n }\n\n // Resolve and validate store_id\n const resolvedStreamStoreId = await resolveAndValidateStoreId(\n supabase, store_id || body.storeId, user, isServiceRole, token, body.userId\n );\n if (!resolvedStreamStoreId && !isServiceRole) {\n jsonResponse(res, 400, { error: \"store_id required for tool execution\" }, corsHeaders);\n return;\n }\n const validStreamStoreId = resolvedStreamStoreId || store_id;\n\n // Phase 7.2: Per-tool rate limiting (stream mode)\n const streamToolUserId = user?.id || body.userId || \"anon\";\n const streamToolLimit = rateLimiter.checkToolLimit(streamToolUserId, tool_name);\n if (!streamToolLimit.allowed) {\n res.writeHead(429, {\n \"Retry-After\": String(Math.ceil(streamToolLimit.retryAfterMs / 1000)),\n \"X-RateLimit-Remaining\": \"0\",\n \"X-RateLimit-Bucket\": streamToolLimit.bucket,\n \"Content-Type\": \"application/json\",\n ...corsHeaders,\n });\n res.end(JSON.stringify({ error: `Tool rate limit exceeded for ${tool_name}` }));\n return;\n }\n\n res.writeHead(200, {\n \"Content-Type\": \"application/x-ndjson\",\n \"Transfer-Encoding\": \"chunked\",\n ...corsHeaders,\n });\n\n const onToolProgress = (_name: string, progress: unknown) => {\n try {\n // Structured status events from kali — relay as type \"status\" for CLI ToolProgress handling\n const p = progress as Record<string, unknown>;\n if (p && p.type === \"status\" && p.progress) {\n res.write(JSON.stringify({ type: \"status\", progress: p.progress }) + \"\\n\");\n } else {\n res.write(JSON.stringify({ type: \"progress\", progress }) + \"\\n\");\n }\n } catch { /* client disconnected */ }\n };\n\n try {\n const result = await executeTool(\n supabase,\n tool_name,\n (args || {}) as Record<string, unknown>,\n validStreamStoreId || undefined,\n body.trace_id || undefined,\n user?.id || body.userId || null,\n user?.email || body.userEmail || null,\n body.source || \"whale-code-stream\",\n body.conversation_id || undefined,\n undefined,\n undefined,\n onToolProgress,\n );\n\n res.write(JSON.stringify({ type: \"result\", ...result }) + \"\\n\");\n } catch (err) {\n res.write(JSON.stringify({ type: \"result\", success: false, error: sanitizeError(err) }) + \"\\n\");\n }\n\n res.end();\n return;\n }\n\n // CLI telemetry ingest — batch of spans from Whale Code CLI\n if (body.mode === \"telemetry_ingest\") {\n const spans: Record<string, unknown>[] = body.spans;\n if (!Array.isArray(spans) || spans.length === 0) {\n jsonResponse(res, 400, { error: \"spans array required\" }, corsHeaders);\n return;\n }\n // Cap at 500 spans per request to prevent abuse\n const batch = spans.slice(0, 500);\n let queued = 0;\n for (const raw of batch) {\n try {\n // Enforce store_id from auth context, not client-provided\n const resolvedStoreId = await resolveAndValidateStoreId(\n supabase, raw.store_id as string || body.store_id, user, isServiceRole, token, body.userId,\n );\n raw.store_id = resolvedStoreId || raw.store_id || null;\n raw.user_id = raw.user_id || user?.id || body.userId || null;\n raw.user_email = raw.user_email || user?.email || body.userEmail || null;\n queueSpan(auditRowToSpan(raw));\n queued++;\n } catch {\n // Skip malformed spans\n }\n }\n\n // Also upsert ai_conversations row if conversation_id provided\n if (body.conversation_id && body.store_id) {\n try {\n const convStoreId = await resolveAndValidateStoreId(\n supabase, body.store_id, user, isServiceRole, token, body.userId,\n );\n if (convStoreId) {\n await supabase.from(\"ai_conversations\").upsert({\n id: body.conversation_id,\n store_id: convStoreId,\n user_id: user?.id || body.userId || null,\n title: body.conversation_title || \"CLI Session\",\n metadata: {\n source: body.source || \"whale_cli\",\n hostname: body.hostname,\n version: body.version,\n },\n }, { onConflict: \"id\" });\n }\n } catch {\n // Non-critical — spans still ingested\n }\n }\n\n jsonResponse(res, 200, { success: true, queued }, corsHeaders);\n return;\n }\n\n // Agent chat mode (SSE)\n await handleAgentChat(req, res, supabase, body, user, isServiceRole, token, corsHeaders);\n } catch (err) {\n if (!res.headersSent) {\n jsonResponse(res, 500, { error: sanitizeError(err) }, corsHeaders);\n }\n }\n});\n\n// Inject tool executor into workflow engine (avoids circular dependency)\nsetToolExecutor((supabase, toolName, args, storeId, traceId) => {\n // Store boundary validation: prevent workflows from accessing other stores\n if (args.store_id && args.store_id !== storeId) {\n return Promise.resolve({ success: false, error: \"Store boundary violation: workflow cannot access other stores\" });\n }\n args.store_id = storeId; // Force the workflow's store\n return executeTool(supabase, toolName, args, storeId, traceId, null, null, \"workflow_engine\");\n});\n\n// Inject agent executor for \"agent\" step type in workflows\nsetAgentExecutor(async (supabase, agentId, prompt, storeId, maxTurns = 5, onToken, traceId) => {\n const agent = await loadAgentConfig(supabase, agentId, storeId);\n if (!agent) return { success: false, error: `Agent ${agentId} not found` };\n\n // Workflow agents get all tools (no lazy loading — they run headless)\n const { all: allTools } = await loadTools(supabase);\n const { rows: userToolRows, defs: userToolDefs } = await loadUserTools(supabase, storeId);\n const tools = getToolsForAgent(agent, allTools, userToolDefs);\n const agentModel = agent.model || MODELS.SONNET;\n\n // Resolve all behavioral config from DB — workflow maxTurns caps agent config\n const resolved = resolveAgentLoopConfig(agent, \"workflow\", maxTurns);\n if (resolved.defaultsUsed.length > 0) {\n log.info({ agentId, callPath: \"workflow\", defaults: resolved.defaultsUsed }, \"workflow agent config defaults applied\");\n }\n\n // Build full system prompt — shared helper ensures workflow gets same context as SSE/channel\n // (previously hand-built, missing location/customer context)\n const { systemPrompt } = await buildAgentSystemPrompt(supabase, agent, storeId, prompt, tools);\n\n try {\n const result = await runServerAgentLoop({\n anthropic: getAnthropicClient(agent),\n supabase,\n model: agentModel,\n systemPrompt,\n messages: [{ role: \"user\", content: prompt }],\n tools,\n // All behavioral knobs from resolved config — DB is single source of truth\n maxTurns: resolved.maxTurns,\n temperature: resolved.temperature,\n maxTokens: resolved.maxTokens,\n maxConcurrentTools: resolved.maxConcurrentTools,\n enableDelegation: resolved.enableDelegation,\n enableModelRouting: resolved.enableModelRouting,\n contextOverrides: resolved.contextOverrides,\n subagentMaxTokens: resolved.subagentMaxTokens,\n subagentMaxTurns: resolved.subagentMaxTurns,\n subagentTemperature: resolved.subagentTemperature,\n loopDetectorConfig: {\n identicalCallLimit: resolved.loopIdenticalCallLimit,\n consecutiveErrorLimit: resolved.loopConsecutiveErrorLimit,\n turnErrorLimit: resolved.loopTurnErrorLimit,\n window: resolved.loopWindow,\n sessionToolErrorLimit: resolved.loopSessionToolErrorLimit,\n consecutiveFailedTurnLimit: resolved.loopConsecutiveFailedTurnLimit,\n fileReadLimit: resolved.loopFileReadLimit,\n },\n batchErrorLimit: resolved.loopBatchErrorLimit,\n storeId,\n source: \"workflow_agent\",\n agentId,\n traceId,\n executeTool: async (toolName, args) => {\n const toolArgs = { ...args };\n if (!toolArgs.store_id) toolArgs.store_id = storeId;\n return executeTool(supabase, toolName, toolArgs, storeId,\n traceId, null, null, \"workflow_agent\", undefined, userToolRows, agentId, undefined, true);\n },\n enableStreaming: !!onToken,\n onText: onToken || undefined,\n maxDurationMs: resolved.maxDurationMs,\n });\n\n return { success: true, response: result.finalText || \"(no response)\" };\n } catch (err) {\n return { success: false, error: sanitizeError(err) };\n }\n});\n\n// Inject token broadcaster for real-time agent step streaming\nsetTokenBroadcaster((runId, stepKey, token) => {\n broadcastToRun(runId, { type: \"agent_token\", run_id: runId, step_key: stepKey, token });\n});\n\n// Inject step error broadcaster for real-time workflow error surfacing\nsetStepErrorBroadcaster((runId, data) => {\n broadcastToRun(runId, data);\n});\n\n// Shared agent invoker — used by channel messages, webchat, and any source\n// Uses shared helpers so it's IDENTICAL to CLI chat — same prompt, tools, memory, persistence, audit\nasync function invokeAgentForChannel(\n supabase: SupabaseClient, agentId: string, message: string, storeId: string, conversationId: string,\n senderContext?: SenderContext,\n): Promise<{ success: boolean; response?: string; error?: string }> {\n const agent = await loadAgentConfig(supabase, agentId, storeId);\n if (!agent) return { success: false, error: `Agent ${agentId} not found` };\n\n const { core: coreTools, extended: extendedTools } = await loadTools(supabase);\n setExtendedToolsCache(extendedTools);\n const { rows: userToolRows, defs: userToolDefs } = await loadUserTools(supabase, storeId);\n const tools = getToolsForAgent(agent, coreTools, userToolDefs);\n const agentModel = agent.model || MODELS.SONNET;\n\n // Resolve all behavioral config from DB — channel has 15-turn safety cap built in\n const resolved = resolveAgentLoopConfig(agent, \"channel\");\n if (resolved.defaultsUsed.length > 0) {\n log.info({ agentId, callPath: \"channel\", defaults: resolved.defaultsUsed }, \"channel agent config defaults applied\");\n }\n\n // Build system prompt — shared helper, identical to SSE chat\n const { systemPrompt, dynamicContext } = await buildAgentSystemPrompt(supabase, agent, storeId, message, tools, { senderContext, extendedTools: getExtendedToolsIndex() });\n\n // Update ai_conversations with agent_id (fire-and-forget)\n if (conversationId) {\n Promise.resolve(\n supabase.from(\"ai_conversations\").update({ agent_id: agentId }).eq(\"id\", conversationId).is(\"agent_id\", null)\n ).catch(() => {});\n }\n\n // Load conversation history with size-based compaction (same as SSE chat)\n const MAX_HISTORY_CHARS = resolved.maxHistoryChars;\n let loadedHistory: Anthropic.MessageParam[] = [];\n if (conversationId) {\n try {\n const { data: history } = await supabase\n .from(\"ai_messages\")\n .select(\"role, content\")\n .eq(\"conversation_id\", conversationId)\n .order(\"created_at\", { ascending: true })\n .limit(50);\n if (history?.length) {\n const raw: Anthropic.MessageParam[] = [];\n for (const m of history) {\n if (m.role === \"user\" || m.role === \"assistant\") {\n raw.push({ role: m.role, content: m.content });\n }\n }\n loadedHistory = compactHistory(raw, MAX_HISTORY_CHARS);\n }\n } catch { /* history not critical */ }\n }\n // Prepend dynamic context to user message to keep system prompt static (cache-friendly)\n const contextPrefix = dynamicContext ? `[Context]\\n${dynamicContext}\\n\\n[User Message]\\n` : \"\";\n const finalMessage = contextPrefix + message;\n const messages: Anthropic.MessageParam[] = [...loadedHistory, { role: \"user\", content: finalMessage }];\n\n const traceId = randomUUID();\n const chatStartTime = Date.now();\n try {\n const result = await runServerAgentLoop({\n anthropic: getAnthropicClient(agent),\n supabase,\n model: agentModel,\n systemPrompt,\n messages,\n tools,\n extendedTools,\n // All behavioral knobs from resolved config — DB is single source of truth\n maxTurns: resolved.maxTurns,\n temperature: resolved.temperature,\n maxTokens: resolved.maxTokens,\n maxConcurrentTools: resolved.maxConcurrentTools,\n enableDelegation: resolved.enableDelegation,\n enableModelRouting: resolved.enableModelRouting,\n contextOverrides: resolved.contextOverrides,\n subagentMaxTokens: resolved.subagentMaxTokens,\n subagentMaxTurns: resolved.subagentMaxTurns,\n subagentTemperature: resolved.subagentTemperature,\n loopDetectorConfig: {\n identicalCallLimit: resolved.loopIdenticalCallLimit,\n consecutiveErrorLimit: resolved.loopConsecutiveErrorLimit,\n turnErrorLimit: resolved.loopTurnErrorLimit,\n window: resolved.loopWindow,\n sessionToolErrorLimit: resolved.loopSessionToolErrorLimit,\n consecutiveFailedTurnLimit: resolved.loopConsecutiveFailedTurnLimit,\n fileReadLimit: resolved.loopFileReadLimit,\n },\n batchErrorLimit: resolved.loopBatchErrorLimit,\n storeId,\n source: \"channel_agent\",\n agentId,\n traceId,\n conversationId,\n executeTool: async (toolName, args) => {\n const toolArgs = { ...args };\n if (!toolArgs.store_id) toolArgs.store_id = storeId;\n // Pass sender context as user identity so node-triggered tool calls aren't anonymous\n const senderUserId = senderContext?.customerId || null;\n const senderUserLabel = senderContext?.customerName || senderContext?.senderName\n || (senderContext?.senderId ? `${senderContext.channelType}:${senderContext.senderId}` : null);\n return executeTool(supabase, toolName, toolArgs, storeId,\n traceId, senderUserId, senderUserLabel, \"channel_agent\", conversationId, userToolRows, agentId, undefined, true);\n },\n enableStreaming: false,\n maxDurationMs: resolved.maxDurationMs,\n });\n\n // Persist everything — shared helper, identical to SSE chat\n await persistAgentTurn(supabase, agent, {\n conversationId, storeId, agentId, agentModel, traceId, message, result,\n source: \"channel_agent\",\n chatStartTime, chatEndTime: Date.now(),\n userId: senderContext?.customerId || undefined,\n userEmail: senderContext?.customerName || senderContext?.senderName\n || (senderContext?.senderId ? `${senderContext.channelType}:${senderContext.senderId}` : undefined),\n senderContext,\n });\n\n return { success: true, response: result.finalText || \"(no response)\" };\n } catch (err) {\n return { success: false, error: (err as Error).message };\n }\n}\n\n// Wire both channel and webchat to the same invoker\nsetNodeAgentInvoker(invokeAgentForChannel);\nwebchatAgentInvoker = invokeAgentForChannel;\n\n// ============================================================================\n// NODE OFFLINE DETECTION\n// ============================================================================\n\nasync function enforceNodeOfflineStatus(supabase: SupabaseClient): Promise<number> {\n const threshold = new Date(Date.now() - 3 * 60_000).toISOString(); // 3 missed heartbeats (60s interval)\n const { data } = await supabase\n .from(\"nodes\")\n .update({ status: \"offline\" })\n .eq(\"status\", \"online\")\n .lt(\"last_heartbeat\", threshold)\n .select(\"id\");\n return data?.length || 0;\n}\n\n// ============================================================================\n// PERSISTENT WORKFLOW WORKER LOOP (5-second interval)\n// ============================================================================\n\n// Phase 3.1: Increased from 5s to 15s — NOTIFY-driven execution handles the fast path\n// Worker loop is now a safety net for missed notifications\nconst BASE_WORKER_INTERVAL_MS = 15_000;\nconst MAX_WORKER_INTERVAL_MS = 60_000;\nlet workerRunning = false;\nlet consecutiveErrors = 0;\nlet currentWorkerInterval = BASE_WORKER_INTERVAL_MS;\n\nasync function workflowWorkerLoop(): Promise<void> {\n if (workerRunning) return; // Prevent concurrent runs\n workerRunning = true;\n try {\n const supabase = getServiceClient();\n const [stepResult, waitingResolved] = await Promise.all([\n processWorkflowSteps(supabase, 10),\n processWaitingSteps(supabase),\n Promise.resolve(supabase.rpc(\"expire_pending_waitpoints\")).then(() => {}).catch(e => log.warn({ err: e.message }, \"expire_pending_waitpoints failed\")), // Non-fatal\n ]);\n\n // Schedule triggers + timeout enforcement + event triggers + orphan cleanup + DLQ retries + node offline detection\n const [scheduled, timedOut, eventsProcessed, orphansCleaned, dlqRetried, nodesOfflined] = await Promise.all([\n processScheduleTriggers(supabase).catch(e => { log.warn({ err: e.message }, \"processScheduleTriggers failed\"); return 0; }),\n enforceWorkflowTimeouts(supabase).catch(e => { log.warn({ err: e.message }, \"enforceWorkflowTimeouts failed\"); return 0; }),\n processEventTriggers(supabase).catch(e => { log.warn({ err: e.message }, \"processEventTriggers failed\"); return 0; }),\n cleanupOrphanedSteps(supabase).catch(e => { log.warn({ err: e.message }, \"cleanupOrphanedSteps failed\"); return 0; }),\n processDlqRetries(supabase).catch(e => { log.warn({ err: e.message }, \"processDlqRetries failed\"); return 0; }),\n enforceNodeOfflineStatus(supabase).catch(e => { log.warn({ err: e.message }, \"enforceNodeOfflineStatus failed\"); return 0; }),\n ]);\n\n if (stepResult.processed > 0 || waitingResolved > 0 || scheduled > 0 || timedOut > 0 || eventsProcessed > 0 || (stepResult as any).reclaimed > 0 || orphansCleaned > 0 || dlqRetried > 0 || nodesOfflined > 0) {\n log.info({ processed: stepResult.processed, errors: stepResult.errors, reclaimed: (stepResult as any).reclaimed || 0, waiting: waitingResolved, scheduled, timedOut, events: eventsProcessed, orphans: orphansCleaned, dlqRetries: dlqRetried, nodesOfflined }, \"worker tick\");\n }\n\n // Reset backoff on success\n if (consecutiveErrors > 0) {\n consecutiveErrors = 0;\n if (currentWorkerInterval !== BASE_WORKER_INTERVAL_MS) {\n currentWorkerInterval = BASE_WORKER_INTERVAL_MS;\n clearInterval(workerInterval);\n workerInterval = setInterval(workflowWorkerLoop, currentWorkerInterval);\n log.info({ intervalMs: currentWorkerInterval }, \"worker interval reset after recovery\");\n }\n }\n } catch (err) {\n consecutiveErrors++;\n log.error({ err: sanitizeError(err), consecutiveErrors }, \"worker error\");\n\n // Exponential backoff: 5s → 10s → 20s → 40s → 60s (cap)\n if (consecutiveErrors >= 3) {\n const newInterval = Math.min(BASE_WORKER_INTERVAL_MS * Math.pow(2, consecutiveErrors - 2), MAX_WORKER_INTERVAL_MS);\n if (newInterval !== currentWorkerInterval) {\n currentWorkerInterval = newInterval;\n clearInterval(workerInterval);\n workerInterval = setInterval(workflowWorkerLoop, currentWorkerInterval);\n log.warn({ intervalMs: currentWorkerInterval, consecutiveErrors }, \"worker interval increased due to repeated errors\");\n }\n }\n } finally {\n workerRunning = false;\n }\n}\n\nlet workerInterval = setInterval(workflowWorkerLoop, BASE_WORKER_INTERVAL_MS);\n\n// Initialize shared Supabase client with retry logic before server starts\ninitSupabase(SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY);\n\nserver.listen(PORT, () => {\n log.info({ port: PORT, supabaseUrl: SUPABASE_URL, runtime: process.version, workerIntervalMs: BASE_WORKER_INTERVAL_MS }, \"server listening\");\n\n // Initialize code worker pool for fast code step execution\n try {\n initWorkerPool();\n const stats = getPoolStats();\n log.info({ workers: stats.total }, \"code worker pool initialized\");\n workerPoolReady = true;\n } catch (err: any) {\n log.error({ err: err.message }, \"worker pool init failed\");\n }\n\n // Initialize local agent WebSocket gateway\n try {\n initLocalAgentGateway(server);\n } catch (err: any) {\n log.error({ err: err.message }, \"local-agent gateway init failed\");\n }\n\n // Phase 3: Start pg LISTEN for real-time SSE streaming\n setupPgListen().catch((err) => {\n log.error({ err: err.message }, \"pg-listen setup failed\");\n });\n\n // Phase 4.2: Mark orphaned conversations as resumable\n const serverBootTime = new Date();\n markOrphaned(getServiceClient(), serverBootTime)\n .then((count) => {\n if (count > 0) log.info({ count }, \"orphaned conversations marked resumable\");\n })\n .catch((err) => {\n log.warn({ err: (err as Error).message }, \"markOrphaned failed (table may not exist yet)\");\n });\n});\n\n// ============================================================================\n// GRACEFUL SHUTDOWN\n// ============================================================================\n\nasync function gracefulShutdown(signal: string) {\n log.info({ signal, activeRequests }, \"received shutdown signal, shutting down gracefully\");\n\n // 1. Stop accepting new connections\n server.close(() => {\n log.info(\"HTTP server closed\");\n });\n\n // 2. Clear workflow worker intervals\n clearInterval(workerInterval);\n clearInterval(sseCleanupInterval);\n\n // 3. Close all SSE client connections\n for (const [, clients] of sseClients) {\n for (const res of clients) {\n try { res.end(); } catch { /* client already disconnected — benign */ }\n }\n clients.clear();\n }\n sseClients.clear();\n\n // 3b. Flush ClickHouse span buffer before shutdown (prevents data loss on crash)\n try {\n await flushSpans();\n log.info(\"span buffer flushed\");\n } catch (err) { log.error({ err: (err as Error).message }, \"span buffer flush error\"); }\n\n // 4. Shut down code worker pool\n try {\n shutdownPool();\n log.info(\"worker pool shut down\");\n } catch (err) { log.error({ err: (err as Error).message }, \"worker pool shutdown error\"); }\n\n // 4b. Shut down local agent gateway\n try {\n shutdownAgentGateway();\n } catch (err) { log.error({ err: (err as Error).message }, \"agent gateway shutdown error\"); }\n\n // 4c. Shut down rate limiter\n rateLimiter.shutdown();\n\n // 5. Close pg LISTEN connection\n if (pgClient) {\n pgClient.end().catch(() => {});\n pgClient = null;\n log.info(\"pg LISTEN connection closed\");\n }\n\n // 6. Wait for active requests to drain (up to 25 seconds)\n const drainStart = Date.now();\n const drainInterval = setInterval(() => {\n if (activeRequests <= 0 || Date.now() - drainStart > 25_000) {\n clearInterval(drainInterval);\n log.info({ activeRequests }, \"drain complete, exiting\");\n process.exit(activeRequests > 0 ? 1 : 0);\n }\n log.info({ activeRequests }, \"waiting for active requests to drain...\");\n }, 1000);\n\n // 7. Force exit after 30 seconds if graceful shutdown hangs (increased from 10s)\n setTimeout(() => {\n log.fatal({ activeRequests }, \"graceful shutdown timed out after 30s, forcing exit\");\n process.exit(1);\n }, 30_000).unref();\n}\n\nprocess.on(\"SIGTERM\", () => gracefulShutdown(\"SIGTERM\"));\nprocess.on(\"SIGINT\", () => gracefulShutdown(\"SIGINT\"));\n"],"mappings":"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","ignoreList":[]}