whale-code 6.5.11 → 6.6.0

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 (613) hide show
  1. package/dist/cli/chat/ChatApp.js +7 -11
  2. package/dist/cli/chat/ChatApp.js.map +1 -1
  3. package/dist/cli/chat/ChatInput.js +7 -3
  4. package/dist/cli/chat/ChatInput.js.map +1 -1
  5. package/dist/cli/chat/MessageList.js +5 -6
  6. package/dist/cli/chat/MessageList.js.map +1 -1
  7. package/dist/cli/chat/StatusBar.d.ts +2 -2
  8. package/dist/cli/chat/StatusBar.js +90 -160
  9. package/dist/cli/chat/StatusBar.js.map +1 -1
  10. package/dist/cli/chat/components/LiveArea.js +78 -115
  11. package/dist/cli/chat/components/LiveArea.js.map +1 -1
  12. package/dist/cli/chat/components/StaticMessages.js +60 -79
  13. package/dist/cli/chat/components/StaticMessages.js.map +1 -1
  14. package/dist/cli/chat/hooks/useAgentLoop.js +45 -37
  15. package/dist/cli/chat/hooks/useAgentLoop.js.map +1 -1
  16. package/dist/cli/chat/store.d.ts +12 -0
  17. package/dist/cli/chat/store.js +19 -0
  18. package/dist/cli/chat/store.js.map +1 -1
  19. package/dist/cli/services/agent-loop-tools.js +10 -1
  20. package/dist/cli/services/agent-loop-tools.js.map +1 -1
  21. package/dist/cli/services/cli-agent-loop.js +3 -2
  22. package/dist/cli/services/cli-agent-loop.js.map +1 -1
  23. package/dist/cli/services/config-store.js +4 -3
  24. package/dist/cli/services/config-store.js.map +1 -1
  25. package/dist/cli/services/memory-manager.js +2 -2
  26. package/dist/cli/services/memory-manager.js.map +1 -1
  27. package/dist/cli/services/permission-modes.js +14 -10
  28. package/dist/cli/services/permission-modes.js.map +1 -1
  29. package/dist/cli/services/session-client.js +2 -1
  30. package/dist/cli/services/session-client.js.map +1 -1
  31. package/dist/cli/services/session-persistence.js +14 -6
  32. package/dist/cli/services/session-persistence.js.map +1 -1
  33. package/dist/cli/shared/SpinnerSlot.js +4 -1
  34. package/dist/cli/shared/SpinnerSlot.js.map +1 -1
  35. package/dist/server/handlers/browser-lifecycle.js +10 -0
  36. package/dist/server/handlers/browser-lifecycle.js.map +1 -1
  37. package/dist/server/handlers/browser.js +16 -1
  38. package/dist/server/handlers/browser.js.map +1 -1
  39. package/dist/server/handlers/campaigns.js +11 -0
  40. package/dist/server/handlers/campaigns.js.map +1 -1
  41. package/dist/server/handlers/catalog-products.js +19 -5
  42. package/dist/server/handlers/catalog-products.js.map +1 -1
  43. package/dist/server/handlers/catalog.js +42 -8
  44. package/dist/server/handlers/catalog.js.map +1 -1
  45. package/dist/server/handlers/clickhouse.js +4 -4
  46. package/dist/server/handlers/clickhouse.js.map +1 -1
  47. package/dist/server/handlers/comms-email.js +70 -8
  48. package/dist/server/handlers/comms-email.js.map +1 -1
  49. package/dist/server/handlers/comms.js +63 -21
  50. package/dist/server/handlers/comms.js.map +1 -1
  51. package/dist/server/handlers/coupons.js +141 -77
  52. package/dist/server/handlers/coupons.js.map +1 -1
  53. package/dist/server/handlers/google-ads.js +280 -8
  54. package/dist/server/handlers/google-ads.js.map +1 -1
  55. package/dist/server/handlers/remove-bg.d.ts +33 -0
  56. package/dist/server/handlers/remove-bg.js +698 -44
  57. package/dist/server/handlers/remove-bg.js.map +1 -1
  58. package/dist/server/handlers/supply-chain.js +93 -1
  59. package/dist/server/handlers/supply-chain.js.map +1 -1
  60. package/dist/server/handlers/workflow-steps-types.d.ts +1 -1
  61. package/dist/server/handlers/workflow-steps-types.js +7 -1
  62. package/dist/server/handlers/workflow-steps-types.js.map +1 -1
  63. package/dist/server/handlers/workflow-steps.js +1 -1
  64. package/dist/server/handlers/workflow-steps.js.map +1 -1
  65. package/dist/server/index.js +122 -29
  66. package/dist/server/index.js.map +1 -1
  67. package/dist/server/lib/agent-loop-turn.js +33 -3
  68. package/dist/server/lib/agent-loop-turn.js.map +1 -1
  69. package/dist/server/lib/agent-loop-types.d.ts +6 -2
  70. package/dist/server/lib/agent-loop-types.js +14 -2
  71. package/dist/server/lib/agent-loop-types.js.map +1 -1
  72. package/dist/server/lib/clickhouse-client.js +4 -2
  73. package/dist/server/lib/clickhouse-client.js.map +1 -1
  74. package/dist/server/lib/code-worker.js +4 -1
  75. package/dist/server/lib/code-worker.js.map +1 -1
  76. package/dist/server/providers/anthropic.js +103 -33
  77. package/dist/server/providers/anthropic.js.map +1 -1
  78. package/dist/server/server-chat.js +2 -2
  79. package/dist/server/server-chat.js.map +1 -1
  80. package/dist/server/server-helpers.d.ts +8 -1
  81. package/dist/server/server-helpers.js +17 -3
  82. package/dist/server/server-helpers.js.map +1 -1
  83. package/dist/server/server-persist.js +34 -21
  84. package/dist/server/server-persist.js.map +1 -1
  85. package/dist/server/server-rate-limit.d.ts +0 -1
  86. package/dist/server/server-rate-limit.js +5 -5
  87. package/dist/server/server-rate-limit.js.map +1 -1
  88. package/dist/server/server-routes-approvals.js +2 -2
  89. package/dist/server/server-routes-approvals.js.map +1 -1
  90. package/dist/server/server-routes-auth.js +2 -2
  91. package/dist/server/server-routes-auth.js.map +1 -1
  92. package/dist/server/server-routes-events.js +2 -2
  93. package/dist/server/server-routes-events.js.map +1 -1
  94. package/dist/server/server-routes-public.js +4 -4
  95. package/dist/server/server-routes-public.js.map +1 -1
  96. package/dist/server/server-routes-webchat.js +3 -3
  97. package/dist/server/server-routes-webchat.js.map +1 -1
  98. package/dist/server/server-store-circuit-breaker.js +1 -1
  99. package/dist/server/server-store-circuit-breaker.js.map +1 -1
  100. package/dist/server/tool-router.js +7 -4
  101. package/dist/server/tool-router.js.map +1 -1
  102. package/dist/server/validation.js +11 -0
  103. package/dist/server/validation.js.map +1 -1
  104. package/dist/shared/api-client.js +38 -11
  105. package/dist/shared/api-client.js.map +1 -1
  106. package/package.json +12 -10
  107. package/vendor/ink/build/ink.js +68 -24
  108. package/vendor/ink/node_modules/react-devtools-core/README.md +152 -0
  109. package/vendor/ink/node_modules/react-devtools-core/backend.js +1 -0
  110. package/vendor/ink/node_modules/react-devtools-core/dist/648.chunk.js +2 -0
  111. package/vendor/ink/node_modules/react-devtools-core/dist/648.chunk.js.map +1 -0
  112. package/vendor/ink/node_modules/react-devtools-core/dist/backend.js +15691 -0
  113. package/vendor/ink/node_modules/react-devtools-core/dist/backend.js.map +1 -0
  114. package/vendor/ink/node_modules/react-devtools-core/dist/importFile.worker.worker.js +2 -0
  115. package/vendor/ink/node_modules/react-devtools-core/dist/importFile.worker.worker.js.map +1 -0
  116. package/vendor/ink/node_modules/react-devtools-core/dist/parseSourceAndMetadata.worker.worker.js +14 -0
  117. package/vendor/ink/node_modules/react-devtools-core/dist/parseSourceAndMetadata.worker.worker.js.map +1 -0
  118. package/vendor/ink/node_modules/react-devtools-core/dist/standalone.js +2 -0
  119. package/vendor/ink/node_modules/react-devtools-core/dist/standalone.js.map +1 -0
  120. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/LICENSE +21 -0
  121. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/README.md +495 -0
  122. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/browser.js +8 -0
  123. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/index.js +10 -0
  124. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/buffer-util.js +129 -0
  125. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/constants.js +10 -0
  126. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/event-target.js +184 -0
  127. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/extension.js +223 -0
  128. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/limiter.js +55 -0
  129. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/permessage-deflate.js +518 -0
  130. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/receiver.js +607 -0
  131. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/sender.js +409 -0
  132. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/stream.js +180 -0
  133. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/validation.js +104 -0
  134. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/websocket-server.js +449 -0
  135. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/websocket.js +1197 -0
  136. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/package.json +56 -0
  137. package/vendor/ink/node_modules/react-devtools-core/package.json +38 -0
  138. package/vendor/ink/node_modules/react-devtools-core/standalone.js +1 -0
  139. package/dist/cli/__tests__/print-mode-streaming.test.js +0 -270
  140. package/dist/cli/__tests__/print-mode.basic-output.test.js +0 -230
  141. package/dist/cli/__tests__/print-mode.session-errors.test.js +0 -252
  142. package/dist/cli/__tests__/print-mode.test.js +0 -273
  143. package/dist/cli/__tests__/serve-mode-messages.test.js +0 -338
  144. package/dist/cli/__tests__/serve-mode.messages.part2.test.js +0 -266
  145. package/dist/cli/__tests__/serve-mode.messages.test.js +0 -277
  146. package/dist/cli/__tests__/serve-mode.startup-http.test.js +0 -279
  147. package/dist/cli/__tests__/serve-mode.test.js +0 -345
  148. package/dist/cli/chat/NodeManager.d.ts +0 -30
  149. package/dist/cli/chat/NodeManager.js +0 -66
  150. package/dist/cli/chat/NodeManager.js.map +0 -1
  151. package/dist/cli/chat/chat-input-menu-handler.d.ts +0 -32
  152. package/dist/cli/chat/hooks/slash-imsg-handlers.js +0 -148
  153. package/dist/cli/chat/hooks/slash-imsg-handlers.js.map +0 -1
  154. package/dist/cli/chat/hooks/useStreamingReducer.d.ts +0 -66
  155. package/dist/cli/commands/__tests__/config-cmd.test.js +0 -270
  156. package/dist/cli/commands/__tests__/doctor.test.js +0 -257
  157. package/dist/cli/commands/__tests__/imsg-node-bridge.test.js +0 -99
  158. package/dist/cli/commands/__tests__/imsg-utils.test.js +0 -73
  159. package/dist/cli/commands/__tests__/init.test.js +0 -214
  160. package/dist/cli/commands/__tests__/mcp.test.js +0 -287
  161. package/dist/cli/commands/imsg-watcher-helpers.d.ts +0 -40
  162. package/dist/cli/commands/imsg-watcher-helpers.js +0 -184
  163. package/dist/cli/commands/imsg-watcher-helpers.js.map +0 -1
  164. package/dist/cli/commands/imsg-watcher.d.ts +0 -11
  165. package/dist/cli/commands/imsg-watcher.js +0 -230
  166. package/dist/cli/commands/imsg-watcher.js.map +0 -1
  167. package/dist/cli/services/__tests__/agent-definitions.test.js +0 -153
  168. package/dist/cli/services/__tests__/agent-events-global.test.js +0 -39
  169. package/dist/cli/services/__tests__/agent-events.part2.test.js +0 -113
  170. package/dist/cli/services/__tests__/agent-events.test.js +0 -157
  171. package/dist/cli/services/__tests__/agent-loop-auth.test.js +0 -392
  172. package/dist/cli/services/__tests__/agent-loop-budget.test.js +0 -389
  173. package/dist/cli/services/__tests__/agent-loop-tools-lifecycle.test.js +0 -430
  174. package/dist/cli/services/__tests__/agent-loop-tools-maxturns.test.js +0 -486
  175. package/dist/cli/services/__tests__/agent-loop-utils-execution.test.js +0 -528
  176. package/dist/cli/services/__tests__/agent-loop-utils-helpers.test.js +0 -466
  177. package/dist/cli/services/__tests__/agent-worker-base-execute.test.js +0 -257
  178. package/dist/cli/services/__tests__/agent-worker-base-helpers.test.js +0 -198
  179. package/dist/cli/services/__tests__/agent-worker-base.test.js +0 -278
  180. package/dist/cli/services/__tests__/auth-service-exports.test.js +0 -41
  181. package/dist/cli/services/__tests__/auth-service.part2.test.js +0 -169
  182. package/dist/cli/services/__tests__/auth-service.test.js +0 -242
  183. package/dist/cli/services/__tests__/background-processes.test.js +0 -282
  184. package/dist/cli/services/__tests__/claude-md-loader.test.js +0 -134
  185. package/dist/cli/services/__tests__/config-store.test.js +0 -247
  186. package/dist/cli/services/__tests__/debug-log.test.js +0 -199
  187. package/dist/cli/services/__tests__/edge-cases-caching.test.js +0 -174
  188. package/dist/cli/services/__tests__/edge-cases-compaction-core.test.js +0 -226
  189. package/dist/cli/services/__tests__/edge-cases-compaction-openai.test.js +0 -152
  190. package/dist/cli/services/__tests__/edge-cases-compaction-shapes.test.js +0 -53
  191. package/dist/cli/services/__tests__/edge-cases-compaction-thinking.test.js +0 -226
  192. package/dist/cli/services/__tests__/edge-cases-compaction.test.js +0 -131
  193. package/dist/cli/services/__tests__/edge-cases-paths.test.js +0 -86
  194. package/dist/cli/services/__tests__/error-logger-messages.test.js +0 -81
  195. package/dist/cli/services/__tests__/error-logger-transport.test.js +0 -119
  196. package/dist/cli/services/__tests__/error-logger.test.js +0 -264
  197. package/dist/cli/services/__tests__/file-history.test.js +0 -136
  198. package/dist/cli/services/__tests__/git-context-cache-reset.test.js +0 -223
  199. package/dist/cli/services/__tests__/git-context.test.js +0 -241
  200. package/dist/cli/services/__tests__/interactive-tools-execute.test.js +0 -166
  201. package/dist/cli/services/__tests__/interactive-tools-plan.test.js +0 -197
  202. package/dist/cli/services/__tests__/interactive-tools.part2.test.js +0 -168
  203. package/dist/cli/services/__tests__/interactive-tools.test.js +0 -179
  204. package/dist/cli/services/__tests__/keybinding-manager.test.js +0 -205
  205. package/dist/cli/services/__tests__/local-tools-dispatch.test.js +0 -404
  206. package/dist/cli/services/__tests__/local-tools.test.js +0 -238
  207. package/dist/cli/services/__tests__/lsp-manager.test.js +0 -364
  208. package/dist/cli/services/__tests__/mcp-client-connect-disconnect.test.js +0 -310
  209. package/dist/cli/services/__tests__/mcp-client.test.js +0 -93
  210. package/dist/cli/services/__tests__/memory-manager.test.js +0 -154
  211. package/dist/cli/services/__tests__/model-manager-utils.test.js +0 -154
  212. package/dist/cli/services/__tests__/model-manager.test.js +0 -175
  213. package/dist/cli/services/__tests__/permission-modes.test.js +0 -222
  214. package/dist/cli/services/__tests__/ripgrep.test.js +0 -328
  215. package/dist/cli/services/__tests__/server-tools-execute.test.js +0 -317
  216. package/dist/cli/services/__tests__/server-tools.test.js +0 -272
  217. package/dist/cli/services/__tests__/session-persistence.test.js +0 -245
  218. package/dist/cli/services/__tests__/subagent-basic.test.js +0 -489
  219. package/dist/cli/services/__tests__/subagent-edge.test.js +0 -545
  220. package/dist/cli/services/__tests__/subagent-prompts.test.js +0 -558
  221. package/dist/cli/services/__tests__/subagent-worker-errors.test.js +0 -255
  222. package/dist/cli/services/__tests__/subagent-worker.test.js +0 -242
  223. package/dist/cli/services/__tests__/system-prompt.test.js +0 -210
  224. package/dist/cli/services/__tests__/team-lead-comms-messaging.test.js +0 -250
  225. package/dist/cli/services/__tests__/team-lead-comms-result.test.js +0 -232
  226. package/dist/cli/services/__tests__/team-lead-comms-stop.test.js +0 -344
  227. package/dist/cli/services/__tests__/team-lead-comms.test.js +0 -285
  228. package/dist/cli/services/__tests__/team-lead-create.test.js +0 -327
  229. package/dist/cli/services/__tests__/team-lead-run.test.js +0 -318
  230. package/dist/cli/services/__tests__/team-lead-stop.test.js +0 -199
  231. package/dist/cli/services/__tests__/team-state-comms.test.js +0 -240
  232. package/dist/cli/services/__tests__/team-state-core.test.js +0 -230
  233. package/dist/cli/services/__tests__/team-state-tasks-complete-fail-available.test.js +0 -224
  234. package/dist/cli/services/__tests__/team-state-tasks.test.js +0 -184
  235. package/dist/cli/services/__tests__/telemetry-ai-metadata.test.js +0 -116
  236. package/dist/cli/services/__tests__/telemetry.part2.test.js +0 -195
  237. package/dist/cli/services/__tests__/telemetry.test.js +0 -176
  238. package/dist/cli/services/agent-loop-iteration.d.ts +0 -13
  239. package/dist/cli/services/agent-loop-setup.d.ts +0 -32
  240. package/dist/cli/services/agent-worker-base-api.d.ts +0 -19
  241. package/dist/cli/services/agent-worker-base-helpers.d.ts +0 -27
  242. package/dist/cli/services/agent-worker-base-tools.d.ts +0 -16
  243. package/dist/cli/services/agent-worker-base-types.d.ts +0 -81
  244. package/dist/cli/services/background-agents.d.ts +0 -26
  245. package/dist/cli/services/background-processes-ops.d.ts +0 -24
  246. package/dist/cli/services/background-tool-defs.d.ts +0 -50
  247. package/dist/cli/services/config-modules-model.test.js +0 -133
  248. package/dist/cli/services/config-modules-permission.test.js +0 -85
  249. package/dist/cli/services/config-modules-permissions.test.js +0 -85
  250. package/dist/cli/services/config-modules-session.test.js +0 -297
  251. package/dist/cli/services/format-server-response-columns.test.js +0 -265
  252. package/dist/cli/services/format-server-response-fallback.test.js +0 -65
  253. package/dist/cli/services/format-server-response-primitives-basic.test.js +0 -261
  254. package/dist/cli/services/format-server-response-primitives-nested.test.js +0 -188
  255. package/dist/cli/services/format-server-response-primitives.test.js +0 -300
  256. package/dist/cli/services/format-server-response-realworld.test.js +0 -248
  257. package/dist/cli/services/format-server-response-values.test.js +0 -247
  258. package/dist/cli/services/hooks-runners.test.js +0 -184
  259. package/dist/cli/services/hooks.glob-load.test.js +0 -233
  260. package/dist/cli/services/hooks.run-hooks.test.js +0 -184
  261. package/dist/cli/services/hooks.test.js +0 -233
  262. package/dist/cli/services/ink-incremental.d.ts +0 -19
  263. package/dist/cli/services/ink-incremental.js +0 -59
  264. package/dist/cli/services/ink-incremental.js.map +0 -1
  265. package/dist/cli/services/ink-resize-fix.d.ts +0 -18
  266. package/dist/cli/services/ink-resize-fix.js +0 -76
  267. package/dist/cli/services/ink-resize-fix.js.map +0 -1
  268. package/dist/cli/services/ink-sync-output.d.ts +0 -12
  269. package/dist/cli/services/ink-sync-output.js +0 -16
  270. package/dist/cli/services/ink-sync-output.js.map +0 -1
  271. package/dist/cli/services/interactive-tool-defs.d.ts +0 -80
  272. package/dist/cli/services/local-tools-definitions.d.ts +0 -6
  273. package/dist/cli/services/local-tools-files.test.js +0 -256
  274. package/dist/cli/services/local-tools-read-many.d.ts +0 -6
  275. package/dist/cli/services/model-router.test.js +0 -245
  276. package/dist/cli/services/rewind-rewindTo.test.js +0 -202
  277. package/dist/cli/services/rewind.test.js +0 -175
  278. package/dist/cli/services/sandbox.test.js +0 -198
  279. package/dist/cli/services/subagent-execution.d.ts +0 -12
  280. package/dist/cli/services/team-lead-auto.d.ts +0 -11
  281. package/dist/cli/services/team-lead-execution.d.ts +0 -28
  282. package/dist/cli/services/teammate-loop.js +0 -557
  283. package/dist/cli/services/teammate-loop.js.map +0 -1
  284. package/dist/cli/services/tools/__tests__/agent-tools-tasks-teams.test.js +0 -250
  285. package/dist/cli/services/tools/__tests__/agent-tools-teams.test.js +0 -200
  286. package/dist/cli/services/tools/__tests__/agent-tools.test.js +0 -340
  287. package/dist/cli/services/tools/__tests__/file-ops-cache.test.js +0 -152
  288. package/dist/cli/services/tools/__tests__/file-ops-notebook.test.js +0 -249
  289. package/dist/cli/services/tools/__tests__/file-ops-read.test.js +0 -261
  290. package/dist/cli/services/tools/__tests__/file-ops-write.test.js +0 -292
  291. package/dist/cli/services/tools/__tests__/search-tools-rg.test.js +0 -92
  292. package/dist/cli/services/tools/__tests__/search-tools.part2.test.js +0 -174
  293. package/dist/cli/services/tools/__tests__/search-tools.test.js +0 -227
  294. package/dist/cli/services/tools/__tests__/shell-exec-allowed-core.test.js +0 -163
  295. package/dist/cli/services/tools/__tests__/shell-exec-allowed-extended.test.js +0 -220
  296. package/dist/cli/services/tools/__tests__/shell-exec-allowed.part2.test.js +0 -215
  297. package/dist/cli/services/tools/__tests__/shell-exec-allowed.test.js +0 -154
  298. package/dist/cli/services/tools/__tests__/shell-exec-blocked.test.js +0 -132
  299. package/dist/cli/services/tools/__tests__/shell-exec-execution.test.js +0 -245
  300. package/dist/cli/services/tools/__tests__/task-manager-create.test.js +0 -110
  301. package/dist/cli/services/tools/__tests__/task-manager-crud.test.js +0 -339
  302. package/dist/cli/services/tools/__tests__/task-manager-list-get.test.js +0 -343
  303. package/dist/cli/services/tools/__tests__/task-manager-query.test.js +0 -346
  304. package/dist/cli/services/tools/__tests__/task-manager-routing.test.js +0 -58
  305. package/dist/cli/services/tools/__tests__/task-manager-update.test.js +0 -224
  306. package/dist/cli/services/tools/__tests__/task-manager.test.js +0 -159
  307. package/dist/cli/services/tools/__tests__/web-tools-html-search.test.js +0 -227
  308. package/dist/cli/services/tools/__tests__/web-tools.test.js +0 -285
  309. package/dist/cli/services/tools/shell-exec.test.js +0 -148
  310. package/dist/cli/shared/SharedTick.d.ts +0 -10
  311. package/dist/cli/shared/__tests__/markdown.test.js +0 -188
  312. package/dist/local-agent/__tests__/connection-disconnect.test.js +0 -201
  313. package/dist/local-agent/__tests__/connection-lifecycle.test.js +0 -289
  314. package/dist/local-agent/__tests__/connection-msghandling.test.js +0 -311
  315. package/dist/local-agent/__tests__/connection-reconnect.test.js +0 -230
  316. package/dist/local-agent/__tests__/connection-toolexec.test.js +0 -253
  317. package/dist/local-agent/__tests__/discovery.test.js +0 -328
  318. package/dist/local-agent/__tests__/executor-background.test.js +0 -219
  319. package/dist/local-agent/__tests__/executor-exec.test.js +0 -221
  320. package/dist/local-agent/__tests__/executor-jobs-sessions.test.js +0 -220
  321. package/dist/local-agent/__tests__/executor-system-info.test.js +0 -133
  322. package/dist/local-agent/__tests__/executor-systeminfo.test.js +0 -109
  323. package/dist/local-agent/__tests__/executor.test.js +0 -235
  324. package/dist/local-agent/__tests__/index.test.js +0 -139
  325. package/dist/node/__tests__/cli-channels.test.js +0 -293
  326. package/dist/node/__tests__/cli-config-edge.test.js +0 -154
  327. package/dist/node/__tests__/cli-config.test.js +0 -215
  328. package/dist/node/__tests__/config.test.js +0 -292
  329. package/dist/node/__tests__/runtime-heartbeat.test.js +0 -153
  330. package/dist/node/__tests__/runtime-lifecycle-init.test.js +0 -263
  331. package/dist/node/__tests__/runtime-lifecycle-stats.test.js +0 -180
  332. package/dist/node/__tests__/runtime-lifecycle.test.js +0 -305
  333. package/dist/node/__tests__/runtime-relay.test.js +0 -341
  334. package/dist/node/adapters/__tests__/base.test.js +0 -286
  335. package/dist/node/adapters/__tests__/discord.test.js +0 -284
  336. package/dist/node/adapters/__tests__/email-send.test.js +0 -295
  337. package/dist/node/adapters/__tests__/email.inbound-send.test.js +0 -217
  338. package/dist/node/adapters/__tests__/email.lifecycle.test.js +0 -211
  339. package/dist/node/adapters/__tests__/email.test.js +0 -290
  340. package/dist/node/adapters/__tests__/email.webhook-send.test.js +0 -251
  341. package/dist/node/adapters/__tests__/imessage-filter.test.js +0 -183
  342. package/dist/node/adapters/__tests__/imessage-lifecycle.test.js +0 -215
  343. package/dist/node/adapters/__tests__/imessage-send-restart.test.js +0 -227
  344. package/dist/node/adapters/__tests__/slack.part2.test.js +0 -135
  345. package/dist/node/adapters/__tests__/slack.test.js +0 -241
  346. package/dist/node/adapters/__tests__/sms-extras.test.js +0 -108
  347. package/dist/node/adapters/__tests__/sms-lifecycle.test.js +0 -203
  348. package/dist/node/adapters/__tests__/sms-messaging.test.js +0 -266
  349. package/dist/node/adapters/__tests__/sms.part2.test.js +0 -174
  350. package/dist/node/adapters/__tests__/sms.test.js +0 -253
  351. package/dist/node/adapters/__tests__/telegram-polling.test.js +0 -256
  352. package/dist/node/adapters/__tests__/telegram-send.test.js +0 -166
  353. package/dist/node/adapters/__tests__/webchat-inbound.test.js +0 -188
  354. package/dist/node/adapters/__tests__/webchat-outbound.test.js +0 -178
  355. package/dist/node/adapters/__tests__/whatsapp-inbound.test.js +0 -200
  356. package/dist/node/adapters/__tests__/whatsapp-send.test.js +0 -212
  357. package/dist/node/adapters/__tests__/whatsapp.test.js +0 -280
  358. package/dist/server/__tests__/gateway-fast-fail.test.js +0 -160
  359. package/dist/server/__tests__/local-agent-gateway.test.js +0 -186
  360. package/dist/server/__tests__/proxy-handlers-delegation.test.js +0 -240
  361. package/dist/server/__tests__/proxy-handlers-validation.test.js +0 -211
  362. package/dist/server/__tests__/proxy-handlers.part2.test.js +0 -240
  363. package/dist/server/__tests__/proxy-handlers.test.js +0 -213
  364. package/dist/server/__tests__/strip-base64-e2e.test.js +0 -303
  365. package/dist/server/__tests__/strip-base64.test.js +0 -256
  366. package/dist/server/__tests__/tool-router-agent-tools.test.js +0 -324
  367. package/dist/server/__tests__/tool-router-execute-core.test.js +0 -357
  368. package/dist/server/__tests__/tool-router-execute-permissions.test.js +0 -332
  369. package/dist/server/__tests__/tool-router-execute.test.js +0 -348
  370. package/dist/server/__tests__/tool-router-load.test.js +0 -432
  371. package/dist/server/__tests__/tool-router-permissions.test.js +0 -359
  372. package/dist/server/__tests__/tool-router-registry-cache.test.js +0 -383
  373. package/dist/server/__tests__/tool-router-registry-handlers.test.js +0 -272
  374. package/dist/server/__tests__/tool-router-registry.test.js +0 -331
  375. package/dist/server/__tests__/validation-inventory.test.js +0 -250
  376. package/dist/server/__tests__/validation-misc.test.js +0 -243
  377. package/dist/server/__tests__/validation-supply-chain.test.js +0 -188
  378. package/dist/server/__tests__/worker.test.js +0 -265
  379. package/dist/server/handlers/__tests__/conversation-lock.test.js +0 -117
  380. package/dist/server/handlers/__tests__/e2e/auth-cross-platform-login.e2e.test.js +0 -268
  381. package/dist/server/handlers/__tests__/e2e/auth-cross-platform-tokens.e2e.test.js +0 -264
  382. package/dist/server/handlers/__tests__/e2e/email-pipeline-send.e2e.test.js +0 -214
  383. package/dist/server/handlers/__tests__/e2e/email-pipeline-threads.e2e.test.js +0 -168
  384. package/dist/server/handlers/__tests__/e2e/error-logging-pipeline-dedup.e2e.test.js +0 -229
  385. package/dist/server/handlers/__tests__/e2e/error-logging-pipeline.e2e.test.js +0 -239
  386. package/dist/server/handlers/__tests__/e2e/error-logging-rate-limit.e2e.test.js +0 -150
  387. package/dist/server/handlers/__tests__/e2e/inventory-sync-guards.e2e.test.js +0 -177
  388. package/dist/server/handlers/__tests__/e2e/inventory-sync.e2e.test.js +0 -228
  389. package/dist/server/handlers/__tests__/e2e/inventory-sync.part2.e2e.test.js +0 -188
  390. package/dist/server/handlers/__tests__/e2e/order-lifecycle-fulfillment.e2e.test.js +0 -295
  391. package/dist/server/handlers/__tests__/e2e/order-lifecycle.e2e.test.js +0 -277
  392. package/dist/server/handlers/__tests__/e2e/order-lifecycle.fulfillment.e2e.test.js +0 -307
  393. package/dist/server/handlers/__tests__/e2e/order-lifecycle.setup.e2e.test.js +0 -177
  394. package/dist/server/handlers/__tests__/e2e/storefront-checkout-cart.e2e.test.js +0 -255
  395. package/dist/server/handlers/__tests__/e2e/storefront-checkout-webhook.e2e.test.js +0 -231
  396. package/dist/server/handlers/__tests__/e2e/workflow-execution-failures.e2e.test.js +0 -235
  397. package/dist/server/handlers/__tests__/e2e/workflow-execution.e2e.test.js +0 -294
  398. package/dist/server/handlers/__tests__/e2e/workflow-security.e2e.test.js +0 -311
  399. package/dist/server/handlers/__tests__/e2e/workflow-security.part2.e2e.test.js +0 -267
  400. package/dist/server/handlers/__tests__/workflow-cache.test.js +0 -237
  401. package/dist/server/handlers/analytics-errors-edge.test.js +0 -173
  402. package/dist/server/handlers/analytics.test.js +0 -280
  403. package/dist/server/handlers/api-docs-examples-ext.d.ts +0 -9
  404. package/dist/server/handlers/api-docs-examples-ext.js +0 -278
  405. package/dist/server/handlers/api-docs-examples-ext.js.map +0 -1
  406. package/dist/server/handlers/api-docs-examples.d.ts +0 -8
  407. package/dist/server/handlers/api-docs-examples.js +0 -221
  408. package/dist/server/handlers/api-docs-examples.js.map +0 -1
  409. package/dist/server/handlers/api-docs-sections-ext.d.ts +0 -2
  410. package/dist/server/handlers/api-docs-sections-ext.js +0 -497
  411. package/dist/server/handlers/api-docs-sections-ext.js.map +0 -1
  412. package/dist/server/handlers/api-docs-sections.d.ts +0 -21
  413. package/dist/server/handlers/api-docs-sections.js +0 -293
  414. package/dist/server/handlers/api-docs-sections.js.map +0 -1
  415. package/dist/server/handlers/api-keys.part2.test.js +0 -157
  416. package/dist/server/handlers/api-keys.test.js +0 -161
  417. package/dist/server/handlers/billing-routes.test.js +0 -123
  418. package/dist/server/handlers/billing.test.js +0 -215
  419. package/dist/server/handlers/browser-actions-errors.test.js +0 -94
  420. package/dist/server/handlers/browser-actions.part2.test.js +0 -190
  421. package/dist/server/handlers/browser-actions.test.js +0 -190
  422. package/dist/server/handlers/browser-validation.test.js +0 -257
  423. package/dist/server/handlers/catalog.test.js +0 -297
  424. package/dist/server/handlers/comms.test.js +0 -289
  425. package/dist/server/handlers/creations-advanced-collections.test.js +0 -214
  426. package/dist/server/handlers/creations-advanced-generate.test.js +0 -142
  427. package/dist/server/handlers/creations-advanced.test.js +0 -171
  428. package/dist/server/handlers/creations-collections-preview.test.js +0 -214
  429. package/dist/server/handlers/creations-crud.test.js +0 -260
  430. package/dist/server/handlers/creations-mutations.test.js +0 -197
  431. package/dist/server/handlers/crm.test.js +0 -179
  432. package/dist/server/handlers/discovery-advertise.test.js +0 -185
  433. package/dist/server/handlers/discovery-scan.test.js +0 -233
  434. package/dist/server/handlers/embeddings-embed-search.test.js +0 -196
  435. package/dist/server/handlers/embeddings-index-delete-stats.test.js +0 -140
  436. package/dist/server/handlers/embeddings-search.test.js +0 -221
  437. package/dist/server/handlers/embeddings.test.js +0 -137
  438. package/dist/server/handlers/enrichment-breach.d.ts +0 -8
  439. package/dist/server/handlers/enrichment-breach.js +0 -266
  440. package/dist/server/handlers/enrichment-breach.js.map +0 -1
  441. package/dist/server/handlers/enrichment-data.d.ts +0 -13
  442. package/dist/server/handlers/enrichment-data.js +0 -145
  443. package/dist/server/handlers/enrichment-data.js.map +0 -1
  444. package/dist/server/handlers/enrichment-mutations.test.js +0 -240
  445. package/dist/server/handlers/enrichment-queries.test.js +0 -181
  446. package/dist/server/handlers/enrichment-validation.test.js +0 -177
  447. package/dist/server/handlers/enrichment-writes.d.ts +0 -16
  448. package/dist/server/handlers/enrichment-writes.js +0 -226
  449. package/dist/server/handlers/enrichment-writes.js.map +0 -1
  450. package/dist/server/handlers/image-gen.test.js +0 -205
  451. package/dist/server/handlers/inventory.test.js +0 -380
  452. package/dist/server/handlers/kali-background.test.js +0 -222
  453. package/dist/server/handlers/kali-errors.test.js +0 -92
  454. package/dist/server/handlers/kali-validation.test.js +0 -234
  455. package/dist/server/handlers/llm-providers-actions.test.js +0 -220
  456. package/dist/server/handlers/llm-providers-anthropic.test.js +0 -239
  457. package/dist/server/handlers/llm-providers-failover.test.js +0 -232
  458. package/dist/server/handlers/llm-providers-providers.test.js +0 -300
  459. package/dist/server/handlers/llm-providers-validation.test.js +0 -239
  460. package/dist/server/handlers/local-agent-tools.test.js +0 -224
  461. package/dist/server/handlers/local-agent.test.js +0 -198
  462. package/dist/server/handlers/local-agent.tools-status.test.js +0 -204
  463. package/dist/server/handlers/local-agent.validation-exec.test.js +0 -182
  464. package/dist/server/handlers/meta-ads-audience-rules.test.js +0 -243
  465. package/dist/server/handlers/meta-ads-audience-targeting.test.js +0 -205
  466. package/dist/server/handlers/meta-ads-audiences-targeting.test.js +0 -383
  467. package/dist/server/handlers/meta-ads-crud-ads.test.js +0 -136
  468. package/dist/server/handlers/meta-ads-crud-campaigns.test.js +0 -189
  469. package/dist/server/handlers/meta-ads-crud-create.test.js +0 -303
  470. package/dist/server/handlers/meta-ads-crud-list-update.test.js +0 -259
  471. package/dist/server/handlers/meta-ads-delete-publish-sync.test.js +0 -282
  472. package/dist/server/handlers/meta-ads-insights.test.js +0 -80
  473. package/dist/server/handlers/meta-ads-list-get.test.js +0 -237
  474. package/dist/server/handlers/meta-ads-publish-delete.test.js +0 -254
  475. package/dist/server/handlers/meta-ads-publish-helpers.js +0 -117
  476. package/dist/server/handlers/meta-ads-publish-helpers.js.map +0 -1
  477. package/dist/server/handlers/meta-ads-publish-sync.test.js +0 -205
  478. package/dist/server/handlers/meta-ads-publish.test.js +0 -254
  479. package/dist/server/handlers/meta-ads-sync-insights.test.js +0 -184
  480. package/dist/server/handlers/meta-ads-update.test.js +0 -117
  481. package/dist/server/handlers/nodes-channels.test.js +0 -413
  482. package/dist/server/handlers/nodes-events.test.js +0 -131
  483. package/dist/server/handlers/nodes-list-delete.test.js +0 -171
  484. package/dist/server/handlers/nodes-messages-delivery.test.js +0 -208
  485. package/dist/server/handlers/nodes-messages.test.js +0 -211
  486. package/dist/server/handlers/nodes-register.test.js +0 -277
  487. package/dist/server/handlers/nodes.test.js +0 -353
  488. package/dist/server/handlers/operations.test.js +0 -136
  489. package/dist/server/handlers/platform-telemetry.test.js +0 -200
  490. package/dist/server/handlers/platform-websearch.test.js +0 -160
  491. package/dist/server/handlers/storefront.test.js +0 -329
  492. package/dist/server/handlers/supply-chain.test.js +0 -347
  493. package/dist/server/handlers/transcription.test.js +0 -118
  494. package/dist/server/handlers/video-gen-veo.js +0 -114
  495. package/dist/server/handlers/video-gen-veo.js.map +0 -1
  496. package/dist/server/handlers/video-gen.test.js +0 -146
  497. package/dist/server/handlers/voice.test.js +0 -153
  498. package/dist/server/handlers/workflow-steps.test.js +0 -330
  499. package/dist/server/handlers/workflows-extras.test.js +0 -65
  500. package/dist/server/handlers/workflows.part2.test.js +0 -170
  501. package/dist/server/handlers/workflows.test.js +0 -281
  502. package/dist/server/lib/__tests__/batch-client-conversion-jsonl.test.js +0 -171
  503. package/dist/server/lib/__tests__/batch-client-polling.test.js +0 -292
  504. package/dist/server/lib/__tests__/batch-client-queue.test.js +0 -270
  505. package/dist/server/lib/__tests__/clickhouse-buffer.test.js +0 -236
  506. package/dist/server/lib/__tests__/code-worker-edge-cases.test.js +0 -118
  507. package/dist/server/lib/__tests__/code-worker-pool-execute.test.js +0 -193
  508. package/dist/server/lib/__tests__/code-worker-pool-execution.test.js +0 -165
  509. package/dist/server/lib/__tests__/code-worker-pool-init.test.js +0 -131
  510. package/dist/server/lib/__tests__/code-worker-pool.test.js +0 -194
  511. package/dist/server/lib/__tests__/code-worker-sandbox-ops.test.js +0 -123
  512. package/dist/server/lib/__tests__/code-worker-sandbox.test.js +0 -217
  513. package/dist/server/lib/__tests__/code-worker.test.js +0 -179
  514. package/dist/server/lib/__tests__/compaction-service-generate.test.js +0 -229
  515. package/dist/server/lib/__tests__/compaction-service.test.js +0 -319
  516. package/dist/server/lib/__tests__/otel.test.js +0 -146
  517. package/dist/server/lib/__tests__/prompt-sanitizer-validation.test.js +0 -165
  518. package/dist/server/lib/__tests__/prompt-sanitizer.sanitize.test.js +0 -343
  519. package/dist/server/lib/__tests__/prompt-sanitizer.test.js +0 -328
  520. package/dist/server/lib/__tests__/prompt-sanitizer.validate-tool.test.js +0 -145
  521. package/dist/server/lib/__tests__/provider-capabilities.test.js +0 -263
  522. package/dist/server/lib/__tests__/provider-failover-routing.test.js +0 -145
  523. package/dist/server/lib/__tests__/provider-failover-state.test.js +0 -131
  524. package/dist/server/lib/__tests__/rate-limiter-budgets.test.js +0 -216
  525. package/dist/server/lib/__tests__/rate-limiter.budgets-tools.test.js +0 -113
  526. package/dist/server/lib/__tests__/rate-limiter.check-request.test.js +0 -141
  527. package/dist/server/lib/__tests__/rate-limiter.stats-lifecycle.test.js +0 -135
  528. package/dist/server/lib/__tests__/rate-limiter.test.js +0 -207
  529. package/dist/server/lib/__tests__/server-agent-loop-abort-conditions.test.js +0 -544
  530. package/dist/server/lib/__tests__/server-agent-loop-abort.part2.test.js +0 -504
  531. package/dist/server/lib/__tests__/server-agent-loop-abort.test.js +0 -396
  532. package/dist/server/lib/__tests__/server-agent-loop-compaction.test.js +0 -397
  533. package/dist/server/lib/__tests__/server-agent-loop-failover.test.js +0 -356
  534. package/dist/server/lib/__tests__/server-agent-loop-features-caching.test.js +0 -519
  535. package/dist/server/lib/__tests__/server-agent-loop-features-edges.test.js +0 -512
  536. package/dist/server/lib/__tests__/server-subagent-bailout.test.js +0 -194
  537. package/dist/server/lib/__tests__/server-subagent-basics.test.js +0 -348
  538. package/dist/server/lib/__tests__/server-subagent-errors-abort.test.js +0 -319
  539. package/dist/server/lib/__tests__/server-subagent-errors-progress.test.js +0 -253
  540. package/dist/server/lib/__tests__/server-subagent-errors.part2.test.js +0 -253
  541. package/dist/server/lib/__tests__/server-subagent-errors.test.js +0 -319
  542. package/dist/server/lib/__tests__/session-checkpoint-load.test.js +0 -275
  543. package/dist/server/lib/__tests__/session-checkpoint-save.test.js +0 -159
  544. package/dist/server/lib/__tests__/ssrf-guard.test.js +0 -93
  545. package/dist/server/lib/__tests__/supabase-client.test.js +0 -111
  546. package/dist/server/lib/__tests__/template-resolver.test.js +0 -317
  547. package/dist/server/lib/__tests__/utils-timeout.test.js +0 -49
  548. package/dist/server/lib/__tests__/utils.test.js +0 -322
  549. package/dist/server/providers/__tests__/anthropic-adapter.test.js +0 -228
  550. package/dist/server/providers/__tests__/anthropic-betas-toolchoice.test.js +0 -257
  551. package/dist/server/providers/__tests__/anthropic-errors.test.js +0 -262
  552. package/dist/server/providers/__tests__/anthropic-stream-core.test.js +0 -275
  553. package/dist/server/providers/__tests__/anthropic-streaming-betas.test.js +0 -247
  554. package/dist/server/providers/__tests__/anthropic-streaming-core.test.js +0 -275
  555. package/dist/server/providers/__tests__/bedrock-config.test.js +0 -177
  556. package/dist/server/providers/__tests__/bedrock-stream-behavior-streaming.test.js +0 -272
  557. package/dist/server/providers/__tests__/bedrock-stream-behavior-toolchoice.test.js +0 -214
  558. package/dist/server/providers/__tests__/bedrock-stream-behavior.part2.test.js +0 -165
  559. package/dist/server/providers/__tests__/bedrock-stream-behavior.test.js +0 -309
  560. package/dist/server/providers/__tests__/bedrock-stream-body-credentials.test.js +0 -170
  561. package/dist/server/providers/__tests__/bedrock-stream-body-extras.test.js +0 -183
  562. package/dist/server/providers/__tests__/bedrock-stream-body-request.test.js +0 -305
  563. package/dist/server/providers/__tests__/bedrock-stream-body.part2.test.js +0 -305
  564. package/dist/server/providers/__tests__/bedrock-stream-body.test.js +0 -175
  565. package/dist/server/providers/__tests__/bedrock-stream-errors.test.js +0 -165
  566. package/dist/server/providers/__tests__/gemini-config-methods.test.js +0 -182
  567. package/dist/server/providers/__tests__/gemini-config-streaming.test.js +0 -257
  568. package/dist/server/providers/__tests__/gemini-conversion-messages.test.js +0 -247
  569. package/dist/server/providers/__tests__/gemini-conversion-schema.test.js +0 -365
  570. package/dist/server/providers/__tests__/gemini-tools-choice.test.js +0 -221
  571. package/dist/server/providers/__tests__/gemini-tools-fn.test.js +0 -252
  572. package/dist/server/providers/__tests__/openai-config.test.js +0 -194
  573. package/dist/server/providers/__tests__/openai-conversion.test.js +0 -276
  574. package/dist/server/providers/__tests__/openai-messages.test.js +0 -261
  575. package/dist/server/providers/__tests__/openai-streaming.test.js +0 -394
  576. package/dist/server/providers/__tests__/openai-tools-cache.test.js +0 -227
  577. package/dist/server/providers/__tests__/registry.test.js +0 -183
  578. package/dist/server/providers/__tests__/shared.test.js +0 -297
  579. package/dist/shared/agent-core-config.test.js +0 -132
  580. package/dist/shared/agent-core-context-thinking.test.js +0 -293
  581. package/dist/shared/agent-core-loop-calls.test.js +0 -174
  582. package/dist/shared/agent-core-loop-detector-bail.test.js +0 -201
  583. package/dist/shared/agent-core-loop-detector.test.js +0 -195
  584. package/dist/shared/agent-core-loop-errors.test.js +0 -258
  585. package/dist/shared/agent-core-pricing.test.js +0 -191
  586. package/dist/shared/agent-core-sanitize-retry.test.js +0 -129
  587. package/dist/shared/api-client-build-request.test.js +0 -228
  588. package/dist/shared/api-client-build-system-caching.test.js +0 -107
  589. package/dist/shared/api-client-build.test.js +0 -223
  590. package/dist/shared/api-client-config.d.ts +0 -21
  591. package/dist/shared/api-client-helpers.d.ts +0 -57
  592. package/dist/shared/api-client-helpers.test.js +0 -261
  593. package/dist/shared/api-client-proxy-happy.test.js +0 -255
  594. package/dist/shared/api-client-proxy-retry.test.js +0 -307
  595. package/dist/shared/api-client-proxy.d.ts +0 -26
  596. package/dist/shared/api-client-proxy.test.js +0 -255
  597. package/dist/shared/api-client-retry.test.js +0 -307
  598. package/dist/shared/api-client-system-trimming.test.js +0 -261
  599. package/dist/shared/api-client-trimming.d.ts +0 -36
  600. package/dist/shared/api-client.test.js +0 -228
  601. package/dist/shared/compaction-thinking.test.js +0 -315
  602. package/dist/shared/compaction-trimming.test.js +0 -223
  603. package/dist/shared/sse-parser-callbacks.test.js +0 -422
  604. package/dist/shared/sse-parser-collect.test.js +0 -252
  605. package/dist/shared/sse-parser-e2e.test.js +0 -558
  606. package/dist/shared/sse-parser-parse.test.js +0 -253
  607. package/dist/shared/tool-dispatch-advanced-batch-build.test.js +0 -405
  608. package/dist/shared/tool-dispatch-advanced.test.js +0 -320
  609. package/dist/shared/tool-dispatch-basic.test.js +0 -278
  610. package/dist/shared/tool-dispatch-content.d.ts +0 -14
  611. package/dist/shared/tool-dispatch-parallel.test.js +0 -378
  612. package/dist/webchat/__tests__/widget-messaging.test.js +0 -323
  613. package/dist/webchat/__tests__/widget.test.js +0 -273
@@ -1 +1 @@
1
- {"version":3,"file":"tool-router.js","names":["sanitizeError","validateToolArgs","sanitizeToolDescription","validateUrl","handleInventory","handleInventoryQuery","handleInventoryAudit","handlePurchaseOrders","handleTransfers","handleProducts","handleCollections","handleCustomers","handleOrders","handleAnalytics","handleLocations","handleSuppliers","handleAlerts","handleAuditTrail","handleStore","handleEmail","handleDocuments","handleWebSearch","handleTelemetry","handleBrowser","handleDiscovery","handleVoice","handleWorkflows","handleEmbeddings","handleLLM","handleImageGen","handleRemoveBg","handleMedia","handleVideoGen","handleAPIKeys","handleCreations","handleMetaAds","handleGoogleAds","handleKali","handleLocalAgent","handleEnrichment","handleStorefront","handleApiDocs","handleClickHouse","handleLoyalty","handleCoupons","handleFulfillment","handleSegments","handleCampaigns","handleReviews","handleTax","handleWebhooksMgmt","handleAffiliates","handleQRCodes","handlePhone","handleSocial","handleWallet","handlePipeline","handleInvoices","handleWholesale","summarizeResult","withTimeout","queueSpan","flushSpans","auditRowToSpan","classifyErrorType","toolMetrics","Map","getToolMetrics","result","name","m","invocations","errors","avgMs","Math","round","totalMs","lastMs","recordToolMetric","toolName","durationMs","success","get","set","cachedResult","cacheTime","cachedApiToolDefs","truncateDescription","desc","maxLen","length","cut","lastIndexOf","substring","loadTools","supabase","forceRefresh","Date","now","data","error","from","select","eq","neq","core","extended","all","allTools","map","t","description","definition","input_schema","type","properties","migrationApplied","some","auto_load","push","i","DISCOVER_TOOLS_DEF","getCachedToolDefs","tools","cached","names","items","category","refresh","userToolCache","USER_TOOL_CACHE_MAX","evictUserToolCache","size","entries","sort","a","b","lastAccessed","excess","delete","loadUserTools","storeId","time","rows","defs","display_name","requires_approval","getUserToolByPrefixedName","prefixedName","replace","find","getToolsForAgent","agent","coreTools","userToolDefs","enabled_tools","filteredUserTools","filter","includes","DEFAULT_TIMEOUT","TOOL_HANDLERS","inventory","handler","sb","args","sid","action","startsWith","slice","timeout","requiresStore","purchase_orders","transfers","products","collections","customers","orders","analytics","locations","suppliers","store","storefront","email","documents","alerts","audit_trail","workflows","voice","image_gen","remove_bg","media","video_gen","llm","embeddings","creations","web_search","telemetry","browser","discovery","api_keys","api_docs","meta_ads","google_ads","kali","supportsProgress","local_agent","enrichment","clickhouse","loyalty","coupons","fulfillment","segments","campaigns","reviews","tax","invoices","webhooks_mgmt","affiliates","qr_codes","phone","social","wallet","pipeline","wholesale","discover_tools","handleDiscoverTools","Object","freeze","getRegisteredToolNames","keys","_extendedToolsCache","_extendedToolsIndex","setExtendedToolsCache","split","getExtendedToolsCache","getExtendedToolsIndex","getFullToolSchemas","toolNames","nameSet","Set","has","TOOL_CATEGORIES","freshResult","matching","cat","toLowerCase","categoryTools","existingNames","available","join","count","refreshed","executeUserTool","userTool","agentId","conversationId","max_execution_time_ms","execution_type","executeHTTPUserTool","rpc","p_tool_id","id","p_store_id","p_args","p_agent_id","p_conversation_id","message","pending_approval","execution_id","execute_sql","executeSQLUserTool","err","config","http_config","url","httpCfg","headers","configStr","JSON","stringify","body","body_template","secretRefs","matchAll","secretMap","Promise","p_name","resolveSecrets","text","_","resolveArgs","val","undefined","String","resolve","key","method","toUpperCase","resolvedBody","ssrfError","controller","AbortController","timer","setTimeout","abort","resp","fetch","signal","clearTimeout","clear","contentType","json","ok","status","sqlConfig","is_read_only","template","p_sql","p_params","p_allowed_tables","allowed_tables","executeSupplyChain","traceId","userId","userEmail","source","userToolRows","scAction","PO_ALIASES","create","list","add_items","approve","mark_ordered","receive","cancel","executeTool","onToolProgress","skipAudit","startTime","entry","test","agentFlags","single","can_query","readActions","can_modify","writeActions","wa","validation","valid","execStartMs","toolPromise","progressCb","progress","timeoutMs","stepTimeout","_step_timeout_seconds","console","warn","endTime","inputJson","outputJson","inputBytes","outputBytes","details","tool_input","input_bytes","output_bytes","result_summary","tool_result","_truncated","_type","Array","isArray","_size","_count","tool_error","errorType","error_type","bytes","Uint8Array","crypto","getRandomValues","spanId","toString","padStart","auditRow","severity","store_id","resource_type","resource_id","request_id","conversation_id","error_message","duration_ms","user_id","user_email","trace_id","span_id","span_kind","service_name","status_code","start_time","toISOString","end_time","loadAgentConfig","query","or"],"sources":["../../src/server/tool-router.ts"],"sourcesContent":["/**\n * Tool Router — unified tool registry, dispatch, and execution.\n *\n * SINGLE SOURCE OF TRUTH for all AI systems (MCP server, HTTP agent, workflows, CLI).\n *\n * Architecture:\n * - ai_tool_registry (DB): tool definitions (name, description, schema) — queried by ALL clients\n * - TOOL_HANDLERS (code): name → handler function mapping — the only place handler routing lives\n * - user_tools (DB): per-store custom tools — additive, never filtered from built-ins\n * - getToolsForAgent(): consistent tool set — all registry tools always available\n * - executeTool(): unified dispatch — handler lookup + timeout + audit logging\n *\n * To add a new tool:\n * 1. Add handler in src/server/handlers/\n * 2. Import and register in TOOL_HANDLERS below\n * 3. Add row to ai_tool_registry table (defines schema for all clients)\n * That's it — MCP, WhaleChat, workflows, CLI all pick it up automatically.\n */\n\nimport type { SupabaseClient } from \"@supabase/supabase-js\";\nimport { sanitizeError } from \"../shared/agent-core.js\";\nimport { validateToolArgs } from \"./validation.js\";\nimport { sanitizeToolDescription } from \"./lib/prompt-sanitizer.js\";\nimport { validateUrl } from \"./lib/ssrf-guard.js\";\n\nimport { handleInventory, handleInventoryQuery, handleInventoryAudit } from \"./handlers/inventory.js\";\nimport { handlePurchaseOrders, handleTransfers } from \"./handlers/supply-chain.js\";\nimport { handleProducts, handleCollections } from \"./handlers/catalog.js\";\nimport { handleCustomers, handleOrders } from \"./handlers/crm.js\";\nimport { handleAnalytics } from \"./handlers/analytics.js\";\nimport { handleLocations, handleSuppliers, handleAlerts, handleAuditTrail, handleStore } from \"./handlers/operations.js\";\nimport { handleEmail, handleDocuments } from \"./handlers/comms.js\";\nimport { handleWebSearch, handleTelemetry } from \"./handlers/platform.js\";\nimport { handleBrowser } from \"./handlers/browser.js\";\nimport { handleDiscovery } from \"./handlers/discovery.js\";\nimport { handleVoice } from \"./handlers/voice.js\";\nimport { handleWorkflows } from \"./handlers/workflows.js\";\nimport { handleEmbeddings } from \"./handlers/embeddings.js\";\nimport { handleLLM } from \"./handlers/llm-providers.js\";\nimport { handleImageGen } from \"./handlers/image-gen.js\";\nimport { handleRemoveBg } from \"./handlers/remove-bg.js\";\nimport { handleMedia } from \"./handlers/media.js\";\nimport { handleVideoGen } from \"./handlers/video-gen.js\";\nimport { handleAPIKeys } from \"./handlers/api-keys.js\";\nimport { handleCreations } from \"./handlers/creations.js\";\nimport { handleMetaAds } from \"./handlers/meta-ads.js\";\nimport { handleGoogleAds } from \"./handlers/google-ads.js\";\nimport { handleKali } from \"./handlers/kali.js\";\nimport { handleLocalAgent } from \"./handlers/local-agent.js\";\nimport { handleEnrichment } from \"./handlers/enrichment.js\";\nimport { handleStorefront } from \"./handlers/storefront.js\";\nimport { handleApiDocs } from \"./handlers/api-docs.js\";\nimport { handleClickHouse } from \"./handlers/clickhouse.js\";\nimport { handleLoyalty } from \"./handlers/loyalty.js\";\nimport { handleCoupons } from \"./handlers/coupons.js\";\nimport { handleFulfillment } from \"./handlers/fulfillment.js\";\nimport { handleSegments } from \"./handlers/segments.js\";\nimport { handleCampaigns } from \"./handlers/campaigns.js\";\nimport { handleReviews } from \"./handlers/reviews.js\";\nimport { handleTax } from \"./handlers/tax.js\";\nimport { handleWebhooksMgmt } from \"./handlers/webhooks-mgmt.js\";\nimport { handleAffiliates } from \"./handlers/affiliates.js\";\nimport { handleQRCodes } from \"./handlers/qr-codes.js\";\nimport { handlePhone } from \"./handlers/phone.js\";\nimport { handleSocial } from \"./handlers/social.js\";\nimport { handleWallet } from \"./handlers/wallet.js\";\nimport { handlePipeline } from \"./handlers/pipeline.js\";\nimport { handleInvoices } from \"./handlers/invoices.js\";\nimport { handleWholesale } from \"./handlers/wholesale.js\";\nimport { summarizeResult, withTimeout } from \"./lib/utils.js\";\n\n// ============================================================================\n// TELEMETRY — ClickHouse span buffer (replaces Postgres audit_logs buffer)\n// ============================================================================\n\nimport { queueSpan, flushSpans, auditRowToSpan, classifyErrorType } from \"./lib/clickhouse-buffer.js\";\n\n// Re-export for callers that used flushAuditLogs (e.g. index.ts shutdown)\nexport { flushSpans };\n\n// ============================================================================\n// IN-MEMORY EXECUTION METRICS\n// ============================================================================\n\nconst toolMetrics = new Map<string, { invocations: number; errors: number; totalMs: number; lastMs: number }>();\n\nexport function getToolMetrics(): Record<string, { invocations: number; errors: number; avgMs: number; lastMs: number }> {\n const result: Record<string, { invocations: number; errors: number; avgMs: number; lastMs: number }> = {};\n for (const [name, m] of toolMetrics) {\n result[name] = { invocations: m.invocations, errors: m.errors, avgMs: m.invocations > 0 ? Math.round(m.totalMs / m.invocations) : 0, lastMs: m.lastMs };\n }\n return result;\n}\n\nfunction recordToolMetric(toolName: string, durationMs: number, success: boolean): void {\n let m = toolMetrics.get(toolName);\n if (!m) { m = { invocations: 0, errors: 0, totalMs: 0, lastMs: 0 }; toolMetrics.set(toolName, m); }\n m.invocations++;\n m.totalMs += durationMs;\n m.lastMs = durationMs;\n if (!success) m.errors++;\n}\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface ToolDef {\n name: string;\n description: string;\n input_schema: Record<string, unknown>;\n}\n\nexport interface UserToolRow {\n id: string;\n name: string;\n display_name: string;\n description: string;\n input_schema: Record<string, unknown>;\n execution_type: \"rpc\" | \"http\" | \"sql\";\n is_read_only: boolean;\n requires_approval: boolean;\n http_config: Record<string, unknown> | null;\n rpc_function: string | null;\n sql_template: string | null;\n allowed_tables: string[] | null;\n max_execution_time_ms: number;\n}\n\nexport interface AgentConfig {\n id: string;\n name: string;\n description: string;\n system_prompt: string;\n model: string;\n max_tokens: number;\n max_tool_calls: number;\n temperature: number;\n enabled_tools: string[];\n can_query: boolean;\n can_send: boolean;\n can_modify: boolean;\n tone: string;\n verbosity: string;\n api_key: string | null;\n store_id: string | null;\n context_config: {\n includeLocations?: boolean;\n locationIds?: string[];\n includeCustomers?: boolean;\n customerSegments?: string[];\n max_history_chars?: number;\n max_tool_result_chars?: number;\n max_message_chars?: number;\n // Context management overrides — match Anthropic API defaults when unset\n compaction_trigger_tokens?: number;\n compaction_total_budget?: number;\n clear_thinking_keep?: number;\n clear_tool_uses_trigger?: number;\n clear_tool_uses_keep?: number;\n session_cost_budget_usd?: number;\n // Agent loop behavior — DB is single source of truth, defaults in AGENT_DEFAULTS\n max_concurrent_tools?: number;\n enable_delegation?: boolean;\n max_duration_ms?: number;\n enable_model_routing?: boolean;\n subagent_max_tokens?: number;\n subagent_max_turns?: number;\n subagent_temperature?: number;\n } | null;\n}\n\n// ============================================================================\n// TOOL REGISTRY (loaded from database — same as CLI and edge function)\n// ============================================================================\n\nexport interface ToolLoadResult {\n /** Core tools — always sent to the model (auto_load=true + discover_tools) */\n core: ToolDef[];\n /** Extended tools — only name+description sent; full schema loaded on demand */\n extended: ToolDef[];\n /** All tools combined (backward compat for callers that don't need the split) */\n all: ToolDef[];\n}\n\nlet cachedResult: ToolLoadResult | null = null;\nlet cacheTime = 0;\n\n/** Pre-computed API-ready tool defs (name + truncated description + input_schema).\n * Computed once at load time, reused every turn without re-serialization. */\nlet cachedApiToolDefs: Map<string, { name: string; description: string; input_schema: Record<string, unknown> }> | null = null;\n\n/** Truncate a description to maxLen characters, ending at a word boundary with ellipsis. */\nfunction truncateDescription(desc: string, maxLen = 150): string {\n if (desc.length <= maxLen) return desc;\n const cut = desc.lastIndexOf(\" \", maxLen - 3);\n return desc.substring(0, cut > 0 ? cut : maxLen - 3) + \"...\";\n}\n\n/**\n * Load tools from ai_tool_registry, split into core (auto_load=true) and extended.\n * The `discover_tools` meta-tool is always injected into core.\n * Descriptions are truncated to 150 chars at load time.\n */\nexport async function loadTools(supabase: SupabaseClient, forceRefresh = false): Promise<ToolLoadResult> {\n if (!forceRefresh && cachedResult && Date.now() - cacheTime < 60_000) return cachedResult;\n\n const { data, error } = await supabase\n .from(\"ai_tool_registry\")\n .select(\"name, description, definition, auto_load\")\n .eq(\"is_active\", true)\n .neq(\"tool_mode\", \"code\");\n\n if (error || !data) {\n return cachedResult || { core: [], extended: [], all: [] };\n }\n\n const allTools: ToolDef[] = data.map((t: any) => ({\n name: t.name,\n description: sanitizeToolDescription(\n truncateDescription(t.description || t.definition?.description || t.name),\n ),\n input_schema: t.definition?.input_schema || { type: \"object\", properties: {} },\n }));\n\n const core: ToolDef[] = [];\n const extended: ToolDef[] = [];\n\n // Check if any row has auto_load set — if the column doesn't exist yet\n // (migration not run), all values will be null/undefined. In that case,\n // treat ALL tools as core to preserve pre-migration behavior.\n const migrationApplied = data.some((t: any) => t.auto_load === true || t.auto_load === false);\n\n if (!migrationApplied) {\n // Pre-migration: all tools are core (original behavior)\n core.push(...allTools);\n } else {\n for (let i = 0; i < data.length; i++) {\n if (data[i].auto_load) {\n core.push(allTools[i]);\n } else {\n extended.push(allTools[i]);\n }\n }\n }\n\n // Always inject discover_tools into core set\n if (!core.some(t => t.name === \"discover_tools\")) {\n core.push(DISCOVER_TOOLS_DEF);\n }\n\n // Pre-compute API-ready tool defs keyed by name — avoids per-turn .map()\n cachedApiToolDefs = new Map();\n for (const t of [...core, ...extended]) {\n cachedApiToolDefs.set(t.name, {\n name: t.name,\n description: t.description,\n input_schema: t.input_schema,\n });\n }\n\n cachedResult = { core, extended, all: allTools };\n cacheTime = Date.now();\n return cachedResult;\n}\n\n/**\n * Get pre-computed API-ready tool definitions. Returns frozen objects keyed by name\n * so the agent loop can look up defs without re-mapping every turn.\n * Falls back to building from a ToolDef[] if cache not yet populated.\n */\nexport function getCachedToolDefs(\n tools: ToolDef[],\n): Array<{ name: string; description: string; input_schema: Record<string, unknown> }> {\n if (cachedApiToolDefs) {\n // Fast path: look up each active tool in the pre-computed map\n const result: Array<{ name: string; description: string; input_schema: Record<string, unknown> }> = [];\n for (const t of tools) {\n const cached = cachedApiToolDefs.get(t.name);\n if (cached) {\n result.push(cached);\n } else {\n // Dynamic tool (e.g. delegate_task, user tools, discovered tools) — build on the fly\n result.push({\n name: t.name,\n description: truncateDescription(t.description),\n input_schema: t.input_schema,\n });\n }\n }\n return result;\n }\n // Fallback: cache not populated yet — build from scratch with truncation\n return tools.map((t) => ({\n name: t.name,\n description: truncateDescription(t.description),\n input_schema: t.input_schema,\n }));\n}\n\n/** discover_tools meta-tool — lets the model load extended tool schemas on demand */\nconst DISCOVER_TOOLS_DEF: ToolDef = {\n name: \"discover_tools\",\n description: \"Load full schemas for extended tools not in your core set. Call this before using a tool that is listed under 'Extended Tools' in your system prompt. You can load tools by name or by category.\",\n input_schema: {\n type: \"object\",\n properties: {\n names: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"Specific tool names to load (e.g. ['kali', 'browser', 'voice'])\",\n },\n category: {\n type: \"string\",\n description: \"Load all tools in this category (e.g. 'security', 'media', 'operations')\",\n },\n refresh: {\n type: \"boolean\",\n description: \"Force reload tool definitions from DB (bust cache). Use when tools may have been updated mid-conversation.\",\n },\n },\n },\n};\n\n// ============================================================================\n// USER TOOLS (per-store custom tools from user_tools table)\n// ============================================================================\n\nconst userToolCache = new Map<string, { tools: UserToolRow[]; defs: ToolDef[]; time: number; lastAccessed: number }>();\nconst USER_TOOL_CACHE_MAX = 100;\n\nfunction evictUserToolCache(): void {\n if (userToolCache.size <= USER_TOOL_CACHE_MAX) return;\n const entries = [...userToolCache.entries()].sort((a, b) => a[1].lastAccessed - b[1].lastAccessed);\n const excess = userToolCache.size - USER_TOOL_CACHE_MAX;\n for (let i = 0; i < excess; i++) {\n userToolCache.delete(entries[i][0]);\n }\n}\n\nexport async function loadUserTools(supabase: SupabaseClient, storeId: string): Promise<{ rows: UserToolRow[]; defs: ToolDef[] }> {\n const cached = userToolCache.get(storeId);\n if (cached && Date.now() - cached.time < 60_000) {\n cached.lastAccessed = Date.now();\n return { rows: cached.tools, defs: cached.defs };\n }\n\n const { data, error } = await supabase\n .from(\"user_tools\")\n .select(\"id, name, display_name, description, input_schema, execution_type, is_read_only, requires_approval, http_config, rpc_function, sql_template, allowed_tables, max_execution_time_ms\")\n .eq(\"store_id\", storeId)\n .eq(\"is_active\", true);\n\n if (error || !data?.length) return { rows: [], defs: [] };\n\n const rows: UserToolRow[] = data as UserToolRow[];\n const defs: ToolDef[] = rows.map((t) => ({\n name: `user_tool__${t.name}`,\n description: sanitizeToolDescription(\n `[Custom Tool] ${t.display_name}: ${t.description}${t.requires_approval ? \" (requires approval)\" : \"\"}`,\n ),\n input_schema: t.input_schema || { type: \"object\", properties: {} },\n }));\n\n userToolCache.set(storeId, { tools: rows, defs, time: Date.now(), lastAccessed: Date.now() });\n evictUserToolCache();\n return { rows, defs };\n}\n\nexport function getUserToolByPrefixedName(rows: UserToolRow[], prefixedName: string): UserToolRow | undefined {\n const toolName = prefixedName.replace(/^user_tool__/, \"\");\n return rows.find((t) => t.name === toolName);\n}\n\nexport function getToolsForAgent(agent: AgentConfig, coreTools: ToolDef[], userToolDefs: ToolDef[] = []): ToolDef[] {\n // Core registry tools are always available (matches MCP server behavior).\n // enabled_tools only restricts custom user tools.\n if (agent.enabled_tools?.length > 0) {\n const filteredUserTools = userToolDefs.filter((t) => agent.enabled_tools.includes(t.name));\n return [...coreTools, ...filteredUserTools];\n }\n return [...coreTools, ...userToolDefs];\n}\n\n// ============================================================================\n// UNIFIED HANDLER REGISTRY — single source of truth for all tool dispatch\n// ============================================================================\n\nexport type ToolProgressCallback = (toolName: string, progress: unknown) => void;\n\ntype ToolHandler = (\n sb: SupabaseClient,\n args: Record<string, unknown>,\n storeId?: string,\n onToolProgress?: (progress: unknown) => void,\n) => Promise<{ success: boolean; data?: unknown; error?: string }>;\n\ninterface ToolHandlerEntry {\n handler: ToolHandler;\n timeout: number; // ms — execution timeout\n requiresStore: boolean; // whether store_id is mandatory\n supportsProgress?: boolean; // handler accepts onToolProgress (4th param)\n}\n\nconst DEFAULT_TIMEOUT = 30_000;\n\n/**\n * Every built-in tool MUST be registered here. This map is the single source\n * of truth for handler routing, timeouts, and store requirements.\n * Adding a tool to ai_tool_registry without an entry here → \"Unknown tool\" error.\n */\nexport const TOOL_HANDLERS: Record<string, ToolHandlerEntry> = {\n // --- Business Data ---\n inventory: { handler: (sb, args, sid) => {\n const a = args.action as string || \"\";\n if (a.startsWith(\"audit_\")) return handleInventoryAudit(sb, { ...args, action: a.slice(6) }, sid);\n if ([\"summary\",\"velocity\",\"by_location\",\"in_stock\",\"out_of_stock\",\"by_category\"].includes(a)) return handleInventoryQuery(sb, args, sid);\n return handleInventory(sb, args, sid);\n }, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n purchase_orders: { handler: handlePurchaseOrders, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n transfers: { handler: handleTransfers, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n products: { handler: handleProducts, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n collections: { handler: handleCollections, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n customers: { handler: handleCustomers, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n orders: { handler: handleOrders, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n analytics: { handler: handleAnalytics, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n locations: { handler: handleLocations, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n suppliers: { handler: handleSuppliers, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n store: { handler: handleStore, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n storefront: { handler: handleStorefront, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n\n // --- Communication ---\n email: { handler: handleEmail, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n documents: { handler: handleDocuments, timeout: 120_000, requiresStore: true },\n\n // --- Operations ---\n alerts: { handler: handleAlerts, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n audit_trail: { handler: handleAuditTrail, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n workflows: { handler: handleWorkflows, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n\n // --- AI & Generation ---\n voice: { handler: handleVoice, timeout: 120_000, requiresStore: true },\n image_gen: { handler: handleImageGen, timeout: 60_000, requiresStore: true },\n remove_bg: { handler: handleRemoveBg, timeout: 60_000, requiresStore: true },\n media: { handler: handleMedia, timeout: 60_000, requiresStore: true },\n video_gen: { handler: handleVideoGen, timeout: 600_000, requiresStore: true },\n llm: { handler: handleLLM, timeout: 120_000, requiresStore: true },\n embeddings: { handler: handleEmbeddings, timeout: 60_000, requiresStore: true },\n creations: { handler: handleCreations, timeout: 60_000, requiresStore: true },\n\n // --- Platform & Infrastructure (no store required) ---\n web_search: { handler: handleWebSearch, timeout: DEFAULT_TIMEOUT, requiresStore: false },\n telemetry: { handler: handleTelemetry, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n browser: { handler: handleBrowser, timeout: 120_000, requiresStore: true },\n discovery: { handler: handleDiscovery, timeout: DEFAULT_TIMEOUT, requiresStore: false },\n api_keys: { handler: handleAPIKeys, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n api_docs: { handler: handleApiDocs, timeout: 15_000, requiresStore: false },\n\n // --- Advertising ---\n meta_ads: { handler: handleMetaAds, timeout: 300_000, requiresStore: true },\n google_ads: { handler: handleGoogleAds, timeout: 300_000, requiresStore: true },\n\n // --- Security & Local ---\n kali: { handler: handleKali as ToolHandler, timeout: 600_000, requiresStore: true, supportsProgress: true },\n local_agent: { handler: handleLocalAgent, timeout: 600_000, requiresStore: false },\n\n // --- Customer Enrichment ---\n enrichment: { handler: handleEnrichment, timeout: 60_000, requiresStore: true },\n\n // --- Observability (ClickHouse) ---\n clickhouse: { handler: handleClickHouse, timeout: 60_000, requiresStore: false },\n\n // --- Loyalty & Promotions ---\n loyalty: { handler: handleLoyalty, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n coupons: { handler: handleCoupons, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n\n // --- Fulfillment ---\n fulfillment: { handler: handleFulfillment, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n\n // --- CRM & Marketing ---\n segments: { handler: handleSegments, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n campaigns: { handler: handleCampaigns, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n reviews: { handler: handleReviews, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n\n // --- Finance & Tax ---\n tax: { handler: handleTax, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n invoices: { handler: handleInvoices, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n\n // --- Webhooks ---\n webhooks_mgmt: { handler: handleWebhooksMgmt, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n\n // --- Affiliates ---\n affiliates: { handler: handleAffiliates, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n\n // --- QR Codes ---\n qr_codes: { handler: handleQRCodes, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n\n // --- Phone (RingCentral) ---\n phone: { handler: handlePhone, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n\n // --- Social / Multi-platform Ads ---\n social: { handler: handleSocial, timeout: 300_000, requiresStore: true },\n\n // --- Wallet ---\n wallet: { handler: handleWallet, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n\n // --- Sales Pipeline ---\n pipeline: { handler: handlePipeline, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n\n // --- Wholesale ---\n wholesale: { handler: handleWholesale, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n\n // --- Meta: Tool Discovery (lazy loading) ---\n discover_tools: { handler: handleDiscoverTools, timeout: 5000, requiresStore: false },\n};\n\nObject.freeze(TOOL_HANDLERS);\n\n/** Get all registered built-in tool names */\nexport function getRegisteredToolNames(): string[] {\n return Object.keys(TOOL_HANDLERS);\n}\n\n// ============================================================================\n// DISCOVER_TOOLS HANDLER — returns full schemas for extended tools on demand\n// ============================================================================\n\n/** Full extended tool defs (with schemas) — used by handleDiscoverTools to return schemas on demand */\nlet _extendedToolsCache: ToolDef[] = [];\n\n/** Lightweight extended tool index — name + first-sentence description only (for system prompt) */\nlet _extendedToolsIndex: Array<{ name: string; description: string }> = [];\n\n/** Called by index.ts after loadTools() to populate the discover_tools cache.\n * Stores full schemas for on-demand loading, plus a lightweight index for the system prompt. */\nexport function setExtendedToolsCache(tools: ToolDef[]): void {\n _extendedToolsCache = tools;\n // Pre-compute lightweight index: name + first sentence only (no schemas)\n _extendedToolsIndex = tools.map(t => ({\n name: t.name,\n description: t.description.split(\".\")[0],\n }));\n}\n\n/** Get full extended tools with schemas (for discover_tools handler) */\nexport function getExtendedToolsCache(): ToolDef[] {\n return _extendedToolsCache;\n}\n\n/** Get lightweight extended tools index — name + short description only (for system prompt).\n * Avoids serializing full schemas into the prompt. */\nexport function getExtendedToolsIndex(): Array<{ name: string; description: string }> {\n return _extendedToolsIndex;\n}\n\n/**\n * Get full tool schemas for specific tool names from the extended tools cache.\n * Used by the agent loop to inject discovered tool schemas into the active tool set.\n * Returns only tools that exist in the cache; unknown names are silently skipped.\n */\nexport function getFullToolSchemas(toolNames: string[]): ToolDef[] {\n if (!toolNames.length || !_extendedToolsCache.length) return [];\n const nameSet = new Set(toolNames);\n return _extendedToolsCache.filter(t => nameSet.has(t.name));\n}\n\n// Tool category heuristics — maps tool names to categories for category-based discovery\nconst TOOL_CATEGORIES: Record<string, string> = {\n // Business Data\n inventory: \"business\", purchase_orders: \"business\", transfers: \"business\",\n products: \"business\", collections: \"business\", customers: \"business\",\n orders: \"business\", analytics: \"business\", locations: \"business\",\n suppliers: \"business\", store: \"business\", storefront: \"business\",\n // Communication\n email: \"communication\", documents: \"communication\",\n // Operations\n alerts: \"operations\", audit_trail: \"operations\", workflows: \"operations\",\n telemetry: \"operations\",\n // Media & AI\n voice: \"media\", image_gen: \"media\", video_gen: \"media\", remove_bg: \"media\", media: \"media\",\n llm: \"ai\", embeddings: \"ai\", creations: \"media\",\n // Platform\n web_search: \"platform\", browser: \"platform\", discovery: \"platform\",\n api_keys: \"platform\", api_docs: \"platform\",\n // Security\n kali: \"security\", local_agent: \"platform\",\n // Advertising\n meta_ads: \"advertising\",\n // Data\n enrichment: \"data\",\n};\n\nasync function handleDiscoverTools(\n sb: SupabaseClient,\n args: Record<string, unknown>,\n): Promise<{ success: boolean; data?: unknown; error?: string }> {\n const names = args.names as string[] | undefined;\n const category = args.category as string | undefined;\n const refresh = args.refresh as boolean | undefined;\n\n // Force reload from DB if refresh requested — busts the 60s cache\n if (refresh) {\n try {\n const freshResult = await loadTools(sb, true);\n setExtendedToolsCache(freshResult.extended);\n } catch {\n // If refresh fails, continue with stale cache — better than erroring\n }\n }\n\n if (!names?.length && !category) {\n return { success: false, error: \"Provide 'names' (array of tool names) or 'category' to discover tools.\" };\n }\n\n let matching: ToolDef[] = [];\n\n if (names?.length) {\n const nameSet = new Set(names);\n matching = _extendedToolsCache.filter(t => nameSet.has(t.name));\n }\n\n if (category) {\n const cat = category.toLowerCase();\n const categoryTools = _extendedToolsCache.filter(t => TOOL_CATEGORIES[t.name] === cat);\n // Merge without duplicates\n const existingNames = new Set(matching.map(t => t.name));\n for (const t of categoryTools) {\n if (!existingNames.has(t.name)) matching.push(t);\n }\n }\n\n if (matching.length === 0) {\n const available = _extendedToolsCache.map(t => t.name).join(\", \");\n return { success: false, error: `No matching extended tools found. Available: ${available}` };\n }\n\n return {\n success: true,\n data: {\n tools: matching.map(t => ({ name: t.name, description: t.description, input_schema: t.input_schema })),\n count: matching.length,\n refreshed: !!refresh,\n },\n };\n}\n\n// ============================================================================\n// USER TOOL EXECUTOR — handles RPC, HTTP, SQL execution types\n// ============================================================================\n\nasync function executeUserTool(\n supabase: SupabaseClient,\n userTool: UserToolRow,\n args: Record<string, unknown>,\n storeId: string,\n agentId?: string,\n conversationId?: string,\n): Promise<{ success: boolean; data?: unknown; error?: string }> {\n const timeout = userTool.max_execution_time_ms || 5000;\n\n if (userTool.execution_type === \"http\") {\n return executeHTTPUserTool(supabase, userTool, args, storeId, timeout);\n }\n\n try {\n const { data, error } = await supabase.rpc(\"execute_user_tool\", {\n p_tool_id: userTool.id,\n p_store_id: storeId,\n p_args: args,\n p_agent_id: agentId || null,\n p_conversation_id: conversationId || null,\n });\n\n if (error) return { success: false, error: error.message };\n\n const result = data as { success: boolean; data?: unknown; error?: string; pending_approval?: boolean; execution_id?: string; message?: string };\n\n if (result.pending_approval) {\n return { success: false, error: `Tool requires approval. Execution ID: ${result.execution_id}. ${result.message}` };\n }\n\n if (result.success && result.data && (result.data as any).execute_sql) {\n return executeSQLUserTool(supabase, result.data as any, args, storeId);\n }\n\n return result.success\n ? { success: true, data: result.data }\n : { success: false, error: result.error || \"Unknown error\" };\n } catch (err) {\n return { success: false, error: sanitizeError(err) };\n }\n}\n\nasync function executeHTTPUserTool(\n supabase: SupabaseClient,\n userTool: UserToolRow,\n args: Record<string, unknown>,\n storeId: string,\n timeout: number,\n): Promise<{ success: boolean; data?: unknown; error?: string }> {\n const config = userTool.http_config;\n if (!config || !(config as any).url) {\n return { success: false, error: \"HTTP tool has no URL configured\" };\n }\n\n const httpCfg = config as { url: string; method?: string; headers?: Record<string, string>; body_template?: Record<string, unknown> };\n\n let url = httpCfg.url;\n let headers: Record<string, string> = { ...(httpCfg.headers || {}) };\n\n // Collect secret names referenced in the URL, headers, and body template\n const configStr = JSON.stringify({ url: httpCfg.url, headers: httpCfg.headers, body: httpCfg.body_template });\n const secretRefs = [...configStr.matchAll(/\\{\\{secret:(\\w+)\\}\\}/g)].map(m => m[1]);\n\n // Decrypt each referenced secret via RPC (consistent with all other handlers)\n const secretMap = new Map<string, string>();\n await Promise.all(\n [...new Set(secretRefs)].map(async (name) => {\n try {\n const { data } = await supabase.rpc(\"decrypt_secret\", { p_name: name, p_store_id: storeId });\n if (data) secretMap.set(name, data as string);\n } catch { /* secret not found — will remain as {{secret:NAME}} placeholder */ }\n }),\n );\n\n const resolveSecrets = (text: string): string => {\n return text.replace(/\\{\\{secret:(\\w+)\\}\\}/g, (_, name) => secretMap.get(name) || `{{secret:${name}}}`);\n };\n\n const resolveArgs = (text: string): string => {\n return text.replace(/\\{\\{(\\w+)\\}\\}/g, (_, name) => {\n if (name === \"secret\") return `{{${name}}}`;\n const val = args[name];\n return val !== undefined ? String(val) : `{{${name}}}`;\n });\n };\n\n const resolve = (text: string): string => resolveSecrets(resolveArgs(text));\n\n url = resolve(url);\n for (const [key, val] of Object.entries(headers)) {\n headers[key] = resolve(val);\n }\n\n let body: string | undefined;\n const method = (httpCfg.method || \"GET\").toUpperCase();\n if (method !== \"GET\" && method !== \"HEAD\") {\n if (httpCfg.body_template) {\n const resolvedBody: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(httpCfg.body_template)) {\n if (typeof val === \"string\") {\n resolvedBody[key] = resolve(val);\n } else {\n resolvedBody[key] = val;\n }\n }\n for (const [key, val] of Object.entries(args)) {\n if (!(key in resolvedBody)) {\n resolvedBody[key] = val;\n }\n }\n body = JSON.stringify(resolvedBody);\n } else {\n body = JSON.stringify(args);\n }\n if (!headers[\"Content-Type\"] && !headers[\"content-type\"]) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n }\n\n // P0 FIX: Use shared SSRF guard with DNS resolve-then-check (replaces inline regex)\n const ssrfError = await validateUrl(url);\n if (ssrfError) {\n return { success: false, error: `Blocked: ${ssrfError}` };\n }\n\n try {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeout);\n\n const resp = await fetch(url, { method, headers, body, signal: controller.signal });\n clearTimeout(timer);\n\n // Clear secrets from memory as soon as the request is sent\n secretMap.clear();\n\n const contentType = resp.headers.get(\"content-type\") || \"\";\n let data: unknown;\n if (contentType.includes(\"json\")) {\n data = await resp.json();\n } else {\n data = await resp.text();\n }\n\n if (!resp.ok) {\n return { success: false, error: `HTTP ${resp.status}: ${typeof data === \"string\" ? data.substring(0, 500) : JSON.stringify(data).substring(0, 500)}` };\n }\n\n return { success: true, data };\n } catch (err: any) {\n // Clear secrets from memory even on error\n secretMap.clear();\n if (err.name === \"AbortError\") {\n return { success: false, error: `HTTP request timed out after ${timeout}ms` };\n }\n return { success: false, error: sanitizeError(err) };\n }\n}\n\nasync function executeSQLUserTool(\n supabase: SupabaseClient,\n sqlConfig: { template: string; allowed_tables: string[]; is_read_only: boolean },\n args: Record<string, unknown>,\n storeId: string,\n): Promise<{ success: boolean; data?: unknown; error?: string }> {\n if (!sqlConfig.is_read_only) {\n return { success: false, error: \"Write SQL tools are not supported in server execution\" };\n }\n\n if (!sqlConfig.template) {\n return { success: false, error: \"No SQL template configured\" };\n }\n\n try {\n const { data, error } = await supabase.rpc(\"execute_safe_sql\", {\n p_sql: sqlConfig.template,\n p_params: args,\n p_store_id: storeId,\n p_allowed_tables: sqlConfig.allowed_tables || [],\n });\n\n if (error) return { success: false, error: error.message };\n\n if (data?.success) {\n return { success: true, data: data.data };\n }\n return { success: false, error: data?.error || \"SQL execution failed\" };\n } catch (err) {\n return { success: false, error: sanitizeError(err) };\n }\n}\n\n// ============================================================================\n// SUPPLY CHAIN — action aliasing (LLMs omit po_/transfer_ prefix)\n// ============================================================================\n\nasync function executeSupplyChain(\n supabase: SupabaseClient,\n args: Record<string, unknown>,\n storeId?: string,\n traceId?: string,\n userId?: string | null,\n userEmail?: string | null,\n source?: string,\n conversationId?: string,\n userToolRows?: UserToolRow[],\n agentId?: string,\n): Promise<{ success: boolean; data?: unknown; error?: string }> {\n let scAction = args.action as string || \"\";\n const PO_ALIASES: Record<string, string> = {\n create: \"po_create\", list: \"po_list\", get: \"po_get\",\n add_items: \"po_add_items\", approve: \"po_approve\", mark_ordered: \"po_mark_ordered\",\n receive: \"po_receive\", cancel: \"po_cancel\",\n };\n if (PO_ALIASES[scAction]) scAction = PO_ALIASES[scAction];\n\n if (scAction === \"find_suppliers\") {\n return executeTool(supabase, \"suppliers\", { ...args, action: \"find_suppliers\" }, storeId, traceId, userId, userEmail, source, conversationId, userToolRows, agentId);\n }\n if (scAction.startsWith(\"po_\")) {\n return executeTool(supabase, \"purchase_orders\", { ...args, action: scAction.slice(3) }, storeId, traceId, userId, userEmail, source, conversationId, userToolRows, agentId);\n }\n if (scAction.startsWith(\"transfer_\")) {\n return executeTool(supabase, \"transfers\", { ...args, action: scAction.slice(9) }, storeId, traceId, userId, userEmail, source, conversationId, userToolRows, agentId);\n }\n return { success: false, error: `Unknown supply_chain action: ${scAction}. Use po_create, po_list, po_get, po_approve, po_receive, po_cancel, transfer_create, transfer_list, transfer_approve, transfer_ship, transfer_receive, transfer_cancel, find_suppliers.` };\n}\n\n// ============================================================================\n// TOOL EXECUTOR — dispatches via unified handler registry\n// ============================================================================\n\nexport async function executeTool(\n supabase: SupabaseClient,\n toolName: string,\n args: Record<string, unknown>,\n storeId?: string,\n traceId?: string,\n userId?: string | null,\n userEmail?: string | null,\n source?: string,\n conversationId?: string,\n userToolRows?: UserToolRow[],\n agentId?: string,\n onToolProgress?: ToolProgressCallback,\n /** Skip per-tool audit when called within a conversation — persistAgentTurn handles it */\n skipAudit?: boolean,\n): Promise<{ success: boolean; data?: unknown; error?: string }> {\n const startTime = Date.now();\n const action = args.action as string | undefined;\n let result: { success: boolean; data?: unknown; error?: string };\n\n // Handle supply_chain aliases (LLMs often omit po_/transfer_ prefix)\n if (toolName === \"supply_chain\") {\n return executeSupplyChain(supabase, args, storeId, traceId, userId, userEmail, source, conversationId, userToolRows, agentId);\n }\n\n // Look up handler from unified registry\n const entry = TOOL_HANDLERS[toolName];\n\n // Check store requirement from registry (not hardcoded)\n const requiresStore = entry ? entry.requiresStore : true;\n if (requiresStore && (!storeId || !/^[0-9a-fA-F]{8}-/.test(storeId))) {\n return { success: false, error: `store_id is required for ${toolName}. Ensure a store is selected.` };\n }\n\n // Permission enforcement — check agent flags before tool execution\n if (agentId) {\n const { data: agentFlags } = await supabase.from(\"ai_agent_config\")\n .select(\"can_query, can_modify\")\n .eq(\"id\", agentId).single();\n if (agentFlags) {\n // Read-only agent check — block ALL tool calls if can_query is false\n if (!agentFlags.can_query) {\n const readActions = [\"list\", \"get\", \"search\", \"query\", \"summary\", \"stats\", \"count\", \"by_location\", \"in_stock\", \"out_of_stock\", \"velocity\"];\n const action = args.action as string | undefined;\n if (action && readActions.includes(action)) {\n return { success: false, error: `Agent does not have query permission (can_query=false). Contact an admin.` };\n }\n }\n // Mutation check — already in system prompt but enforce at execution level\n if (!agentFlags.can_modify) {\n const writeActions = [\"create\", \"update\", \"delete\", \"upsert\", \"send\", \"approve\", \"cancel\", \"add\", \"remove\", \"set\", \"adjust\", \"transfer\"];\n const action = args.action as string | undefined;\n if (action && writeActions.some(wa => action.startsWith(wa))) {\n return { success: false, error: `Agent has read-only access (can_modify=false). Cannot perform \"${action}\".` };\n }\n }\n }\n }\n\n // User tool approval check — requires_approval enforced at execution level\n if (toolName.startsWith(\"user_tool__\") && userToolRows?.length) {\n const userTool = getUserToolByPrefixedName(userToolRows, toolName);\n if (userTool?.requires_approval) {\n return { success: false, error: `Tool \"${userTool.display_name}\" requires approval before execution. Use the workflow approval system to request permission.` };\n }\n }\n\n // Validate mutation args before dispatch — read-only actions pass through\n const validation = validateToolArgs(toolName, args);\n if (!validation.valid) {\n return { success: false, error: validation.error };\n }\n args = validation.data;\n\n const execStartMs = Date.now();\n try {\n let toolPromise: Promise<{ success: boolean; data?: unknown; error?: string }>;\n\n if (entry) {\n // Dispatch via unified handler registry — pass progress callback to handlers that support it\n const progressCb = entry.supportsProgress && onToolProgress\n ? (progress: unknown) => onToolProgress(toolName, progress)\n : undefined;\n toolPromise = entry.handler(supabase, args, storeId, progressCb);\n } else if (toolName.startsWith(\"user_tool__\") && userToolRows && storeId) {\n // Custom user tools\n const userTool = getUserToolByPrefixedName(userToolRows, toolName);\n if (userTool) {\n toolPromise = executeUserTool(supabase, userTool, args, storeId, agentId, conversationId);\n } else {\n toolPromise = Promise.resolve({ success: false, error: `Unknown user tool: ${toolName}` });\n }\n } else {\n toolPromise = Promise.resolve({ success: false, error: `Unknown tool: ${toolName}. Use the discover_tools action to see available tools.` });\n }\n\n const timeoutMs = entry?.timeout || DEFAULT_TIMEOUT;\n\n // FIX 7: Timeout cascade validation — warn if step timeout < tool timeout\n const stepTimeout = args._step_timeout_seconds as number | undefined;\n if (stepTimeout && stepTimeout * 1000 < timeoutMs) {\n console.warn(`[timeout-cascade] Step timeout (${stepTimeout}s) < tool timeout (${timeoutMs / 1000}s) for ${toolName}. Tool may outlive step.`);\n }\n\n result = await withTimeout(toolPromise, timeoutMs, toolName);\n } catch (err) {\n result = { success: false, error: sanitizeError(err) };\n }\n\n // Record execution metrics\n recordToolMetric(toolName, Date.now() - execStartMs, result.success);\n\n // Audit log — enriched with OTEL fields for distributed tracing\n // Skipped when tool is called within a conversation (SSE chat, channel agent, workflow)\n // because persistAgentTurn already logs the full conversation with tool details\n if (skipAudit) return result;\n try {\n const endTime = Date.now();\n // Compute payload sizes for observability\n const inputJson = JSON.stringify(args);\n const outputJson = result.data ? JSON.stringify(result.data) : \"\";\n const inputBytes = inputJson.length;\n const outputBytes = outputJson.length;\n\n const details: Record<string, unknown> = {\n source: source || \"fly_container\",\n args,\n // Keys that SwiftUI telemetry panel reads for rich display\n tool_input: args,\n input_bytes: inputBytes,\n output_bytes: outputBytes,\n };\n if (result.success && result.data) {\n details.result_summary = summarizeResult(toolName, action, result.data);\n // Store full result for rich telemetry display (capped at 50KB to prevent JSONB bloat)\n if (outputBytes <= 50_000) {\n details.tool_result = result.data;\n } else {\n details.tool_result = {\n _truncated: true,\n _type: Array.isArray(result.data) ? \"array\" : \"object\",\n _size: outputBytes,\n _count: Array.isArray(result.data) ? result.data.length : Object.keys(result.data as object).length,\n };\n }\n }\n if (result.error) {\n details.tool_error = result.error;\n const errorType = classifyErrorType(result.error);\n if (errorType) details.error_type = errorType;\n }\n const bytes = new Uint8Array(8);\n crypto.getRandomValues(bytes);\n const spanId = Array.from(bytes).map(b => b.toString(16).padStart(2, \"0\")).join(\"\");\n const auditRow: Record<string, unknown> = {\n action: `tool.${toolName}${action ? `.${action}` : \"\"}`,\n severity: result.success ? \"info\" : \"error\",\n store_id: storeId || null,\n resource_type: \"mcp_tool\",\n resource_id: toolName,\n request_id: traceId || null,\n conversation_id: conversationId || null,\n source: source || \"fly_container\",\n details,\n error_message: result.error || null,\n error_type: classifyErrorType(result.error) || undefined,\n duration_ms: endTime - startTime,\n user_id: userId || null,\n user_email: userEmail || null,\n input_bytes: inputBytes,\n output_bytes: outputBytes,\n // OTEL fields\n trace_id: traceId || null,\n span_id: spanId,\n span_kind: \"INTERNAL\",\n service_name: \"agent-server\",\n status_code: result.success ? \"OK\" : \"ERROR\",\n start_time: new Date(startTime).toISOString(),\n end_time: new Date(endTime).toISOString(),\n };\n queueSpan(auditRowToSpan(auditRow));\n } catch (err) {\n console.error(\"[audit] exception:\", err);\n }\n\n return result;\n}\n\n// ============================================================================\n// AGENT LOADER\n// ============================================================================\n\nexport async function loadAgentConfig(supabase: SupabaseClient, agentId: string, storeId?: string): Promise<AgentConfig | null> {\n // storeId is required for tenant isolation — only omit for internal/migration callers\n let query = supabase\n .from(\"ai_agent_config\")\n .select(\"*\")\n .eq(\"id\", agentId);\n\n // Filter by store_id for tenant isolation, but also allow platform agents (store_id IS NULL)\n if (storeId) {\n query = query.or(`store_id.eq.${storeId},store_id.is.null`);\n }\n\n const { data, error } = await query.single();\n\n if (error || !data) return null;\n return data as AgentConfig;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"tool-router.js","names":["sanitizeError","validateToolArgs","sanitizeToolDescription","validateUrl","handleInventory","handleInventoryQuery","handleInventoryAudit","handlePurchaseOrders","handleTransfers","handleProducts","handleCollections","handleCustomers","handleOrders","handleAnalytics","handleLocations","handleSuppliers","handleAlerts","handleAuditTrail","handleStore","handleEmail","handleDocuments","handleWebSearch","handleTelemetry","handleBrowser","handleDiscovery","handleVoice","handleWorkflows","handleEmbeddings","handleLLM","handleImageGen","handleRemoveBg","handleMedia","handleVideoGen","handleAPIKeys","handleCreations","handleMetaAds","handleGoogleAds","handleKali","handleLocalAgent","handleEnrichment","handleStorefront","handleApiDocs","handleClickHouse","handleLoyalty","handleCoupons","handleFulfillment","handleSegments","handleCampaigns","handleReviews","handleTax","handleWebhooksMgmt","handleAffiliates","handleQRCodes","handlePhone","handleSocial","handleWallet","handlePipeline","handleInvoices","handleWholesale","summarizeResult","withTimeout","queueSpan","flushSpans","auditRowToSpan","classifyErrorType","toolMetrics","Map","getToolMetrics","result","name","m","invocations","errors","avgMs","Math","round","totalMs","lastMs","recordToolMetric","toolName","durationMs","success","get","set","cachedResult","cacheTime","cachedApiToolDefs","truncateDescription","desc","maxLen","length","cut","lastIndexOf","substring","loadTools","supabase","forceRefresh","Date","now","data","error","from","select","eq","neq","core","extended","all","allTools","map","t","description","definition","input_schema","type","properties","migrationApplied","some","auto_load","push","i","DISCOVER_TOOLS_DEF","getCachedToolDefs","tools","cached","names","items","category","refresh","userToolCache","USER_TOOL_CACHE_MAX","evictUserToolCache","size","entries","sort","a","b","lastAccessed","excess","delete","loadUserTools","storeId","time","rows","defs","display_name","requires_approval","getUserToolByPrefixedName","prefixedName","replace","find","getToolsForAgent","agent","coreTools","userToolDefs","enabled_tools","filteredUserTools","filter","includes","DEFAULT_TIMEOUT","TOOL_HANDLERS","inventory","handler","sb","args","sid","action","startsWith","slice","timeout","requiresStore","purchase_orders","transfers","products","collections","customers","orders","analytics","locations","suppliers","store","storefront","email","documents","alerts","audit_trail","workflows","voice","image_gen","remove_bg","media","video_gen","llm","embeddings","creations","web_search","telemetry","browser","discovery","api_keys","api_docs","meta_ads","google_ads","kali","supportsProgress","local_agent","enrichment","clickhouse","loyalty","coupons","fulfillment","segments","campaigns","reviews","tax","invoices","webhooks_mgmt","affiliates","qr_codes","phone","social","wallet","pipeline","wholesale","discover_tools","handleDiscoverTools","Object","freeze","getRegisteredToolNames","keys","_extendedToolsCache","_extendedToolsIndex","setExtendedToolsCache","split","getExtendedToolsCache","getExtendedToolsIndex","getFullToolSchemas","toolNames","nameSet","Set","has","TOOL_CATEGORIES","freshResult","matching","cat","toLowerCase","categoryTools","existingNames","available","join","count","refreshed","executeUserTool","userTool","agentId","conversationId","max_execution_time_ms","execution_type","executeHTTPUserTool","rpc","p_tool_id","id","p_store_id","p_args","p_agent_id","p_conversation_id","message","pending_approval","execution_id","execute_sql","executeSQLUserTool","err","config","http_config","url","httpCfg","headers","configStr","JSON","stringify","body","body_template","secretRefs","matchAll","secretMap","Promise","p_name","resolveSecrets","text","_","resolveArgs","val","undefined","String","resolve","key","method","toUpperCase","resolvedBody","ssrfError","controller","AbortController","timer","setTimeout","abort","resp","fetch","signal","clearTimeout","clear","contentType","json","ok","status","sqlConfig","is_read_only","template","p_sql","p_params","p_allowed_tables","allowed_tables","executeSupplyChain","traceId","userId","userEmail","source","userToolRows","scAction","PO_ALIASES","create","list","add_items","update_items","approve","mark_ordered","receive","cancel","executeTool","onToolProgress","skipAudit","startTime","entry","test","agentFlags","single","can_query","readActions","can_modify","writeActions","wa","validation","valid","execStartMs","toolPromise","progressCb","progress","timeoutMs","stepTimeout","_step_timeout_seconds","console","warn","endTime","inputJson","outputJson","inputBytes","outputBytes","details","tool_input","input_bytes","output_bytes","result_summary","tool_result","_truncated","_type","Array","isArray","_size","_count","tool_error","errorType","error_type","bytes","Uint8Array","crypto","getRandomValues","spanId","toString","padStart","auditRow","severity","store_id","resource_type","resource_id","request_id","conversation_id","error_message","duration_ms","user_id","user_email","trace_id","span_id","span_kind","service_name","status_code","start_time","toISOString","end_time","loadAgentConfig","query","or"],"sources":["../../src/server/tool-router.ts"],"sourcesContent":["/**\n * Tool Router — unified tool registry, dispatch, and execution.\n *\n * SINGLE SOURCE OF TRUTH for all AI systems (MCP server, HTTP agent, workflows, CLI).\n *\n * Architecture:\n * - ai_tool_registry (DB): tool definitions (name, description, schema) — queried by ALL clients\n * - TOOL_HANDLERS (code): name → handler function mapping — the only place handler routing lives\n * - user_tools (DB): per-store custom tools — additive, never filtered from built-ins\n * - getToolsForAgent(): consistent tool set — all registry tools always available\n * - executeTool(): unified dispatch — handler lookup + timeout + audit logging\n *\n * To add a new tool:\n * 1. Add handler in src/server/handlers/\n * 2. Import and register in TOOL_HANDLERS below\n * 3. Add row to ai_tool_registry table (defines schema for all clients)\n * That's it — MCP, WhaleChat, workflows, CLI all pick it up automatically.\n */\n\nimport type { SupabaseClient } from \"@supabase/supabase-js\";\nimport { sanitizeError } from \"../shared/agent-core.js\";\nimport { validateToolArgs } from \"./validation.js\";\nimport { sanitizeToolDescription } from \"./lib/prompt-sanitizer.js\";\nimport { validateUrl } from \"./lib/ssrf-guard.js\";\n\nimport { handleInventory, handleInventoryQuery, handleInventoryAudit } from \"./handlers/inventory.js\";\nimport { handlePurchaseOrders, handleTransfers } from \"./handlers/supply-chain.js\";\nimport { handleProducts, handleCollections } from \"./handlers/catalog.js\";\nimport { handleCustomers, handleOrders } from \"./handlers/crm.js\";\nimport { handleAnalytics } from \"./handlers/analytics.js\";\nimport { handleLocations, handleSuppliers, handleAlerts, handleAuditTrail, handleStore } from \"./handlers/operations.js\";\nimport { handleEmail, handleDocuments } from \"./handlers/comms.js\";\nimport { handleWebSearch, handleTelemetry } from \"./handlers/platform.js\";\nimport { handleBrowser } from \"./handlers/browser.js\";\nimport { handleDiscovery } from \"./handlers/discovery.js\";\nimport { handleVoice } from \"./handlers/voice.js\";\nimport { handleWorkflows } from \"./handlers/workflows.js\";\nimport { handleEmbeddings } from \"./handlers/embeddings.js\";\nimport { handleLLM } from \"./handlers/llm-providers.js\";\nimport { handleImageGen } from \"./handlers/image-gen.js\";\nimport { handleRemoveBg } from \"./handlers/remove-bg.js\";\nimport { handleMedia } from \"./handlers/media.js\";\nimport { handleVideoGen } from \"./handlers/video-gen.js\";\nimport { handleAPIKeys } from \"./handlers/api-keys.js\";\nimport { handleCreations } from \"./handlers/creations.js\";\nimport { handleMetaAds } from \"./handlers/meta-ads.js\";\nimport { handleGoogleAds } from \"./handlers/google-ads.js\";\nimport { handleKali } from \"./handlers/kali.js\";\nimport { handleLocalAgent } from \"./handlers/local-agent.js\";\nimport { handleEnrichment } from \"./handlers/enrichment.js\";\nimport { handleStorefront } from \"./handlers/storefront.js\";\nimport { handleApiDocs } from \"./handlers/api-docs.js\";\nimport { handleClickHouse } from \"./handlers/clickhouse.js\";\nimport { handleLoyalty } from \"./handlers/loyalty.js\";\nimport { handleCoupons } from \"./handlers/coupons.js\";\nimport { handleFulfillment } from \"./handlers/fulfillment.js\";\nimport { handleSegments } from \"./handlers/segments.js\";\nimport { handleCampaigns } from \"./handlers/campaigns.js\";\nimport { handleReviews } from \"./handlers/reviews.js\";\nimport { handleTax } from \"./handlers/tax.js\";\nimport { handleWebhooksMgmt } from \"./handlers/webhooks-mgmt.js\";\nimport { handleAffiliates } from \"./handlers/affiliates.js\";\nimport { handleQRCodes } from \"./handlers/qr-codes.js\";\nimport { handlePhone } from \"./handlers/phone.js\";\nimport { handleSocial } from \"./handlers/social.js\";\nimport { handleWallet } from \"./handlers/wallet.js\";\nimport { handlePipeline } from \"./handlers/pipeline.js\";\nimport { handleInvoices } from \"./handlers/invoices.js\";\nimport { handleWholesale } from \"./handlers/wholesale.js\";\nimport { summarizeResult, withTimeout } from \"./lib/utils.js\";\n\n// ============================================================================\n// TELEMETRY — ClickHouse span buffer (replaces Postgres audit_logs buffer)\n// ============================================================================\n\nimport { queueSpan, flushSpans, auditRowToSpan, classifyErrorType } from \"./lib/clickhouse-buffer.js\";\n\n// Re-export for callers that used flushAuditLogs (e.g. index.ts shutdown)\nexport { flushSpans };\n\n// ============================================================================\n// IN-MEMORY EXECUTION METRICS\n// ============================================================================\n\nconst toolMetrics = new Map<string, { invocations: number; errors: number; totalMs: number; lastMs: number }>();\n\nexport function getToolMetrics(): Record<string, { invocations: number; errors: number; avgMs: number; lastMs: number }> {\n const result: Record<string, { invocations: number; errors: number; avgMs: number; lastMs: number }> = {};\n for (const [name, m] of toolMetrics) {\n result[name] = { invocations: m.invocations, errors: m.errors, avgMs: m.invocations > 0 ? Math.round(m.totalMs / m.invocations) : 0, lastMs: m.lastMs };\n }\n return result;\n}\n\nfunction recordToolMetric(toolName: string, durationMs: number, success: boolean): void {\n let m = toolMetrics.get(toolName);\n if (!m) { m = { invocations: 0, errors: 0, totalMs: 0, lastMs: 0 }; toolMetrics.set(toolName, m); }\n m.invocations++;\n m.totalMs += durationMs;\n m.lastMs = durationMs;\n if (!success) m.errors++;\n}\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface ToolDef {\n name: string;\n description: string;\n input_schema: Record<string, unknown>;\n}\n\nexport interface UserToolRow {\n id: string;\n name: string;\n display_name: string;\n description: string;\n input_schema: Record<string, unknown>;\n execution_type: \"rpc\" | \"http\" | \"sql\";\n is_read_only: boolean;\n requires_approval: boolean;\n http_config: Record<string, unknown> | null;\n rpc_function: string | null;\n sql_template: string | null;\n allowed_tables: string[] | null;\n max_execution_time_ms: number;\n}\n\nexport interface AgentConfig {\n id: string;\n name: string;\n description: string;\n system_prompt: string;\n model: string;\n max_tokens: number;\n max_tool_calls: number;\n temperature: number;\n enabled_tools: string[];\n can_query: boolean;\n can_send: boolean;\n can_modify: boolean;\n tone: string;\n verbosity: string;\n api_key: string | null;\n store_id: string | null;\n context_config: {\n includeLocations?: boolean;\n locationIds?: string[];\n includeCustomers?: boolean;\n customerSegments?: string[];\n max_history_chars?: number;\n max_tool_result_chars?: number;\n max_message_chars?: number;\n // Context management overrides — match Anthropic API defaults when unset\n compaction_trigger_tokens?: number;\n compaction_total_budget?: number;\n clear_thinking_keep?: number;\n clear_tool_uses_trigger?: number;\n clear_tool_uses_keep?: number;\n session_cost_budget_usd?: number;\n // Agent loop behavior — DB is single source of truth, defaults in AGENT_DEFAULTS\n max_concurrent_tools?: number;\n enable_delegation?: boolean;\n max_duration_ms?: number;\n enable_model_routing?: boolean;\n subagent_max_tokens?: number;\n subagent_max_turns?: number;\n subagent_temperature?: number;\n } | null;\n}\n\n// ============================================================================\n// TOOL REGISTRY (loaded from database — same as CLI and edge function)\n// ============================================================================\n\nexport interface ToolLoadResult {\n /** Core tools — always sent to the model (auto_load=true + discover_tools) */\n core: ToolDef[];\n /** Extended tools — only name+description sent; full schema loaded on demand */\n extended: ToolDef[];\n /** All tools combined (backward compat for callers that don't need the split) */\n all: ToolDef[];\n}\n\nlet cachedResult: ToolLoadResult | null = null;\nlet cacheTime = 0;\n\n/** Pre-computed API-ready tool defs (name + truncated description + input_schema).\n * Computed once at load time, reused every turn without re-serialization. */\nlet cachedApiToolDefs: Map<string, { name: string; description: string; input_schema: Record<string, unknown> }> | null = null;\n\n/** Truncate a description to maxLen characters, ending at a word boundary with ellipsis. */\nfunction truncateDescription(desc: string, maxLen = 150): string {\n if (desc.length <= maxLen) return desc;\n const cut = desc.lastIndexOf(\" \", maxLen - 3);\n return desc.substring(0, cut > 0 ? cut : maxLen - 3) + \"...\";\n}\n\n/**\n * Load tools from ai_tool_registry, split into core (auto_load=true) and extended.\n * The `discover_tools` meta-tool is always injected into core.\n * Descriptions are truncated to 150 chars at load time.\n */\nexport async function loadTools(supabase: SupabaseClient, forceRefresh = false): Promise<ToolLoadResult> {\n if (!forceRefresh && cachedResult && Date.now() - cacheTime < 60_000) return cachedResult;\n\n const { data, error } = await supabase\n .from(\"ai_tool_registry\")\n .select(\"name, description, definition, auto_load\")\n .eq(\"is_active\", true)\n .neq(\"tool_mode\", \"code\");\n\n if (error || !data) {\n return cachedResult || { core: [], extended: [], all: [] };\n }\n\n const allTools: ToolDef[] = data.map((t: any) => ({\n name: t.name,\n description: sanitizeToolDescription(\n truncateDescription(t.description || t.definition?.description || t.name),\n ),\n input_schema: t.definition?.input_schema || { type: \"object\", properties: {} },\n }));\n\n const core: ToolDef[] = [];\n const extended: ToolDef[] = [];\n\n // Check if any row has auto_load set — if the column doesn't exist yet\n // (migration not run), all values will be null/undefined. In that case,\n // treat ALL tools as core to preserve pre-migration behavior.\n const migrationApplied = data.some((t: any) => t.auto_load === true || t.auto_load === false);\n\n if (!migrationApplied) {\n // Pre-migration: all tools are core (original behavior)\n core.push(...allTools);\n } else {\n for (let i = 0; i < data.length; i++) {\n if (data[i].auto_load) {\n core.push(allTools[i]);\n } else {\n extended.push(allTools[i]);\n }\n }\n }\n\n // Always inject discover_tools into core set\n if (!core.some(t => t.name === \"discover_tools\")) {\n core.push(DISCOVER_TOOLS_DEF);\n }\n\n // Pre-compute API-ready tool defs keyed by name — avoids per-turn .map()\n cachedApiToolDefs = new Map();\n for (const t of [...core, ...extended]) {\n cachedApiToolDefs.set(t.name, {\n name: t.name,\n description: t.description,\n input_schema: t.input_schema,\n });\n }\n\n cachedResult = { core, extended, all: allTools };\n cacheTime = Date.now();\n return cachedResult;\n}\n\n/**\n * Get pre-computed API-ready tool definitions. Returns frozen objects keyed by name\n * so the agent loop can look up defs without re-mapping every turn.\n * Falls back to building from a ToolDef[] if cache not yet populated.\n */\nexport function getCachedToolDefs(\n tools: ToolDef[],\n): Array<{ name: string; description: string; input_schema: Record<string, unknown> }> {\n if (cachedApiToolDefs) {\n // Fast path: look up each active tool in the pre-computed map\n const result: Array<{ name: string; description: string; input_schema: Record<string, unknown> }> = [];\n for (const t of tools) {\n const cached = cachedApiToolDefs.get(t.name);\n if (cached) {\n result.push(cached);\n } else {\n // Dynamic tool (e.g. delegate_task, user tools, discovered tools) — build on the fly\n result.push({\n name: t.name,\n description: truncateDescription(t.description),\n input_schema: t.input_schema,\n });\n }\n }\n return result;\n }\n // Fallback: cache not populated yet — build from scratch with truncation\n return tools.map((t) => ({\n name: t.name,\n description: truncateDescription(t.description),\n input_schema: t.input_schema,\n }));\n}\n\n/** discover_tools meta-tool — lets the model load extended tool schemas on demand */\nconst DISCOVER_TOOLS_DEF: ToolDef = {\n name: \"discover_tools\",\n description: \"Load full schemas for extended tools not in your core set. Call this before using a tool that is listed under 'Extended Tools' in your system prompt. You can load tools by name or by category.\",\n input_schema: {\n type: \"object\",\n properties: {\n names: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"Specific tool names to load (e.g. ['kali', 'browser', 'voice'])\",\n },\n category: {\n type: \"string\",\n description: \"Load all tools in this category (e.g. 'security', 'media', 'operations')\",\n },\n refresh: {\n type: \"boolean\",\n description: \"Force reload tool definitions from DB (bust cache). Use when tools may have been updated mid-conversation.\",\n },\n },\n },\n};\n\n// ============================================================================\n// USER TOOLS (per-store custom tools from user_tools table)\n// ============================================================================\n\nconst userToolCache = new Map<string, { tools: UserToolRow[]; defs: ToolDef[]; time: number; lastAccessed: number }>();\nconst USER_TOOL_CACHE_MAX = 100;\n\nfunction evictUserToolCache(): void {\n if (userToolCache.size <= USER_TOOL_CACHE_MAX) return;\n const entries = [...userToolCache.entries()].sort((a, b) => a[1].lastAccessed - b[1].lastAccessed);\n const excess = userToolCache.size - USER_TOOL_CACHE_MAX;\n for (let i = 0; i < excess; i++) {\n userToolCache.delete(entries[i][0]);\n }\n}\n\nexport async function loadUserTools(supabase: SupabaseClient, storeId: string): Promise<{ rows: UserToolRow[]; defs: ToolDef[] }> {\n const cached = userToolCache.get(storeId);\n if (cached && Date.now() - cached.time < 60_000) {\n cached.lastAccessed = Date.now();\n return { rows: cached.tools, defs: cached.defs };\n }\n\n const { data, error } = await supabase\n .from(\"user_tools\")\n .select(\"id, name, display_name, description, input_schema, execution_type, is_read_only, requires_approval, http_config, rpc_function, sql_template, allowed_tables, max_execution_time_ms\")\n .eq(\"store_id\", storeId)\n .eq(\"is_active\", true);\n\n if (error || !data?.length) return { rows: [], defs: [] };\n\n const rows: UserToolRow[] = data as UserToolRow[];\n const defs: ToolDef[] = rows.map((t) => ({\n name: `user_tool__${t.name}`,\n description: sanitizeToolDescription(\n `[Custom Tool] ${t.display_name}: ${t.description}${t.requires_approval ? \" (requires approval)\" : \"\"}`,\n ),\n input_schema: t.input_schema || { type: \"object\", properties: {} },\n }));\n\n userToolCache.set(storeId, { tools: rows, defs, time: Date.now(), lastAccessed: Date.now() });\n evictUserToolCache();\n return { rows, defs };\n}\n\nexport function getUserToolByPrefixedName(rows: UserToolRow[], prefixedName: string): UserToolRow | undefined {\n const toolName = prefixedName.replace(/^user_tool__/, \"\");\n return rows.find((t) => t.name === toolName);\n}\n\nexport function getToolsForAgent(agent: AgentConfig, coreTools: ToolDef[], userToolDefs: ToolDef[] = []): ToolDef[] {\n // Core registry tools are always available (matches MCP server behavior).\n // enabled_tools only restricts custom user tools.\n if (agent.enabled_tools?.length > 0) {\n const filteredUserTools = userToolDefs.filter((t) => agent.enabled_tools.includes(t.name));\n return [...coreTools, ...filteredUserTools];\n }\n return [...coreTools, ...userToolDefs];\n}\n\n// ============================================================================\n// UNIFIED HANDLER REGISTRY — single source of truth for all tool dispatch\n// ============================================================================\n\nexport type ToolProgressCallback = (toolName: string, progress: unknown) => void;\n\ntype ToolHandler = (\n sb: SupabaseClient,\n args: Record<string, unknown>,\n storeId?: string,\n onToolProgress?: (progress: unknown) => void,\n) => Promise<{ success: boolean; data?: unknown; error?: string }>;\n\ninterface ToolHandlerEntry {\n handler: ToolHandler;\n timeout: number; // ms — execution timeout\n requiresStore: boolean; // whether store_id is mandatory\n supportsProgress?: boolean; // handler accepts onToolProgress (4th param)\n}\n\nconst DEFAULT_TIMEOUT = 30_000;\n\n/**\n * Every built-in tool MUST be registered here. This map is the single source\n * of truth for handler routing, timeouts, and store requirements.\n * Adding a tool to ai_tool_registry without an entry here → \"Unknown tool\" error.\n */\nexport const TOOL_HANDLERS: Record<string, ToolHandlerEntry> = {\n // --- Business Data ---\n inventory: { handler: (sb, args, sid) => {\n const a = args.action as string || \"\";\n if (a.startsWith(\"audit_\")) return handleInventoryAudit(sb, { ...args, action: a.slice(6) }, sid);\n if ([\"summary\",\"velocity\",\"by_location\",\"in_stock\",\"out_of_stock\",\"by_category\"].includes(a)) return handleInventoryQuery(sb, args, sid);\n return handleInventory(sb, args, sid);\n }, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n purchase_orders: { handler: handlePurchaseOrders, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n transfers: { handler: handleTransfers, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n products: { handler: handleProducts, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n collections: { handler: handleCollections, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n customers: { handler: handleCustomers, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n orders: { handler: handleOrders, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n analytics: { handler: handleAnalytics, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n locations: { handler: handleLocations, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n suppliers: { handler: handleSuppliers, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n store: { handler: handleStore, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n storefront: { handler: handleStorefront, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n\n // --- Communication ---\n email: { handler: handleEmail, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n documents: { handler: handleDocuments, timeout: 120_000, requiresStore: true },\n\n // --- Operations ---\n alerts: { handler: handleAlerts, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n audit_trail: { handler: handleAuditTrail, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n workflows: { handler: handleWorkflows, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n\n // --- AI & Generation ---\n voice: { handler: handleVoice, timeout: 120_000, requiresStore: true },\n image_gen: { handler: handleImageGen, timeout: 60_000, requiresStore: true },\n remove_bg: { handler: handleRemoveBg, timeout: 300_000, requiresStore: true },\n media: { handler: handleMedia, timeout: 60_000, requiresStore: true },\n video_gen: { handler: handleVideoGen, timeout: 600_000, requiresStore: true },\n llm: { handler: handleLLM, timeout: 120_000, requiresStore: true },\n embeddings: { handler: handleEmbeddings, timeout: 60_000, requiresStore: true },\n creations: { handler: handleCreations, timeout: 60_000, requiresStore: true },\n\n // --- Platform & Infrastructure (no store required) ---\n web_search: { handler: handleWebSearch, timeout: DEFAULT_TIMEOUT, requiresStore: false },\n telemetry: { handler: handleTelemetry, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n browser: { handler: handleBrowser, timeout: 120_000, requiresStore: true },\n discovery: { handler: handleDiscovery, timeout: DEFAULT_TIMEOUT, requiresStore: false },\n api_keys: { handler: handleAPIKeys, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n api_docs: { handler: handleApiDocs, timeout: 15_000, requiresStore: false },\n\n // --- Advertising ---\n meta_ads: { handler: handleMetaAds, timeout: 300_000, requiresStore: true },\n google_ads: { handler: handleGoogleAds, timeout: 300_000, requiresStore: true },\n\n // --- Security & Local ---\n kali: { handler: handleKali as ToolHandler, timeout: 600_000, requiresStore: true, supportsProgress: true },\n local_agent: { handler: handleLocalAgent, timeout: 600_000, requiresStore: false },\n\n // --- Customer Enrichment ---\n enrichment: { handler: handleEnrichment, timeout: 60_000, requiresStore: true },\n\n // --- Observability (ClickHouse) ---\n clickhouse: { handler: handleClickHouse, timeout: 60_000, requiresStore: false },\n\n // --- Loyalty & Promotions ---\n loyalty: { handler: handleLoyalty, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n coupons: { handler: handleCoupons, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n\n // --- Fulfillment ---\n fulfillment: { handler: handleFulfillment, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n\n // --- CRM & Marketing ---\n segments: { handler: handleSegments, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n campaigns: { handler: handleCampaigns, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n reviews: { handler: handleReviews, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n\n // --- Finance & Tax ---\n tax: { handler: handleTax, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n invoices: { handler: handleInvoices, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n\n // --- Webhooks ---\n webhooks_mgmt: { handler: handleWebhooksMgmt, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n\n // --- Affiliates ---\n affiliates: { handler: handleAffiliates, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n\n // --- QR Codes ---\n qr_codes: { handler: handleQRCodes, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n\n // --- Phone (RingCentral) ---\n phone: { handler: handlePhone, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n\n // --- Social / Multi-platform Ads ---\n social: { handler: handleSocial, timeout: 300_000, requiresStore: true },\n\n // --- Wallet ---\n wallet: { handler: handleWallet, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n\n // --- Sales Pipeline ---\n pipeline: { handler: handlePipeline, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n\n // --- Wholesale ---\n wholesale: { handler: handleWholesale, timeout: DEFAULT_TIMEOUT, requiresStore: true },\n\n // --- Meta: Tool Discovery (lazy loading) ---\n discover_tools: { handler: handleDiscoverTools, timeout: 5000, requiresStore: false },\n};\n\nObject.freeze(TOOL_HANDLERS);\n\n/** Get all registered built-in tool names */\nexport function getRegisteredToolNames(): string[] {\n return Object.keys(TOOL_HANDLERS);\n}\n\n// ============================================================================\n// DISCOVER_TOOLS HANDLER — returns full schemas for extended tools on demand\n// ============================================================================\n\n/** Full extended tool defs (with schemas) — used by handleDiscoverTools to return schemas on demand */\nlet _extendedToolsCache: ToolDef[] = [];\n\n/** Lightweight extended tool index — name + first-sentence description only (for system prompt) */\nlet _extendedToolsIndex: Array<{ name: string; description: string }> = [];\n\n/** Called by index.ts after loadTools() to populate the discover_tools cache.\n * Stores full schemas for on-demand loading, plus a lightweight index for the system prompt. */\nexport function setExtendedToolsCache(tools: ToolDef[]): void {\n _extendedToolsCache = tools;\n // Pre-compute lightweight index: name + first sentence only (no schemas)\n _extendedToolsIndex = tools.map(t => ({\n name: t.name,\n description: t.description.split(\".\")[0],\n }));\n}\n\n/** Get full extended tools with schemas (for discover_tools handler) */\nexport function getExtendedToolsCache(): ToolDef[] {\n return _extendedToolsCache;\n}\n\n/** Get lightweight extended tools index — name + short description only (for system prompt).\n * Avoids serializing full schemas into the prompt. */\nexport function getExtendedToolsIndex(): Array<{ name: string; description: string }> {\n return _extendedToolsIndex;\n}\n\n/**\n * Get full tool schemas for specific tool names from the extended tools cache.\n * Used by the agent loop to inject discovered tool schemas into the active tool set.\n * Returns only tools that exist in the cache; unknown names are silently skipped.\n */\nexport function getFullToolSchemas(toolNames: string[]): ToolDef[] {\n if (!toolNames.length || !_extendedToolsCache.length) return [];\n const nameSet = new Set(toolNames);\n return _extendedToolsCache.filter(t => nameSet.has(t.name));\n}\n\n// Tool category heuristics — maps tool names to categories for category-based discovery\nconst TOOL_CATEGORIES: Record<string, string> = {\n // Business Data\n inventory: \"business\", purchase_orders: \"business\", transfers: \"business\",\n products: \"business\", collections: \"business\", customers: \"business\",\n orders: \"business\", analytics: \"business\", locations: \"business\",\n suppliers: \"business\", store: \"business\", storefront: \"business\",\n // Communication\n email: \"communication\", documents: \"communication\",\n // Operations\n alerts: \"operations\", audit_trail: \"operations\", workflows: \"operations\",\n telemetry: \"operations\",\n // Media & AI\n voice: \"media\", image_gen: \"media\", video_gen: \"media\", remove_bg: \"media\", media: \"media\",\n llm: \"ai\", embeddings: \"ai\", creations: \"media\",\n // Platform\n web_search: \"platform\", browser: \"platform\", discovery: \"platform\",\n api_keys: \"platform\", api_docs: \"platform\",\n // Security\n kali: \"security\", local_agent: \"platform\",\n // Advertising\n meta_ads: \"advertising\",\n // Data\n enrichment: \"data\",\n};\n\nasync function handleDiscoverTools(\n sb: SupabaseClient,\n args: Record<string, unknown>,\n): Promise<{ success: boolean; data?: unknown; error?: string }> {\n const names = args.names as string[] | undefined;\n const category = args.category as string | undefined;\n const refresh = args.refresh as boolean | undefined;\n\n // Force reload from DB if refresh requested — busts the 60s cache\n if (refresh) {\n try {\n const freshResult = await loadTools(sb, true);\n setExtendedToolsCache(freshResult.extended);\n } catch {\n // If refresh fails, continue with stale cache — better than erroring\n }\n }\n\n if (!names?.length && !category) {\n return { success: false, error: \"Provide 'names' (array of tool names) or 'category' to discover tools.\" };\n }\n\n let matching: ToolDef[] = [];\n\n if (names?.length) {\n const nameSet = new Set(names);\n matching = _extendedToolsCache.filter(t => nameSet.has(t.name));\n }\n\n if (category) {\n const cat = category.toLowerCase();\n const categoryTools = _extendedToolsCache.filter(t => TOOL_CATEGORIES[t.name] === cat);\n // Merge without duplicates\n const existingNames = new Set(matching.map(t => t.name));\n for (const t of categoryTools) {\n if (!existingNames.has(t.name)) matching.push(t);\n }\n }\n\n if (matching.length === 0) {\n const available = _extendedToolsCache.map(t => t.name).join(\", \");\n return { success: false, error: `No matching extended tools found. Available: ${available}` };\n }\n\n return {\n success: true,\n data: {\n tools: matching.map(t => ({ name: t.name, description: t.description, input_schema: t.input_schema })),\n count: matching.length,\n refreshed: !!refresh,\n },\n };\n}\n\n// ============================================================================\n// USER TOOL EXECUTOR — handles RPC, HTTP, SQL execution types\n// ============================================================================\n\nasync function executeUserTool(\n supabase: SupabaseClient,\n userTool: UserToolRow,\n args: Record<string, unknown>,\n storeId: string,\n agentId?: string,\n conversationId?: string,\n): Promise<{ success: boolean; data?: unknown; error?: string }> {\n const timeout = userTool.max_execution_time_ms || 5000;\n\n if (userTool.execution_type === \"http\") {\n return executeHTTPUserTool(supabase, userTool, args, storeId, timeout);\n }\n\n try {\n const { data, error } = await supabase.rpc(\"execute_user_tool\", {\n p_tool_id: userTool.id,\n p_store_id: storeId,\n p_args: args,\n p_agent_id: agentId || null,\n p_conversation_id: conversationId || null,\n });\n\n if (error) return { success: false, error: error.message };\n\n const result = data as { success: boolean; data?: unknown; error?: string; pending_approval?: boolean; execution_id?: string; message?: string };\n\n if (result.pending_approval) {\n return { success: false, error: `Tool requires approval. Execution ID: ${result.execution_id}. ${result.message}` };\n }\n\n if (result.success && result.data && (result.data as any).execute_sql) {\n return executeSQLUserTool(supabase, result.data as any, args, storeId);\n }\n\n return result.success\n ? { success: true, data: result.data }\n : { success: false, error: result.error || \"Unknown error\" };\n } catch (err) {\n return { success: false, error: sanitizeError(err) };\n }\n}\n\nasync function executeHTTPUserTool(\n supabase: SupabaseClient,\n userTool: UserToolRow,\n args: Record<string, unknown>,\n storeId: string,\n timeout: number,\n): Promise<{ success: boolean; data?: unknown; error?: string }> {\n const config = userTool.http_config;\n if (!config || !(config as any).url) {\n return { success: false, error: \"HTTP tool has no URL configured\" };\n }\n\n const httpCfg = config as { url: string; method?: string; headers?: Record<string, string>; body_template?: Record<string, unknown> };\n\n let url = httpCfg.url;\n let headers: Record<string, string> = { ...(httpCfg.headers || {}) };\n\n // Collect secret names referenced in the URL, headers, and body template\n const configStr = JSON.stringify({ url: httpCfg.url, headers: httpCfg.headers, body: httpCfg.body_template });\n const secretRefs = [...configStr.matchAll(/\\{\\{secret:(\\w+)\\}\\}/g)].map(m => m[1]);\n\n // Decrypt each referenced secret via RPC (consistent with all other handlers)\n const secretMap = new Map<string, string>();\n await Promise.all(\n [...new Set(secretRefs)].map(async (name) => {\n try {\n const { data } = await supabase.rpc(\"decrypt_secret\", { p_name: name, p_store_id: storeId });\n if (data) secretMap.set(name, data as string);\n } catch { /* secret not found — will remain as {{secret:NAME}} placeholder */ }\n }),\n );\n\n const resolveSecrets = (text: string): string => {\n return text.replace(/\\{\\{secret:(\\w+)\\}\\}/g, (_, name) => secretMap.get(name) || `{{secret:${name}}}`);\n };\n\n const resolveArgs = (text: string): string => {\n return text.replace(/\\{\\{(\\w+)\\}\\}/g, (_, name) => {\n if (name === \"secret\") return `{{${name}}}`;\n const val = args[name];\n return val !== undefined ? String(val) : `{{${name}}}`;\n });\n };\n\n const resolve = (text: string): string => resolveSecrets(resolveArgs(text));\n\n url = resolve(url);\n for (const [key, val] of Object.entries(headers)) {\n headers[key] = resolve(val);\n }\n\n let body: string | undefined;\n const method = (httpCfg.method || \"GET\").toUpperCase();\n if (method !== \"GET\" && method !== \"HEAD\") {\n if (httpCfg.body_template) {\n const resolvedBody: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(httpCfg.body_template)) {\n if (typeof val === \"string\") {\n resolvedBody[key] = resolve(val);\n } else {\n resolvedBody[key] = val;\n }\n }\n for (const [key, val] of Object.entries(args)) {\n if (!(key in resolvedBody)) {\n resolvedBody[key] = val;\n }\n }\n body = JSON.stringify(resolvedBody);\n } else {\n body = JSON.stringify(args);\n }\n if (!headers[\"Content-Type\"] && !headers[\"content-type\"]) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n }\n\n // P0 FIX: Use shared SSRF guard with DNS resolve-then-check (replaces inline regex)\n const ssrfError = await validateUrl(url);\n if (ssrfError) {\n return { success: false, error: `Blocked: ${ssrfError}` };\n }\n\n try {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeout);\n\n const resp = await fetch(url, { method, headers, body, signal: controller.signal });\n clearTimeout(timer);\n\n // Clear secrets from memory as soon as the request is sent\n secretMap.clear();\n\n const contentType = resp.headers.get(\"content-type\") || \"\";\n let data: unknown;\n if (contentType.includes(\"json\")) {\n data = await resp.json();\n } else {\n data = await resp.text();\n }\n\n if (!resp.ok) {\n return { success: false, error: `HTTP ${resp.status}: ${typeof data === \"string\" ? data.substring(0, 500) : JSON.stringify(data).substring(0, 500)}` };\n }\n\n return { success: true, data };\n } catch (err: any) {\n // Clear secrets from memory even on error\n secretMap.clear();\n if (err.name === \"AbortError\") {\n return { success: false, error: `HTTP request timed out after ${timeout}ms` };\n }\n return { success: false, error: sanitizeError(err) };\n }\n}\n\nasync function executeSQLUserTool(\n supabase: SupabaseClient,\n sqlConfig: { template: string; allowed_tables: string[]; is_read_only: boolean },\n args: Record<string, unknown>,\n storeId: string,\n): Promise<{ success: boolean; data?: unknown; error?: string }> {\n if (!sqlConfig.is_read_only) {\n return { success: false, error: \"Write SQL tools are not supported in server execution\" };\n }\n\n if (!sqlConfig.template) {\n return { success: false, error: \"No SQL template configured\" };\n }\n\n try {\n const { data, error } = await supabase.rpc(\"execute_safe_sql\", {\n p_sql: sqlConfig.template,\n p_params: args,\n p_store_id: storeId,\n p_allowed_tables: sqlConfig.allowed_tables || [],\n });\n\n if (error) return { success: false, error: error.message };\n\n if (data?.success) {\n return { success: true, data: data.data };\n }\n return { success: false, error: data?.error || \"SQL execution failed\" };\n } catch (err) {\n return { success: false, error: sanitizeError(err) };\n }\n}\n\n// ============================================================================\n// SUPPLY CHAIN — action aliasing (LLMs omit po_/transfer_ prefix)\n// ============================================================================\n\nasync function executeSupplyChain(\n supabase: SupabaseClient,\n args: Record<string, unknown>,\n storeId?: string,\n traceId?: string,\n userId?: string | null,\n userEmail?: string | null,\n source?: string,\n conversationId?: string,\n userToolRows?: UserToolRow[],\n agentId?: string,\n): Promise<{ success: boolean; data?: unknown; error?: string }> {\n let scAction = args.action as string || \"\";\n const PO_ALIASES: Record<string, string> = {\n create: \"po_create\", list: \"po_list\", get: \"po_get\",\n add_items: \"po_add_items\", update_items: \"po_update_items\", approve: \"po_approve\", mark_ordered: \"po_mark_ordered\",\n receive: \"po_receive\", cancel: \"po_cancel\",\n };\n if (PO_ALIASES[scAction]) scAction = PO_ALIASES[scAction];\n\n if (scAction === \"find_suppliers\") {\n return executeTool(supabase, \"suppliers\", { ...args, action: \"find_suppliers\" }, storeId, traceId, userId, userEmail, source, conversationId, userToolRows, agentId);\n }\n if (scAction.startsWith(\"po_\")) {\n return executeTool(supabase, \"purchase_orders\", { ...args, action: scAction.slice(3) }, storeId, traceId, userId, userEmail, source, conversationId, userToolRows, agentId);\n }\n if (scAction.startsWith(\"transfer_\")) {\n return executeTool(supabase, \"transfers\", { ...args, action: scAction.slice(9) }, storeId, traceId, userId, userEmail, source, conversationId, userToolRows, agentId);\n }\n return { success: false, error: `Unknown supply_chain action: ${scAction}. Use po_create, po_list, po_get, po_add_items, po_update_items, po_approve, po_receive, po_cancel, transfer_create, transfer_list, transfer_approve, transfer_ship, transfer_receive, transfer_cancel, find_suppliers.` };\n}\n\n// ============================================================================\n// TOOL EXECUTOR — dispatches via unified handler registry\n// ============================================================================\n\nexport async function executeTool(\n supabase: SupabaseClient,\n toolName: string,\n args: Record<string, unknown>,\n storeId?: string,\n traceId?: string,\n userId?: string | null,\n userEmail?: string | null,\n source?: string,\n conversationId?: string,\n userToolRows?: UserToolRow[],\n agentId?: string,\n onToolProgress?: ToolProgressCallback,\n /** Skip per-tool audit when called within a conversation — persistAgentTurn handles it */\n skipAudit?: boolean,\n): Promise<{ success: boolean; data?: unknown; error?: string }> {\n const startTime = Date.now();\n const action = args.action as string | undefined;\n let result: { success: boolean; data?: unknown; error?: string };\n\n // Handle supply_chain aliases (LLMs often omit po_/transfer_ prefix)\n if (toolName === \"supply_chain\") {\n return executeSupplyChain(supabase, args, storeId, traceId, userId, userEmail, source, conversationId, userToolRows, agentId);\n }\n\n // Look up handler from unified registry\n const entry = TOOL_HANDLERS[toolName];\n\n // Check store requirement from registry (not hardcoded)\n const requiresStore = entry ? entry.requiresStore : true;\n if (requiresStore && (!storeId || !/^[0-9a-fA-F]{8}-/.test(storeId))) {\n return { success: false, error: `store_id is required for ${toolName}. Ensure a store is selected.` };\n }\n\n // Permission enforcement — check agent flags before tool execution.\n // Skip for whale-code CLI: it's a developer tool with full access.\n // Agent permissions only apply to customer-facing surfaces (webchat, channels, workflows).\n if (agentId && source !== \"whale-code\") {\n const { data: agentFlags } = await supabase.from(\"ai_agent_config\")\n .select(\"can_query, can_modify\")\n .eq(\"id\", agentId).single();\n if (agentFlags) {\n // Read-only agent check — block ALL tool calls if can_query is false\n if (!agentFlags.can_query) {\n const readActions = [\"list\", \"get\", \"search\", \"query\", \"summary\", \"stats\", \"count\", \"by_location\", \"in_stock\", \"out_of_stock\", \"velocity\"];\n const action = args.action as string | undefined;\n if (action && readActions.includes(action)) {\n return { success: false, error: `Agent does not have query permission (can_query=false). Contact an admin.` };\n }\n }\n // Mutation check — already in system prompt but enforce at execution level\n if (!agentFlags.can_modify) {\n const writeActions = [\"create\", \"update\", \"delete\", \"upsert\", \"send\", \"approve\", \"cancel\", \"add\", \"remove\", \"set\", \"adjust\", \"transfer\"];\n const action = args.action as string | undefined;\n if (action && writeActions.some(wa => action.startsWith(wa))) {\n return { success: false, error: `Agent has read-only access (can_modify=false). Cannot perform \"${action}\".` };\n }\n }\n }\n }\n\n // User tool approval check — requires_approval enforced at execution level\n if (toolName.startsWith(\"user_tool__\") && userToolRows?.length) {\n const userTool = getUserToolByPrefixedName(userToolRows, toolName);\n if (userTool?.requires_approval) {\n return { success: false, error: `Tool \"${userTool.display_name}\" requires approval before execution. Use the workflow approval system to request permission.` };\n }\n }\n\n // Validate mutation args before dispatch — read-only actions pass through\n const validation = validateToolArgs(toolName, args);\n if (!validation.valid) {\n return { success: false, error: validation.error };\n }\n args = validation.data;\n\n const execStartMs = Date.now();\n try {\n let toolPromise: Promise<{ success: boolean; data?: unknown; error?: string }>;\n\n if (entry) {\n // Dispatch via unified handler registry — pass progress callback to handlers that support it\n const progressCb = entry.supportsProgress && onToolProgress\n ? (progress: unknown) => onToolProgress(toolName, progress)\n : undefined;\n toolPromise = entry.handler(supabase, args, storeId, progressCb);\n } else if (toolName.startsWith(\"user_tool__\") && userToolRows && storeId) {\n // Custom user tools\n const userTool = getUserToolByPrefixedName(userToolRows, toolName);\n if (userTool) {\n toolPromise = executeUserTool(supabase, userTool, args, storeId, agentId, conversationId);\n } else {\n toolPromise = Promise.resolve({ success: false, error: `Unknown user tool: ${toolName}` });\n }\n } else {\n toolPromise = Promise.resolve({ success: false, error: `Unknown tool: ${toolName}. Use the discover_tools action to see available tools.` });\n }\n\n const timeoutMs = entry?.timeout || DEFAULT_TIMEOUT;\n\n // FIX 7: Timeout cascade validation — warn if step timeout < tool timeout\n const stepTimeout = args._step_timeout_seconds as number | undefined;\n if (stepTimeout && stepTimeout * 1000 < timeoutMs) {\n console.warn(`[timeout-cascade] Step timeout (${stepTimeout}s) < tool timeout (${timeoutMs / 1000}s) for ${toolName}. Tool may outlive step.`);\n }\n\n result = await withTimeout(toolPromise, timeoutMs, toolName);\n } catch (err) {\n result = { success: false, error: sanitizeError(err) };\n }\n\n // Record execution metrics\n recordToolMetric(toolName, Date.now() - execStartMs, result.success);\n\n // Audit log — enriched with OTEL fields for distributed tracing\n // Skipped when tool is called within a conversation (SSE chat, channel agent, workflow)\n // because persistAgentTurn already logs the full conversation with tool details\n if (skipAudit) return result;\n try {\n const endTime = Date.now();\n // Compute payload sizes for observability\n const inputJson = JSON.stringify(args);\n const outputJson = result.data ? JSON.stringify(result.data) : \"\";\n const inputBytes = inputJson.length;\n const outputBytes = outputJson.length;\n\n const details: Record<string, unknown> = {\n source: source || \"fly_container\",\n args,\n // Keys that SwiftUI telemetry panel reads for rich display\n tool_input: args,\n input_bytes: inputBytes,\n output_bytes: outputBytes,\n };\n if (result.success && result.data) {\n details.result_summary = summarizeResult(toolName, action, result.data);\n // Store full result for rich telemetry display (capped at 50KB to prevent JSONB bloat)\n if (outputBytes <= 50_000) {\n details.tool_result = result.data;\n } else {\n details.tool_result = {\n _truncated: true,\n _type: Array.isArray(result.data) ? \"array\" : \"object\",\n _size: outputBytes,\n _count: Array.isArray(result.data) ? result.data.length : Object.keys(result.data as object).length,\n };\n }\n }\n if (result.error) {\n details.tool_error = result.error;\n const errorType = classifyErrorType(result.error);\n if (errorType) details.error_type = errorType;\n }\n const bytes = new Uint8Array(8);\n crypto.getRandomValues(bytes);\n const spanId = Array.from(bytes).map(b => b.toString(16).padStart(2, \"0\")).join(\"\");\n const auditRow: Record<string, unknown> = {\n action: `tool.${toolName}${action ? `.${action}` : \"\"}`,\n severity: result.success ? \"info\" : \"error\",\n store_id: storeId || null,\n resource_type: \"mcp_tool\",\n resource_id: toolName,\n request_id: traceId || null,\n conversation_id: conversationId || null,\n source: source || \"fly_container\",\n details,\n error_message: result.error || null,\n error_type: classifyErrorType(result.error) || undefined,\n duration_ms: endTime - startTime,\n user_id: userId || null,\n user_email: userEmail || null,\n input_bytes: inputBytes,\n output_bytes: outputBytes,\n // OTEL fields\n trace_id: traceId || null,\n span_id: spanId,\n span_kind: \"INTERNAL\",\n service_name: \"agent-server\",\n status_code: result.success ? \"OK\" : \"ERROR\",\n start_time: new Date(startTime).toISOString(),\n end_time: new Date(endTime).toISOString(),\n };\n queueSpan(auditRowToSpan(auditRow));\n } catch (err) {\n console.error(\"[audit] exception:\", err);\n }\n\n return result;\n}\n\n// ============================================================================\n// AGENT LOADER\n// ============================================================================\n\nexport async function loadAgentConfig(supabase: SupabaseClient, agentId: string, storeId?: string): Promise<AgentConfig | null> {\n // storeId is required for tenant isolation — only omit for internal/migration callers\n let query = supabase\n .from(\"ai_agent_config\")\n .select(\"*\")\n .eq(\"id\", agentId);\n\n // Filter by store_id for tenant isolation, but also allow platform agents (store_id IS NULL)\n if (storeId) {\n query = query.or(`store_id.eq.${storeId},store_id.is.null`);\n }\n\n const { data, error } = await query.single();\n\n if (error || !data) return null;\n return data as AgentConfig;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -89,6 +89,16 @@ const poAddItemsSchema = z.object({
89
89
  unit_cost: nonNegativeNumber.optional()
90
90
  })).min(1)
91
91
  });
92
+ const poUpdateItemsSchema = z.object({
93
+ action: z.literal("update_items"),
94
+ purchase_order_id: uuid,
95
+ items: z.array(z.object({
96
+ product_id: uuid,
97
+ quantity: positiveNumber,
98
+ unit_price: nonNegativeNumber.optional(),
99
+ unit_cost: nonNegativeNumber.optional()
100
+ })).min(1)
101
+ });
92
102
  const poApproveSchema = z.object({
93
103
  action: z.literal("approve"),
94
104
  purchase_order_id: uuid
@@ -219,6 +229,7 @@ const inventorySchemas = {
219
229
  const purchaseOrderSchemas = {
220
230
  create: poCreateSchema,
221
231
  add_items: poAddItemsSchema,
232
+ update_items: poUpdateItemsSchema,
222
233
  approve: poApproveSchema,
223
234
  mark_ordered: poApproveSchema,
224
235
  receive: poReceiveSchema,
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","names":["z","uuid","string","positiveNumber","number","positive","nonNegativeNumber","min","inventoryAdjustSchema","object","action","literal","product_id","location_id","adjustment","reason","optional","inventorySetSchema","quantity","inventoryTransferSchema","from_location_id","to_location_id","inventoryBulkSetSchema","items","array","inventoryBulkAdjustSchema","inventoryBulkClearSchema","poCreateSchema","supplier_id","unit_price","unit_cost","notes","expected_delivery_date","po_type","poAddItemsSchema","purchase_order_id","poApproveSchema","poReceiveSchema","poCancelSchema","transferCreateSchema","source_location_id","destination_location_id","refine","d","message","path","transferApproveSchema","transfer_id","transferShipSchema","union","transferReceiveSchema","transferCancelSchema","customerCreateSchema","first_name","last_name","email","phone","date_of_birth","email_consent","boolean","sms_consent","street_address","city","state","postal_code","drivers_license_number","medical_card_number","medical_card_expiry","customerUpdateSchema","customer_id","status","push_consent","loyalty_points","loyalty_tier","id_verified","is_wholesale_approved","wholesale_tier","wholesale_business_name","wholesale_license_number","wholesale_tax_id","customerMergeSchema","primary_customer_id","secondary_customer_id","productMergeSchema","primary_product_id","secondary_product_id","productSchemas","merge","inventorySchemas","adjust","set","transfer","bulk_set","bulk_adjust","bulk_clear","purchaseOrderSchemas","create","add_items","approve","mark_ordered","receive","cancel","transferSchemas","ship","mark_in_transit","complete","customerSchemas","update","toolSchemaRegistry","products","inventory","purchase_orders","transfers","customers","resolveSupplyChainAction","startsWith","tool","slice","validateToolArgs","toolName","args","valid","data","schemaMap","resolved","schema","innerArgs","runSchema","parseTarget","originalArgs","result","safeParse","success","issues","error","map","i","join","parsed"],"sources":["../../src/server/validation.ts"],"sourcesContent":["/**\n * Zod input validation for server tool dispatch.\n *\n * Only mutation actions are validated — reads (find, get, list, summary, etc.)\n * pass through without schema checks. This prevents malformed AI tool calls\n * from crashing handlers with TypeErrors on unchecked `as` casts.\n */\n\nimport { z } from \"zod\";\n\n// ============================================================================\n// SHARED PRIMITIVES\n// ============================================================================\n\nconst uuid = z.string().uuid();\nconst positiveNumber = z.number().positive();\nconst nonNegativeNumber = z.number().min(0);\n\n// ============================================================================\n// INVENTORY MUTATIONS\n// ============================================================================\n\nconst inventoryAdjustSchema = z.object({\n action: z.literal(\"adjust\"),\n product_id: uuid,\n location_id: uuid,\n adjustment: z.number(),\n reason: z.string().optional(),\n});\n\nconst inventorySetSchema = z.object({\n action: z.literal(\"set\"),\n product_id: uuid,\n location_id: uuid,\n quantity: nonNegativeNumber,\n});\n\nconst inventoryTransferSchema = z.object({\n action: z.literal(\"transfer\"),\n product_id: uuid,\n from_location_id: uuid,\n to_location_id: uuid,\n quantity: positiveNumber,\n});\n\nconst inventoryBulkSetSchema = z.object({\n action: z.literal(\"bulk_set\"),\n items: z.array(z.object({\n product_id: uuid,\n location_id: uuid,\n quantity: nonNegativeNumber,\n })).min(1),\n});\n\nconst inventoryBulkAdjustSchema = z.object({\n action: z.literal(\"bulk_adjust\"),\n items: z.array(z.object({\n product_id: uuid,\n location_id: uuid,\n adjustment: z.number(),\n })).min(1),\n});\n\nconst inventoryBulkClearSchema = z.object({\n action: z.literal(\"bulk_clear\"),\n location_id: uuid,\n});\n\n// ============================================================================\n// SUPPLY CHAIN — PURCHASE ORDERS\n// ============================================================================\n\nconst poCreateSchema = z.object({\n action: z.literal(\"create\"),\n supplier_id: uuid,\n location_id: uuid,\n items: z.array(z.object({\n product_id: uuid,\n quantity: positiveNumber,\n unit_price: nonNegativeNumber.optional(),\n unit_cost: nonNegativeNumber.optional(),\n })).min(1).optional(),\n notes: z.string().optional(),\n expected_delivery_date: z.string().optional(),\n po_type: z.string().optional(),\n});\n\nconst poAddItemsSchema = z.object({\n action: z.literal(\"add_items\"),\n purchase_order_id: uuid,\n items: z.array(z.object({\n product_id: uuid,\n quantity: positiveNumber,\n unit_price: nonNegativeNumber.optional(),\n unit_cost: nonNegativeNumber.optional(),\n })).min(1),\n});\n\nconst poApproveSchema = z.object({\n action: z.literal(\"approve\"),\n purchase_order_id: uuid,\n});\n\nconst poReceiveSchema = z.object({\n action: z.literal(\"receive\"),\n purchase_order_id: uuid,\n});\n\nconst poCancelSchema = z.object({\n action: z.literal(\"cancel\"),\n purchase_order_id: uuid,\n});\n\n// ============================================================================\n// SUPPLY CHAIN — TRANSFERS\n// ============================================================================\n\nconst transferCreateSchema = z.object({\n action: z.literal(\"create\"),\n from_location_id: uuid.optional(),\n source_location_id: uuid.optional(),\n to_location_id: uuid.optional(),\n destination_location_id: uuid.optional(),\n items: z.array(z.object({\n product_id: uuid,\n quantity: positiveNumber,\n })).min(1).optional(),\n notes: z.string().optional(),\n}).refine(\n (d) => d.from_location_id || d.source_location_id,\n { message: \"from_location_id or source_location_id is required\", path: [\"from_location_id\"] }\n).refine(\n (d) => d.to_location_id || d.destination_location_id,\n { message: \"to_location_id or destination_location_id is required\", path: [\"to_location_id\"] }\n);\n\nconst transferApproveSchema = z.object({\n action: z.literal(\"approve\"),\n transfer_id: uuid,\n});\n\nconst transferShipSchema = z.object({\n action: z.union([z.literal(\"ship\"), z.literal(\"mark_in_transit\")]),\n transfer_id: uuid,\n});\n\nconst transferReceiveSchema = z.object({\n action: z.union([z.literal(\"receive\"), z.literal(\"complete\")]),\n transfer_id: uuid,\n});\n\nconst transferCancelSchema = z.object({\n action: z.literal(\"cancel\"),\n transfer_id: uuid,\n});\n\n// ============================================================================\n// CUSTOMERS\n// ============================================================================\n\nconst customerCreateSchema = z.object({\n action: z.literal(\"create\"),\n first_name: z.string().min(1),\n last_name: z.string().min(1),\n email: z.string().email().optional(),\n phone: z.string().optional(),\n date_of_birth: z.string().optional(),\n email_consent: z.boolean().optional(),\n sms_consent: z.boolean().optional(),\n street_address: z.string().optional(),\n city: z.string().optional(),\n state: z.string().optional(),\n postal_code: z.string().optional(),\n drivers_license_number: z.string().optional(),\n medical_card_number: z.string().optional(),\n medical_card_expiry: z.string().optional(),\n});\n\nconst customerUpdateSchema = z.object({\n action: z.literal(\"update\"),\n customer_id: uuid,\n first_name: z.string().min(1).optional(),\n last_name: z.string().min(1).optional(),\n email: z.string().email().optional(),\n phone: z.string().optional(),\n date_of_birth: z.string().optional(),\n status: z.string().optional(),\n email_consent: z.boolean().optional(),\n sms_consent: z.boolean().optional(),\n push_consent: z.boolean().optional(),\n loyalty_points: z.number().optional(),\n loyalty_tier: z.string().optional(),\n street_address: z.string().optional(),\n city: z.string().optional(),\n state: z.string().optional(),\n postal_code: z.string().optional(),\n drivers_license_number: z.string().optional(),\n id_verified: z.boolean().optional(),\n medical_card_number: z.string().optional(),\n medical_card_expiry: z.string().optional(),\n is_wholesale_approved: z.boolean().optional(),\n wholesale_tier: z.string().optional(),\n wholesale_business_name: z.string().optional(),\n wholesale_license_number: z.string().optional(),\n wholesale_tax_id: z.string().optional(),\n});\n\nconst customerMergeSchema = z.object({\n action: z.literal(\"merge\"),\n primary_customer_id: uuid,\n secondary_customer_id: uuid,\n});\n\nconst productMergeSchema = z.object({\n action: z.literal(\"merge\"),\n primary_product_id: uuid,\n secondary_product_id: uuid,\n});\n\n// ============================================================================\n// SCHEMA REGISTRY — maps (toolName, action) → Zod schema\n// ============================================================================\n\ntype SchemaMap = Record<string, z.ZodTypeAny>;\n\nconst productSchemas: SchemaMap = {\n merge: productMergeSchema,\n};\n\nconst inventorySchemas: SchemaMap = {\n adjust: inventoryAdjustSchema,\n set: inventorySetSchema,\n transfer: inventoryTransferSchema,\n bulk_set: inventoryBulkSetSchema,\n bulk_adjust: inventoryBulkAdjustSchema,\n bulk_clear: inventoryBulkClearSchema,\n};\n\nconst purchaseOrderSchemas: SchemaMap = {\n create: poCreateSchema,\n add_items: poAddItemsSchema,\n approve: poApproveSchema,\n mark_ordered: poApproveSchema,\n receive: poReceiveSchema,\n cancel: poCancelSchema,\n};\n\nconst transferSchemas: SchemaMap = {\n create: transferCreateSchema,\n approve: transferApproveSchema,\n ship: transferShipSchema,\n mark_in_transit: transferShipSchema,\n receive: transferReceiveSchema,\n complete: transferReceiveSchema,\n cancel: transferCancelSchema,\n};\n\nconst customerSchemas: SchemaMap = {\n create: customerCreateSchema,\n update: customerUpdateSchema,\n merge: customerMergeSchema,\n};\n\n/**\n * Top-level registry keyed by tool name.\n * Only tools with mutation actions are listed.\n * Read-only tools (analytics, orders.find, etc.) are intentionally absent — passthrough.\n */\nconst toolSchemaRegistry: Record<string, SchemaMap> = {\n products: productSchemas,\n inventory: inventorySchemas,\n purchase_orders: purchaseOrderSchemas,\n transfers: transferSchemas,\n customers: customerSchemas,\n};\n\n// ============================================================================\n// SUPPLY_CHAIN META-TOOL RESOLUTION\n// ============================================================================\n\n/**\n * The \"supply_chain\" tool dispatches by action prefix:\n * po_create → purchase_orders / create\n * transfer_create → transfers / create\n *\n * This helper resolves supply_chain actions to the underlying tool + action.\n */\nfunction resolveSupplyChainAction(action: string): { tool: string; action: string } | null {\n if (action.startsWith(\"po_\")) return { tool: \"purchase_orders\", action: action.slice(3) };\n if (action.startsWith(\"transfer_\")) return { tool: \"transfers\", action: action.slice(9) };\n return null;\n}\n\n// ============================================================================\n// PUBLIC API\n// ============================================================================\n\nexport type ValidationResult =\n | { valid: true; data: Record<string, unknown> }\n | { valid: false; error: string };\n\n/**\n * Validate tool args before dispatch to handler.\n *\n * Returns `{ valid: true, data }` with parsed (coerced) data on success,\n * or `{ valid: false, error }` with a human-readable message on failure.\n *\n * If no schema is registered for the (tool, action) pair, returns passthrough\n * with `{ valid: true, data: args }` — no validation, no blocking.\n */\nexport function validateToolArgs(\n toolName: string,\n args: Record<string, unknown>,\n): ValidationResult {\n const action = args.action as string | undefined;\n if (!action) {\n // No action param = passthrough (some tools don't use action)\n return { valid: true, data: args };\n }\n\n let schemaMap: SchemaMap | undefined;\n\n if (toolName === \"supply_chain\") {\n const resolved = resolveSupplyChainAction(action);\n if (resolved) {\n schemaMap = toolSchemaRegistry[resolved.tool];\n // Look up by the resolved action (e.g. \"create\" not \"po_create\")\n const schema = schemaMap?.[resolved.action];\n if (!schema) return { valid: true, data: args };\n // For supply_chain, we validate using the inner action name\n // Rebuild args with the inner action for schema parsing\n const innerArgs = { ...args, action: resolved.action };\n return runSchema(schema, innerArgs, args);\n }\n // Unknown supply_chain action (e.g. find_suppliers) — passthrough\n return { valid: true, data: args };\n }\n\n schemaMap = toolSchemaRegistry[toolName];\n if (!schemaMap) return { valid: true, data: args };\n\n const schema = schemaMap[action];\n if (!schema) return { valid: true, data: args };\n\n return runSchema(schema, args, args);\n}\n\n/**\n * Parse args against schema. On success, merge parsed data back onto original\n * args so extra fields (not in schema) are preserved for the handler.\n */\nfunction runSchema(\n schema: z.ZodTypeAny,\n parseTarget: Record<string, unknown>,\n originalArgs: Record<string, unknown>,\n): ValidationResult {\n const result = schema.safeParse(parseTarget);\n if (!result.success) {\n const issues = result.error.issues.map(\n (i) => `${i.path.join(\".\")}: ${i.message}`\n );\n return { valid: false, error: `Validation failed: ${issues.join(\", \")}` };\n }\n // Merge parsed data back with original args so extra passthrough fields survive\n const parsed = result.data as Record<string, unknown>;\n return { valid: true, data: { ...originalArgs, ...parsed } };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"validation.js","names":["z","uuid","string","positiveNumber","number","positive","nonNegativeNumber","min","inventoryAdjustSchema","object","action","literal","product_id","location_id","adjustment","reason","optional","inventorySetSchema","quantity","inventoryTransferSchema","from_location_id","to_location_id","inventoryBulkSetSchema","items","array","inventoryBulkAdjustSchema","inventoryBulkClearSchema","poCreateSchema","supplier_id","unit_price","unit_cost","notes","expected_delivery_date","po_type","poAddItemsSchema","purchase_order_id","poUpdateItemsSchema","poApproveSchema","poReceiveSchema","poCancelSchema","transferCreateSchema","source_location_id","destination_location_id","refine","d","message","path","transferApproveSchema","transfer_id","transferShipSchema","union","transferReceiveSchema","transferCancelSchema","customerCreateSchema","first_name","last_name","email","phone","date_of_birth","email_consent","boolean","sms_consent","street_address","city","state","postal_code","drivers_license_number","medical_card_number","medical_card_expiry","customerUpdateSchema","customer_id","status","push_consent","loyalty_points","loyalty_tier","id_verified","is_wholesale_approved","wholesale_tier","wholesale_business_name","wholesale_license_number","wholesale_tax_id","customerMergeSchema","primary_customer_id","secondary_customer_id","productMergeSchema","primary_product_id","secondary_product_id","productSchemas","merge","inventorySchemas","adjust","set","transfer","bulk_set","bulk_adjust","bulk_clear","purchaseOrderSchemas","create","add_items","update_items","approve","mark_ordered","receive","cancel","transferSchemas","ship","mark_in_transit","complete","customerSchemas","update","toolSchemaRegistry","products","inventory","purchase_orders","transfers","customers","resolveSupplyChainAction","startsWith","tool","slice","validateToolArgs","toolName","args","valid","data","schemaMap","resolved","schema","innerArgs","runSchema","parseTarget","originalArgs","result","safeParse","success","issues","error","map","i","join","parsed"],"sources":["../../src/server/validation.ts"],"sourcesContent":["/**\n * Zod input validation for server tool dispatch.\n *\n * Only mutation actions are validated — reads (find, get, list, summary, etc.)\n * pass through without schema checks. This prevents malformed AI tool calls\n * from crashing handlers with TypeErrors on unchecked `as` casts.\n */\n\nimport { z } from \"zod\";\n\n// ============================================================================\n// SHARED PRIMITIVES\n// ============================================================================\n\nconst uuid = z.string().uuid();\nconst positiveNumber = z.number().positive();\nconst nonNegativeNumber = z.number().min(0);\n\n// ============================================================================\n// INVENTORY MUTATIONS\n// ============================================================================\n\nconst inventoryAdjustSchema = z.object({\n action: z.literal(\"adjust\"),\n product_id: uuid,\n location_id: uuid,\n adjustment: z.number(),\n reason: z.string().optional(),\n});\n\nconst inventorySetSchema = z.object({\n action: z.literal(\"set\"),\n product_id: uuid,\n location_id: uuid,\n quantity: nonNegativeNumber,\n});\n\nconst inventoryTransferSchema = z.object({\n action: z.literal(\"transfer\"),\n product_id: uuid,\n from_location_id: uuid,\n to_location_id: uuid,\n quantity: positiveNumber,\n});\n\nconst inventoryBulkSetSchema = z.object({\n action: z.literal(\"bulk_set\"),\n items: z.array(z.object({\n product_id: uuid,\n location_id: uuid,\n quantity: nonNegativeNumber,\n })).min(1),\n});\n\nconst inventoryBulkAdjustSchema = z.object({\n action: z.literal(\"bulk_adjust\"),\n items: z.array(z.object({\n product_id: uuid,\n location_id: uuid,\n adjustment: z.number(),\n })).min(1),\n});\n\nconst inventoryBulkClearSchema = z.object({\n action: z.literal(\"bulk_clear\"),\n location_id: uuid,\n});\n\n// ============================================================================\n// SUPPLY CHAIN — PURCHASE ORDERS\n// ============================================================================\n\nconst poCreateSchema = z.object({\n action: z.literal(\"create\"),\n supplier_id: uuid,\n location_id: uuid,\n items: z.array(z.object({\n product_id: uuid,\n quantity: positiveNumber,\n unit_price: nonNegativeNumber.optional(),\n unit_cost: nonNegativeNumber.optional(),\n })).min(1).optional(),\n notes: z.string().optional(),\n expected_delivery_date: z.string().optional(),\n po_type: z.string().optional(),\n});\n\nconst poAddItemsSchema = z.object({\n action: z.literal(\"add_items\"),\n purchase_order_id: uuid,\n items: z.array(z.object({\n product_id: uuid,\n quantity: positiveNumber,\n unit_price: nonNegativeNumber.optional(),\n unit_cost: nonNegativeNumber.optional(),\n })).min(1),\n});\n\nconst poUpdateItemsSchema = z.object({\n action: z.literal(\"update_items\"),\n purchase_order_id: uuid,\n items: z.array(z.object({\n product_id: uuid,\n quantity: positiveNumber,\n unit_price: nonNegativeNumber.optional(),\n unit_cost: nonNegativeNumber.optional(),\n })).min(1),\n});\n\nconst poApproveSchema = z.object({\n action: z.literal(\"approve\"),\n purchase_order_id: uuid,\n});\n\nconst poReceiveSchema = z.object({\n action: z.literal(\"receive\"),\n purchase_order_id: uuid,\n});\n\nconst poCancelSchema = z.object({\n action: z.literal(\"cancel\"),\n purchase_order_id: uuid,\n});\n\n// ============================================================================\n// SUPPLY CHAIN — TRANSFERS\n// ============================================================================\n\nconst transferCreateSchema = z.object({\n action: z.literal(\"create\"),\n from_location_id: uuid.optional(),\n source_location_id: uuid.optional(),\n to_location_id: uuid.optional(),\n destination_location_id: uuid.optional(),\n items: z.array(z.object({\n product_id: uuid,\n quantity: positiveNumber,\n })).min(1).optional(),\n notes: z.string().optional(),\n}).refine(\n (d) => d.from_location_id || d.source_location_id,\n { message: \"from_location_id or source_location_id is required\", path: [\"from_location_id\"] }\n).refine(\n (d) => d.to_location_id || d.destination_location_id,\n { message: \"to_location_id or destination_location_id is required\", path: [\"to_location_id\"] }\n);\n\nconst transferApproveSchema = z.object({\n action: z.literal(\"approve\"),\n transfer_id: uuid,\n});\n\nconst transferShipSchema = z.object({\n action: z.union([z.literal(\"ship\"), z.literal(\"mark_in_transit\")]),\n transfer_id: uuid,\n});\n\nconst transferReceiveSchema = z.object({\n action: z.union([z.literal(\"receive\"), z.literal(\"complete\")]),\n transfer_id: uuid,\n});\n\nconst transferCancelSchema = z.object({\n action: z.literal(\"cancel\"),\n transfer_id: uuid,\n});\n\n// ============================================================================\n// CUSTOMERS\n// ============================================================================\n\nconst customerCreateSchema = z.object({\n action: z.literal(\"create\"),\n first_name: z.string().min(1),\n last_name: z.string().min(1),\n email: z.string().email().optional(),\n phone: z.string().optional(),\n date_of_birth: z.string().optional(),\n email_consent: z.boolean().optional(),\n sms_consent: z.boolean().optional(),\n street_address: z.string().optional(),\n city: z.string().optional(),\n state: z.string().optional(),\n postal_code: z.string().optional(),\n drivers_license_number: z.string().optional(),\n medical_card_number: z.string().optional(),\n medical_card_expiry: z.string().optional(),\n});\n\nconst customerUpdateSchema = z.object({\n action: z.literal(\"update\"),\n customer_id: uuid,\n first_name: z.string().min(1).optional(),\n last_name: z.string().min(1).optional(),\n email: z.string().email().optional(),\n phone: z.string().optional(),\n date_of_birth: z.string().optional(),\n status: z.string().optional(),\n email_consent: z.boolean().optional(),\n sms_consent: z.boolean().optional(),\n push_consent: z.boolean().optional(),\n loyalty_points: z.number().optional(),\n loyalty_tier: z.string().optional(),\n street_address: z.string().optional(),\n city: z.string().optional(),\n state: z.string().optional(),\n postal_code: z.string().optional(),\n drivers_license_number: z.string().optional(),\n id_verified: z.boolean().optional(),\n medical_card_number: z.string().optional(),\n medical_card_expiry: z.string().optional(),\n is_wholesale_approved: z.boolean().optional(),\n wholesale_tier: z.string().optional(),\n wholesale_business_name: z.string().optional(),\n wholesale_license_number: z.string().optional(),\n wholesale_tax_id: z.string().optional(),\n});\n\nconst customerMergeSchema = z.object({\n action: z.literal(\"merge\"),\n primary_customer_id: uuid,\n secondary_customer_id: uuid,\n});\n\nconst productMergeSchema = z.object({\n action: z.literal(\"merge\"),\n primary_product_id: uuid,\n secondary_product_id: uuid,\n});\n\n// ============================================================================\n// SCHEMA REGISTRY — maps (toolName, action) → Zod schema\n// ============================================================================\n\ntype SchemaMap = Record<string, z.ZodTypeAny>;\n\nconst productSchemas: SchemaMap = {\n merge: productMergeSchema,\n};\n\nconst inventorySchemas: SchemaMap = {\n adjust: inventoryAdjustSchema,\n set: inventorySetSchema,\n transfer: inventoryTransferSchema,\n bulk_set: inventoryBulkSetSchema,\n bulk_adjust: inventoryBulkAdjustSchema,\n bulk_clear: inventoryBulkClearSchema,\n};\n\nconst purchaseOrderSchemas: SchemaMap = {\n create: poCreateSchema,\n add_items: poAddItemsSchema,\n update_items: poUpdateItemsSchema,\n approve: poApproveSchema,\n mark_ordered: poApproveSchema,\n receive: poReceiveSchema,\n cancel: poCancelSchema,\n};\n\nconst transferSchemas: SchemaMap = {\n create: transferCreateSchema,\n approve: transferApproveSchema,\n ship: transferShipSchema,\n mark_in_transit: transferShipSchema,\n receive: transferReceiveSchema,\n complete: transferReceiveSchema,\n cancel: transferCancelSchema,\n};\n\nconst customerSchemas: SchemaMap = {\n create: customerCreateSchema,\n update: customerUpdateSchema,\n merge: customerMergeSchema,\n};\n\n/**\n * Top-level registry keyed by tool name.\n * Only tools with mutation actions are listed.\n * Read-only tools (analytics, orders.find, etc.) are intentionally absent — passthrough.\n */\nconst toolSchemaRegistry: Record<string, SchemaMap> = {\n products: productSchemas,\n inventory: inventorySchemas,\n purchase_orders: purchaseOrderSchemas,\n transfers: transferSchemas,\n customers: customerSchemas,\n};\n\n// ============================================================================\n// SUPPLY_CHAIN META-TOOL RESOLUTION\n// ============================================================================\n\n/**\n * The \"supply_chain\" tool dispatches by action prefix:\n * po_create → purchase_orders / create\n * transfer_create → transfers / create\n *\n * This helper resolves supply_chain actions to the underlying tool + action.\n */\nfunction resolveSupplyChainAction(action: string): { tool: string; action: string } | null {\n if (action.startsWith(\"po_\")) return { tool: \"purchase_orders\", action: action.slice(3) };\n if (action.startsWith(\"transfer_\")) return { tool: \"transfers\", action: action.slice(9) };\n return null;\n}\n\n// ============================================================================\n// PUBLIC API\n// ============================================================================\n\nexport type ValidationResult =\n | { valid: true; data: Record<string, unknown> }\n | { valid: false; error: string };\n\n/**\n * Validate tool args before dispatch to handler.\n *\n * Returns `{ valid: true, data }` with parsed (coerced) data on success,\n * or `{ valid: false, error }` with a human-readable message on failure.\n *\n * If no schema is registered for the (tool, action) pair, returns passthrough\n * with `{ valid: true, data: args }` — no validation, no blocking.\n */\nexport function validateToolArgs(\n toolName: string,\n args: Record<string, unknown>,\n): ValidationResult {\n const action = args.action as string | undefined;\n if (!action) {\n // No action param = passthrough (some tools don't use action)\n return { valid: true, data: args };\n }\n\n let schemaMap: SchemaMap | undefined;\n\n if (toolName === \"supply_chain\") {\n const resolved = resolveSupplyChainAction(action);\n if (resolved) {\n schemaMap = toolSchemaRegistry[resolved.tool];\n // Look up by the resolved action (e.g. \"create\" not \"po_create\")\n const schema = schemaMap?.[resolved.action];\n if (!schema) return { valid: true, data: args };\n // For supply_chain, we validate using the inner action name\n // Rebuild args with the inner action for schema parsing\n const innerArgs = { ...args, action: resolved.action };\n return runSchema(schema, innerArgs, args);\n }\n // Unknown supply_chain action (e.g. find_suppliers) — passthrough\n return { valid: true, data: args };\n }\n\n schemaMap = toolSchemaRegistry[toolName];\n if (!schemaMap) return { valid: true, data: args };\n\n const schema = schemaMap[action];\n if (!schema) return { valid: true, data: args };\n\n return runSchema(schema, args, args);\n}\n\n/**\n * Parse args against schema. On success, merge parsed data back onto original\n * args so extra fields (not in schema) are preserved for the handler.\n */\nfunction runSchema(\n schema: z.ZodTypeAny,\n parseTarget: Record<string, unknown>,\n originalArgs: Record<string, unknown>,\n): ValidationResult {\n const result = schema.safeParse(parseTarget);\n if (!result.success) {\n const issues = result.error.issues.map(\n (i) => `${i.path.join(\".\")}: ${i.message}`\n );\n return { valid: false, error: `Validation failed: ${issues.join(\", \")}` };\n }\n // Merge parsed data back with original args so extra passthrough fields survive\n const parsed = result.data as Record<string, unknown>;\n return { valid: true, data: { ...originalArgs, ...parsed } };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,CAAC,QAAQ,KAAK;;AAEvB;AACA;AACA;;AAEA,MAAMC,IAAI,GAAGD,CAAC,CAACE,MAAM,CAAC,CAAC,CAACD,IAAI,CAAC,CAAC;AAC9B,MAAME,cAAc,GAAGH,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;AAC5C,MAAMC,iBAAiB,GAAGN,CAAC,CAACI,MAAM,CAAC,CAAC,CAACG,GAAG,CAAC,CAAC,CAAC;;AAE3C;AACA;AACA;;AAEA,MAAMC,qBAAqB,GAAGR,CAAC,CAACS,MAAM,CAAC;EACrCC,MAAM,EAAEV,CAAC,CAACW,OAAO,CAAC,QAAQ,CAAC;EAC3BC,UAAU,EAAEX,IAAI;EAChBY,WAAW,EAAEZ,IAAI;EACjBa,UAAU,EAAEd,CAAC,CAACI,MAAM,CAAC,CAAC;EACtBW,MAAM,EAAEf,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC;AAC9B,CAAC,CAAC;AAEF,MAAMC,kBAAkB,GAAGjB,CAAC,CAACS,MAAM,CAAC;EAClCC,MAAM,EAAEV,CAAC,CAACW,OAAO,CAAC,KAAK,CAAC;EACxBC,UAAU,EAAEX,IAAI;EAChBY,WAAW,EAAEZ,IAAI;EACjBiB,QAAQ,EAAEZ;AACZ,CAAC,CAAC;AAEF,MAAMa,uBAAuB,GAAGnB,CAAC,CAACS,MAAM,CAAC;EACvCC,MAAM,EAAEV,CAAC,CAACW,OAAO,CAAC,UAAU,CAAC;EAC7BC,UAAU,EAAEX,IAAI;EAChBmB,gBAAgB,EAAEnB,IAAI;EACtBoB,cAAc,EAAEpB,IAAI;EACpBiB,QAAQ,EAAEf;AACZ,CAAC,CAAC;AAEF,MAAMmB,sBAAsB,GAAGtB,CAAC,CAACS,MAAM,CAAC;EACtCC,MAAM,EAAEV,CAAC,CAACW,OAAO,CAAC,UAAU,CAAC;EAC7BY,KAAK,EAAEvB,CAAC,CAACwB,KAAK,CAACxB,CAAC,CAACS,MAAM,CAAC;IACtBG,UAAU,EAAEX,IAAI;IAChBY,WAAW,EAAEZ,IAAI;IACjBiB,QAAQ,EAAEZ;EACZ,CAAC,CAAC,CAAC,CAACC,GAAG,CAAC,CAAC;AACX,CAAC,CAAC;AAEF,MAAMkB,yBAAyB,GAAGzB,CAAC,CAACS,MAAM,CAAC;EACzCC,MAAM,EAAEV,CAAC,CAACW,OAAO,CAAC,aAAa,CAAC;EAChCY,KAAK,EAAEvB,CAAC,CAACwB,KAAK,CAACxB,CAAC,CAACS,MAAM,CAAC;IACtBG,UAAU,EAAEX,IAAI;IAChBY,WAAW,EAAEZ,IAAI;IACjBa,UAAU,EAAEd,CAAC,CAACI,MAAM,CAAC;EACvB,CAAC,CAAC,CAAC,CAACG,GAAG,CAAC,CAAC;AACX,CAAC,CAAC;AAEF,MAAMmB,wBAAwB,GAAG1B,CAAC,CAACS,MAAM,CAAC;EACxCC,MAAM,EAAEV,CAAC,CAACW,OAAO,CAAC,YAAY,CAAC;EAC/BE,WAAW,EAAEZ;AACf,CAAC,CAAC;;AAEF;AACA;AACA;;AAEA,MAAM0B,cAAc,GAAG3B,CAAC,CAACS,MAAM,CAAC;EAC9BC,MAAM,EAAEV,CAAC,CAACW,OAAO,CAAC,QAAQ,CAAC;EAC3BiB,WAAW,EAAE3B,IAAI;EACjBY,WAAW,EAAEZ,IAAI;EACjBsB,KAAK,EAAEvB,CAAC,CAACwB,KAAK,CAACxB,CAAC,CAACS,MAAM,CAAC;IACtBG,UAAU,EAAEX,IAAI;IAChBiB,QAAQ,EAAEf,cAAc;IACxB0B,UAAU,EAAEvB,iBAAiB,CAACU,QAAQ,CAAC,CAAC;IACxCc,SAAS,EAAExB,iBAAiB,CAACU,QAAQ,CAAC;EACxC,CAAC,CAAC,CAAC,CAACT,GAAG,CAAC,CAAC,CAAC,CAACS,QAAQ,CAAC,CAAC;EACrBe,KAAK,EAAE/B,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC,CAAC;EAC5BgB,sBAAsB,EAAEhC,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC,CAAC;EAC7CiB,OAAO,EAAEjC,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAMkB,gBAAgB,GAAGlC,CAAC,CAACS,MAAM,CAAC;EAChCC,MAAM,EAAEV,CAAC,CAACW,OAAO,CAAC,WAAW,CAAC;EAC9BwB,iBAAiB,EAAElC,IAAI;EACvBsB,KAAK,EAAEvB,CAAC,CAACwB,KAAK,CAACxB,CAAC,CAACS,MAAM,CAAC;IACtBG,UAAU,EAAEX,IAAI;IAChBiB,QAAQ,EAAEf,cAAc;IACxB0B,UAAU,EAAEvB,iBAAiB,CAACU,QAAQ,CAAC,CAAC;IACxCc,SAAS,EAAExB,iBAAiB,CAACU,QAAQ,CAAC;EACxC,CAAC,CAAC,CAAC,CAACT,GAAG,CAAC,CAAC;AACX,CAAC,CAAC;AAEF,MAAM6B,mBAAmB,GAAGpC,CAAC,CAACS,MAAM,CAAC;EACnCC,MAAM,EAAEV,CAAC,CAACW,OAAO,CAAC,cAAc,CAAC;EACjCwB,iBAAiB,EAAElC,IAAI;EACvBsB,KAAK,EAAEvB,CAAC,CAACwB,KAAK,CAACxB,CAAC,CAACS,MAAM,CAAC;IACtBG,UAAU,EAAEX,IAAI;IAChBiB,QAAQ,EAAEf,cAAc;IACxB0B,UAAU,EAAEvB,iBAAiB,CAACU,QAAQ,CAAC,CAAC;IACxCc,SAAS,EAAExB,iBAAiB,CAACU,QAAQ,CAAC;EACxC,CAAC,CAAC,CAAC,CAACT,GAAG,CAAC,CAAC;AACX,CAAC,CAAC;AAEF,MAAM8B,eAAe,GAAGrC,CAAC,CAACS,MAAM,CAAC;EAC/BC,MAAM,EAAEV,CAAC,CAACW,OAAO,CAAC,SAAS,CAAC;EAC5BwB,iBAAiB,EAAElC;AACrB,CAAC,CAAC;AAEF,MAAMqC,eAAe,GAAGtC,CAAC,CAACS,MAAM,CAAC;EAC/BC,MAAM,EAAEV,CAAC,CAACW,OAAO,CAAC,SAAS,CAAC;EAC5BwB,iBAAiB,EAAElC;AACrB,CAAC,CAAC;AAEF,MAAMsC,cAAc,GAAGvC,CAAC,CAACS,MAAM,CAAC;EAC9BC,MAAM,EAAEV,CAAC,CAACW,OAAO,CAAC,QAAQ,CAAC;EAC3BwB,iBAAiB,EAAElC;AACrB,CAAC,CAAC;;AAEF;AACA;AACA;;AAEA,MAAMuC,oBAAoB,GAAGxC,CAAC,CAACS,MAAM,CAAC;EACpCC,MAAM,EAAEV,CAAC,CAACW,OAAO,CAAC,QAAQ,CAAC;EAC3BS,gBAAgB,EAAEnB,IAAI,CAACe,QAAQ,CAAC,CAAC;EACjCyB,kBAAkB,EAAExC,IAAI,CAACe,QAAQ,CAAC,CAAC;EACnCK,cAAc,EAAEpB,IAAI,CAACe,QAAQ,CAAC,CAAC;EAC/B0B,uBAAuB,EAAEzC,IAAI,CAACe,QAAQ,CAAC,CAAC;EACxCO,KAAK,EAAEvB,CAAC,CAACwB,KAAK,CAACxB,CAAC,CAACS,MAAM,CAAC;IACtBG,UAAU,EAAEX,IAAI;IAChBiB,QAAQ,EAAEf;EACZ,CAAC,CAAC,CAAC,CAACI,GAAG,CAAC,CAAC,CAAC,CAACS,QAAQ,CAAC,CAAC;EACrBe,KAAK,EAAE/B,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC;AAC7B,CAAC,CAAC,CAAC2B,MAAM,CACNC,CAAC,IAAKA,CAAC,CAACxB,gBAAgB,IAAIwB,CAAC,CAACH,kBAAkB,EACjD;EAAEI,OAAO,EAAE,oDAAoD;EAAEC,IAAI,EAAE,CAAC,kBAAkB;AAAE,CAC9F,CAAC,CAACH,MAAM,CACLC,CAAC,IAAKA,CAAC,CAACvB,cAAc,IAAIuB,CAAC,CAACF,uBAAuB,EACpD;EAAEG,OAAO,EAAE,uDAAuD;EAAEC,IAAI,EAAE,CAAC,gBAAgB;AAAE,CAC/F,CAAC;AAED,MAAMC,qBAAqB,GAAG/C,CAAC,CAACS,MAAM,CAAC;EACrCC,MAAM,EAAEV,CAAC,CAACW,OAAO,CAAC,SAAS,CAAC;EAC5BqC,WAAW,EAAE/C;AACf,CAAC,CAAC;AAEF,MAAMgD,kBAAkB,GAAGjD,CAAC,CAACS,MAAM,CAAC;EAClCC,MAAM,EAAEV,CAAC,CAACkD,KAAK,CAAC,CAAClD,CAAC,CAACW,OAAO,CAAC,MAAM,CAAC,EAAEX,CAAC,CAACW,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;EAClEqC,WAAW,EAAE/C;AACf,CAAC,CAAC;AAEF,MAAMkD,qBAAqB,GAAGnD,CAAC,CAACS,MAAM,CAAC;EACrCC,MAAM,EAAEV,CAAC,CAACkD,KAAK,CAAC,CAAClD,CAAC,CAACW,OAAO,CAAC,SAAS,CAAC,EAAEX,CAAC,CAACW,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;EAC9DqC,WAAW,EAAE/C;AACf,CAAC,CAAC;AAEF,MAAMmD,oBAAoB,GAAGpD,CAAC,CAACS,MAAM,CAAC;EACpCC,MAAM,EAAEV,CAAC,CAACW,OAAO,CAAC,QAAQ,CAAC;EAC3BqC,WAAW,EAAE/C;AACf,CAAC,CAAC;;AAEF;AACA;AACA;;AAEA,MAAMoD,oBAAoB,GAAGrD,CAAC,CAACS,MAAM,CAAC;EACpCC,MAAM,EAAEV,CAAC,CAACW,OAAO,CAAC,QAAQ,CAAC;EAC3B2C,UAAU,EAAEtD,CAAC,CAACE,MAAM,CAAC,CAAC,CAACK,GAAG,CAAC,CAAC,CAAC;EAC7BgD,SAAS,EAAEvD,CAAC,CAACE,MAAM,CAAC,CAAC,CAACK,GAAG,CAAC,CAAC,CAAC;EAC5BiD,KAAK,EAAExD,CAAC,CAACE,MAAM,CAAC,CAAC,CAACsD,KAAK,CAAC,CAAC,CAACxC,QAAQ,CAAC,CAAC;EACpCyC,KAAK,EAAEzD,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC,CAAC;EAC5B0C,aAAa,EAAE1D,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC,CAAC;EACpC2C,aAAa,EAAE3D,CAAC,CAAC4D,OAAO,CAAC,CAAC,CAAC5C,QAAQ,CAAC,CAAC;EACrC6C,WAAW,EAAE7D,CAAC,CAAC4D,OAAO,CAAC,CAAC,CAAC5C,QAAQ,CAAC,CAAC;EACnC8C,cAAc,EAAE9D,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC,CAAC;EACrC+C,IAAI,EAAE/D,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC,CAAC;EAC3BgD,KAAK,EAAEhE,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC,CAAC;EAC5BiD,WAAW,EAAEjE,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC,CAAC;EAClCkD,sBAAsB,EAAElE,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC,CAAC;EAC7CmD,mBAAmB,EAAEnE,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC,CAAC;EAC1CoD,mBAAmB,EAAEpE,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC;AAC3C,CAAC,CAAC;AAEF,MAAMqD,oBAAoB,GAAGrE,CAAC,CAACS,MAAM,CAAC;EACpCC,MAAM,EAAEV,CAAC,CAACW,OAAO,CAAC,QAAQ,CAAC;EAC3B2D,WAAW,EAAErE,IAAI;EACjBqD,UAAU,EAAEtD,CAAC,CAACE,MAAM,CAAC,CAAC,CAACK,GAAG,CAAC,CAAC,CAAC,CAACS,QAAQ,CAAC,CAAC;EACxCuC,SAAS,EAAEvD,CAAC,CAACE,MAAM,CAAC,CAAC,CAACK,GAAG,CAAC,CAAC,CAAC,CAACS,QAAQ,CAAC,CAAC;EACvCwC,KAAK,EAAExD,CAAC,CAACE,MAAM,CAAC,CAAC,CAACsD,KAAK,CAAC,CAAC,CAACxC,QAAQ,CAAC,CAAC;EACpCyC,KAAK,EAAEzD,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC,CAAC;EAC5B0C,aAAa,EAAE1D,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC,CAAC;EACpCuD,MAAM,EAAEvE,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC,CAAC;EAC7B2C,aAAa,EAAE3D,CAAC,CAAC4D,OAAO,CAAC,CAAC,CAAC5C,QAAQ,CAAC,CAAC;EACrC6C,WAAW,EAAE7D,CAAC,CAAC4D,OAAO,CAAC,CAAC,CAAC5C,QAAQ,CAAC,CAAC;EACnCwD,YAAY,EAAExE,CAAC,CAAC4D,OAAO,CAAC,CAAC,CAAC5C,QAAQ,CAAC,CAAC;EACpCyD,cAAc,EAAEzE,CAAC,CAACI,MAAM,CAAC,CAAC,CAACY,QAAQ,CAAC,CAAC;EACrC0D,YAAY,EAAE1E,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC,CAAC;EACnC8C,cAAc,EAAE9D,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC,CAAC;EACrC+C,IAAI,EAAE/D,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC,CAAC;EAC3BgD,KAAK,EAAEhE,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC,CAAC;EAC5BiD,WAAW,EAAEjE,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC,CAAC;EAClCkD,sBAAsB,EAAElE,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC,CAAC;EAC7C2D,WAAW,EAAE3E,CAAC,CAAC4D,OAAO,CAAC,CAAC,CAAC5C,QAAQ,CAAC,CAAC;EACnCmD,mBAAmB,EAAEnE,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC,CAAC;EAC1CoD,mBAAmB,EAAEpE,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC,CAAC;EAC1C4D,qBAAqB,EAAE5E,CAAC,CAAC4D,OAAO,CAAC,CAAC,CAAC5C,QAAQ,CAAC,CAAC;EAC7C6D,cAAc,EAAE7E,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC,CAAC;EACrC8D,uBAAuB,EAAE9E,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC,CAAC;EAC9C+D,wBAAwB,EAAE/E,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC,CAAC;EAC/CgE,gBAAgB,EAAEhF,CAAC,CAACE,MAAM,CAAC,CAAC,CAACc,QAAQ,CAAC;AACxC,CAAC,CAAC;AAEF,MAAMiE,mBAAmB,GAAGjF,CAAC,CAACS,MAAM,CAAC;EACnCC,MAAM,EAAEV,CAAC,CAACW,OAAO,CAAC,OAAO,CAAC;EAC1BuE,mBAAmB,EAAEjF,IAAI;EACzBkF,qBAAqB,EAAElF;AACzB,CAAC,CAAC;AAEF,MAAMmF,kBAAkB,GAAGpF,CAAC,CAACS,MAAM,CAAC;EAClCC,MAAM,EAAEV,CAAC,CAACW,OAAO,CAAC,OAAO,CAAC;EAC1B0E,kBAAkB,EAAEpF,IAAI;EACxBqF,oBAAoB,EAAErF;AACxB,CAAC,CAAC;;AAEF;AACA;AACA;;AAIA,MAAMsF,cAAyB,GAAG;EAChCC,KAAK,EAAEJ;AACT,CAAC;AAED,MAAMK,gBAA2B,GAAG;EAClCC,MAAM,EAAElF,qBAAqB;EAC7BmF,GAAG,EAAE1E,kBAAkB;EACvB2E,QAAQ,EAAEzE,uBAAuB;EACjC0E,QAAQ,EAAEvE,sBAAsB;EAChCwE,WAAW,EAAErE,yBAAyB;EACtCsE,UAAU,EAAErE;AACd,CAAC;AAED,MAAMsE,oBAA+B,GAAG;EACtCC,MAAM,EAAEtE,cAAc;EACtBuE,SAAS,EAAEhE,gBAAgB;EAC3BiE,YAAY,EAAE/D,mBAAmB;EACjCgE,OAAO,EAAE/D,eAAe;EACxBgE,YAAY,EAAEhE,eAAe;EAC7BiE,OAAO,EAAEhE,eAAe;EACxBiE,MAAM,EAAEhE;AACV,CAAC;AAED,MAAMiE,eAA0B,GAAG;EACjCP,MAAM,EAAEzD,oBAAoB;EAC5B4D,OAAO,EAAErD,qBAAqB;EAC9B0D,IAAI,EAAExD,kBAAkB;EACxByD,eAAe,EAAEzD,kBAAkB;EACnCqD,OAAO,EAAEnD,qBAAqB;EAC9BwD,QAAQ,EAAExD,qBAAqB;EAC/BoD,MAAM,EAAEnD;AACV,CAAC;AAED,MAAMwD,eAA0B,GAAG;EACjCX,MAAM,EAAE5C,oBAAoB;EAC5BwD,MAAM,EAAExC,oBAAoB;EAC5BmB,KAAK,EAAEP;AACT,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,MAAM6B,kBAA6C,GAAG;EACpDC,QAAQ,EAAExB,cAAc;EACxByB,SAAS,EAAEvB,gBAAgB;EAC3BwB,eAAe,EAAEjB,oBAAoB;EACrCkB,SAAS,EAAEV,eAAe;EAC1BW,SAAS,EAAEP;AACb,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASQ,wBAAwBA,CAAC1G,MAAc,EAA2C;EACzF,IAAIA,MAAM,CAAC2G,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO;IAAEC,IAAI,EAAE,iBAAiB;IAAE5G,MAAM,EAAEA,MAAM,CAAC6G,KAAK,CAAC,CAAC;EAAE,CAAC;EACzF,IAAI7G,MAAM,CAAC2G,UAAU,CAAC,WAAW,CAAC,EAAE,OAAO;IAAEC,IAAI,EAAE,WAAW;IAAE5G,MAAM,EAAEA,MAAM,CAAC6G,KAAK,CAAC,CAAC;EAAE,CAAC;EACzF,OAAO,IAAI;AACb;;AAEA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAC9BC,QAAgB,EAChBC,IAA6B,EACX;EAClB,MAAMhH,MAAM,GAAGgH,IAAI,CAAChH,MAA4B;EAChD,IAAI,CAACA,MAAM,EAAE;IACX;IACA,OAAO;MAAEiH,KAAK,EAAE,IAAI;MAAEC,IAAI,EAAEF;IAAK,CAAC;EACpC;EAEA,IAAIG,SAAgC;EAEpC,IAAIJ,QAAQ,KAAK,cAAc,EAAE;IAC/B,MAAMK,QAAQ,GAAGV,wBAAwB,CAAC1G,MAAM,CAAC;IACjD,IAAIoH,QAAQ,EAAE;MACZD,SAAS,GAAGf,kBAAkB,CAACgB,QAAQ,CAACR,IAAI,CAAC;MAC7C;MACA,MAAMS,MAAM,GAAGF,SAAS,GAAGC,QAAQ,CAACpH,MAAM,CAAC;MAC3C,IAAI,CAACqH,MAAM,EAAE,OAAO;QAAEJ,KAAK,EAAE,IAAI;QAAEC,IAAI,EAAEF;MAAK,CAAC;MAC/C;MACA;MACA,MAAMM,SAAS,GAAG;QAAE,GAAGN,IAAI;QAAEhH,MAAM,EAAEoH,QAAQ,CAACpH;MAAO,CAAC;MACtD,OAAOuH,SAAS,CAACF,MAAM,EAAEC,SAAS,EAAEN,IAAI,CAAC;IAC3C;IACA;IACA,OAAO;MAAEC,KAAK,EAAE,IAAI;MAAEC,IAAI,EAAEF;IAAK,CAAC;EACpC;EAEAG,SAAS,GAAGf,kBAAkB,CAACW,QAAQ,CAAC;EACxC,IAAI,CAACI,SAAS,EAAE,OAAO;IAAEF,KAAK,EAAE,IAAI;IAAEC,IAAI,EAAEF;EAAK,CAAC;EAElD,MAAMK,MAAM,GAAGF,SAAS,CAACnH,MAAM,CAAC;EAChC,IAAI,CAACqH,MAAM,EAAE,OAAO;IAAEJ,KAAK,EAAE,IAAI;IAAEC,IAAI,EAAEF;EAAK,CAAC;EAE/C,OAAOO,SAAS,CAACF,MAAM,EAAEL,IAAI,EAAEA,IAAI,CAAC;AACtC;;AAEA;AACA;AACA;AACA;AACA,SAASO,SAASA,CAChBF,MAAoB,EACpBG,WAAoC,EACpCC,YAAqC,EACnB;EAClB,MAAMC,MAAM,GAAGL,MAAM,CAACM,SAAS,CAACH,WAAW,CAAC;EAC5C,IAAI,CAACE,MAAM,CAACE,OAAO,EAAE;IACnB,MAAMC,MAAM,GAAGH,MAAM,CAACI,KAAK,CAACD,MAAM,CAACE,GAAG,CACnCC,CAAC,IAAK,GAAGA,CAAC,CAAC5F,IAAI,CAAC6F,IAAI,CAAC,GAAG,CAAC,KAAKD,CAAC,CAAC7F,OAAO,EAC1C,CAAC;IACD,OAAO;MAAE8E,KAAK,EAAE,KAAK;MAAEa,KAAK,EAAE,sBAAsBD,MAAM,CAACI,IAAI,CAAC,IAAI,CAAC;IAAG,CAAC;EAC3E;EACA;EACA,MAAMC,MAAM,GAAGR,MAAM,CAACR,IAA+B;EACrD,OAAO;IAAED,KAAK,EAAE,IAAI;IAAEC,IAAI,EAAE;MAAE,GAAGO,YAAY;MAAE,GAAGS;IAAO;EAAE,CAAC;AAC9D","ignoreList":[]}