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":"catalog.js","names":["sanitizeFilterValue","handleProducts","sb","args","storeId","sid","action","data","cats","error","catErr","from","select","eq","order","ascending","success","message","count","activeCount","head","neq","archivedCount","categories","product_status_summary","active","archived","tip","offset","q","limit","range","query","sq","String","or","category","category_id","catInput","catVal","matchedCatId","test","ilike","length","id","children","catIds","map","c","in","catalog_id","status","include_archived","featured","undefined","totalCount","flattened","row","rest","category_name","name","total","pid","product_id","product","pErr","single","fieldSchemas","pricingSchemas","inventory","field_schemas","fs","field_schema","pricing_schemas","ps","pricing_schema","insert","store_id","sku","description","short_description","type","cost_price","wholesale_price","stock_quantity","manage_stock","weight","tax_status","tax_class","pricing_data","featured_image","image_gallery","is_wholesale","wholesale_only","minimum_wholesale_quantity","catArg","primary_category_id","pricing_schema_id","field_schema_ids","Array","isArray","rows","fsId","field_schema_id","pricing_schema_ids","psId","productUpdates","inherited","categoryId","cat","upsert","onConflict","fields","schemaKeys","Set","fieldValues","f","key","add","default","agentValues","custom_fields","k","v","Object","entries","has","push","catFieldSchemas","cat2","filter","r","tiers","keys","update","full","updates","agentFV","pfs","fsDef","existing","base","filtered","Boolean","updateCatArg","hard","delete","deleted","parent_id","active_only","catId","fieldAssigns","pricingAssigns","a","sort_order","subcategories","slug","toLowerCase","replace","icon","display_order","i","is_active","public_only","schema_id","assignments","assigned_categories","catalogId","defaultCatalog","is_public","deleted_at","Date","toISOString","quality_tier","store","owner_user_id","vertical","is_default","settings","target","schemaType","schema_type","targetId","target_id","schemaId","targetTable","ownerCheck","ownerErr","schemaTable","schemaCheck","schemaErr","table","fkCol","schemaCol","schema","rebuilt","removed","all","allErr","nameMap","Map","p","normalized","trim","set","get","duplicates","_","products","normalizedName","normalized_name","created_at","skuMap","skuDupes","totalNameDupes","reduce","s","d","totalSkuDupes","lines","group","slice","join","primaryId","primary_product_id","secondaryId","secondary_product_id","primary","secondary","reassignResults","secInv","quantity","priRow","location_id","maybeSingle","updated_at","oiErr","oiCount","order_items","ciErr","ciCount","cart_items","poiErr","poiCount","purchase_order_items","prErr","prCount","product_reviews","fillFields","fills","field","merged","field_fills","merged_product","archived_product","reassign_results","handleCollections","sn"],"sources":["../../../src/server/handlers/catalog.ts"],"sourcesContent":["import type { SupabaseClient } from \"@supabase/supabase-js\";\nimport { sanitizeFilterValue } from \"../lib/utils.js\";\n\n// ============================================================================\n// PRODUCTS — Full product catalog management\n// Products, categories, field schemas, pricing schemas, catalogs, assignments\n// ============================================================================\n\nexport async function handleProducts(sb: SupabaseClient, args: Record<string, unknown>, storeId?: string) {\n const sid = storeId as string;\n switch (args.action) {\n\n // ======================== PRODUCTS ========================\n\n case \"browse\": {\n // Category summary with product counts, price ranges, stock status\n const { data: cats, error: catErr } = await sb.from(\"categories\")\n .select(\"id, name, slug, parent_id, display_order, product_count, catalog_id\")\n .eq(\"store_id\", sid)\n .eq(\"is_active\", true)\n .order(\"display_order\", { ascending: true });\n if (catErr) return { success: false, error: catErr.message };\n\n // Status distribution via count queries\n const { count: activeCount } = await sb.from(\"products\").select(\"id\", { count: \"exact\", head: true }).eq(\"store_id\", sid).neq(\"status\", \"archived\");\n const { count: archivedCount } = await sb.from(\"products\").select(\"id\", { count: \"exact\", head: true }).eq(\"store_id\", sid).eq(\"status\", \"archived\");\n\n return {\n success: true,\n data: {\n categories: cats,\n product_status_summary: { active: activeCount || 0, archived: archivedCount || 0 },\n tip: \"Use products.find with category or status filters to drill into a specific set. Use products.get for full product detail.\"\n }\n };\n }\n\n case \"find\": {\n const offset = args.offset as number || 0;\n let q = sb.from(\"products\")\n .select(\"id, name, sku, status, type, stock_quantity, category:categories!primary_category_id(name)\", { count: \"exact\" })\n .eq(\"store_id\", sid)\n .order(\"created_at\", { ascending: false });\n if (args.limit) {\n q = q.range(offset, offset + (args.limit as number) - 1);\n } else if (offset > 0) {\n q = q.range(offset, offset + 999);\n }\n if (args.query) { const sq = sanitizeFilterValue(String(args.query)); q = q.or(`name.ilike.%${sq}%,sku.ilike.%${sq}%,description.ilike.%${sq}%`); }\n if (args.category || args.category_id) {\n // Accept both category (name or UUID) and category_id (UUID)\n const catInput = (args.category_id || args.category) as string;\n const catVal = sanitizeFilterValue(catInput);\n let matchedCatId: string | null = null;\n if (/^[0-9a-f]{8}-/.test(catVal)) {\n matchedCatId = catVal;\n } else {\n const { data: cats } = await sb.from(\"categories\").select(\"id\").ilike(\"name\", `%${catVal}%`).eq(\"store_id\", sid).limit(1);\n if (cats?.length) matchedCatId = cats[0].id;\n }\n if (matchedCatId) {\n // Include sub-categories (children of the matched category)\n const { data: children } = await sb.from(\"categories\").select(\"id\").eq(\"parent_id\", matchedCatId).eq(\"store_id\", sid);\n const catIds = [matchedCatId, ...(children || []).map(c => c.id)];\n q = q.in(\"primary_category_id\", catIds);\n } else {\n // Category not found — return empty result\n q = q.eq(\"primary_category_id\", \"00000000-0000-0000-0000-000000000000\");\n }\n }\n if (args.catalog_id) q = q.eq(\"catalog_id\", args.catalog_id as string);\n if (args.status) q = q.eq(\"status\", args.status as string);\n // Exclude archived unless explicitly requested or filtering by status\n if (!args.status && !args.include_archived) {\n q = q.neq(\"status\", \"archived\");\n }\n if (args.featured !== undefined) q = q.eq(\"featured\", args.featured as boolean);\n const { data, error, count: totalCount } = await q;\n if (error) return { success: false, error: error.message };\n // Flatten nested category for display\n const flattened = (data || []).map((row: any) => {\n const { category, ...rest } = row;\n return { ...rest, category_name: category?.name || null };\n });\n return { success: true, total: totalCount, count: flattened.length, offset, ...(args.limit ? { limit: args.limit } : {}), data: flattened };\n }\n\n case \"get\": {\n const pid = args.product_id as string;\n const { data: product, error: pErr } = await sb.from(\"products\")\n .select(\"*, category:categories!primary_category_id(id, name, slug)\")\n .eq(\"id\", pid).eq(\"store_id\", sid).single();\n if (pErr) return { success: false, error: pErr.message };\n\n const { data: fieldSchemas } = await sb.from(\"product_field_schemas\")\n .select(\"field_schema_id, field_schema:field_schemas!field_schema_id(id, name, fields, icon)\")\n .eq(\"product_id\", pid);\n\n const { data: pricingSchemas } = await sb.from(\"product_pricing_schemas\")\n .select(\"pricing_schema_id, pricing_schema:pricing_schemas!pricing_schema_id(id, name, tiers, quality_tier)\")\n .eq(\"product_id\", pid);\n\n const { data: inventory } = await sb.from(\"inventory\")\n .select(\"id, quantity, location:locations!location_id(id, name)\")\n .eq(\"product_id\", pid).eq(\"store_id\", sid);\n\n return {\n success: true,\n data: {\n ...product,\n field_schemas: fieldSchemas?.map(fs => fs.field_schema) || [],\n pricing_schemas: pricingSchemas?.map(ps => ps.pricing_schema) || [],\n inventory: inventory || []\n }\n };\n }\n\n case \"create\": {\n const name = args.name as string;\n if (!name) return { success: false, error: \"name is required\" };\n const insert: Record<string, unknown> = { store_id: sid, name };\n if (args.sku) insert.sku = args.sku;\n if (args.description) insert.description = args.description;\n if (args.short_description) insert.short_description = args.short_description;\n if (args.type) insert.type = args.type;\n if (args.status) insert.status = args.status;\n if (args.cost_price !== undefined) insert.cost_price = args.cost_price;\n if (args.wholesale_price !== undefined) insert.wholesale_price = args.wholesale_price;\n if (args.featured !== undefined) insert.featured = args.featured;\n if (args.stock_quantity !== undefined) insert.stock_quantity = args.stock_quantity;\n if (args.manage_stock !== undefined) insert.manage_stock = args.manage_stock;\n if (args.weight !== undefined) insert.weight = args.weight;\n if (args.tax_status) insert.tax_status = args.tax_status;\n if (args.tax_class) insert.tax_class = args.tax_class;\n if (args.catalog_id) insert.catalog_id = args.catalog_id;\n if (args.pricing_data) insert.pricing_data = args.pricing_data;\n // custom_fields NOT inserted directly — schema is the source of truth\n // Agent-provided custom_fields are filtered against schema keys post-insert\n if (args.featured_image !== undefined) insert.featured_image = args.featured_image;\n if (args.image_gallery !== undefined) insert.image_gallery = args.image_gallery;\n if (args.is_wholesale !== undefined) insert.is_wholesale = args.is_wholesale;\n if (args.wholesale_only !== undefined) insert.wholesale_only = args.wholesale_only;\n if (args.minimum_wholesale_quantity !== undefined) insert.minimum_wholesale_quantity = args.minimum_wholesale_quantity;\n const catArg = (args.category || args.primary_category_id || args.category_id) as string | undefined;\n if (catArg) {\n if (/^[0-9a-f]{8}-/.test(catArg)) {\n insert.primary_category_id = catArg;\n } else {\n const { data: cats } = await sb.from(\"categories\").select(\"id\").ilike(\"name\", `%${catArg}%`).eq(\"store_id\", sid).limit(1);\n if (cats?.length) insert.primary_category_id = cats[0].id;\n }\n }\n if (args.pricing_schema_id) insert.pricing_schema_id = args.pricing_schema_id;\n\n const { data, error } = await sb.from(\"products\").insert(insert).select(\"id, name, sku, slug, status, primary_category_id, pricing_schema_id, created_at\").single();\n if (error) return { success: false, error: error.message };\n\n // Explicit schema assignments from args\n if (args.field_schema_ids && Array.isArray(args.field_schema_ids)) {\n const rows = (args.field_schema_ids as string[]).map(fsId => ({ product_id: data.id, field_schema_id: fsId }));\n await sb.from(\"product_field_schemas\").insert(rows);\n }\n if (args.pricing_schema_ids && Array.isArray(args.pricing_schema_ids)) {\n const rows = (args.pricing_schema_ids as string[]).map(psId => ({ product_id: data.id, pricing_schema_id: psId }));\n await sb.from(\"product_pricing_schemas\").insert(rows);\n }\n\n const productUpdates: Record<string, unknown> = {};\n const inherited: string[] = [];\n\n // Auto-inherit field schema from category — ALWAYS merge with schema template\n const categoryId = insert.primary_category_id as string | undefined;\n if (categoryId && !args.field_schema_ids) {\n const { data: cat } = await sb.from(\"categories\").select(\"field_schema_id\").eq(\"id\", categoryId).single();\n if (cat?.field_schema_id) {\n await sb.from(\"product_field_schemas\").upsert(\n { product_id: data.id, field_schema_id: cat.field_schema_id },\n { onConflict: \"product_id,field_schema_id\" }\n );\n // Schema is source of truth — only schema keys allowed\n const { data: fs } = await sb.from(\"field_schemas\").select(\"fields\").eq(\"id\", cat.field_schema_id).single();\n if (fs?.fields && Array.isArray(fs.fields)) {\n const schemaKeys = new Set<string>();\n const fieldValues: Record<string, unknown> = {};\n for (const f of fs.fields) {\n const key = (f as any).key;\n if (key) { schemaKeys.add(key); fieldValues[key] = (f as any).default ?? null; }\n }\n // Only accept agent values for keys that exist in the schema\n const agentValues = (args.custom_fields as Record<string, unknown>) || {};\n for (const [k, v] of Object.entries(agentValues)) {\n if (schemaKeys.has(k)) fieldValues[k] = v;\n }\n productUpdates.custom_fields = fieldValues;\n }\n inherited.push(`field_schema:${cat.field_schema_id}`);\n }\n // Also check junction table for additional schemas\n const { data: catFieldSchemas } = await sb.from(\"category_field_schemas\").select(\"field_schema_id\").eq(\"category_id\", categoryId);\n if (catFieldSchemas?.length) {\n const cat2 = await sb.from(\"categories\").select(\"field_schema_id\").eq(\"id\", categoryId).single();\n const rows = catFieldSchemas.filter(r => r.field_schema_id !== cat2?.data?.field_schema_id).map(r => ({ product_id: data.id, field_schema_id: r.field_schema_id }));\n if (rows.length) await sb.from(\"product_field_schemas\").insert(rows);\n }\n }\n\n // If pricing_schema_id provided, hydrate pricing_data from schema\n if (insert.pricing_schema_id && !args.pricing_data) {\n const { data: ps } = await sb.from(\"pricing_schemas\").select(\"tiers\").eq(\"id\", insert.pricing_schema_id as string).single();\n if (ps?.tiers) productUpdates.pricing_data = ps.tiers;\n }\n\n // Apply any post-insert updates\n if (Object.keys(productUpdates).length > 0) {\n await sb.from(\"products\").update(productUpdates).eq(\"id\", data.id);\n }\n\n // Re-read the full product for response\n const { data: full } = await sb.from(\"products\")\n .select(\"id, name, sku, slug, status, primary_category_id, pricing_schema_id, custom_fields, pricing_data, created_at\")\n .eq(\"id\", data.id).single();\n if (inherited.length && full) (full as any).inherited = inherited;\n\n return { success: true, data: full || data };\n }\n\n case \"update\": {\n const pid = args.product_id as string;\n if (!pid) return { success: false, error: \"product_id is required\" };\n const updates: Record<string, unknown> = {};\n if (args.name !== undefined) updates.name = args.name;\n if (args.sku !== undefined) updates.sku = args.sku;\n if (args.description !== undefined) updates.description = args.description;\n if (args.short_description !== undefined) updates.short_description = args.short_description;\n if (args.type !== undefined) updates.type = args.type;\n if (args.status !== undefined) updates.status = args.status;\n if (args.cost_price !== undefined) updates.cost_price = args.cost_price;\n if (args.wholesale_price !== undefined) updates.wholesale_price = args.wholesale_price;\n if (args.featured !== undefined) updates.featured = args.featured;\n if (args.stock_quantity !== undefined) updates.stock_quantity = args.stock_quantity;\n if (args.manage_stock !== undefined) updates.manage_stock = args.manage_stock;\n if (args.weight !== undefined) updates.weight = args.weight;\n if (args.tax_status !== undefined) updates.tax_status = args.tax_status;\n if (args.tax_class !== undefined) updates.tax_class = args.tax_class;\n if (args.catalog_id !== undefined) updates.catalog_id = args.catalog_id;\n if (args.pricing_schema_id !== undefined) updates.pricing_schema_id = args.pricing_schema_id;\n if (args.pricing_data !== undefined) updates.pricing_data = args.pricing_data;\n // custom_fields filtered to schema keys only (schema = source of truth)\n if (args.custom_fields !== undefined) {\n const agentFV = args.custom_fields as Record<string, unknown>;\n // Look up product's linked field schema to get allowed keys\n const { data: pfs } = await sb.from(\"product_field_schemas\").select(\"field_schema_id\").eq(\"product_id\", pid).limit(1);\n if (pfs?.length) {\n const { data: fsDef } = await sb.from(\"field_schemas\").select(\"fields\").eq(\"id\", pfs[0].field_schema_id).single();\n if (fsDef?.fields && Array.isArray(fsDef.fields)) {\n const { data: existing } = await sb.from(\"products\").select(\"custom_fields\").eq(\"id\", pid).single();\n const base = (existing?.custom_fields as Record<string, unknown>) || {};\n const filtered: Record<string, unknown> = { ...base };\n const schemaKeys = new Set(fsDef.fields.map((f: any) => f.key).filter(Boolean));\n for (const [k, v] of Object.entries(agentFV)) {\n if (schemaKeys.has(k)) filtered[k] = v;\n }\n updates.custom_fields = filtered;\n } else {\n updates.custom_fields = agentFV; // no schema definition found, pass through\n }\n } else {\n updates.custom_fields = agentFV; // no schema linked, pass through\n }\n }\n if (args.is_wholesale !== undefined) updates.is_wholesale = args.is_wholesale;\n if (args.wholesale_only !== undefined) updates.wholesale_only = args.wholesale_only;\n if (args.minimum_wholesale_quantity !== undefined) updates.minimum_wholesale_quantity = args.minimum_wholesale_quantity;\n if (args.featured_image !== undefined) updates.featured_image = args.featured_image;\n if (args.image_gallery !== undefined) updates.image_gallery = args.image_gallery;\n const updateCatArg = (args.category ?? args.primary_category_id ?? args.category_id) as string | undefined;\n if (updateCatArg !== undefined) {\n if (!updateCatArg) { updates.primary_category_id = null; }\n else if (/^[0-9a-f]{8}-/.test(updateCatArg)) { updates.primary_category_id = updateCatArg; }\n else {\n const { data: cats } = await sb.from(\"categories\").select(\"id\").ilike(\"name\", `%${updateCatArg}%`).eq(\"store_id\", sid).limit(1);\n if (cats?.length) updates.primary_category_id = cats[0].id;\n }\n }\n\n const { data, error } = await sb.from(\"products\")\n .update(updates).eq(\"id\", pid).eq(\"store_id\", sid)\n .select(\"id, name, sku, slug, status, cost_price, pricing_schema_id, updated_at\").single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n case \"delete\": {\n const pid = args.product_id as string;\n if (!pid) return { success: false, error: \"product_id is required\" };\n if (args.hard === true) {\n const { error } = await sb.from(\"products\").delete().eq(\"id\", pid).eq(\"store_id\", sid);\n return error ? { success: false, error: error.message } : { success: true, data: { id: pid, deleted: true } };\n }\n const { data, error } = await sb.from(\"products\")\n .update({ status: \"archived\" }).eq(\"id\", pid).eq(\"store_id\", sid)\n .select(\"id, name, status\").single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n // ======================== CATEGORIES ========================\n\n case \"list_categories\": {\n let q = sb.from(\"categories\")\n .select(\"id, name, slug, description, icon, parent_id, display_order, is_active, featured, product_count, catalog_id, field_schema_id, created_at\")\n .eq(\"store_id\", sid)\n .order(\"display_order\", { ascending: true });\n if (args.catalog_id) q = q.eq(\"catalog_id\", args.catalog_id as string);\n if (args.parent_id) q = q.eq(\"parent_id\", args.parent_id as string);\n if (args.active_only !== false) q = q.eq(\"is_active\", true);\n const { data, error } = await q.limit(args.limit as number || 100);\n return error ? { success: false, error: error.message } : { success: true, count: data?.length, data };\n }\n\n case \"get_category\": {\n const catId = args.category_id as string;\n const { data: cat, error: catErr } = await sb.from(\"categories\")\n .select(\"*\").eq(\"id\", catId).eq(\"store_id\", sid).single();\n if (catErr) return { success: false, error: catErr.message };\n\n const { data: fieldAssigns } = await sb.from(\"category_field_schemas\")\n .select(\"sort_order, is_active, field_schema:field_schemas!field_schema_id(id, name, fields, icon)\")\n .eq(\"category_id\", catId).eq(\"is_active\", true).order(\"sort_order\");\n\n const { data: pricingAssigns } = await sb.from(\"category_pricing_schemas\")\n .select(\"sort_order, is_active, pricing_schema:pricing_schemas!pricing_schema_id(id, name, tiers, quality_tier)\")\n .eq(\"category_id\", catId).eq(\"is_active\", true).order(\"sort_order\");\n\n const { data: children } = await sb.from(\"categories\")\n .select(\"id, name, slug, display_order, is_active, product_count\")\n .eq(\"parent_id\", catId).order(\"display_order\");\n\n return {\n success: true,\n data: {\n ...cat,\n field_schemas: fieldAssigns?.map(a => ({ ...a.field_schema, sort_order: a.sort_order })) || [],\n pricing_schemas: pricingAssigns?.map(a => ({ ...a.pricing_schema, sort_order: a.sort_order })) || [],\n subcategories: children || []\n }\n };\n }\n\n case \"create_category\": {\n const name = args.name as string;\n if (!name) return { success: false, error: \"name is required\" };\n const insert: Record<string, unknown> = { store_id: sid, name, slug: name.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\") };\n if (args.description) insert.description = args.description;\n if (args.icon) insert.icon = args.icon;\n if (args.parent_id) insert.parent_id = args.parent_id;\n if (args.catalog_id) insert.catalog_id = args.catalog_id;\n if (args.display_order !== undefined) insert.display_order = args.display_order;\n if (args.field_schema_id) insert.field_schema_id = args.field_schema_id;\n\n const { data, error } = await sb.from(\"categories\").insert(insert)\n .select(\"id, name, slug, parent_id, catalog_id, display_order, created_at\").single();\n if (error) return { success: false, error: error.message };\n\n if (args.field_schema_ids && Array.isArray(args.field_schema_ids)) {\n const rows = (args.field_schema_ids as string[]).map((fsId, i) => ({ category_id: data.id, field_schema_id: fsId, sort_order: i + 1 }));\n await sb.from(\"category_field_schemas\").insert(rows);\n }\n if (args.pricing_schema_ids && Array.isArray(args.pricing_schema_ids)) {\n const rows = (args.pricing_schema_ids as string[]).map((psId, i) => ({ category_id: data.id, pricing_schema_id: psId, sort_order: i + 1 }));\n await sb.from(\"category_pricing_schemas\").insert(rows);\n }\n\n return { success: true, data };\n }\n\n case \"update_category\": {\n const catId = args.category_id as string;\n if (!catId) return { success: false, error: \"category_id is required\" };\n const updates: Record<string, unknown> = {};\n if (args.name !== undefined) updates.name = args.name;\n if (args.description !== undefined) updates.description = args.description;\n if (args.icon !== undefined) updates.icon = args.icon;\n if (args.parent_id !== undefined) updates.parent_id = args.parent_id;\n if (args.catalog_id !== undefined) updates.catalog_id = args.catalog_id;\n if (args.display_order !== undefined) updates.display_order = args.display_order;\n if (args.is_active !== undefined) updates.is_active = args.is_active;\n if (args.featured !== undefined) updates.featured = args.featured;\n if (args.field_schema_id !== undefined) updates.field_schema_id = args.field_schema_id;\n\n const { data, error } = await sb.from(\"categories\")\n .update(updates).eq(\"id\", catId).eq(\"store_id\", sid)\n .select(\"id, name, slug, is_active, display_order, updated_at\").single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n case \"delete_category\": {\n const catId = args.category_id as string;\n if (!catId) return { success: false, error: \"category_id is required\" };\n if (args.hard === true) {\n const { error } = await sb.from(\"categories\").delete().eq(\"id\", catId).eq(\"store_id\", sid);\n return error ? { success: false, error: error.message } : { success: true, data: { id: catId, deleted: true } };\n }\n const { data, error } = await sb.from(\"categories\")\n .update({ is_active: false }).eq(\"id\", catId).eq(\"store_id\", sid)\n .select(\"id, name, is_active\").single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n // ======================== FIELD SCHEMAS ========================\n\n case \"list_field_schemas\": {\n let q = sb.from(\"field_schemas\")\n .select(\"id, name, slug, description, icon, fields, is_public, is_active, catalog_id, store_id, install_count, created_at\")\n .eq(\"is_active\", true);\n // Show store-owned schemas AND public schemas (prevent IDOR)\n if (args.public_only === true) {\n q = q.eq(\"is_public\", true);\n } else {\n q = q.or(`store_id.eq.${sid},is_public.eq.true`);\n }\n if (args.catalog_id) q = q.eq(\"catalog_id\", args.catalog_id as string);\n if (args.limit) q = q.limit(args.limit as number);\n const { data, error } = await q.order(\"name\");\n return error ? { success: false, error: error.message } : { success: true, count: data?.length, data };\n }\n\n case \"get_field_schema\": {\n const fsId = (args.field_schema_id || args.schema_id) as string;\n if (!fsId) return { success: false, error: \"field_schema_id is required\" };\n // Allow access to own schemas OR public schemas (prevent IDOR)\n const { data, error } = await sb.from(\"field_schemas\").select(\"*\").eq(\"id\", fsId)\n .or(`store_id.eq.${sid},is_public.eq.true`).single();\n if (error) return { success: false, error: error.message };\n\n const { data: assignments } = await sb.from(\"category_field_schemas\")\n .select(\"category:categories!category_id(id, name)\").eq(\"field_schema_id\", fsId).eq(\"is_active\", true);\n\n return { success: true, data: { ...data, assigned_categories: assignments?.map(a => a.category) || [] } };\n }\n\n case \"create_field_schema\": {\n const name = args.name as string;\n if (!name) return { success: false, error: \"name is required\" };\n if (!args.fields || !Array.isArray(args.fields)) return { success: false, error: \"fields array is required\" };\n\n // Auto-resolve catalog_id: use provided value, or fall back to store's default catalog\n let catalogId = args.catalog_id as string | undefined;\n if (!catalogId) {\n const { data: defaultCatalog } = await sb.from(\"catalogs\")\n .select(\"id\").eq(\"store_id\", sid).eq(\"is_default\", true).single();\n if (defaultCatalog) catalogId = defaultCatalog.id;\n }\n\n const insert: Record<string, unknown> = {\n store_id: sid,\n name,\n slug: name.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\"),\n fields: args.fields\n };\n if (args.description) insert.description = args.description;\n if (args.icon) insert.icon = args.icon;\n if (catalogId) insert.catalog_id = catalogId;\n if (args.is_public !== undefined) insert.is_public = args.is_public;\n\n const { data, error } = await sb.from(\"field_schemas\").insert(insert)\n .select(\"id, name, slug, fields, icon, is_active, catalog_id, created_at\").single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n case \"update_field_schema\": {\n const fsId = (args.field_schema_id || args.schema_id) as string;\n if (!fsId) return { success: false, error: \"field_schema_id is required\" };\n const updates: Record<string, unknown> = {};\n if (args.name !== undefined) updates.name = args.name;\n if (args.description !== undefined) updates.description = args.description;\n if (args.icon !== undefined) updates.icon = args.icon;\n if (args.fields !== undefined) updates.fields = args.fields;\n if (args.is_public !== undefined) updates.is_public = args.is_public;\n if (args.is_active !== undefined) updates.is_active = args.is_active;\n if (args.catalog_id !== undefined) updates.catalog_id = args.catalog_id;\n\n // Only allow modification of own schemas (prevent IDOR)\n const { data, error } = await sb.from(\"field_schemas\")\n .update(updates).eq(\"id\", fsId).eq(\"store_id\", sid)\n .select(\"id, name, slug, fields, icon, is_active, catalog_id, updated_at\").single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n case \"delete_field_schema\": {\n const fsId = (args.field_schema_id || args.schema_id) as string;\n if (!fsId) return { success: false, error: \"field_schema_id is required\" };\n // Only allow deletion of own schemas (prevent IDOR)\n const { data, error } = await sb.from(\"field_schemas\")\n .update({ is_active: false, deleted_at: new Date().toISOString() }).eq(\"id\", fsId).eq(\"store_id\", sid)\n .select(\"id, name, is_active\").single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n // ======================== PRICING SCHEMAS ========================\n\n case \"list_pricing_schemas\": {\n let q = sb.from(\"pricing_schemas\")\n .select(\"id, name, slug, description, tiers, quality_tier, is_public, is_active, catalog_id, store_id, install_count, created_at\")\n .eq(\"is_active\", true);\n // Show store-owned schemas AND public schemas (prevent IDOR)\n if (args.public_only === true) {\n q = q.eq(\"is_public\", true);\n } else {\n q = q.or(`store_id.eq.${sid},is_public.eq.true`);\n }\n if (args.catalog_id) q = q.eq(\"catalog_id\", args.catalog_id as string);\n if (args.limit) q = q.limit(args.limit as number);\n const { data, error } = await q.order(\"name\");\n return error ? { success: false, error: error.message } : { success: true, count: data?.length, data };\n }\n\n case \"get_pricing_schema\": {\n const psId = (args.pricing_schema_id || args.schema_id) as string;\n if (!psId) return { success: false, error: \"pricing_schema_id is required\" };\n // Allow access to own schemas OR public schemas (prevent IDOR)\n const { data, error } = await sb.from(\"pricing_schemas\").select(\"*\").eq(\"id\", psId)\n .or(`store_id.eq.${sid},is_public.eq.true`).single();\n if (error) return { success: false, error: error.message };\n\n const { data: assignments } = await sb.from(\"category_pricing_schemas\")\n .select(\"category:categories!category_id(id, name)\").eq(\"pricing_schema_id\", psId).eq(\"is_active\", true);\n\n return { success: true, data: { ...data, assigned_categories: assignments?.map(a => a.category) || [] } };\n }\n\n case \"create_pricing_schema\": {\n const name = args.name as string;\n if (!name) return { success: false, error: \"name is required\" };\n if (!args.tiers || !Array.isArray(args.tiers)) return { success: false, error: \"tiers array is required\" };\n\n // Auto-resolve catalog_id: use provided value, or fall back to store's default catalog\n let catalogId = args.catalog_id as string | undefined;\n if (!catalogId) {\n const { data: defaultCatalog } = await sb.from(\"catalogs\")\n .select(\"id\").eq(\"store_id\", sid).eq(\"is_default\", true).single();\n if (defaultCatalog) catalogId = defaultCatalog.id;\n }\n\n const insert: Record<string, unknown> = {\n store_id: sid,\n name,\n slug: name.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\"),\n tiers: args.tiers\n };\n if (args.description) insert.description = args.description;\n if (args.quality_tier) insert.quality_tier = args.quality_tier;\n if (catalogId) insert.catalog_id = catalogId;\n if (args.is_public !== undefined) insert.is_public = args.is_public;\n\n const { data, error } = await sb.from(\"pricing_schemas\").insert(insert)\n .select(\"id, name, slug, tiers, quality_tier, is_active, catalog_id, created_at\").single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n case \"update_pricing_schema\": {\n const psId = (args.pricing_schema_id || args.schema_id) as string;\n if (!psId) return { success: false, error: \"pricing_schema_id is required\" };\n const updates: Record<string, unknown> = {};\n if (args.name !== undefined) updates.name = args.name;\n if (args.description !== undefined) updates.description = args.description;\n if (args.tiers !== undefined) updates.tiers = args.tiers;\n if (args.quality_tier !== undefined) updates.quality_tier = args.quality_tier;\n if (args.is_public !== undefined) updates.is_public = args.is_public;\n if (args.is_active !== undefined) updates.is_active = args.is_active;\n if (args.catalog_id !== undefined) updates.catalog_id = args.catalog_id;\n\n // Only allow modification of own schemas (prevent IDOR)\n const { data, error } = await sb.from(\"pricing_schemas\")\n .update(updates).eq(\"id\", psId).eq(\"store_id\", sid)\n .select(\"id, name, slug, tiers, quality_tier, is_active, catalog_id, updated_at\").single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n case \"delete_pricing_schema\": {\n const psId = (args.pricing_schema_id || args.schema_id) as string;\n if (!psId) return { success: false, error: \"pricing_schema_id is required\" };\n // Only allow deletion of own schemas (prevent IDOR)\n const { data, error } = await sb.from(\"pricing_schemas\")\n .update({ is_active: false, deleted_at: new Date().toISOString() }).eq(\"id\", psId).eq(\"store_id\", sid)\n .select(\"id, name, is_active\").single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n // ======================== CATALOGS ========================\n\n case \"list_catalogs\": {\n const { data, error } = await sb.from(\"catalogs\")\n .select(\"id, name, slug, description, vertical, is_active, is_default, display_order, created_at\")\n .eq(\"store_id\", sid).order(\"display_order\");\n return error ? { success: false, error: error.message } : { success: true, count: data?.length, data };\n }\n\n case \"create_catalog\": {\n const name = args.name as string;\n if (!name) return { success: false, error: \"name is required\" };\n // Resolve owner_user_id from store\n const { data: store } = await sb.from(\"stores\").select(\"owner_user_id\").eq(\"id\", sid).single();\n const insert: Record<string, unknown> = {\n store_id: sid, name,\n slug: name.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\"),\n owner_user_id: store?.owner_user_id\n };\n if (args.description) insert.description = args.description;\n if (args.vertical) insert.vertical = args.vertical;\n if (args.is_default !== undefined) insert.is_default = args.is_default;\n if (args.settings) insert.settings = args.settings;\n\n const { data, error } = await sb.from(\"catalogs\").insert(insert)\n .select(\"id, name, slug, vertical, is_default, created_at\").single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n case \"update_catalog\": {\n const catId = args.catalog_id as string;\n if (!catId) return { success: false, error: \"catalog_id is required\" };\n const updates: Record<string, unknown> = {};\n if (args.name !== undefined) updates.name = args.name;\n if (args.description !== undefined) updates.description = args.description;\n if (args.vertical !== undefined) updates.vertical = args.vertical;\n if (args.is_active !== undefined) updates.is_active = args.is_active;\n if (args.is_default !== undefined) updates.is_default = args.is_default;\n if (args.settings !== undefined) updates.settings = args.settings;\n if (args.display_order !== undefined) updates.display_order = args.display_order;\n\n const { data, error } = await sb.from(\"catalogs\")\n .update(updates).eq(\"id\", catId).eq(\"store_id\", sid)\n .select(\"id, name, slug, vertical, is_active, is_default, updated_at\").single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n // ======================== SCHEMA ASSIGNMENTS ========================\n\n case \"assign_schema\": {\n const target = args.target as string; // \"category\" or \"product\"\n const schemaType = args.schema_type as string; // \"field\" or \"pricing\"\n const targetId = args.target_id as string;\n const schemaId = args.schema_id as string;\n if (!target || !schemaType || !targetId || !schemaId) {\n return { success: false, error: \"target (category|product), schema_type (field|pricing), target_id, and schema_id are required\" };\n }\n\n // Verify target product/category belongs to this store (prevent IDOR)\n const targetTable = target === \"product\" ? \"products\" : \"categories\";\n const { data: ownerCheck, error: ownerErr } = await sb.from(targetTable)\n .select(\"id\").eq(\"id\", targetId).eq(\"store_id\", sid).single();\n if (ownerErr || !ownerCheck) {\n return { success: false, error: `${target} not found or does not belong to this store` };\n }\n\n // Verify schema is accessible (own schema or public)\n const schemaTable = schemaType === \"field\" ? \"field_schemas\" : \"pricing_schemas\";\n const { data: schemaCheck, error: schemaErr } = await sb.from(schemaTable)\n .select(\"id\").eq(\"id\", schemaId).or(`store_id.eq.${sid},is_public.eq.true`).single();\n if (schemaErr || !schemaCheck) {\n return { success: false, error: `${schemaType} schema not found or not accessible` };\n }\n\n const table = target === \"product\"\n ? (schemaType === \"field\" ? \"product_field_schemas\" : \"product_pricing_schemas\")\n : (schemaType === \"field\" ? \"category_field_schemas\" : \"category_pricing_schemas\");\n const fkCol = target === \"product\" ? \"product_id\" : \"category_id\";\n const schemaCol = schemaType === \"field\" ? \"field_schema_id\" : \"pricing_schema_id\";\n\n const row: Record<string, unknown> = { [fkCol]: targetId, [schemaCol]: schemaId };\n if (args.sort_order !== undefined) row.sort_order = args.sort_order;\n\n const { data, error } = await sb.from(table).upsert(row, { onConflict: `${fkCol},${schemaCol}` }).select().single();\n if (error) return { success: false, error: error.message };\n\n // Hydrate product with schema data\n if (target === \"product\") {\n const productUpdates: Record<string, unknown> = {};\n if (schemaType === \"pricing\") {\n const { data: schema } = await sb.from(\"pricing_schemas\").select(\"tiers, quality_tier\").eq(\"id\", schemaId).single();\n productUpdates.pricing_schema_id = schemaId;\n if (schema?.tiers) productUpdates.pricing_data = schema.tiers;\n }\n if (schemaType === \"field\") {\n // Schema is source of truth — rebuild custom_fields from schema keys only\n const { data: schema } = await sb.from(\"field_schemas\").select(\"fields\").eq(\"id\", schemaId).single();\n if (schema?.fields && Array.isArray(schema.fields)) {\n const { data: product } = await sb.from(\"products\").select(\"custom_fields\").eq(\"id\", targetId).eq(\"store_id\", sid).single();\n const existing = (product?.custom_fields as Record<string, unknown>) || {};\n const rebuilt: Record<string, unknown> = {};\n for (const f of schema.fields) {\n const key = (f as any).key;\n if (key) rebuilt[key] = (key in existing) ? existing[key] : ((f as any).default ?? null);\n }\n productUpdates.custom_fields = rebuilt;\n }\n }\n if (Object.keys(productUpdates).length > 0) {\n await sb.from(\"products\").update(productUpdates).eq(\"id\", targetId).eq(\"store_id\", sid);\n }\n }\n\n return { success: true, data };\n }\n\n case \"unassign_schema\": {\n const target = args.target as string;\n const schemaType = args.schema_type as string;\n const targetId = args.target_id as string;\n const schemaId = args.schema_id as string;\n if (!target || !schemaType || !targetId || !schemaId) {\n return { success: false, error: \"target (category|product), schema_type (field|pricing), target_id, and schema_id are required\" };\n }\n\n // Verify target product/category belongs to this store (prevent IDOR)\n const targetTable = target === \"product\" ? \"products\" : \"categories\";\n const { data: ownerCheck, error: ownerErr } = await sb.from(targetTable)\n .select(\"id\").eq(\"id\", targetId).eq(\"store_id\", sid).single();\n if (ownerErr || !ownerCheck) {\n return { success: false, error: `${target} not found or does not belong to this store` };\n }\n\n const table = target === \"product\"\n ? (schemaType === \"field\" ? \"product_field_schemas\" : \"product_pricing_schemas\")\n : (schemaType === \"field\" ? \"category_field_schemas\" : \"category_pricing_schemas\");\n const fkCol = target === \"product\" ? \"product_id\" : \"category_id\";\n const schemaCol = schemaType === \"field\" ? \"field_schema_id\" : \"pricing_schema_id\";\n\n const { error } = await sb.from(table).delete().eq(fkCol, targetId).eq(schemaCol, schemaId);\n return error ? { success: false, error: error.message } : { success: true, data: { removed: true, target, schema_type: schemaType, target_id: targetId, schema_id: schemaId } };\n }\n\n // ======================== PRODUCT DEDUP / MERGE ========================\n\n case \"find_duplicates\": {\n // Find products with similar names (potential duplicates)\n const { data: all, error: allErr } = await sb.from(\"products\")\n .select(\"id, name, sku, status, stock_quantity, cost_price, created_at\")\n .eq(\"store_id\", sid).neq(\"status\", \"archived\")\n .order(\"name\");\n if (allErr) return { success: false, error: allErr.message };\n\n // Group by normalized name (lowercase, trim, strip common suffixes like \"(TEMP)\", \"(OLD)\", \"(COPY)\")\n const nameMap = new Map<string, typeof all>();\n for (const p of all || []) {\n const normalized = (p.name || \"\").toLowerCase().trim()\n .replace(/\\s*\\((temp|old|copy|duplicate|dup|new|v2)\\)\\s*/gi, \"\")\n .replace(/\\s+/g, \" \");\n if (!normalized) continue;\n if (!nameMap.has(normalized)) nameMap.set(normalized, []);\n nameMap.get(normalized)!.push(p);\n }\n\n const duplicates = Array.from(nameMap.entries())\n .filter(([_, products]) => products.length > 1)\n .map(([normalizedName, products]) => ({\n normalized_name: normalizedName,\n count: products.length,\n products: products.map(p => ({\n id: p.id, name: p.name, sku: p.sku, status: p.status,\n stock_quantity: p.stock_quantity, cost_price: p.cost_price, created_at: p.created_at,\n })),\n }));\n\n // Also check by exact SKU match\n const skuMap = new Map<string, typeof all>();\n for (const p of all || []) {\n if (!p.sku) continue;\n const key = p.sku.toLowerCase().trim();\n if (!skuMap.has(key)) skuMap.set(key, []);\n skuMap.get(key)!.push(p);\n }\n const skuDupes = Array.from(skuMap.entries())\n .filter(([_, products]) => products.length > 1)\n .map(([sku, products]) => ({ sku, count: products.length, products }));\n\n // Pre-format as markdown — formatter drops nested products arrays\n const totalNameDupes = duplicates.reduce((s, d) => s + d.count, 0);\n const totalSkuDupes = skuDupes.reduce((s, d) => s + d.count, 0);\n const lines: string[] = [\n `## Duplicate Products`,\n `**By Name**: ${duplicates.length} groups (${totalNameDupes} products) | **By SKU**: ${skuDupes.length} groups (${totalSkuDupes} products)\\n`,\n ];\n if (duplicates.length > 0) {\n lines.push(\"### Name Duplicates\");\n for (const group of duplicates.slice(0, 20)) {\n lines.push(`\\n**\"${group.normalized_name}\"** (${group.count} products):`);\n lines.push(\"| Name | SKU | Status | Stock | Created |\");\n lines.push(\"| --- | --- | --- | ---: | --- |\");\n for (const p of group.products) {\n lines.push(`| ${p.name} | ${p.sku || \"—\"} | ${p.status} | ${p.stock_quantity ?? \"—\"} | ${p.created_at?.slice(0, 10) || \"—\"} |`);\n }\n }\n }\n if (skuDupes.length > 0) {\n lines.push(\"\\n### SKU Duplicates\");\n for (const group of skuDupes.slice(0, 20)) {\n lines.push(`\\n**SKU \"${group.sku}\"** (${group.count} products):`);\n lines.push(\"| Name | SKU | Status | Stock | Created |\");\n lines.push(\"| --- | --- | --- | ---: | --- |\");\n for (const p of group.products) {\n lines.push(`| ${(p as any).name} | ${(p as any).sku || \"—\"} | ${(p as any).status} | ${(p as any).stock_quantity ?? \"—\"} | ${(p as any).created_at?.slice(0, 10) || \"—\"} |`);\n }\n }\n }\n if (duplicates.length === 0 && skuDupes.length === 0) {\n lines.push(\"\\nNo duplicates found.\");\n }\n return { success: true, data: lines.join(\"\\n\") };\n }\n\n case \"merge\": {\n const primaryId = args.primary_product_id as string;\n const secondaryId = args.secondary_product_id as string;\n if (!primaryId || !secondaryId) return { success: false, error: \"primary_product_id and secondary_product_id required\" };\n if (primaryId === secondaryId) return { success: false, error: \"Cannot merge a product with itself\" };\n\n // Verify both exist and belong to this store\n const { data: primary } = await sb.from(\"products\").select(\"*\").eq(\"id\", primaryId).eq(\"store_id\", sid).single();\n const { data: secondary } = await sb.from(\"products\").select(\"*\").eq(\"id\", secondaryId).eq(\"store_id\", sid).single();\n if (!primary) return { success: false, error: `Primary product ${primaryId} not found` };\n if (!secondary) return { success: false, error: `Secondary product ${secondaryId} not found` };\n\n const reassignResults: Record<string, string> = {};\n\n // 1. Consolidate inventory — sum quantities per location\n const { data: secInv } = await sb.from(\"inventory\")\n .select(\"product_id, location_id, quantity\")\n .eq(\"product_id\", secondaryId).eq(\"store_id\", sid);\n if (secInv?.length) {\n for (const row of secInv) {\n if (!row.quantity || row.quantity <= 0) continue;\n // Try to add to existing primary inventory at same location\n const { data: priRow } = await sb.from(\"inventory\")\n .select(\"id, quantity\")\n .eq(\"product_id\", primaryId).eq(\"location_id\", row.location_id).eq(\"store_id\", sid)\n .maybeSingle();\n if (priRow) {\n await sb.from(\"inventory\").update({ quantity: (priRow.quantity || 0) + row.quantity, updated_at: new Date().toISOString() }).eq(\"id\", priRow.id);\n } else {\n await sb.from(\"inventory\").insert({ store_id: sid, product_id: primaryId, location_id: row.location_id, quantity: row.quantity });\n }\n }\n // Zero out secondary inventory\n await sb.from(\"inventory\").update({ quantity: 0 }).eq(\"product_id\", secondaryId).eq(\"store_id\", sid);\n reassignResults.inventory = `consolidated ${secInv.length} location(s)`;\n } else {\n reassignResults.inventory = \"no inventory to consolidate\";\n }\n\n // 2. Reassign order_items\n const { error: oiErr, count: oiCount } = await sb.from(\"order_items\")\n .update({ product_id: primaryId }).eq(\"product_id\", secondaryId);\n reassignResults.order_items = oiErr ? `error: ${oiErr.message}` : `moved ${oiCount ?? 0} rows`;\n\n // 3. Reassign cart_items\n const { error: ciErr, count: ciCount } = await sb.from(\"cart_items\")\n .update({ product_id: primaryId }).eq(\"product_id\", secondaryId);\n reassignResults.cart_items = ciErr ? `error: ${ciErr.message}` : `moved ${ciCount ?? 0} rows`;\n\n // 4. Reassign purchase_order_items\n const { error: poiErr, count: poiCount } = await sb.from(\"purchase_order_items\")\n .update({ product_id: primaryId }).eq(\"product_id\", secondaryId);\n reassignResults.purchase_order_items = poiErr ? `error: ${poiErr.message}` : `moved ${poiCount ?? 0} rows`;\n\n // 5. Reassign product_reviews\n const { error: prErr, count: prCount } = await sb.from(\"product_reviews\")\n .update({ product_id: primaryId }).eq(\"product_id\", secondaryId);\n reassignResults.product_reviews = prErr ? `error: ${prErr.message}` : `moved ${prCount ?? 0} rows`;\n\n // 6. Fill in missing fields on primary from secondary\n const fillFields = [\"description\", \"short_description\", \"cost_price\", \"wholesale_price\", \"weight\", \"featured_image\", \"image_gallery\"] as const;\n const fills: Record<string, unknown> = {};\n for (const field of fillFields) {\n if (!primary[field] && secondary[field]) fills[field] = secondary[field];\n }\n // Merge custom_fields (secondary fills gaps)\n if (secondary.custom_fields && typeof secondary.custom_fields === \"object\") {\n const merged = { ...(secondary.custom_fields as Record<string, unknown>), ...(primary.custom_fields as Record<string, unknown> || {}) };\n fills.custom_fields = merged;\n }\n if (Object.keys(fills).length > 0) {\n await sb.from(\"products\").update(fills).eq(\"id\", primaryId).eq(\"store_id\", sid);\n reassignResults.field_fills = Object.keys(fills).join(\", \");\n }\n\n // 7. Archive the secondary product\n await sb.from(\"products\").update({\n status: \"archived\",\n name: `[MERGED] ${secondary.name}`,\n }).eq(\"id\", secondaryId).eq(\"store_id\", sid);\n\n // Re-read primary\n const { data: merged } = await sb.from(\"products\")\n .select(\"id, name, sku, status, stock_quantity, cost_price, created_at, updated_at\")\n .eq(\"id\", primaryId).single();\n\n return {\n success: true,\n data: {\n merged_product: merged,\n archived_product: { id: secondaryId, name: secondary.name },\n reassign_results: reassignResults,\n }\n };\n }\n\n default:\n return { success: false, error: `Unknown products action: ${args.action}. Valid: browse, find, get, create, update, delete, find_duplicates, merge, list_categories, get_category, create_category, update_category, delete_category, list_field_schemas, get_field_schema, create_field_schema, update_field_schema, delete_field_schema, list_pricing_schemas, get_pricing_schema, create_pricing_schema, update_pricing_schema, delete_pricing_schema, list_catalogs, create_catalog, update_catalog, assign_schema, unassign_schema` };\n }\n}\n\nexport async function handleCollections(sb: SupabaseClient, args: Record<string, unknown>, storeId?: string) {\n const sid = storeId as string;\n switch (args.action) {\n case \"find\": {\n let q = sb.from(\"creation_collections\").select(\"*\").eq(\"store_id\", sid);\n if (args.name) { const sn = sanitizeFilterValue(args.name as string); q = q.ilike(\"name\", `%${sn}%`); }\n const { data, error } = await q.limit(100);\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n case \"create\": {\n const slug = (args.slug as string) || (args.name as string || \"\").toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\");\n const { data, error } = await sb.from(\"creation_collections\")\n .insert({ store_id: sid, name: args.name, slug }).select().single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n default:\n return { success: false, error: `Unknown collections action: ${args.action}` };\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,21 +1,26 @@
1
1
  import { getClickHouseClient } from "../lib/clickhouse-client.js";
2
+
2
3
  /**
3
4
  * ClickHouse observability handler — platform-level metrics via direct HTTP queries.
4
5
  * Replaces FDW RPCs with direct ClickHouse queries for lower latency.
5
6
  */
6
7
  export async function handleClickHouse(sb, args, storeId) {
7
- const sid = storeId;
8
- const hoursBack = args.hours_back || 24;
9
- const limit = Math.min(args.limit || 50, 200);
10
- const ch = getClickHouseClient();
11
- if (!ch.isEnabled) {
12
- return { success: false, error: "ClickHouse is not configured" };
13
- }
14
- const storeFilter = sid ? `AND store_id = '${esc(sid)}'` : "";
15
- switch (args.action) {
16
- // ---- traces: List recent traces ----
17
- case "traces": {
18
- const data = await ch.query(`
8
+ const sid = storeId;
9
+ const hoursBack = args.hours_back || 24;
10
+ const limit = Math.min(args.limit || 50, 200);
11
+ const ch = getClickHouseClient();
12
+ if (!ch.isEnabled) {
13
+ return {
14
+ success: false,
15
+ error: "ClickHouse is not configured"
16
+ };
17
+ }
18
+ const storeFilter = sid ? `AND store_id = '${esc(sid)}'` : "";
19
+ switch (args.action) {
20
+ // ---- traces: List recent traces ----
21
+ case "traces":
22
+ {
23
+ const data = await ch.query(`
19
24
  SELECT
20
25
  trace_id,
21
26
  arrayElement(groupArrayIf(service_name, parent_span_id = '' OR parent_span_id IS NULL), 1) AS root_service,
@@ -31,14 +36,21 @@ export async function handleClickHouse(sb, args, storeId) {
31
36
  ORDER BY min(started_at) DESC
32
37
  LIMIT ${limit}
33
38
  `);
34
- return { success: true, data };
35
- }
36
- // ---- trace_detail: Full trace waterfall ----
37
- case "trace_detail": {
38
- const traceId = args.trace_id;
39
- if (!traceId)
40
- return { success: false, error: "trace_id is required" };
41
- const spans = await ch.query(`
39
+ return {
40
+ success: true,
41
+ data
42
+ };
43
+ }
44
+
45
+ // ---- trace_detail: Full trace waterfall ----
46
+ case "trace_detail":
47
+ {
48
+ const traceId = args.trace_id;
49
+ if (!traceId) return {
50
+ success: false,
51
+ error: "trace_id is required"
52
+ };
53
+ const spans = await ch.query(`
42
54
  SELECT
43
55
  span_id, parent_span_id, trace_id, operation_name,
44
56
  service_name, duration_ms AS duration,
@@ -49,11 +61,19 @@ export async function handleClickHouse(sb, args, storeId) {
49
61
  WHERE trace_id = '${esc(traceId)}'
50
62
  ORDER BY started_at ASC
51
63
  `);
52
- return { success: true, data: { trace_id: traceId, spans } };
53
- }
54
- // ---- function_health: Service health metrics ----
55
- case "function_health": {
56
- const data = await ch.query(`
64
+ return {
65
+ success: true,
66
+ data: {
67
+ trace_id: traceId,
68
+ spans
69
+ }
70
+ };
71
+ }
72
+
73
+ // ---- function_health: Service health metrics ----
74
+ case "function_health":
75
+ {
76
+ const data = await ch.query(`
57
77
  SELECT
58
78
  service_name AS function_name,
59
79
  sum(total_requests) AS total_reqs,
@@ -70,15 +90,22 @@ export async function handleClickHouse(sb, args, storeId) {
70
90
  ${storeFilter}
71
91
  GROUP BY service_name
72
92
  `);
73
- return { success: true, data };
74
- }
75
- // ---- function_logs: Request logs ----
76
- case "function_logs": {
77
- const functionName = args.function_name;
78
- if (!functionName)
79
- return { success: false, error: "function_name is required" };
80
- const levelFilter = args.level ? `AND severity = '${esc(args.level)}'` : "";
81
- const data = await ch.query(`
93
+ return {
94
+ success: true,
95
+ data
96
+ };
97
+ }
98
+
99
+ // ---- function_logs: Request logs ----
100
+ case "function_logs":
101
+ {
102
+ const functionName = args.function_name;
103
+ if (!functionName) return {
104
+ success: false,
105
+ error: "function_name is required"
106
+ };
107
+ const levelFilter = args.level ? `AND severity = '${esc(args.level)}'` : "";
108
+ const data = await ch.query(`
82
109
  SELECT
83
110
  request_id, service_name AS function_name, http_status AS status,
84
111
  duration_ms, http_method AS method, http_path AS path,
@@ -91,48 +118,59 @@ export async function handleClickHouse(sb, args, storeId) {
91
118
  ORDER BY started_at DESC
92
119
  LIMIT ${limit}
93
120
  `);
94
- return { success: true, data };
95
- }
96
- // ---- cost_budgets: Budget utilization ----
97
- case "cost_budgets": {
98
- if (!sid)
99
- return { success: false, error: "store_id is required for cost_budgets" };
100
- // Cost budgets require Postgres for ai_cost_budgets table + ClickHouse for spend
101
- const { data: budgets, error: budgetErr } = await sb
102
- .from("ai_cost_budgets")
103
- .select("agent_id, limit_usd, is_active, created_at")
104
- .eq("is_active", true)
105
- .eq("store_id", sid);
106
- if (budgetErr)
107
- return { success: false, error: budgetErr.message };
108
- const agentIds = (budgets || []).map(b => `'${esc(b.agent_id)}'`).join(",");
109
- const spendRows = agentIds
110
- ? await ch.query(`
121
+ return {
122
+ success: true,
123
+ data
124
+ };
125
+ }
126
+
127
+ // ---- cost_budgets: Budget utilization ----
128
+ case "cost_budgets":
129
+ {
130
+ if (!sid) return {
131
+ success: false,
132
+ error: "store_id is required for cost_budgets"
133
+ };
134
+ // Cost budgets require Postgres for ai_cost_budgets table + ClickHouse for spend
135
+ const {
136
+ data: budgets,
137
+ error: budgetErr
138
+ } = await sb.from("ai_cost_budgets").select("agent_id, limit_usd, is_active, created_at").eq("is_active", true).eq("store_id", sid);
139
+ if (budgetErr) return {
140
+ success: false,
141
+ error: budgetErr.message
142
+ };
143
+ const agentIds = (budgets || []).map(b => `'${esc(b.agent_id)}'`).join(",");
144
+ const spendRows = agentIds ? await ch.query(`
111
145
  SELECT agent_id, sum(total_cost_usd) AS total_cost_usd
112
146
  FROM token_usage_hourly
113
147
  WHERE agent_id IN (${agentIds})
114
148
  AND store_id = '${esc(sid)}'
115
149
  GROUP BY agent_id
116
- `)
117
- : [];
118
- const spendMap = new Map(spendRows.map(r => [r.agent_id, r.total_cost_usd]));
119
- const data = (budgets || []).map(b => {
120
- const spend = spendMap.get(b.agent_id) || 0;
121
- return {
122
- agent_id: b.agent_id,
123
- budget_amount: b.limit_usd,
124
- current_spend: spend,
125
- period_start: b.created_at,
126
- period_end: new Date().toISOString(),
127
- utilization_pct: b.limit_usd > 0 ? (spend / b.limit_usd) * 100 : 0,
128
- is_over_budget: spend > b.limit_usd,
129
- };
130
- });
131
- return { success: true, data };
132
- }
133
- // ---- error_groups: Error fingerprints grouped ----
134
- case "error_groups": {
135
- const data = await ch.query(`
150
+ `) : [];
151
+ const spendMap = new Map(spendRows.map(r => [r.agent_id, r.total_cost_usd]));
152
+ const data = (budgets || []).map(b => {
153
+ const spend = spendMap.get(b.agent_id) || 0;
154
+ return {
155
+ agent_id: b.agent_id,
156
+ budget_amount: b.limit_usd,
157
+ current_spend: spend,
158
+ period_start: b.created_at,
159
+ period_end: new Date().toISOString(),
160
+ utilization_pct: b.limit_usd > 0 ? spend / b.limit_usd * 100 : 0,
161
+ is_over_budget: spend > b.limit_usd
162
+ };
163
+ });
164
+ return {
165
+ success: true,
166
+ data
167
+ };
168
+ }
169
+
170
+ // ---- error_groups: Error fingerprints grouped ----
171
+ case "error_groups":
172
+ {
173
+ const data = await ch.query(`
136
174
  SELECT
137
175
  fingerprint,
138
176
  any(error_type) AS error_type,
@@ -147,12 +185,20 @@ export async function handleClickHouse(sb, args, storeId) {
147
185
  ORDER BY count DESC
148
186
  LIMIT ${limit}
149
187
  `);
150
- return { success: true, data: { groups: data, total_groups: data.length, hours_back: hoursBack } };
151
- }
152
- // ---- system_status: Combined overview ----
153
- case "system_status": {
154
- const [functions, traces, budgetData] = await Promise.all([
155
- ch.query(`
188
+ return {
189
+ success: true,
190
+ data: {
191
+ groups: data,
192
+ total_groups: data.length,
193
+ hours_back: hoursBack
194
+ }
195
+ };
196
+ }
197
+
198
+ // ---- system_status: Combined overview ----
199
+ case "system_status":
200
+ {
201
+ const [functions, traces, budgetData] = await Promise.all([ch.query(`
156
202
  SELECT
157
203
  service_name AS function_name,
158
204
  sum(total_requests) AS total_reqs,
@@ -163,8 +209,7 @@ export async function handleClickHouse(sb, args, storeId) {
163
209
  WHERE bucket >= now() - INTERVAL ${Math.min(hoursBack, 1)} HOUR
164
210
  ${storeFilter}
165
211
  GROUP BY service_name
166
- `),
167
- ch.query(`
212
+ `), ch.query(`
168
213
  SELECT
169
214
  trace_id,
170
215
  arrayElement(groupArrayIf(service_name, parent_span_id = '' OR parent_span_id IS NULL), 1) AS root_service,
@@ -179,37 +224,40 @@ export async function handleClickHouse(sb, args, storeId) {
179
224
  GROUP BY trace_id
180
225
  ORDER BY min(started_at) DESC
181
226
  LIMIT 10
182
- `),
183
- sid
184
- ? handleClickHouse(sb, { action: "cost_budgets" }, sid)
185
- : Promise.resolve({ success: true, data: null }),
186
- ]);
187
- const totalRequests = functions.reduce((sum, f) => sum + (f.total_requests || 0), 0);
188
- const totalErrors = functions.reduce((sum, f) => sum + (f.error_count || 0), 0);
189
- return {
190
- success: true,
191
- data: {
192
- summary: {
193
- function_count: functions.length,
194
- total_requests: totalRequests,
195
- total_errors: totalErrors,
196
- error_rate: totalRequests > 0 ? Math.round((totalErrors / totalRequests) * 10000) / 100 : 0,
197
- },
198
- functions,
199
- recent_traces: traces,
200
- cost_budgets: budgetData.data,
201
- hours_back: hoursBack,
202
- },
203
- };
204
- }
205
- default:
206
- return {
207
- success: false,
208
- error: `Unknown clickhouse action: ${args.action}. Available: traces, trace_detail, function_health, function_logs, cost_budgets, error_groups, system_status`,
209
- };
210
- }
227
+ `), sid ? handleClickHouse(sb, {
228
+ action: "cost_budgets"
229
+ }, sid) : Promise.resolve({
230
+ success: true,
231
+ data: null
232
+ })]);
233
+ const totalRequests = functions.reduce((sum, f) => sum + (f.total_requests || 0), 0);
234
+ const totalErrors = functions.reduce((sum, f) => sum + (f.error_count || 0), 0);
235
+ return {
236
+ success: true,
237
+ data: {
238
+ summary: {
239
+ function_count: functions.length,
240
+ total_requests: totalRequests,
241
+ total_errors: totalErrors,
242
+ error_rate: totalRequests > 0 ? Math.round(totalErrors / totalRequests * 10000) / 100 : 0
243
+ },
244
+ functions,
245
+ recent_traces: traces,
246
+ cost_budgets: budgetData.data,
247
+ hours_back: hoursBack
248
+ }
249
+ };
250
+ }
251
+ default:
252
+ return {
253
+ success: false,
254
+ error: `Unknown clickhouse action: ${args.action}. Available: traces, trace_detail, function_health, function_logs, cost_budgets, error_groups, system_status`
255
+ };
256
+ }
211
257
  }
258
+
212
259
  /** Escape single quotes for ClickHouse SQL */
213
260
  function esc(s) {
214
- return s.replace(/'/g, "\\'");
261
+ return s.replace(/'/g, "\\'");
215
262
  }
263
+ //# sourceMappingURL=clickhouse.js.map