whale-code 6.5.10 → 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 (627) 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/commands/doctor.js +1 -6
  20. package/dist/cli/commands/doctor.js.map +1 -1
  21. package/dist/cli/services/agent-loop-tools.js +11 -2
  22. package/dist/cli/services/agent-loop-tools.js.map +1 -1
  23. package/dist/cli/services/agent-loop.js +1 -1
  24. package/dist/cli/services/agent-loop.js.map +1 -1
  25. package/dist/cli/services/cli-agent-loop.js +3 -2
  26. package/dist/cli/services/cli-agent-loop.js.map +1 -1
  27. package/dist/cli/services/config-store.d.ts +8 -10
  28. package/dist/cli/services/config-store.js +14 -13
  29. package/dist/cli/services/config-store.js.map +1 -1
  30. package/dist/cli/services/memory-manager.js +2 -2
  31. package/dist/cli/services/memory-manager.js.map +1 -1
  32. package/dist/cli/services/permission-modes.js +14 -10
  33. package/dist/cli/services/permission-modes.js.map +1 -1
  34. package/dist/cli/services/session-client.js +2 -1
  35. package/dist/cli/services/session-client.js.map +1 -1
  36. package/dist/cli/services/session-persistence.js +14 -6
  37. package/dist/cli/services/session-persistence.js.map +1 -1
  38. package/dist/cli/setup/SetupApp.d.ts +2 -2
  39. package/dist/cli/setup/SetupApp.js +91 -254
  40. package/dist/cli/setup/SetupApp.js.map +1 -1
  41. package/dist/cli/shared/SpinnerSlot.js +4 -1
  42. package/dist/cli/shared/SpinnerSlot.js.map +1 -1
  43. package/dist/cli/status/StatusApp.js +3 -3
  44. package/dist/cli/status/StatusApp.js.map +1 -1
  45. package/dist/index.js +13 -3
  46. package/dist/index.js.map +1 -1
  47. package/dist/server/handlers/browser-lifecycle.js +10 -0
  48. package/dist/server/handlers/browser-lifecycle.js.map +1 -1
  49. package/dist/server/handlers/browser.js +16 -1
  50. package/dist/server/handlers/browser.js.map +1 -1
  51. package/dist/server/handlers/campaigns.js +11 -0
  52. package/dist/server/handlers/campaigns.js.map +1 -1
  53. package/dist/server/handlers/catalog-products.js +19 -5
  54. package/dist/server/handlers/catalog-products.js.map +1 -1
  55. package/dist/server/handlers/catalog.js +42 -8
  56. package/dist/server/handlers/catalog.js.map +1 -1
  57. package/dist/server/handlers/clickhouse.js +4 -4
  58. package/dist/server/handlers/clickhouse.js.map +1 -1
  59. package/dist/server/handlers/comms-email.js +70 -8
  60. package/dist/server/handlers/comms-email.js.map +1 -1
  61. package/dist/server/handlers/comms.js +63 -21
  62. package/dist/server/handlers/comms.js.map +1 -1
  63. package/dist/server/handlers/coupons.js +141 -77
  64. package/dist/server/handlers/coupons.js.map +1 -1
  65. package/dist/server/handlers/google-ads.js +280 -8
  66. package/dist/server/handlers/google-ads.js.map +1 -1
  67. package/dist/server/handlers/remove-bg.d.ts +33 -0
  68. package/dist/server/handlers/remove-bg.js +698 -44
  69. package/dist/server/handlers/remove-bg.js.map +1 -1
  70. package/dist/server/handlers/supply-chain.js +93 -1
  71. package/dist/server/handlers/supply-chain.js.map +1 -1
  72. package/dist/server/handlers/workflow-steps-types.d.ts +1 -1
  73. package/dist/server/handlers/workflow-steps-types.js +7 -1
  74. package/dist/server/handlers/workflow-steps-types.js.map +1 -1
  75. package/dist/server/handlers/workflow-steps.js +1 -1
  76. package/dist/server/handlers/workflow-steps.js.map +1 -1
  77. package/dist/server/index.js +122 -29
  78. package/dist/server/index.js.map +1 -1
  79. package/dist/server/lib/agent-loop-turn.js +33 -3
  80. package/dist/server/lib/agent-loop-turn.js.map +1 -1
  81. package/dist/server/lib/agent-loop-types.d.ts +6 -2
  82. package/dist/server/lib/agent-loop-types.js +14 -2
  83. package/dist/server/lib/agent-loop-types.js.map +1 -1
  84. package/dist/server/lib/clickhouse-client.js +4 -2
  85. package/dist/server/lib/clickhouse-client.js.map +1 -1
  86. package/dist/server/lib/code-worker.js +4 -1
  87. package/dist/server/lib/code-worker.js.map +1 -1
  88. package/dist/server/providers/anthropic.js +103 -33
  89. package/dist/server/providers/anthropic.js.map +1 -1
  90. package/dist/server/server-chat.js +2 -2
  91. package/dist/server/server-chat.js.map +1 -1
  92. package/dist/server/server-helpers.d.ts +8 -1
  93. package/dist/server/server-helpers.js +17 -3
  94. package/dist/server/server-helpers.js.map +1 -1
  95. package/dist/server/server-persist.js +34 -21
  96. package/dist/server/server-persist.js.map +1 -1
  97. package/dist/server/server-rate-limit.d.ts +0 -1
  98. package/dist/server/server-rate-limit.js +5 -5
  99. package/dist/server/server-rate-limit.js.map +1 -1
  100. package/dist/server/server-routes-approvals.js +2 -2
  101. package/dist/server/server-routes-approvals.js.map +1 -1
  102. package/dist/server/server-routes-auth.js +2 -2
  103. package/dist/server/server-routes-auth.js.map +1 -1
  104. package/dist/server/server-routes-events.js +2 -2
  105. package/dist/server/server-routes-events.js.map +1 -1
  106. package/dist/server/server-routes-public.js +4 -4
  107. package/dist/server/server-routes-public.js.map +1 -1
  108. package/dist/server/server-routes-webchat.js +3 -3
  109. package/dist/server/server-routes-webchat.js.map +1 -1
  110. package/dist/server/server-store-circuit-breaker.js +1 -1
  111. package/dist/server/server-store-circuit-breaker.js.map +1 -1
  112. package/dist/server/tool-router.js +7 -4
  113. package/dist/server/tool-router.js.map +1 -1
  114. package/dist/server/validation.js +11 -0
  115. package/dist/server/validation.js.map +1 -1
  116. package/dist/setup.js +5 -25
  117. package/dist/setup.js.map +1 -1
  118. package/dist/shared/api-client.js +38 -11
  119. package/dist/shared/api-client.js.map +1 -1
  120. package/package.json +12 -10
  121. package/vendor/ink/build/ink.js +68 -24
  122. package/vendor/ink/node_modules/react-devtools-core/README.md +152 -0
  123. package/vendor/ink/node_modules/react-devtools-core/backend.js +1 -0
  124. package/vendor/ink/node_modules/react-devtools-core/dist/648.chunk.js +2 -0
  125. package/vendor/ink/node_modules/react-devtools-core/dist/648.chunk.js.map +1 -0
  126. package/vendor/ink/node_modules/react-devtools-core/dist/backend.js +15691 -0
  127. package/vendor/ink/node_modules/react-devtools-core/dist/backend.js.map +1 -0
  128. package/vendor/ink/node_modules/react-devtools-core/dist/importFile.worker.worker.js +2 -0
  129. package/vendor/ink/node_modules/react-devtools-core/dist/importFile.worker.worker.js.map +1 -0
  130. package/vendor/ink/node_modules/react-devtools-core/dist/parseSourceAndMetadata.worker.worker.js +14 -0
  131. package/vendor/ink/node_modules/react-devtools-core/dist/parseSourceAndMetadata.worker.worker.js.map +1 -0
  132. package/vendor/ink/node_modules/react-devtools-core/dist/standalone.js +2 -0
  133. package/vendor/ink/node_modules/react-devtools-core/dist/standalone.js.map +1 -0
  134. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/LICENSE +21 -0
  135. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/README.md +495 -0
  136. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/browser.js +8 -0
  137. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/index.js +10 -0
  138. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/buffer-util.js +129 -0
  139. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/constants.js +10 -0
  140. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/event-target.js +184 -0
  141. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/extension.js +223 -0
  142. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/limiter.js +55 -0
  143. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/permessage-deflate.js +518 -0
  144. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/receiver.js +607 -0
  145. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/sender.js +409 -0
  146. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/stream.js +180 -0
  147. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/validation.js +104 -0
  148. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/websocket-server.js +449 -0
  149. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/lib/websocket.js +1197 -0
  150. package/vendor/ink/node_modules/react-devtools-core/node_modules/ws/package.json +56 -0
  151. package/vendor/ink/node_modules/react-devtools-core/package.json +38 -0
  152. package/vendor/ink/node_modules/react-devtools-core/standalone.js +1 -0
  153. package/dist/cli/__tests__/print-mode-streaming.test.js +0 -270
  154. package/dist/cli/__tests__/print-mode.basic-output.test.js +0 -230
  155. package/dist/cli/__tests__/print-mode.session-errors.test.js +0 -252
  156. package/dist/cli/__tests__/print-mode.test.js +0 -273
  157. package/dist/cli/__tests__/serve-mode-messages.test.js +0 -338
  158. package/dist/cli/__tests__/serve-mode.messages.part2.test.js +0 -266
  159. package/dist/cli/__tests__/serve-mode.messages.test.js +0 -277
  160. package/dist/cli/__tests__/serve-mode.startup-http.test.js +0 -279
  161. package/dist/cli/__tests__/serve-mode.test.js +0 -345
  162. package/dist/cli/chat/NodeManager.d.ts +0 -30
  163. package/dist/cli/chat/NodeManager.js +0 -66
  164. package/dist/cli/chat/NodeManager.js.map +0 -1
  165. package/dist/cli/chat/chat-input-menu-handler.d.ts +0 -32
  166. package/dist/cli/chat/hooks/slash-imsg-handlers.js +0 -148
  167. package/dist/cli/chat/hooks/slash-imsg-handlers.js.map +0 -1
  168. package/dist/cli/chat/hooks/useStreamingReducer.d.ts +0 -66
  169. package/dist/cli/commands/__tests__/config-cmd.test.js +0 -270
  170. package/dist/cli/commands/__tests__/doctor.test.js +0 -257
  171. package/dist/cli/commands/__tests__/imsg-node-bridge.test.js +0 -99
  172. package/dist/cli/commands/__tests__/imsg-utils.test.js +0 -73
  173. package/dist/cli/commands/__tests__/init.test.js +0 -214
  174. package/dist/cli/commands/__tests__/mcp.test.js +0 -287
  175. package/dist/cli/commands/imsg-watcher-helpers.d.ts +0 -40
  176. package/dist/cli/commands/imsg-watcher-helpers.js +0 -184
  177. package/dist/cli/commands/imsg-watcher-helpers.js.map +0 -1
  178. package/dist/cli/commands/imsg-watcher.d.ts +0 -11
  179. package/dist/cli/commands/imsg-watcher.js +0 -230
  180. package/dist/cli/commands/imsg-watcher.js.map +0 -1
  181. package/dist/cli/services/__tests__/agent-definitions.test.js +0 -153
  182. package/dist/cli/services/__tests__/agent-events-global.test.js +0 -39
  183. package/dist/cli/services/__tests__/agent-events.part2.test.js +0 -113
  184. package/dist/cli/services/__tests__/agent-events.test.js +0 -157
  185. package/dist/cli/services/__tests__/agent-loop-auth.test.js +0 -392
  186. package/dist/cli/services/__tests__/agent-loop-budget.test.js +0 -389
  187. package/dist/cli/services/__tests__/agent-loop-tools-lifecycle.test.js +0 -430
  188. package/dist/cli/services/__tests__/agent-loop-tools-maxturns.test.js +0 -486
  189. package/dist/cli/services/__tests__/agent-loop-utils-execution.test.js +0 -528
  190. package/dist/cli/services/__tests__/agent-loop-utils-helpers.test.js +0 -466
  191. package/dist/cli/services/__tests__/agent-worker-base-execute.test.js +0 -257
  192. package/dist/cli/services/__tests__/agent-worker-base-helpers.test.js +0 -198
  193. package/dist/cli/services/__tests__/agent-worker-base.test.js +0 -278
  194. package/dist/cli/services/__tests__/auth-service-exports.test.js +0 -41
  195. package/dist/cli/services/__tests__/auth-service.part2.test.js +0 -169
  196. package/dist/cli/services/__tests__/auth-service.test.js +0 -242
  197. package/dist/cli/services/__tests__/background-processes.test.js +0 -282
  198. package/dist/cli/services/__tests__/claude-md-loader.test.js +0 -134
  199. package/dist/cli/services/__tests__/config-store.test.js +0 -247
  200. package/dist/cli/services/__tests__/debug-log.test.js +0 -199
  201. package/dist/cli/services/__tests__/edge-cases-caching.test.js +0 -174
  202. package/dist/cli/services/__tests__/edge-cases-compaction-core.test.js +0 -226
  203. package/dist/cli/services/__tests__/edge-cases-compaction-openai.test.js +0 -152
  204. package/dist/cli/services/__tests__/edge-cases-compaction-shapes.test.js +0 -53
  205. package/dist/cli/services/__tests__/edge-cases-compaction-thinking.test.js +0 -226
  206. package/dist/cli/services/__tests__/edge-cases-compaction.test.js +0 -131
  207. package/dist/cli/services/__tests__/edge-cases-paths.test.js +0 -86
  208. package/dist/cli/services/__tests__/error-logger-messages.test.js +0 -81
  209. package/dist/cli/services/__tests__/error-logger-transport.test.js +0 -119
  210. package/dist/cli/services/__tests__/error-logger.test.js +0 -264
  211. package/dist/cli/services/__tests__/file-history.test.js +0 -136
  212. package/dist/cli/services/__tests__/git-context-cache-reset.test.js +0 -223
  213. package/dist/cli/services/__tests__/git-context.test.js +0 -241
  214. package/dist/cli/services/__tests__/interactive-tools-execute.test.js +0 -166
  215. package/dist/cli/services/__tests__/interactive-tools-plan.test.js +0 -197
  216. package/dist/cli/services/__tests__/interactive-tools.part2.test.js +0 -168
  217. package/dist/cli/services/__tests__/interactive-tools.test.js +0 -179
  218. package/dist/cli/services/__tests__/keybinding-manager.test.js +0 -205
  219. package/dist/cli/services/__tests__/local-tools-dispatch.test.js +0 -404
  220. package/dist/cli/services/__tests__/local-tools.test.js +0 -238
  221. package/dist/cli/services/__tests__/lsp-manager.test.js +0 -364
  222. package/dist/cli/services/__tests__/mcp-client-connect-disconnect.test.js +0 -310
  223. package/dist/cli/services/__tests__/mcp-client.test.js +0 -93
  224. package/dist/cli/services/__tests__/memory-manager.test.js +0 -154
  225. package/dist/cli/services/__tests__/model-manager-utils.test.js +0 -154
  226. package/dist/cli/services/__tests__/model-manager.test.js +0 -175
  227. package/dist/cli/services/__tests__/permission-modes.test.js +0 -222
  228. package/dist/cli/services/__tests__/ripgrep.test.js +0 -328
  229. package/dist/cli/services/__tests__/server-tools-execute.test.js +0 -317
  230. package/dist/cli/services/__tests__/server-tools.test.js +0 -272
  231. package/dist/cli/services/__tests__/session-persistence.test.js +0 -245
  232. package/dist/cli/services/__tests__/subagent-basic.test.js +0 -489
  233. package/dist/cli/services/__tests__/subagent-edge.test.js +0 -545
  234. package/dist/cli/services/__tests__/subagent-prompts.test.js +0 -558
  235. package/dist/cli/services/__tests__/subagent-worker-errors.test.js +0 -255
  236. package/dist/cli/services/__tests__/subagent-worker.test.js +0 -242
  237. package/dist/cli/services/__tests__/system-prompt.test.js +0 -210
  238. package/dist/cli/services/__tests__/team-lead-comms-messaging.test.js +0 -250
  239. package/dist/cli/services/__tests__/team-lead-comms-result.test.js +0 -232
  240. package/dist/cli/services/__tests__/team-lead-comms-stop.test.js +0 -344
  241. package/dist/cli/services/__tests__/team-lead-comms.test.js +0 -285
  242. package/dist/cli/services/__tests__/team-lead-create.test.js +0 -327
  243. package/dist/cli/services/__tests__/team-lead-run.test.js +0 -318
  244. package/dist/cli/services/__tests__/team-lead-stop.test.js +0 -199
  245. package/dist/cli/services/__tests__/team-state-comms.test.js +0 -240
  246. package/dist/cli/services/__tests__/team-state-core.test.js +0 -230
  247. package/dist/cli/services/__tests__/team-state-tasks-complete-fail-available.test.js +0 -224
  248. package/dist/cli/services/__tests__/team-state-tasks.test.js +0 -184
  249. package/dist/cli/services/__tests__/telemetry-ai-metadata.test.js +0 -116
  250. package/dist/cli/services/__tests__/telemetry.part2.test.js +0 -195
  251. package/dist/cli/services/__tests__/telemetry.test.js +0 -176
  252. package/dist/cli/services/agent-loop-iteration.d.ts +0 -13
  253. package/dist/cli/services/agent-loop-setup.d.ts +0 -32
  254. package/dist/cli/services/agent-worker-base-api.d.ts +0 -19
  255. package/dist/cli/services/agent-worker-base-helpers.d.ts +0 -27
  256. package/dist/cli/services/agent-worker-base-tools.d.ts +0 -16
  257. package/dist/cli/services/agent-worker-base-types.d.ts +0 -81
  258. package/dist/cli/services/background-agents.d.ts +0 -26
  259. package/dist/cli/services/background-processes-ops.d.ts +0 -24
  260. package/dist/cli/services/background-tool-defs.d.ts +0 -50
  261. package/dist/cli/services/config-modules-model.test.js +0 -133
  262. package/dist/cli/services/config-modules-permission.test.js +0 -85
  263. package/dist/cli/services/config-modules-permissions.test.js +0 -85
  264. package/dist/cli/services/config-modules-session.test.js +0 -297
  265. package/dist/cli/services/format-server-response-columns.test.js +0 -265
  266. package/dist/cli/services/format-server-response-fallback.test.js +0 -65
  267. package/dist/cli/services/format-server-response-primitives-basic.test.js +0 -261
  268. package/dist/cli/services/format-server-response-primitives-nested.test.js +0 -188
  269. package/dist/cli/services/format-server-response-primitives.test.js +0 -300
  270. package/dist/cli/services/format-server-response-realworld.test.js +0 -248
  271. package/dist/cli/services/format-server-response-values.test.js +0 -247
  272. package/dist/cli/services/hooks-runners.test.js +0 -184
  273. package/dist/cli/services/hooks.glob-load.test.js +0 -233
  274. package/dist/cli/services/hooks.run-hooks.test.js +0 -184
  275. package/dist/cli/services/hooks.test.js +0 -233
  276. package/dist/cli/services/ink-incremental.d.ts +0 -19
  277. package/dist/cli/services/ink-incremental.js +0 -59
  278. package/dist/cli/services/ink-incremental.js.map +0 -1
  279. package/dist/cli/services/ink-resize-fix.d.ts +0 -18
  280. package/dist/cli/services/ink-resize-fix.js +0 -76
  281. package/dist/cli/services/ink-resize-fix.js.map +0 -1
  282. package/dist/cli/services/ink-sync-output.d.ts +0 -12
  283. package/dist/cli/services/ink-sync-output.js +0 -16
  284. package/dist/cli/services/ink-sync-output.js.map +0 -1
  285. package/dist/cli/services/interactive-tool-defs.d.ts +0 -80
  286. package/dist/cli/services/local-tools-definitions.d.ts +0 -6
  287. package/dist/cli/services/local-tools-files.test.js +0 -256
  288. package/dist/cli/services/local-tools-read-many.d.ts +0 -6
  289. package/dist/cli/services/model-router.test.js +0 -245
  290. package/dist/cli/services/rewind-rewindTo.test.js +0 -202
  291. package/dist/cli/services/rewind.test.js +0 -175
  292. package/dist/cli/services/sandbox.test.js +0 -198
  293. package/dist/cli/services/subagent-execution.d.ts +0 -12
  294. package/dist/cli/services/team-lead-auto.d.ts +0 -11
  295. package/dist/cli/services/team-lead-execution.d.ts +0 -28
  296. package/dist/cli/services/teammate-loop.js +0 -557
  297. package/dist/cli/services/teammate-loop.js.map +0 -1
  298. package/dist/cli/services/tools/__tests__/agent-tools-tasks-teams.test.js +0 -250
  299. package/dist/cli/services/tools/__tests__/agent-tools-teams.test.js +0 -200
  300. package/dist/cli/services/tools/__tests__/agent-tools.test.js +0 -340
  301. package/dist/cli/services/tools/__tests__/file-ops-cache.test.js +0 -152
  302. package/dist/cli/services/tools/__tests__/file-ops-notebook.test.js +0 -249
  303. package/dist/cli/services/tools/__tests__/file-ops-read.test.js +0 -261
  304. package/dist/cli/services/tools/__tests__/file-ops-write.test.js +0 -292
  305. package/dist/cli/services/tools/__tests__/search-tools-rg.test.js +0 -92
  306. package/dist/cli/services/tools/__tests__/search-tools.part2.test.js +0 -174
  307. package/dist/cli/services/tools/__tests__/search-tools.test.js +0 -227
  308. package/dist/cli/services/tools/__tests__/shell-exec-allowed-core.test.js +0 -163
  309. package/dist/cli/services/tools/__tests__/shell-exec-allowed-extended.test.js +0 -220
  310. package/dist/cli/services/tools/__tests__/shell-exec-allowed.part2.test.js +0 -215
  311. package/dist/cli/services/tools/__tests__/shell-exec-allowed.test.js +0 -154
  312. package/dist/cli/services/tools/__tests__/shell-exec-blocked.test.js +0 -132
  313. package/dist/cli/services/tools/__tests__/shell-exec-execution.test.js +0 -245
  314. package/dist/cli/services/tools/__tests__/task-manager-create.test.js +0 -110
  315. package/dist/cli/services/tools/__tests__/task-manager-crud.test.js +0 -339
  316. package/dist/cli/services/tools/__tests__/task-manager-list-get.test.js +0 -343
  317. package/dist/cli/services/tools/__tests__/task-manager-query.test.js +0 -346
  318. package/dist/cli/services/tools/__tests__/task-manager-routing.test.js +0 -58
  319. package/dist/cli/services/tools/__tests__/task-manager-update.test.js +0 -224
  320. package/dist/cli/services/tools/__tests__/task-manager.test.js +0 -159
  321. package/dist/cli/services/tools/__tests__/web-tools-html-search.test.js +0 -227
  322. package/dist/cli/services/tools/__tests__/web-tools.test.js +0 -285
  323. package/dist/cli/services/tools/shell-exec.test.js +0 -148
  324. package/dist/cli/shared/SharedTick.d.ts +0 -10
  325. package/dist/cli/shared/__tests__/markdown.test.js +0 -188
  326. package/dist/local-agent/__tests__/connection-disconnect.test.js +0 -201
  327. package/dist/local-agent/__tests__/connection-lifecycle.test.js +0 -289
  328. package/dist/local-agent/__tests__/connection-msghandling.test.js +0 -311
  329. package/dist/local-agent/__tests__/connection-reconnect.test.js +0 -230
  330. package/dist/local-agent/__tests__/connection-toolexec.test.js +0 -253
  331. package/dist/local-agent/__tests__/discovery.test.js +0 -328
  332. package/dist/local-agent/__tests__/executor-background.test.js +0 -219
  333. package/dist/local-agent/__tests__/executor-exec.test.js +0 -221
  334. package/dist/local-agent/__tests__/executor-jobs-sessions.test.js +0 -220
  335. package/dist/local-agent/__tests__/executor-system-info.test.js +0 -133
  336. package/dist/local-agent/__tests__/executor-systeminfo.test.js +0 -109
  337. package/dist/local-agent/__tests__/executor.test.js +0 -235
  338. package/dist/local-agent/__tests__/index.test.js +0 -139
  339. package/dist/node/__tests__/cli-channels.test.js +0 -293
  340. package/dist/node/__tests__/cli-config-edge.test.js +0 -154
  341. package/dist/node/__tests__/cli-config.test.js +0 -215
  342. package/dist/node/__tests__/config.test.js +0 -292
  343. package/dist/node/__tests__/runtime-heartbeat.test.js +0 -153
  344. package/dist/node/__tests__/runtime-lifecycle-init.test.js +0 -263
  345. package/dist/node/__tests__/runtime-lifecycle-stats.test.js +0 -180
  346. package/dist/node/__tests__/runtime-lifecycle.test.js +0 -305
  347. package/dist/node/__tests__/runtime-relay.test.js +0 -341
  348. package/dist/node/adapters/__tests__/base.test.js +0 -286
  349. package/dist/node/adapters/__tests__/discord.test.js +0 -284
  350. package/dist/node/adapters/__tests__/email-send.test.js +0 -295
  351. package/dist/node/adapters/__tests__/email.inbound-send.test.js +0 -217
  352. package/dist/node/adapters/__tests__/email.lifecycle.test.js +0 -211
  353. package/dist/node/adapters/__tests__/email.test.js +0 -290
  354. package/dist/node/adapters/__tests__/email.webhook-send.test.js +0 -251
  355. package/dist/node/adapters/__tests__/imessage-filter.test.js +0 -183
  356. package/dist/node/adapters/__tests__/imessage-lifecycle.test.js +0 -215
  357. package/dist/node/adapters/__tests__/imessage-send-restart.test.js +0 -227
  358. package/dist/node/adapters/__tests__/slack.part2.test.js +0 -135
  359. package/dist/node/adapters/__tests__/slack.test.js +0 -241
  360. package/dist/node/adapters/__tests__/sms-extras.test.js +0 -108
  361. package/dist/node/adapters/__tests__/sms-lifecycle.test.js +0 -203
  362. package/dist/node/adapters/__tests__/sms-messaging.test.js +0 -266
  363. package/dist/node/adapters/__tests__/sms.part2.test.js +0 -174
  364. package/dist/node/adapters/__tests__/sms.test.js +0 -253
  365. package/dist/node/adapters/__tests__/telegram-polling.test.js +0 -256
  366. package/dist/node/adapters/__tests__/telegram-send.test.js +0 -166
  367. package/dist/node/adapters/__tests__/webchat-inbound.test.js +0 -188
  368. package/dist/node/adapters/__tests__/webchat-outbound.test.js +0 -178
  369. package/dist/node/adapters/__tests__/whatsapp-inbound.test.js +0 -200
  370. package/dist/node/adapters/__tests__/whatsapp-send.test.js +0 -212
  371. package/dist/node/adapters/__tests__/whatsapp.test.js +0 -280
  372. package/dist/server/__tests__/gateway-fast-fail.test.js +0 -160
  373. package/dist/server/__tests__/local-agent-gateway.test.js +0 -186
  374. package/dist/server/__tests__/proxy-handlers-delegation.test.js +0 -240
  375. package/dist/server/__tests__/proxy-handlers-validation.test.js +0 -211
  376. package/dist/server/__tests__/proxy-handlers.part2.test.js +0 -240
  377. package/dist/server/__tests__/proxy-handlers.test.js +0 -213
  378. package/dist/server/__tests__/strip-base64-e2e.test.js +0 -303
  379. package/dist/server/__tests__/strip-base64.test.js +0 -256
  380. package/dist/server/__tests__/tool-router-agent-tools.test.js +0 -324
  381. package/dist/server/__tests__/tool-router-execute-core.test.js +0 -357
  382. package/dist/server/__tests__/tool-router-execute-permissions.test.js +0 -332
  383. package/dist/server/__tests__/tool-router-execute.test.js +0 -348
  384. package/dist/server/__tests__/tool-router-load.test.js +0 -432
  385. package/dist/server/__tests__/tool-router-permissions.test.js +0 -359
  386. package/dist/server/__tests__/tool-router-registry-cache.test.js +0 -383
  387. package/dist/server/__tests__/tool-router-registry-handlers.test.js +0 -272
  388. package/dist/server/__tests__/tool-router-registry.test.js +0 -331
  389. package/dist/server/__tests__/validation-inventory.test.js +0 -250
  390. package/dist/server/__tests__/validation-misc.test.js +0 -243
  391. package/dist/server/__tests__/validation-supply-chain.test.js +0 -188
  392. package/dist/server/__tests__/worker.test.js +0 -265
  393. package/dist/server/handlers/__tests__/conversation-lock.test.js +0 -117
  394. package/dist/server/handlers/__tests__/e2e/auth-cross-platform-login.e2e.test.js +0 -268
  395. package/dist/server/handlers/__tests__/e2e/auth-cross-platform-tokens.e2e.test.js +0 -264
  396. package/dist/server/handlers/__tests__/e2e/email-pipeline-send.e2e.test.js +0 -214
  397. package/dist/server/handlers/__tests__/e2e/email-pipeline-threads.e2e.test.js +0 -168
  398. package/dist/server/handlers/__tests__/e2e/error-logging-pipeline-dedup.e2e.test.js +0 -229
  399. package/dist/server/handlers/__tests__/e2e/error-logging-pipeline.e2e.test.js +0 -239
  400. package/dist/server/handlers/__tests__/e2e/error-logging-rate-limit.e2e.test.js +0 -150
  401. package/dist/server/handlers/__tests__/e2e/inventory-sync-guards.e2e.test.js +0 -177
  402. package/dist/server/handlers/__tests__/e2e/inventory-sync.e2e.test.js +0 -228
  403. package/dist/server/handlers/__tests__/e2e/inventory-sync.part2.e2e.test.js +0 -188
  404. package/dist/server/handlers/__tests__/e2e/order-lifecycle-fulfillment.e2e.test.js +0 -295
  405. package/dist/server/handlers/__tests__/e2e/order-lifecycle.e2e.test.js +0 -277
  406. package/dist/server/handlers/__tests__/e2e/order-lifecycle.fulfillment.e2e.test.js +0 -307
  407. package/dist/server/handlers/__tests__/e2e/order-lifecycle.setup.e2e.test.js +0 -177
  408. package/dist/server/handlers/__tests__/e2e/storefront-checkout-cart.e2e.test.js +0 -255
  409. package/dist/server/handlers/__tests__/e2e/storefront-checkout-webhook.e2e.test.js +0 -231
  410. package/dist/server/handlers/__tests__/e2e/workflow-execution-failures.e2e.test.js +0 -235
  411. package/dist/server/handlers/__tests__/e2e/workflow-execution.e2e.test.js +0 -294
  412. package/dist/server/handlers/__tests__/e2e/workflow-security.e2e.test.js +0 -311
  413. package/dist/server/handlers/__tests__/e2e/workflow-security.part2.e2e.test.js +0 -267
  414. package/dist/server/handlers/__tests__/workflow-cache.test.js +0 -237
  415. package/dist/server/handlers/analytics-errors-edge.test.js +0 -173
  416. package/dist/server/handlers/analytics.test.js +0 -280
  417. package/dist/server/handlers/api-docs-examples-ext.d.ts +0 -9
  418. package/dist/server/handlers/api-docs-examples-ext.js +0 -278
  419. package/dist/server/handlers/api-docs-examples-ext.js.map +0 -1
  420. package/dist/server/handlers/api-docs-examples.d.ts +0 -8
  421. package/dist/server/handlers/api-docs-examples.js +0 -221
  422. package/dist/server/handlers/api-docs-examples.js.map +0 -1
  423. package/dist/server/handlers/api-docs-sections-ext.d.ts +0 -2
  424. package/dist/server/handlers/api-docs-sections-ext.js +0 -497
  425. package/dist/server/handlers/api-docs-sections-ext.js.map +0 -1
  426. package/dist/server/handlers/api-docs-sections.d.ts +0 -21
  427. package/dist/server/handlers/api-docs-sections.js +0 -293
  428. package/dist/server/handlers/api-docs-sections.js.map +0 -1
  429. package/dist/server/handlers/api-keys.part2.test.js +0 -157
  430. package/dist/server/handlers/api-keys.test.js +0 -161
  431. package/dist/server/handlers/billing-routes.test.js +0 -123
  432. package/dist/server/handlers/billing.test.js +0 -215
  433. package/dist/server/handlers/browser-actions-errors.test.js +0 -94
  434. package/dist/server/handlers/browser-actions.part2.test.js +0 -190
  435. package/dist/server/handlers/browser-actions.test.js +0 -190
  436. package/dist/server/handlers/browser-validation.test.js +0 -257
  437. package/dist/server/handlers/catalog.test.js +0 -297
  438. package/dist/server/handlers/comms.test.js +0 -289
  439. package/dist/server/handlers/creations-advanced-collections.test.js +0 -214
  440. package/dist/server/handlers/creations-advanced-generate.test.js +0 -142
  441. package/dist/server/handlers/creations-advanced.test.js +0 -171
  442. package/dist/server/handlers/creations-collections-preview.test.js +0 -214
  443. package/dist/server/handlers/creations-crud.test.js +0 -260
  444. package/dist/server/handlers/creations-mutations.test.js +0 -197
  445. package/dist/server/handlers/crm.test.js +0 -179
  446. package/dist/server/handlers/discovery-advertise.test.js +0 -185
  447. package/dist/server/handlers/discovery-scan.test.js +0 -233
  448. package/dist/server/handlers/embeddings-embed-search.test.js +0 -196
  449. package/dist/server/handlers/embeddings-index-delete-stats.test.js +0 -140
  450. package/dist/server/handlers/embeddings-search.test.js +0 -221
  451. package/dist/server/handlers/embeddings.test.js +0 -137
  452. package/dist/server/handlers/enrichment-breach.d.ts +0 -8
  453. package/dist/server/handlers/enrichment-breach.js +0 -266
  454. package/dist/server/handlers/enrichment-breach.js.map +0 -1
  455. package/dist/server/handlers/enrichment-data.d.ts +0 -13
  456. package/dist/server/handlers/enrichment-data.js +0 -145
  457. package/dist/server/handlers/enrichment-data.js.map +0 -1
  458. package/dist/server/handlers/enrichment-mutations.test.js +0 -240
  459. package/dist/server/handlers/enrichment-queries.test.js +0 -181
  460. package/dist/server/handlers/enrichment-validation.test.js +0 -177
  461. package/dist/server/handlers/enrichment-writes.d.ts +0 -16
  462. package/dist/server/handlers/enrichment-writes.js +0 -226
  463. package/dist/server/handlers/enrichment-writes.js.map +0 -1
  464. package/dist/server/handlers/image-gen.test.js +0 -205
  465. package/dist/server/handlers/inventory.test.js +0 -380
  466. package/dist/server/handlers/kali-background.test.js +0 -222
  467. package/dist/server/handlers/kali-errors.test.js +0 -92
  468. package/dist/server/handlers/kali-validation.test.js +0 -234
  469. package/dist/server/handlers/llm-providers-actions.test.js +0 -220
  470. package/dist/server/handlers/llm-providers-anthropic.test.js +0 -239
  471. package/dist/server/handlers/llm-providers-failover.test.js +0 -232
  472. package/dist/server/handlers/llm-providers-providers.test.js +0 -300
  473. package/dist/server/handlers/llm-providers-validation.test.js +0 -239
  474. package/dist/server/handlers/local-agent-tools.test.js +0 -224
  475. package/dist/server/handlers/local-agent.test.js +0 -198
  476. package/dist/server/handlers/local-agent.tools-status.test.js +0 -204
  477. package/dist/server/handlers/local-agent.validation-exec.test.js +0 -182
  478. package/dist/server/handlers/meta-ads-audience-rules.test.js +0 -243
  479. package/dist/server/handlers/meta-ads-audience-targeting.test.js +0 -205
  480. package/dist/server/handlers/meta-ads-audiences-targeting.test.js +0 -383
  481. package/dist/server/handlers/meta-ads-crud-ads.test.js +0 -136
  482. package/dist/server/handlers/meta-ads-crud-campaigns.test.js +0 -189
  483. package/dist/server/handlers/meta-ads-crud-create.test.js +0 -303
  484. package/dist/server/handlers/meta-ads-crud-list-update.test.js +0 -259
  485. package/dist/server/handlers/meta-ads-delete-publish-sync.test.js +0 -282
  486. package/dist/server/handlers/meta-ads-insights.test.js +0 -80
  487. package/dist/server/handlers/meta-ads-list-get.test.js +0 -237
  488. package/dist/server/handlers/meta-ads-publish-delete.test.js +0 -254
  489. package/dist/server/handlers/meta-ads-publish-helpers.js +0 -117
  490. package/dist/server/handlers/meta-ads-publish-helpers.js.map +0 -1
  491. package/dist/server/handlers/meta-ads-publish-sync.test.js +0 -205
  492. package/dist/server/handlers/meta-ads-publish.test.js +0 -254
  493. package/dist/server/handlers/meta-ads-sync-insights.test.js +0 -184
  494. package/dist/server/handlers/meta-ads-update.test.js +0 -117
  495. package/dist/server/handlers/nodes-channels.test.js +0 -413
  496. package/dist/server/handlers/nodes-events.test.js +0 -131
  497. package/dist/server/handlers/nodes-list-delete.test.js +0 -171
  498. package/dist/server/handlers/nodes-messages-delivery.test.js +0 -208
  499. package/dist/server/handlers/nodes-messages.test.js +0 -211
  500. package/dist/server/handlers/nodes-register.test.js +0 -277
  501. package/dist/server/handlers/nodes.test.js +0 -353
  502. package/dist/server/handlers/operations.test.js +0 -136
  503. package/dist/server/handlers/platform-telemetry.test.js +0 -200
  504. package/dist/server/handlers/platform-websearch.test.js +0 -160
  505. package/dist/server/handlers/storefront.test.js +0 -329
  506. package/dist/server/handlers/supply-chain.test.js +0 -347
  507. package/dist/server/handlers/transcription.test.js +0 -118
  508. package/dist/server/handlers/video-gen-veo.js +0 -114
  509. package/dist/server/handlers/video-gen-veo.js.map +0 -1
  510. package/dist/server/handlers/video-gen.test.js +0 -146
  511. package/dist/server/handlers/voice.test.js +0 -153
  512. package/dist/server/handlers/workflow-steps.test.js +0 -330
  513. package/dist/server/handlers/workflows-extras.test.js +0 -65
  514. package/dist/server/handlers/workflows.part2.test.js +0 -170
  515. package/dist/server/handlers/workflows.test.js +0 -281
  516. package/dist/server/lib/__tests__/batch-client-conversion-jsonl.test.js +0 -171
  517. package/dist/server/lib/__tests__/batch-client-polling.test.js +0 -292
  518. package/dist/server/lib/__tests__/batch-client-queue.test.js +0 -270
  519. package/dist/server/lib/__tests__/clickhouse-buffer.test.js +0 -236
  520. package/dist/server/lib/__tests__/code-worker-edge-cases.test.js +0 -118
  521. package/dist/server/lib/__tests__/code-worker-pool-execute.test.js +0 -193
  522. package/dist/server/lib/__tests__/code-worker-pool-execution.test.js +0 -165
  523. package/dist/server/lib/__tests__/code-worker-pool-init.test.js +0 -131
  524. package/dist/server/lib/__tests__/code-worker-pool.test.js +0 -194
  525. package/dist/server/lib/__tests__/code-worker-sandbox-ops.test.js +0 -123
  526. package/dist/server/lib/__tests__/code-worker-sandbox.test.js +0 -217
  527. package/dist/server/lib/__tests__/code-worker.test.js +0 -179
  528. package/dist/server/lib/__tests__/compaction-service-generate.test.js +0 -229
  529. package/dist/server/lib/__tests__/compaction-service.test.js +0 -319
  530. package/dist/server/lib/__tests__/otel.test.js +0 -146
  531. package/dist/server/lib/__tests__/prompt-sanitizer-validation.test.js +0 -165
  532. package/dist/server/lib/__tests__/prompt-sanitizer.sanitize.test.js +0 -343
  533. package/dist/server/lib/__tests__/prompt-sanitizer.test.js +0 -328
  534. package/dist/server/lib/__tests__/prompt-sanitizer.validate-tool.test.js +0 -145
  535. package/dist/server/lib/__tests__/provider-capabilities.test.js +0 -263
  536. package/dist/server/lib/__tests__/provider-failover-routing.test.js +0 -145
  537. package/dist/server/lib/__tests__/provider-failover-state.test.js +0 -131
  538. package/dist/server/lib/__tests__/rate-limiter-budgets.test.js +0 -216
  539. package/dist/server/lib/__tests__/rate-limiter.budgets-tools.test.js +0 -113
  540. package/dist/server/lib/__tests__/rate-limiter.check-request.test.js +0 -141
  541. package/dist/server/lib/__tests__/rate-limiter.stats-lifecycle.test.js +0 -135
  542. package/dist/server/lib/__tests__/rate-limiter.test.js +0 -207
  543. package/dist/server/lib/__tests__/server-agent-loop-abort-conditions.test.js +0 -544
  544. package/dist/server/lib/__tests__/server-agent-loop-abort.part2.test.js +0 -504
  545. package/dist/server/lib/__tests__/server-agent-loop-abort.test.js +0 -396
  546. package/dist/server/lib/__tests__/server-agent-loop-compaction.test.js +0 -397
  547. package/dist/server/lib/__tests__/server-agent-loop-failover.test.js +0 -356
  548. package/dist/server/lib/__tests__/server-agent-loop-features-caching.test.js +0 -519
  549. package/dist/server/lib/__tests__/server-agent-loop-features-edges.test.js +0 -512
  550. package/dist/server/lib/__tests__/server-subagent-bailout.test.js +0 -194
  551. package/dist/server/lib/__tests__/server-subagent-basics.test.js +0 -348
  552. package/dist/server/lib/__tests__/server-subagent-errors-abort.test.js +0 -319
  553. package/dist/server/lib/__tests__/server-subagent-errors-progress.test.js +0 -253
  554. package/dist/server/lib/__tests__/server-subagent-errors.part2.test.js +0 -253
  555. package/dist/server/lib/__tests__/server-subagent-errors.test.js +0 -319
  556. package/dist/server/lib/__tests__/session-checkpoint-load.test.js +0 -275
  557. package/dist/server/lib/__tests__/session-checkpoint-save.test.js +0 -159
  558. package/dist/server/lib/__tests__/ssrf-guard.test.js +0 -93
  559. package/dist/server/lib/__tests__/supabase-client.test.js +0 -111
  560. package/dist/server/lib/__tests__/template-resolver.test.js +0 -317
  561. package/dist/server/lib/__tests__/utils-timeout.test.js +0 -49
  562. package/dist/server/lib/__tests__/utils.test.js +0 -322
  563. package/dist/server/providers/__tests__/anthropic-adapter.test.js +0 -228
  564. package/dist/server/providers/__tests__/anthropic-betas-toolchoice.test.js +0 -257
  565. package/dist/server/providers/__tests__/anthropic-errors.test.js +0 -262
  566. package/dist/server/providers/__tests__/anthropic-stream-core.test.js +0 -275
  567. package/dist/server/providers/__tests__/anthropic-streaming-betas.test.js +0 -247
  568. package/dist/server/providers/__tests__/anthropic-streaming-core.test.js +0 -275
  569. package/dist/server/providers/__tests__/bedrock-config.test.js +0 -177
  570. package/dist/server/providers/__tests__/bedrock-stream-behavior-streaming.test.js +0 -272
  571. package/dist/server/providers/__tests__/bedrock-stream-behavior-toolchoice.test.js +0 -214
  572. package/dist/server/providers/__tests__/bedrock-stream-behavior.part2.test.js +0 -165
  573. package/dist/server/providers/__tests__/bedrock-stream-behavior.test.js +0 -309
  574. package/dist/server/providers/__tests__/bedrock-stream-body-credentials.test.js +0 -170
  575. package/dist/server/providers/__tests__/bedrock-stream-body-extras.test.js +0 -183
  576. package/dist/server/providers/__tests__/bedrock-stream-body-request.test.js +0 -305
  577. package/dist/server/providers/__tests__/bedrock-stream-body.part2.test.js +0 -305
  578. package/dist/server/providers/__tests__/bedrock-stream-body.test.js +0 -175
  579. package/dist/server/providers/__tests__/bedrock-stream-errors.test.js +0 -165
  580. package/dist/server/providers/__tests__/gemini-config-methods.test.js +0 -182
  581. package/dist/server/providers/__tests__/gemini-config-streaming.test.js +0 -257
  582. package/dist/server/providers/__tests__/gemini-conversion-messages.test.js +0 -247
  583. package/dist/server/providers/__tests__/gemini-conversion-schema.test.js +0 -365
  584. package/dist/server/providers/__tests__/gemini-tools-choice.test.js +0 -221
  585. package/dist/server/providers/__tests__/gemini-tools-fn.test.js +0 -252
  586. package/dist/server/providers/__tests__/openai-config.test.js +0 -194
  587. package/dist/server/providers/__tests__/openai-conversion.test.js +0 -276
  588. package/dist/server/providers/__tests__/openai-messages.test.js +0 -261
  589. package/dist/server/providers/__tests__/openai-streaming.test.js +0 -394
  590. package/dist/server/providers/__tests__/openai-tools-cache.test.js +0 -227
  591. package/dist/server/providers/__tests__/registry.test.js +0 -183
  592. package/dist/server/providers/__tests__/shared.test.js +0 -297
  593. package/dist/shared/agent-core-config.test.js +0 -132
  594. package/dist/shared/agent-core-context-thinking.test.js +0 -293
  595. package/dist/shared/agent-core-loop-calls.test.js +0 -174
  596. package/dist/shared/agent-core-loop-detector-bail.test.js +0 -201
  597. package/dist/shared/agent-core-loop-detector.test.js +0 -195
  598. package/dist/shared/agent-core-loop-errors.test.js +0 -258
  599. package/dist/shared/agent-core-pricing.test.js +0 -191
  600. package/dist/shared/agent-core-sanitize-retry.test.js +0 -129
  601. package/dist/shared/api-client-build-request.test.js +0 -228
  602. package/dist/shared/api-client-build-system-caching.test.js +0 -107
  603. package/dist/shared/api-client-build.test.js +0 -223
  604. package/dist/shared/api-client-config.d.ts +0 -21
  605. package/dist/shared/api-client-helpers.d.ts +0 -57
  606. package/dist/shared/api-client-helpers.test.js +0 -261
  607. package/dist/shared/api-client-proxy-happy.test.js +0 -255
  608. package/dist/shared/api-client-proxy-retry.test.js +0 -307
  609. package/dist/shared/api-client-proxy.d.ts +0 -26
  610. package/dist/shared/api-client-proxy.test.js +0 -255
  611. package/dist/shared/api-client-retry.test.js +0 -307
  612. package/dist/shared/api-client-system-trimming.test.js +0 -261
  613. package/dist/shared/api-client-trimming.d.ts +0 -36
  614. package/dist/shared/api-client.test.js +0 -228
  615. package/dist/shared/compaction-thinking.test.js +0 -315
  616. package/dist/shared/compaction-trimming.test.js +0 -223
  617. package/dist/shared/sse-parser-callbacks.test.js +0 -422
  618. package/dist/shared/sse-parser-collect.test.js +0 -252
  619. package/dist/shared/sse-parser-e2e.test.js +0 -558
  620. package/dist/shared/sse-parser-parse.test.js +0 -253
  621. package/dist/shared/tool-dispatch-advanced-batch-build.test.js +0 -405
  622. package/dist/shared/tool-dispatch-advanced.test.js +0 -320
  623. package/dist/shared/tool-dispatch-basic.test.js +0 -278
  624. package/dist/shared/tool-dispatch-content.d.ts +0 -14
  625. package/dist/shared/tool-dispatch-parallel.test.js +0 -378
  626. package/dist/webchat/__tests__/widget-messaging.test.js +0 -323
  627. package/dist/webchat/__tests__/widget.test.js +0 -273
@@ -1,20 +1,22 @@
1
- // server/handlers/coupons.ts — Coupon code management (create, list, validate)
1
+ // server/handlers/coupons.ts — Discount/coupon management via the deals table
2
+ // The `coupons` table is deprecated — all discount operations now target `deals`.
2
3
 
3
4
  import { sanitizeFilterValue } from "../lib/utils.js";
4
5
  export async function handleCoupons(sb, args, storeId) {
5
6
  const sid = storeId;
6
7
  switch (args.action) {
7
- // ---- LIST: list coupons with optional filters ----
8
+ // ---- LIST: list deals/discounts with optional filters ----
8
9
  case "list":
9
10
  {
10
- let q = sb.from("coupons").select("*").eq("store_id", sid).order("created_at", {
11
+ let q = sb.from("deals").select("*").eq("store_id", sid).order("created_at", {
11
12
  ascending: false
12
13
  });
13
14
  if (args.is_active !== undefined) q = q.eq("is_active", args.is_active);
14
15
  if (args.discount_type) q = q.eq("discount_type", args.discount_type);
16
+ if (args.application_method) q = q.eq("application_method", args.application_method);
15
17
  if (args.query) {
16
18
  const sq = sanitizeFilterValue(String(args.query));
17
- q = q.or(`code.ilike.%${sq}%,description.ilike.%${sq}%`);
19
+ q = q.or(`name.ilike.%${sq}%,coupon_code.ilike.%${sq}%`);
18
20
  }
19
21
  q = q.limit(args.limit || 50);
20
22
  const {
@@ -31,18 +33,18 @@ export async function handleCoupons(sb, args, storeId) {
31
33
  };
32
34
  }
33
35
 
34
- // ---- GET: get a single coupon by ID ----
36
+ // ---- GET: get a single deal by ID ----
35
37
  case "get":
36
38
  {
37
- const couponId = args.coupon_id;
38
- if (!couponId) return {
39
+ const dealId = args.coupon_id ?? args.deal_id;
40
+ if (!dealId) return {
39
41
  success: false,
40
- error: "coupon_id is required"
42
+ error: "coupon_id or deal_id is required"
41
43
  };
42
44
  const {
43
45
  data,
44
46
  error
45
- } = await sb.from("coupons").select("*").eq("id", couponId).eq("store_id", sid).single();
47
+ } = await sb.from("deals").select("*").eq("id", dealId).eq("store_id", sid).single();
46
48
  if (error) return {
47
49
  success: false,
48
50
  error: error.message
@@ -51,55 +53,95 @@ export async function handleCoupons(sb, args, storeId) {
51
53
  // Include usage stats
52
54
  const {
53
55
  data: usage
54
- } = await sb.from("coupon_usage").select("id, customer_id, order_id, discount_amount, created_at").eq("coupon_id", couponId).order("created_at", {
56
+ } = await sb.from("deal_usage").select("id, customer_id, order_id, discount_amount, created_at").eq("deal_id", dealId).order("created_at", {
55
57
  ascending: false
56
58
  }).limit(20);
59
+
60
+ // Include analytics
61
+ const {
62
+ data: analytics
63
+ } = await sb.rpc("get_deal_analytics", {
64
+ p_deal_id: dealId
65
+ });
57
66
  return {
58
67
  success: true,
59
68
  data: {
60
69
  ...data,
61
- recent_usage: usage || []
70
+ recent_usage: usage || [],
71
+ analytics
62
72
  }
63
73
  };
64
74
  }
65
75
 
66
- // ---- CREATE: create a new coupon ----
76
+ // ---- CREATE: create a new deal/discount ----
67
77
  case "create":
68
78
  {
69
- const code = args.code;
79
+ const name = args.name;
70
80
  const discountType = args.discount_type;
71
- const discountAmount = args.discount_amount;
72
- if (!code || !discountType || discountAmount === undefined) {
81
+ const discountValue = args.discount_amount ?? args.discount_value;
82
+ if (!name || !discountType || discountValue === undefined) {
73
83
  return {
74
84
  success: false,
75
- error: "code, discount_type, and discount_amount are required"
85
+ error: "name, discount_type, and discount_amount (or discount_value) are required"
76
86
  };
77
87
  }
78
88
  const record = {
79
89
  store_id: sid,
80
- code: code.toUpperCase(),
90
+ name,
81
91
  discount_type: discountType,
82
- discount_amount: discountAmount
92
+ discount_value: discountValue,
93
+ apply_to: args.apply_to || "all",
94
+ location_scope: args.location_scope || "all",
95
+ schedule_type: "always",
96
+ application_method: args.application_method || "code",
97
+ sales_channel: args.sales_channel || "both",
98
+ is_active: args.is_active !== undefined ? args.is_active : true
83
99
  };
84
- if (args.description !== undefined) record.description = args.description;
85
- if (args.free_shipping !== undefined) record.free_shipping = args.free_shipping;
86
- if (args.minimum_amount !== undefined) record.minimum_amount = args.minimum_amount;
87
- if (args.maximum_amount !== undefined) record.maximum_amount = args.maximum_amount;
88
- if (args.usage_limit !== undefined) record.usage_limit = args.usage_limit;
89
- if (args.usage_limit_per_user !== undefined) record.usage_limit_per_user = args.usage_limit_per_user;
90
- if (args.individual_use !== undefined) record.individual_use = args.individual_use;
91
- if (args.exclude_sale_items !== undefined) record.exclude_sale_items = args.exclude_sale_items;
92
- if (args.start_date !== undefined) record.start_date = args.start_date;
93
- if (args.end_date !== undefined) record.end_date = args.end_date;
94
- if (args.allowed_products !== undefined) record.allowed_products = args.allowed_products;
95
- if (args.excluded_products !== undefined) record.excluded_products = args.excluded_products;
96
- if (args.allowed_categories !== undefined) record.allowed_categories = args.allowed_categories;
97
- if (args.excluded_categories !== undefined) record.excluded_categories = args.excluded_categories;
98
- if (args.allowed_emails !== undefined) record.allowed_emails = args.allowed_emails;
100
+
101
+ // Coupon code
102
+ if (args.code !== undefined) record.coupon_code = args.code.toUpperCase();
103
+ if (args.coupon_code !== undefined) record.coupon_code = args.coupon_code.toUpperCase();
104
+
105
+ // Category / product scoping
106
+ if (args.allowed_categories !== undefined) {
107
+ record.apply_to = "categories";
108
+ record.apply_to_ids = args.allowed_categories;
109
+ }
110
+ if (args.allowed_products !== undefined) {
111
+ record.apply_to = "products";
112
+ record.apply_to_ids = args.allowed_products;
113
+ }
114
+ if (args.apply_to_ids !== undefined) record.apply_to_ids = args.apply_to_ids;
115
+
116
+ // Location scoping
117
+ if (args.location_ids !== undefined) {
118
+ record.location_scope = "specific";
119
+ record.location_ids = args.location_ids;
120
+ }
121
+
122
+ // Scheduling
123
+ if (args.start_date !== undefined || args.end_date !== undefined) {
124
+ record.schedule_type = "date_range";
125
+ if (args.start_date !== undefined) record.start_date = args.start_date;
126
+ if (args.end_date !== undefined) record.end_date = args.end_date;
127
+ }
128
+ if (args.schedule_type !== undefined) record.schedule_type = args.schedule_type;
129
+ if (args.recurring_pattern !== undefined) record.recurring_pattern = args.recurring_pattern;
130
+
131
+ // Usage limits
132
+ if (args.max_total_uses !== undefined) record.max_total_uses = args.max_total_uses;
133
+ if (args.usage_limit !== undefined) record.max_total_uses = args.usage_limit;
134
+ if (args.max_uses_per_customer !== undefined) record.max_uses_per_customer = args.max_uses_per_customer;
135
+ if (args.usage_limit_per_user !== undefined) record.max_uses_per_customer = args.usage_limit_per_user;
136
+
137
+ // Display
138
+ if (args.badge_text !== undefined) record.badge_text = args.badge_text;
139
+ if (args.badge_color !== undefined) record.badge_color = args.badge_color;
140
+ if (args.description !== undefined) record.name = `${name} — ${args.description}`;
99
141
  const {
100
142
  data,
101
143
  error
102
- } = await sb.from("coupons").insert(record).select().single();
144
+ } = await sb.from("deals").insert(record).select().single();
103
145
  return error ? {
104
146
  success: false,
105
147
  error: error.message
@@ -109,32 +151,69 @@ export async function handleCoupons(sb, args, storeId) {
109
151
  };
110
152
  }
111
153
 
112
- // ---- UPDATE: modify a coupon ----
154
+ // ---- UPDATE: modify a deal/discount ----
113
155
  case "update":
114
156
  {
115
- const couponId = args.coupon_id;
116
- if (!couponId) return {
157
+ const dealId = args.coupon_id ?? args.deal_id;
158
+ if (!dealId) return {
117
159
  success: false,
118
- error: "coupon_id is required"
160
+ error: "coupon_id or deal_id is required"
119
161
  };
120
162
  const updates = {
121
163
  updated_at: new Date().toISOString()
122
164
  };
123
- if (args.code !== undefined) updates.code = args.code.toUpperCase();
124
- if (args.description !== undefined) updates.description = args.description;
165
+ if (args.name !== undefined) updates.name = args.name;
125
166
  if (args.discount_type !== undefined) updates.discount_type = args.discount_type;
126
- if (args.discount_amount !== undefined) updates.discount_amount = args.discount_amount;
167
+ if (args.discount_amount !== undefined) updates.discount_value = args.discount_amount;
168
+ if (args.discount_value !== undefined) updates.discount_value = args.discount_value;
127
169
  if (args.is_active !== undefined) updates.is_active = args.is_active;
128
- if (args.free_shipping !== undefined) updates.free_shipping = args.free_shipping;
129
- if (args.minimum_amount !== undefined) updates.minimum_amount = args.minimum_amount;
130
- if (args.maximum_amount !== undefined) updates.maximum_amount = args.maximum_amount;
131
- if (args.usage_limit !== undefined) updates.usage_limit = args.usage_limit;
170
+
171
+ // Coupon code
172
+ if (args.code !== undefined) updates.coupon_code = args.code.toUpperCase();
173
+ if (args.coupon_code !== undefined) updates.coupon_code = args.coupon_code.toUpperCase();
174
+
175
+ // Scoping
176
+ if (args.apply_to !== undefined) updates.apply_to = args.apply_to;
177
+ if (args.apply_to_ids !== undefined) updates.apply_to_ids = args.apply_to_ids;
178
+ if (args.allowed_categories !== undefined) {
179
+ updates.apply_to = "categories";
180
+ updates.apply_to_ids = args.allowed_categories;
181
+ }
182
+ if (args.allowed_products !== undefined) {
183
+ updates.apply_to = "products";
184
+ updates.apply_to_ids = args.allowed_products;
185
+ }
186
+
187
+ // Location
188
+ if (args.location_scope !== undefined) updates.location_scope = args.location_scope;
189
+ if (args.location_ids !== undefined) {
190
+ updates.location_scope = "specific";
191
+ updates.location_ids = args.location_ids;
192
+ }
193
+
194
+ // Schedule
195
+ if (args.schedule_type !== undefined) updates.schedule_type = args.schedule_type;
132
196
  if (args.start_date !== undefined) updates.start_date = args.start_date;
133
197
  if (args.end_date !== undefined) updates.end_date = args.end_date;
198
+ if (args.recurring_pattern !== undefined) updates.recurring_pattern = args.recurring_pattern;
199
+
200
+ // Application
201
+ if (args.application_method !== undefined) updates.application_method = args.application_method;
202
+ if (args.sales_channel !== undefined) updates.sales_channel = args.sales_channel;
203
+
204
+ // Usage limits
205
+ if (args.max_total_uses !== undefined) updates.max_total_uses = args.max_total_uses;
206
+ if (args.usage_limit !== undefined) updates.max_total_uses = args.usage_limit;
207
+ if (args.max_uses_per_customer !== undefined) updates.max_uses_per_customer = args.max_uses_per_customer;
208
+ if (args.usage_limit_per_user !== undefined) updates.max_uses_per_customer = args.usage_limit_per_user;
209
+
210
+ // Display
211
+ if (args.badge_text !== undefined) updates.badge_text = args.badge_text;
212
+ if (args.badge_color !== undefined) updates.badge_color = args.badge_color;
134
213
  const {
135
214
  data,
136
215
  error
137
- } = await sb.from("coupons").update(updates).eq("id", couponId).eq("store_id", sid).select().single();
216
+ } = await sb.from("deals").update(updates).eq("id", dealId).eq("store_id", sid).select().single();
138
217
  return error ? {
139
218
  success: false,
140
219
  error: error.message
@@ -144,62 +223,47 @@ export async function handleCoupons(sb, args, storeId) {
144
223
  };
145
224
  }
146
225
 
147
- // ---- VALIDATE: check if a coupon code is valid for use ----
226
+ // ---- VALIDATE: check if a coupon code is valid ----
148
227
  case "validate":
149
228
  {
150
- const code = args.code;
229
+ const code = args.code ?? args.coupon_code;
151
230
  if (!code) return {
152
231
  success: false,
153
232
  error: "code is required"
154
233
  };
234
+
235
+ // Use the server-side RPC for consistent validation with iOS/POS
155
236
  const {
156
- data: coupon,
237
+ data,
157
238
  error
158
- } = await sb.from("coupons").select("*").eq("code", code.toUpperCase()).eq("store_id", sid).maybeSingle();
239
+ } = await sb.rpc("validate_coupon_code", {
240
+ p_store_id: sid,
241
+ p_code: code.toUpperCase()
242
+ });
159
243
  if (error) return {
160
244
  success: false,
161
245
  error: error.message
162
246
  };
163
- if (!coupon) return {
164
- success: false,
165
- error: "Coupon code not found"
166
- };
167
- const now = new Date();
168
- const issues = [];
169
- if (!coupon.is_active) issues.push("Coupon is inactive");
170
- if (coupon.start_date && new Date(coupon.start_date) > now) issues.push("Coupon has not started yet");
171
- if (coupon.end_date && new Date(coupon.end_date) < now) issues.push("Coupon has expired");
172
- if (coupon.usage_limit && coupon.usage_count >= coupon.usage_limit) issues.push("Usage limit reached");
173
247
  return {
174
248
  success: true,
175
- data: {
176
- valid: issues.length === 0,
177
- coupon: {
178
- id: coupon.id,
179
- code: coupon.code,
180
- discount_type: coupon.discount_type,
181
- discount_amount: coupon.discount_amount,
182
- free_shipping: coupon.free_shipping
183
- },
184
- issues: issues.length > 0 ? issues : undefined
185
- }
249
+ data
186
250
  };
187
251
  }
188
252
 
189
- // ---- DELETE: deactivate a coupon ----
253
+ // ---- DELETE: deactivate a deal ----
190
254
  case "delete":
191
255
  {
192
- const couponId = args.coupon_id;
193
- if (!couponId) return {
256
+ const dealId = args.coupon_id ?? args.deal_id;
257
+ if (!dealId) return {
194
258
  success: false,
195
- error: "coupon_id is required"
259
+ error: "coupon_id or deal_id is required"
196
260
  };
197
261
  const {
198
262
  error
199
- } = await sb.from("coupons").update({
263
+ } = await sb.from("deals").update({
200
264
  is_active: false,
201
265
  updated_at: new Date().toISOString()
202
- }).eq("id", couponId).eq("store_id", sid);
266
+ }).eq("id", dealId).eq("store_id", sid);
203
267
  return error ? {
204
268
  success: false,
205
269
  error: error.message
@@ -1 +1 @@
1
- {"version":3,"file":"coupons.js","names":["sanitizeFilterValue","handleCoupons","sb","args","storeId","sid","action","q","from","select","eq","order","ascending","is_active","undefined","discount_type","query","sq","String","or","limit","data","error","success","message","count","length","couponId","coupon_id","single","usage","recent_usage","code","discountType","discountAmount","discount_amount","record","store_id","toUpperCase","description","free_shipping","minimum_amount","maximum_amount","usage_limit","usage_limit_per_user","individual_use","exclude_sale_items","start_date","end_date","allowed_products","excluded_products","allowed_categories","excluded_categories","allowed_emails","insert","updates","updated_at","Date","toISOString","update","coupon","maybeSingle","now","issues","push","usage_count","valid","id","deactivated"],"sources":["../../../src/server/handlers/coupons.ts"],"sourcesContent":["// server/handlers/coupons.ts — Coupon code management (create, list, validate)\n\nimport type { SupabaseClient } from \"@supabase/supabase-js\";\nimport { sanitizeFilterValue } from \"../lib/utils.js\";\n\ntype Result = { success: boolean; data?: unknown; error?: string; [key: string]: unknown };\n\nexport async function handleCoupons(\n sb: SupabaseClient,\n args: Record<string, unknown>,\n storeId?: string,\n): Promise<Result> {\n const sid = storeId as string;\n\n switch (args.action) {\n // ---- LIST: list coupons with optional filters ----\n case \"list\": {\n let q = sb.from(\"coupons\")\n .select(\"*\")\n .eq(\"store_id\", sid)\n .order(\"created_at\", { ascending: false });\n if (args.is_active !== undefined) q = q.eq(\"is_active\", args.is_active as boolean);\n if (args.discount_type) q = q.eq(\"discount_type\", args.discount_type as string);\n if (args.query) {\n const sq = sanitizeFilterValue(String(args.query));\n q = q.or(`code.ilike.%${sq}%,description.ilike.%${sq}%`);\n }\n q = q.limit(args.limit as number || 50);\n const { data, error } = await q;\n return error ? { success: false, error: error.message } : { success: true, count: data?.length, data };\n }\n\n // ---- GET: get a single coupon by ID ----\n case \"get\": {\n const couponId = args.coupon_id as string;\n if (!couponId) return { success: false, error: \"coupon_id is required\" };\n const { data, error } = await sb.from(\"coupons\")\n .select(\"*\")\n .eq(\"id\", couponId)\n .eq(\"store_id\", sid)\n .single();\n if (error) return { success: false, error: error.message };\n\n // Include usage stats\n const { data: usage } = await sb.from(\"coupon_usage\")\n .select(\"id, customer_id, order_id, discount_amount, created_at\")\n .eq(\"coupon_id\", couponId)\n .order(\"created_at\", { ascending: false })\n .limit(20);\n return { success: true, data: { ...data, recent_usage: usage || [] } };\n }\n\n // ---- CREATE: create a new coupon ----\n case \"create\": {\n const code = args.code as string;\n const discountType = args.discount_type as string;\n const discountAmount = args.discount_amount as number;\n if (!code || !discountType || discountAmount === undefined) {\n return { success: false, error: \"code, discount_type, and discount_amount are required\" };\n }\n const record: Record<string, unknown> = {\n store_id: sid,\n code: code.toUpperCase(),\n discount_type: discountType,\n discount_amount: discountAmount,\n };\n if (args.description !== undefined) record.description = args.description;\n if (args.free_shipping !== undefined) record.free_shipping = args.free_shipping;\n if (args.minimum_amount !== undefined) record.minimum_amount = args.minimum_amount;\n if (args.maximum_amount !== undefined) record.maximum_amount = args.maximum_amount;\n if (args.usage_limit !== undefined) record.usage_limit = args.usage_limit;\n if (args.usage_limit_per_user !== undefined) record.usage_limit_per_user = args.usage_limit_per_user;\n if (args.individual_use !== undefined) record.individual_use = args.individual_use;\n if (args.exclude_sale_items !== undefined) record.exclude_sale_items = args.exclude_sale_items;\n if (args.start_date !== undefined) record.start_date = args.start_date;\n if (args.end_date !== undefined) record.end_date = args.end_date;\n if (args.allowed_products !== undefined) record.allowed_products = args.allowed_products;\n if (args.excluded_products !== undefined) record.excluded_products = args.excluded_products;\n if (args.allowed_categories !== undefined) record.allowed_categories = args.allowed_categories;\n if (args.excluded_categories !== undefined) record.excluded_categories = args.excluded_categories;\n if (args.allowed_emails !== undefined) record.allowed_emails = args.allowed_emails;\n\n const { data, error } = await sb.from(\"coupons\")\n .insert(record)\n .select()\n .single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n // ---- UPDATE: modify a coupon ----\n case \"update\": {\n const couponId = args.coupon_id as string;\n if (!couponId) return { success: false, error: \"coupon_id is required\" };\n const updates: Record<string, unknown> = { updated_at: new Date().toISOString() };\n if (args.code !== undefined) updates.code = (args.code as string).toUpperCase();\n if (args.description !== undefined) updates.description = args.description;\n if (args.discount_type !== undefined) updates.discount_type = args.discount_type;\n if (args.discount_amount !== undefined) updates.discount_amount = args.discount_amount;\n if (args.is_active !== undefined) updates.is_active = args.is_active;\n if (args.free_shipping !== undefined) updates.free_shipping = args.free_shipping;\n if (args.minimum_amount !== undefined) updates.minimum_amount = args.minimum_amount;\n if (args.maximum_amount !== undefined) updates.maximum_amount = args.maximum_amount;\n if (args.usage_limit !== undefined) updates.usage_limit = args.usage_limit;\n if (args.start_date !== undefined) updates.start_date = args.start_date;\n if (args.end_date !== undefined) updates.end_date = args.end_date;\n\n const { data, error } = await sb.from(\"coupons\")\n .update(updates)\n .eq(\"id\", couponId)\n .eq(\"store_id\", sid)\n .select()\n .single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n // ---- VALIDATE: check if a coupon code is valid for use ----\n case \"validate\": {\n const code = args.code as string;\n if (!code) return { success: false, error: \"code is required\" };\n const { data: coupon, error } = await sb.from(\"coupons\")\n .select(\"*\")\n .eq(\"code\", code.toUpperCase())\n .eq(\"store_id\", sid)\n .maybeSingle();\n if (error) return { success: false, error: error.message };\n if (!coupon) return { success: false, error: \"Coupon code not found\" };\n\n const now = new Date();\n const issues: string[] = [];\n if (!coupon.is_active) issues.push(\"Coupon is inactive\");\n if (coupon.start_date && new Date(coupon.start_date) > now) issues.push(\"Coupon has not started yet\");\n if (coupon.end_date && new Date(coupon.end_date) < now) issues.push(\"Coupon has expired\");\n if (coupon.usage_limit && coupon.usage_count >= coupon.usage_limit) issues.push(\"Usage limit reached\");\n\n return {\n success: true,\n data: {\n valid: issues.length === 0,\n coupon: { id: coupon.id, code: coupon.code, discount_type: coupon.discount_type, discount_amount: coupon.discount_amount, free_shipping: coupon.free_shipping },\n issues: issues.length > 0 ? issues : undefined,\n },\n };\n }\n\n // ---- DELETE: deactivate a coupon ----\n case \"delete\": {\n const couponId = args.coupon_id as string;\n if (!couponId) return { success: false, error: \"coupon_id is required\" };\n const { error } = await sb.from(\"coupons\")\n .update({ is_active: false, updated_at: new Date().toISOString() })\n .eq(\"id\", couponId)\n .eq(\"store_id\", sid);\n return error ? { success: false, error: error.message } : { success: true, data: { deactivated: true } };\n }\n\n default:\n return { success: false, error: `Unknown coupons action: ${args.action}. Valid: list, get, create, update, validate, delete` };\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"coupons.js","names":["sanitizeFilterValue","handleCoupons","sb","args","storeId","sid","action","q","from","select","eq","order","ascending","is_active","undefined","discount_type","application_method","query","sq","String","or","limit","data","error","success","message","count","length","dealId","coupon_id","deal_id","single","usage","analytics","rpc","p_deal_id","recent_usage","name","discountType","discountValue","discount_amount","discount_value","record","store_id","apply_to","location_scope","schedule_type","sales_channel","code","coupon_code","toUpperCase","allowed_categories","apply_to_ids","allowed_products","location_ids","start_date","end_date","recurring_pattern","max_total_uses","usage_limit","max_uses_per_customer","usage_limit_per_user","badge_text","badge_color","description","insert","updates","updated_at","Date","toISOString","update","p_store_id","p_code","deactivated"],"sources":["../../../src/server/handlers/coupons.ts"],"sourcesContent":["// server/handlers/coupons.ts — Discount/coupon management via the deals table\n// The `coupons` table is deprecated — all discount operations now target `deals`.\n\nimport type { SupabaseClient } from \"@supabase/supabase-js\";\nimport { sanitizeFilterValue } from \"../lib/utils.js\";\n\ntype Result = { success: boolean; data?: unknown; error?: string; [key: string]: unknown };\n\nexport async function handleCoupons(\n sb: SupabaseClient,\n args: Record<string, unknown>,\n storeId?: string,\n): Promise<Result> {\n const sid = storeId as string;\n\n switch (args.action) {\n // ---- LIST: list deals/discounts with optional filters ----\n case \"list\": {\n let q = sb.from(\"deals\")\n .select(\"*\")\n .eq(\"store_id\", sid)\n .order(\"created_at\", { ascending: false });\n if (args.is_active !== undefined) q = q.eq(\"is_active\", args.is_active as boolean);\n if (args.discount_type) q = q.eq(\"discount_type\", args.discount_type as string);\n if (args.application_method) q = q.eq(\"application_method\", args.application_method as string);\n if (args.query) {\n const sq = sanitizeFilterValue(String(args.query));\n q = q.or(`name.ilike.%${sq}%,coupon_code.ilike.%${sq}%`);\n }\n q = q.limit(args.limit as number || 50);\n const { data, error } = await q;\n return error ? { success: false, error: error.message } : { success: true, count: data?.length, data };\n }\n\n // ---- GET: get a single deal by ID ----\n case \"get\": {\n const dealId = (args.coupon_id ?? args.deal_id) as string;\n if (!dealId) return { success: false, error: \"coupon_id or deal_id is required\" };\n const { data, error } = await sb.from(\"deals\")\n .select(\"*\")\n .eq(\"id\", dealId)\n .eq(\"store_id\", sid)\n .single();\n if (error) return { success: false, error: error.message };\n\n // Include usage stats\n const { data: usage } = await sb.from(\"deal_usage\")\n .select(\"id, customer_id, order_id, discount_amount, created_at\")\n .eq(\"deal_id\", dealId)\n .order(\"created_at\", { ascending: false })\n .limit(20);\n\n // Include analytics\n const { data: analytics } = await sb.rpc(\"get_deal_analytics\", { p_deal_id: dealId });\n\n return { success: true, data: { ...data, recent_usage: usage || [], analytics } };\n }\n\n // ---- CREATE: create a new deal/discount ----\n case \"create\": {\n const name = args.name as string;\n const discountType = args.discount_type as string;\n const discountValue = args.discount_amount as number ?? args.discount_value as number;\n if (!name || !discountType || discountValue === undefined) {\n return { success: false, error: \"name, discount_type, and discount_amount (or discount_value) are required\" };\n }\n\n const record: Record<string, unknown> = {\n store_id: sid,\n name,\n discount_type: discountType,\n discount_value: discountValue,\n apply_to: (args.apply_to as string) || \"all\",\n location_scope: (args.location_scope as string) || \"all\",\n schedule_type: \"always\",\n application_method: (args.application_method as string) || \"code\",\n sales_channel: (args.sales_channel as string) || \"both\",\n is_active: args.is_active !== undefined ? args.is_active : true,\n };\n\n // Coupon code\n if (args.code !== undefined) record.coupon_code = (args.code as string).toUpperCase();\n if (args.coupon_code !== undefined) record.coupon_code = (args.coupon_code as string).toUpperCase();\n\n // Category / product scoping\n if (args.allowed_categories !== undefined) {\n record.apply_to = \"categories\";\n record.apply_to_ids = args.allowed_categories;\n }\n if (args.allowed_products !== undefined) {\n record.apply_to = \"products\";\n record.apply_to_ids = args.allowed_products;\n }\n if (args.apply_to_ids !== undefined) record.apply_to_ids = args.apply_to_ids;\n\n // Location scoping\n if (args.location_ids !== undefined) {\n record.location_scope = \"specific\";\n record.location_ids = args.location_ids;\n }\n\n // Scheduling\n if (args.start_date !== undefined || args.end_date !== undefined) {\n record.schedule_type = \"date_range\";\n if (args.start_date !== undefined) record.start_date = args.start_date;\n if (args.end_date !== undefined) record.end_date = args.end_date;\n }\n if (args.schedule_type !== undefined) record.schedule_type = args.schedule_type;\n if (args.recurring_pattern !== undefined) record.recurring_pattern = args.recurring_pattern;\n\n // Usage limits\n if (args.max_total_uses !== undefined) record.max_total_uses = args.max_total_uses;\n if (args.usage_limit !== undefined) record.max_total_uses = args.usage_limit;\n if (args.max_uses_per_customer !== undefined) record.max_uses_per_customer = args.max_uses_per_customer;\n if (args.usage_limit_per_user !== undefined) record.max_uses_per_customer = args.usage_limit_per_user;\n\n // Display\n if (args.badge_text !== undefined) record.badge_text = args.badge_text;\n if (args.badge_color !== undefined) record.badge_color = args.badge_color;\n if (args.description !== undefined) record.name = `${name} — ${args.description}`;\n\n const { data, error } = await sb.from(\"deals\")\n .insert(record)\n .select()\n .single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n // ---- UPDATE: modify a deal/discount ----\n case \"update\": {\n const dealId = (args.coupon_id ?? args.deal_id) as string;\n if (!dealId) return { success: false, error: \"coupon_id or deal_id is required\" };\n const updates: Record<string, unknown> = { updated_at: new Date().toISOString() };\n\n if (args.name !== undefined) updates.name = args.name;\n if (args.discount_type !== undefined) updates.discount_type = args.discount_type;\n if (args.discount_amount !== undefined) updates.discount_value = args.discount_amount;\n if (args.discount_value !== undefined) updates.discount_value = args.discount_value;\n if (args.is_active !== undefined) updates.is_active = args.is_active;\n\n // Coupon code\n if (args.code !== undefined) updates.coupon_code = (args.code as string).toUpperCase();\n if (args.coupon_code !== undefined) updates.coupon_code = (args.coupon_code as string).toUpperCase();\n\n // Scoping\n if (args.apply_to !== undefined) updates.apply_to = args.apply_to;\n if (args.apply_to_ids !== undefined) updates.apply_to_ids = args.apply_to_ids;\n if (args.allowed_categories !== undefined) {\n updates.apply_to = \"categories\";\n updates.apply_to_ids = args.allowed_categories;\n }\n if (args.allowed_products !== undefined) {\n updates.apply_to = \"products\";\n updates.apply_to_ids = args.allowed_products;\n }\n\n // Location\n if (args.location_scope !== undefined) updates.location_scope = args.location_scope;\n if (args.location_ids !== undefined) {\n updates.location_scope = \"specific\";\n updates.location_ids = args.location_ids;\n }\n\n // Schedule\n if (args.schedule_type !== undefined) updates.schedule_type = args.schedule_type;\n if (args.start_date !== undefined) updates.start_date = args.start_date;\n if (args.end_date !== undefined) updates.end_date = args.end_date;\n if (args.recurring_pattern !== undefined) updates.recurring_pattern = args.recurring_pattern;\n\n // Application\n if (args.application_method !== undefined) updates.application_method = args.application_method;\n if (args.sales_channel !== undefined) updates.sales_channel = args.sales_channel;\n\n // Usage limits\n if (args.max_total_uses !== undefined) updates.max_total_uses = args.max_total_uses;\n if (args.usage_limit !== undefined) updates.max_total_uses = args.usage_limit;\n if (args.max_uses_per_customer !== undefined) updates.max_uses_per_customer = args.max_uses_per_customer;\n if (args.usage_limit_per_user !== undefined) updates.max_uses_per_customer = args.usage_limit_per_user;\n\n // Display\n if (args.badge_text !== undefined) updates.badge_text = args.badge_text;\n if (args.badge_color !== undefined) updates.badge_color = args.badge_color;\n\n const { data, error } = await sb.from(\"deals\")\n .update(updates)\n .eq(\"id\", dealId)\n .eq(\"store_id\", sid)\n .select()\n .single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n\n // ---- VALIDATE: check if a coupon code is valid ----\n case \"validate\": {\n const code = (args.code ?? args.coupon_code) as string;\n if (!code) return { success: false, error: \"code is required\" };\n\n // Use the server-side RPC for consistent validation with iOS/POS\n const { data, error } = await sb.rpc(\"validate_coupon_code\", {\n p_store_id: sid,\n p_code: code.toUpperCase(),\n });\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n\n // ---- DELETE: deactivate a deal ----\n case \"delete\": {\n const dealId = (args.coupon_id ?? args.deal_id) as string;\n if (!dealId) return { success: false, error: \"coupon_id or deal_id is required\" };\n const { error } = await sb.from(\"deals\")\n .update({ is_active: false, updated_at: new Date().toISOString() })\n .eq(\"id\", dealId)\n .eq(\"store_id\", sid);\n return error ? { success: false, error: error.message } : { success: true, data: { deactivated: true } };\n }\n\n default:\n return { success: false, error: `Unknown coupons action: ${args.action}. Valid: list, get, create, update, validate, delete` };\n }\n}\n"],"mappings":"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","ignoreList":[]}